# Google Sheets
URL: /docs/examples/google-sheets.mdx

Aprenda a buscar cotações automáticas da B3 no Google Sheets usando a API brapi.dev. Inclui função personalizada em Apps Script para obter dados de ações e ETFs que não aparecem no Google Finance.

***

title: 'Google Sheets'
description: >-
Aprenda a buscar cotações automáticas da B3 no Google Sheets usando a API
brapi.dev. Inclui função personalizada em Apps Script para obter dados de
ações e ETFs que não aparecem no Google Finance.
full: false
keywords:
brapi, api, google sheets, planilha, cotações, ETFs, apps script, IMAB11,
WRLD11, automação
openGraph:
title: Integração com Google Sheets - brapi.dev
description: >-
Busque cotações automáticas da B3 no Google Sheets com a API brapi.dev.
Solução para ETFs brasileiros que não aparecem no Google Finance.
type: website
locale: pt\_BR
lastUpdated: '2025-10-12T17:30:00.000Z'
lang: pt-BR
-----------

O Google Sheets é uma ferramenta poderosa para acompanhar seus investimentos de forma automática. Através do Google Apps Script, você pode criar uma função personalizada que busca cotações diretamente da brapi.dev.

## Por que usar a brapi.dev no Google Sheets?

A função `GOOGLEFINANCE` não funciona para muitos ativos brasileiros, especialmente ETFs como IMAB11, WRLD11, IB5M11 e IRFM11. A integração com a brapi.dev resolve esse problema, oferecendo:

* **Dados confiáveis**: Acesso direto aos dados da B3
* **ETFs brasileiros**: Funciona com todos os ativos negociados na B3
* **Atualização automática**: Cotações atualizadas conforme seu plano
* **Uso gratuito**: 15.000 requisições mensais no plano gratuito

## Passo a Passo

### 1. Obtenha sua chave API

1. Acesse [brapi.dev](https://brapi.dev)
2. Crie uma conta gratuita
3. No painel de usuário, copie seu **token API**

### 2. Adicione a função personalizada

1. Abra sua planilha no Google Sheets
2. Clique em **Extensões** > **Apps Script**
3. Apague o código existente e cole o código abaixo:

```javascript
/**
 * Retorna o preço atual de um ticker da B3 via brapi.dev
 * Uso: =BRAPI_PRICE("PETR4"; $A$1)
 * @param {string} ticker - Código do ativo (ex: "PETR4", "VALE3", "IMAB11")
 * @param {string} token - Token da API brapi.dev
 * @return {number} Preço atual do ativo
 */
function BRAPI_PRICE(ticker, token) {
  if (!ticker) return "Erro: informe ticker";
  
  // Permite passar o token como célula ou string
  if (token && typeof token === 'object' && token.length) {
    token = token[0][0];
  }
  
  // Se não informar token, tenta pegar da célula A1
  if (!token) {
    var sh = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    token = sh.getRange('A1').getDisplayValue();
  }
  
  if (!token) return "Erro: token brapi.dev ausente";
  
  // Formata o ticker
  ticker = String(ticker).toUpperCase().trim();
  if (ticker.indexOf('.') === -1) ticker = ticker + '.SA';
  
  // Faz a requisição
  var url = 'https://brapi.dev/api/quote/' + encodeURIComponent(ticker) + 
            '?token=' + encodeURIComponent(token);
  
  var options = {
    muteHttpExceptions: true,
    headers: {'User-Agent': 'Mozilla/5.0'}
  };
  
  var response = UrlFetchApp.fetch(url, options);
  
  if (response.getResponseCode() !== 200) {
    return "HTTP " + response.getResponseCode() + ": " + 
           response.getContentText().substring(0, 200);
  }
  
  var json = JSON.parse(response.getContentText());
  var result = (json && json.results && json.results[0]) || null;
  
  if (!result) return "Sem dados retornados";
  
  return result.regularMarketPrice || result.lastPrice || 
         result.close || "Preço não encontrado";
}
```

4. Salve o projeto (Ctrl + S ou clique no ícone de disquete)
5. Feche a janela do editor

### 3. Use a função na sua planilha

1. Na célula **A1**, cole seu token da API brapi.dev
2. Em qualquer outra célula, use a fórmula:

```
=BRAPI_PRICE("PETR4"; $A$1)
```

A referência `$A$1` garante que o endereço da célula do token não mude ao arrastar a fórmula.

## Exemplos de Uso

### Ações

```
=BRAPI_PRICE("PETR4"; $A$1)    # Petrobras PN
=BRAPI_PRICE("VALE3"; $A$1)    # Vale ON
=BRAPI_PRICE("ITUB4"; $A$1)    # Itaú Unibanco PN
=BRAPI_PRICE("BBDC4"; $A$1)    # Bradesco PN
```

### ETFs de Renda Fixa

```
=BRAPI_PRICE("IMAB11"; $A$1)   # ETF IMA-B
=BRAPI_PRICE("IB5M11"; $A$1)   # ETF IMA-B 5+
=BRAPI_PRICE("IRFM11"; $A$1)   # ETF IRF-M
=BRAPI_PRICE("B5P211"; $A$1)   # ETF NTN-B Principal
```

### ETFs Internacionais

```
=BRAPI_PRICE("WRLD11"; $A$1)   # ETF Global
=BRAPI_PRICE("IVVB11"; $A$1)   # ETF S&P 500
=BRAPI_PRICE("NASD11"; $A$1)   # ETF Nasdaq
```

### Índices

```
=BRAPI_PRICE("^BVSP"; $A$1)    # Índice Ibovespa
```

## Função Avançada: Múltiplos Dados

Se você quiser buscar mais informações além do preço, pode criar uma função mais completa:

```javascript
/**
 * Retorna dados completos de um ativo
 * Uso: =BRAPI_DATA("PETR4"; $A$1; "symbol")
 * @param {string} ticker - Código do ativo
 * @param {string} token - Token da API
 * @param {string} field - Campo desejado (regularMarketPrice, currency, shortName, etc)
 * @return {any} Valor do campo solicitado
 */
function BRAPI_DATA(ticker, token, field) {
  if (!ticker) return "Erro: informe ticker";
  if (!field) return "Erro: informe campo";
  
  if (token && typeof token === 'object' && token.length) {
    token = token[0][0];
  }
  
  if (!token) {
    var sh = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    token = sh.getRange('A1').getDisplayValue();
  }
  
  if (!token) return "Erro: token ausente";
  
  ticker = String(ticker).toUpperCase().trim();
  if (ticker.indexOf('.') === -1) ticker = ticker + '.SA';
  
  var url = 'https://brapi.dev/api/quote/' + encodeURIComponent(ticker) + 
            '?token=' + encodeURIComponent(token);
  
  var options = {
    muteHttpExceptions: true,
    headers: {'User-Agent': 'Mozilla/5.0'}
  };
  
  var response = UrlFetchApp.fetch(url, options);
  
  if (response.getResponseCode() !== 200) {
    return "Erro HTTP " + response.getResponseCode();
  }
  
  var json = JSON.parse(response.getContentText());
  var result = (json && json.results && json.results[0]) || null;
  
  if (!result) return "Sem dados";
  
  return result[field] || "Campo não encontrado";
}
```

Exemplos de uso:

```
=BRAPI_DATA("PETR4"; $A$1; "regularMarketPrice")  # Preço
=BRAPI_DATA("PETR4"; $A$1; "currency")            # Moeda
=BRAPI_DATA("PETR4"; $A$1; "shortName")           # Nome curto
=BRAPI_DATA("PETR4"; $A$1; "regularMarketChange") # Variação do dia
=BRAPI_DATA("PETR4"; $A$1; "marketCap")           # Valor de mercado
```

## Dicas de Uso

1. **Economize requisições**: Evite usar a função em células que são recalculadas constantemente
2. **Cache de dados**: Para grandes planilhas, considere atualizar dados periodicamente e não em tempo real
3. **Limite de requisições**: O plano gratuito oferece 15.000 requisições/mês - monitore seu uso no painel
4. **Erros de quota**: Se exceder o limite, a API retornará erro HTTP 429

## Monitoramento de Uso

Para uma ideia de consumo, uma planilha com 30 ativos diferentes, atualizada 3x ao dia, consome aproximadamente 2.700 requisições por mês (30 ativos × 3 atualizações × 30 dias), bem abaixo do limite gratuito.

## Solução de Problemas

### "Erro: token ausente"

Verifique se o token está na célula A1 ou se está sendo passado corretamente como parâmetro.

### "HTTP 401"

Token inválido. Verifique se copiou o token completo do painel da brapi.dev.

### "HTTP 429"

Limite de requisições excedido. Aguarde o próximo ciclo de faturamento ou considere o plano pago.

### "Sem dados retornados"

Ticker inválido ou ativo não encontrado. Verifique o código do ativo.

## Próximos Passos

* Explore outros [exemplos de integração](/docs/examples)
* Consulte a [documentação da API](/docs)
* Confira os [endpoints disponíveis](/docs/acoes)


