Quando GOOGLEFINANCE("BVMF:MXRF11") não retorna o ativo, você pode criar uma
função no Apps Script que consulta a brapi. Ela funciona para ações, FIIs, ETFs,
BDRs e units cobertos pela API.
Depois da configuração, a fórmula fica assim:
=BRAPI_PRECO("PETR4")Ou usando o ticker de outra célula:
=BRAPI_PRECO(A2)Criar a função BRAPI_PRECO
Na planilha, abra Extensões > Apps Script e cole:
function BRAPI_PRECO(ticker) {
const symbol = String(ticker).trim().toUpperCase();
if (!symbol) {
return "Ticker vazio";
}
const cache = CacheService.getScriptCache();
const cached = cache.get(`price:${symbol}`);
if (cached !== null) {
return Number(cached);
}
const token = PropertiesService
.getScriptProperties()
.getProperty("BRAPI_TOKEN");
const headers = token
? { Authorization: `Bearer ${token}` }
: {};
const url =
"https://brapi.dev/api/v2/stocks/quote?symbols=" +
encodeURIComponent(symbol);
const response = UrlFetchApp.fetch(url, {
headers,
muteHttpExceptions: true,
});
if (response.getResponseCode() !== 200) {
return `Erro ${response.getResponseCode()}`;
}
const payload = JSON.parse(response.getContentText());
const price = payload.results?.[0]?.data?.regularMarketPrice;
if (typeof price !== "number") {
return "Cotação indisponível";
}
cache.put(`price:${symbol}`, String(price), 300);
return price;
}Salve o projeto e volte à planilha. O primeiro uso pode pedir autorização para que o script faça requisições externas.
Guardar o token sem colocá-lo na célula
No editor do Apps Script:
- abra Configurações do projeto;
- procure Propriedades do script;
- crie a propriedade
BRAPI_TOKEN; - cole o token da sua conta brapi.
Assim, o token não aparece em fórmulas ou células compartilhadas. Quem tiver permissão de edição no projeto ainda pode acessar o script, então controle os editores da planilha.
Teste sem token
Os ativos liberados para teste podem funcionar sem autenticação. Para usar a planilha com outros ativos e limites do seu plano, configure o token.
Buscar vários ativos de uma vez
Uma chamada por célula desperdiça requisições. Para uma carteira, envie vários tickers na mesma chamada e devolva uma matriz.
function BRAPI_COTACOES(values) {
const symbols = values
.flat()
.map((value) => String(value).trim().toUpperCase())
.filter(Boolean)
.slice(0, 20);
const token = PropertiesService
.getScriptProperties()
.getProperty("BRAPI_TOKEN");
const headers = token
? { Authorization: `Bearer ${token}` }
: {};
const url =
"https://brapi.dev/api/v2/stocks/quote?symbols=" +
encodeURIComponent(symbols.join(","));
const response = UrlFetchApp.fetch(url, { headers });
const payload = JSON.parse(response.getContentText());
const prices = new Map(
payload.results.map((item) => [
item.symbol,
item.data.regularMarketPrice,
]),
);
return symbols.map((symbol) => [symbol, prices.get(symbol) ?? "N/D"]);
}Se os tickers estiverem em A2:A10, use:
=BRAPI_COTACOES(A2:A10)A função preenche duas colunas: ticker e preço. O limite da API é de 20 símbolos por requisição.
Por que GOOGLEFINANCE falha em alguns ativos
GOOGLEFINANCE depende do catálogo e da fonte de dados mantidos pelo Google.
Alguns FIIs, ETFs, BDRs ou tickers novos podem não aparecer, mudar de código ou
ficar temporariamente sem resposta.
Trocar BVMF: por outro prefixo não corrige um ativo que a fonte não cobre.
Uma integração por API permite validar o ticker e tratar o erro de forma clara.
Use /api/v2/tickers?search=CODIGO para conferir se o símbolo está no catálogo:
https://brapi.dev/api/v2/tickers?search=MXRF11Atualização e cache
O exemplo guarda o preço por cinco minutos. Isso reduz chamadas repetidas quando o Google Sheets recalcula várias fórmulas ao mesmo tempo.
Planilhas não são terminais de negociação. Mostre o horário da cotação quando o momento exato do dado importar e não trate a função como streaming.
Para uma planilha com mais campos, histórico e atualização organizada, siga o tutorial de integração com Google Sheets.
