O
GOOGLEFINANCEnem sempre cobre ações, FIIs, ETFs e BDRs brasileiros como você precisa. Com Apps Script e brapi.dev, você cria uma fórmula própria para buscar cotações da B3 direto no Google Sheets.
Resumo Direto
Depois de configurar o script, você usa:
=BRAPI_PRICE("PETR4"; $A$1)
=BRAPI_PRICE("MXRF11"; $A$1)
=BRAPI_PRICE("IVVB11"; $A$1)A célula $A$1 contém seu token da brapi.dev. Se preferir, você pode colocar o token em outra aba protegida e referenciar a célula.
Por Que Usar uma API em Vez do GOOGLEFINANCE
O GOOGLEFINANCE é útil para algumas cotações, mas pode falhar com ativos brasileiros, ETFs locais, FIIs e BDRs. Também há inconsistências de ticker, atraso, campos limitados e ausência de dados fundamentalistas.
Com a brapi.dev, você consulta a API diretamente e controla quais campos aparecem na planilha: preço, variação, volume, nome, moeda, dividend yield e outros dados disponíveis.
Passo 1: Obtenha o Token
Crie uma conta em brapi.dev, acesse o dashboard e copie seu token de API. Guarde esse token com cuidado. Ele funciona como uma senha para suas requisições.
Na planilha, coloque o token em uma célula fixa, por exemplo A1. Se a planilha for compartilhada com outras pessoas, proteja a célula ou use uma aba separada com permissões restritas.
Passo 2: Abra o Apps Script
No Google Sheets, clique em Extensões > Apps Script. Apague o código inicial e cole a função abaixo.
/**
* Retorna o preço atual de um ativo via brapi.dev.
*
* Uso:
* =BRAPI_PRICE("PETR4"; $A$1)
*
* @param {string} ticker Código do ativo, como PETR4, VALE3, MXRF11 ou IVVB11.
* @param {string} token Token da API brapi.dev.
* @return {number|string} Preço atual ou mensagem de erro.
* @customfunction
*/
function BRAPI_PRICE(ticker, token) {
if (!ticker) return "Informe um ticker";
var apiToken = normalizeCellValue_(token);
if (!apiToken) return "Token ausente";
var symbol = String(ticker).trim().toUpperCase();
var data = fetchBrapiQuote_(symbol, apiToken);
var result = data && data.results && data.results[0];
if (!result) return "Sem dados";
return result.regularMarketPrice || result.lastPrice || result.close || "Preço não encontrado";
}
function fetchBrapiQuote_(symbol, token) {
var cache = CacheService.getScriptCache();
var cacheKey = "brapi:" + symbol;
var cached = cache.get(cacheKey);
if (cached) {
return JSON.parse(cached);
}
var url = "https://brapi.dev/api/quote/" + encodeURIComponent(symbol);
var response = UrlFetchApp.fetch(url, {
muteHttpExceptions: true,
headers: {
Authorization: "Bearer " + token,
"User-Agent": "GoogleSheets-brapi/1.0",
},
});
var status = response.getResponseCode();
var body = response.getContentText();
if (status < 200 || status >= 300) {
throw new Error("brapi HTTP " + status + ": " + body.slice(0, 160));
}
cache.put(cacheKey, body, 300);
return JSON.parse(body);
}
function normalizeCellValue_(value) {
if (value && typeof value === "object" && value.length) {
return value[0][0];
}
return value ? String(value).trim() : "";
}Salve o projeto e volte para a planilha.
Passo 3: Use a Fórmula
Na célula A1, cole seu token. Em outra célula, use:
=BRAPI_PRICE("PETR4"; $A$1)Para montar uma carteira, coloque os tickers em uma coluna e use referência de célula:
| A | B |
|---|---|
| Token | seu_token |
| PETR4 | =BRAPI_PRICE(A2; $B$1) |
| VALE3 | =BRAPI_PRICE(A3; $B$1) |
| MXRF11 | =BRAPI_PRICE(A4; $B$1) |
Função Avançada: Buscar Qualquer Campo
Se você quer nome, variação, volume ou moeda, use uma função genérica.
/**
* Retorna um campo da resposta da brapi.dev.
*
* Uso:
* =BRAPI_DATA("PETR4"; $A$1; "regularMarketChangePercent")
*
* @param {string} ticker Código do ativo.
* @param {string} token Token da API.
* @param {string} field Campo desejado.
* @return {number|string} Valor do campo.
* @customfunction
*/
function BRAPI_DATA(ticker, token, field) {
if (!ticker) return "Informe um ticker";
if (!field) return "Informe um campo";
var apiToken = normalizeCellValue_(token);
if (!apiToken) return "Token ausente";
var symbol = String(ticker).trim().toUpperCase();
var key = String(field).trim();
var data = fetchBrapiQuote_(symbol, apiToken);
var result = data && data.results && data.results[0];
if (!result) return "Sem dados";
if (result[key] === undefined || result[key] === null) {
return "Campo não encontrado";
}
return result[key];
}Exemplos:
=BRAPI_DATA("PETR4"; $A$1; "shortName")
=BRAPI_DATA("PETR4"; $A$1; "regularMarketChangePercent")
=BRAPI_DATA("PETR4"; $A$1; "regularMarketVolume")Campos Úteis
| Campo | O que retorna |
|---|---|
regularMarketPrice | Preço atual |
regularMarketChangePercent | Variação percentual |
regularMarketVolume | Volume |
shortName | Nome curto |
currency | Moeda |
marketCap | Valor de mercado, quando disponível |
dividendYield | Dividend yield, quando disponível |
Exemplos de Ativos
| Tipo | Fórmula |
|---|---|
| Ação | =BRAPI_PRICE("PETR4"; $A$1) |
| FII | =BRAPI_PRICE("MXRF11"; $A$1) |
| ETF | =BRAPI_PRICE("BOVA11"; $A$1) |
| BDR | =BRAPI_PRICE("AAPL34"; $A$1) |
| Índice | =BRAPI_PRICE("^BVSP"; $A$1) |
Atualização e Cache
O exemplo usa cache de 5 minutos (300 segundos). Isso reduz chamadas repetidas quando várias células consultam o mesmo ticker. Para uma planilha de carteira, esse intervalo normalmente é suficiente.
Se você precisa de atualização manual, altere qualquer célula usada como parâmetro ou recalcule a planilha. Evite dezenas de chamadas por segundo; planilhas têm limites próprios e APIs também.
Erros Comuns
| Erro | Causa provável | Como resolver |
|---|---|---|
Token ausente | Célula do token vazia | Confira a referência $A$1 |
Sem dados | Ticker inválido ou indisponível | Teste o ticker na API |
Campo não encontrado | Nome do campo incorreto | Veja a resposta JSON no navegador |
HTTP 401 | Token inválido | Gere ou copie o token novamente |
HTTP 429 | Muitas requisições | Use cache e reduza chamadas |
Segurança do Token
Não publique sua planilha com o token visível. Se for compartilhar um template, deixe a célula do token vazia e explique onde o usuário deve inserir o próprio token.
Para uso interno, você pode colocar o token em uma aba protegida. Para uso público, não use um token pessoal em planilhas acessíveis por terceiros.
Alternativa: Importar JSON sem Apps Script
O Google Sheets não possui uma função nativa robusta para importar JSON com cabeçalho de autenticação. Por isso Apps Script é a solução mais estável para APIs com token.
Próximos Passos
Depois de puxar preço, você pode calcular valor total da posição, variação diária, alocação percentual e rebalanceamento. Para dados mais completos, leia a documentação da brapi.dev e o guia Como usar a API brapi para análise de ações.
Este tutorial é técnico e educacional. Dados de mercado podem ter atraso, indisponibilidade ou limitações conforme plano e ativo.
