Se você desenvolve aplicações financeiras para o mercado brasileiro, já deve ter enfrentado o dilema: usar a API do Yahoo Finance ou buscar alternativas? Neste comparativo técnico, analisamos brapi.dev vs Yahoo Finance API em detalhes.
Resumo Executivo
| Critério | brapi.dev | Yahoo Finance |
|---|---|---|
| Foco no Brasil | ✅ Especializada | ⚠️ Global (BR secundário) |
| Documentação PT-BR | ✅ Completa | ❌ Apenas inglês |
| Dados Fundamentalistas | ✅ Completos | ⚠️ Limitados para BR |
| Suporte | ✅ Brasileiro | ❌ Inexistente |
| Preço | ✅ Gratuito + Planos | ⚠️ Complexo |
| Estabilidade | ✅ 99.9% uptime | ⚠️ Instável para BR |
| Facilidade de Uso | ✅ Simples | ⚠️ Complexa |
Veredito Rápido: Para o mercado brasileiro, a brapi.dev oferece melhor experiência, dados mais confiáveis e suporte em português.
O Problema com Yahoo Finance para o Brasil
1. Instabilidade e Mudanças Frequentes
O Yahoo Finance não oferece uma API oficial estável. Desenvolvedores dependem de:
- Scraping de páginas (pode quebrar a qualquer momento)
- APIs não documentadas (sem garantias)
- Bibliotecas de terceiros (yfinance, etc.)
import yfinance as yf
# Isso pode falhar sem aviso prévio
try:
petr4 = yf.Ticker("PETR4.SA")
dados = petr4.history(period="1mo")
except Exception as e:
print(f"Erro: {e}") # Comum acontecer2. Dados Brasileiros Incompletos
| Dado | Yahoo Finance | brapi.dev |
|---|---|---|
| Cotações tempo real | ⚠️ 15-20 min delay | ✅ 5-15 min (por plano) |
| Dividendos completos | ⚠️ Parcial | ✅ Histórico completo |
| Balanço Patrimonial | ⚠️ Formato US GAAP | ✅ Padrão brasileiro |
| DRE | ⚠️ Incompleto | ✅ Completo |
| FIIs | ⚠️ Dados básicos | ✅ Dados detalhados |
| BDRs | ⚠️ Confuso | ✅ Organizado |
3. Sem Suporte
- Yahoo: Sem canal de suporte, sem SLA, sem garantias
- brapi: Suporte brasileiro, documentação em português, comunidade ativa
Comparativo Técnico Detalhado
Facilidade de Integração
brapi.dev - Simples e Direto:
import requests
# Uma linha para obter dados
response = requests.get("https://brapi.dev/api/quote/PETR4")
dados = response.json()
print(f"Preço: R$ {dados['results'][0]['regularMarketPrice']}")
# Preço: R$ 37.85Yahoo Finance - Mais Complexo:
import yfinance as yf
# Precisa de biblioteca externa
# Sufixo .SA obrigatório
# Pode falhar sem aviso
ticker = yf.Ticker("PETR4.SA")
info = ticker.info # Pode retornar vazio
if info:
preco = info.get('regularMarketPrice', 'N/A')
print(f"Preço: R$ {preco}")
else:
print("Erro ao obter dados") # ComumEstrutura de Resposta
brapi.dev - JSON Limpo e Consistente:
{
"results": [{
"symbol": "PETR4",
"shortName": "PETROBRAS PN",
"longName": "Petróleo Brasileiro S.A. - Petrobras",
"currency": "BRL",
"regularMarketPrice": 37.85,
"regularMarketChange": 0.45,
"regularMarketChangePercent": 1.20,
"regularMarketVolume": 45678900,
"regularMarketDayHigh": 38.10,
"regularMarketDayLow": 37.20
}],
"requestedAt": "2026-01-15T14:30:00.000Z",
"took": "45ms"
}Yahoo Finance - Estrutura Inconsistente:
# A estrutura pode variar sem aviso
# Campos podem estar ausentes
# Formato de datas inconsistente
# Valores podem vir em formatos diferentesMúltiplas Ações em Uma Requisição
brapi.dev - Nativo:
# Até 20 ações em uma única chamada
url = "https://brapi.dev/api/quote/PETR4,VALE3,ITUB4,BBDC4,ABEV3"
response = requests.get(url)
dados = response.json()
for acao in dados['results']:
print(f"{acao['symbol']}: R$ {acao['regularMarketPrice']}")Yahoo Finance - Workaround:
import yfinance as yf
# Funciona, mas é menos confiável
tickers = yf.Tickers("PETR4.SA VALE3.SA ITUB4.SA")
# Cada ticker precisa ser acessado individualmente
for t in ["PETR4.SA", "VALE3.SA", "ITUB4.SA"]:
try:
info = tickers.tickers[t].info
# Pode falhar individualmente
except:
passDados Fundamentalistas
Módulos Disponíveis
| Módulo | brapi.dev | Yahoo Finance |
|---|---|---|
| Balanço Patrimonial | ✅ | ⚠️ Parcial |
| DRE | ✅ | ⚠️ Parcial |
| Fluxo de Caixa | ✅ | ⚠️ Parcial |
| DVA | ✅ | ❌ |
| Indicadores (P/L, ROE) | ✅ | ⚠️ Alguns |
| Dividendos Históricos | ✅ | ⚠️ Incompleto |
| Estatísticas Chave | ✅ | ⚠️ Parcial |
Exemplo: Dados Fundamentalistas
brapi.dev:
import requests
# Dados completos em uma chamada
url = "https://brapi.dev/api/quote/ITUB4"
params = {
"modules": "balanceSheetHistory,incomeStatementHistory,defaultKeyStatistics",
"token": "SEU_TOKEN"
}
response = requests.get(url, params=params)
dados = response.json()['results'][0]
# Acesso estruturado
balanco = dados['balanceSheetHistory']['balanceSheetHistory'][0]
dre = dados['incomeStatementHistory']['incomeStatementHistory'][0]
stats = dados['defaultKeyStatistics']
print(f"ROE: {stats['returnOnEquity']:.2%}")
print(f"P/L: {stats['trailingPE']:.2f}")
print(f"P/VP: {stats['priceToBook']:.2f}")Yahoo Finance:
import yfinance as yf
ticker = yf.Ticker("ITUB4.SA")
# Dados podem estar incompletos ou indisponíveis
try:
balanco = ticker.balance_sheet # DataFrame, formato diferente
dre = ticker.income_stmt
info = ticker.info
# Campos podem não existir
roe = info.get('returnOnEquity', 'N/A') # Frequentemente N/A para BR
except Exception as e:
print(f"Erro: {e}")Dados Históricos
Comparação de Histórico
brapi.dev:
import requests
url = "https://brapi.dev/api/quote/PETR4"
params = {
"range": "1y", # 1 ano
"interval": "1d", # Diário
"token": "SEU_TOKEN"
}
response = requests.get(url, params=params)
dados = response.json()['results'][0]
historico = dados['historicalDataPrice']
for candle in historico[-5:]: # Últimos 5 dias
print(f"{candle['date']}: O:{candle['open']:.2f} H:{candle['high']:.2f} L:{candle['low']:.2f} C:{candle['close']:.2f}")Yahoo Finance:
import yfinance as yf
ticker = yf.Ticker("PETR4.SA")
# Pode funcionar, mas estrutura diferente
historico = ticker.history(period="1y", interval="1d")
# Retorna DataFrame pandas (mais pesado)
print(historico.tail())Intervalos Disponíveis
| Intervalo | brapi.dev | Yahoo Finance |
|---|---|---|
| 1 minuto | ✅ Pro | ⚠️ Instável |
| 5 minutos | ✅ Pro | ⚠️ Instável |
| 15 minutos | ✅ | ⚠️ |
| 1 hora | ✅ | ✅ |
| 1 dia | ✅ | ✅ |
| 1 semana | ✅ | ✅ |
| 1 mês | ✅ | ✅ |
Preços e Limites
Comparativo de Planos
brapi.dev - Transparente:
| Plano | Preço | Requisições/mês | Delay |
|---|---|---|---|
| Gratuito | R$ 0 | 15.000 | 30 min |
| Startup | R$ 59,99 | 150.000 | 15 min |
| Pro | R$ 99,99 | 500.000 | 5 min |
Yahoo Finance - Complexo:
- API oficial (RapidAPI): ~$9-$49/mês para volumes baixos
- Bibliotecas gratuitas: Sem garantia, pode quebrar
- Limites não documentados
- Rate limiting agressivo
Custo-Benefício
ANÁLISE DE CUSTO PARA 100.000 REQ/MÊS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
brapi.dev Startup: R$ 59,99/mês
✅ Suporte brasileiro
✅ Documentação PT-BR
✅ Dados otimizados para BR
✅ SLA garantido
Yahoo Finance (RapidAPI): ~$29/mês (~R$ 150)
❌ Sem suporte
❌ Documentação só em inglês
❌ Dados BR incompletos
❌ Sem garantias
💰 ECONOMIA: ~R$ 90/mês com brapi.devCasos de Uso
Quando Usar brapi.dev
✅ Aplicações para mercado brasileiro ✅ Apps de carteira de investimentos ✅ Análise fundamentalista de ações BR ✅ Bots de trading para B3 ✅ Dashboards financeiros ✅ Planilhas automatizadas (Google Sheets, Excel) ✅ Projetos acadêmicos
Quando Considerar Yahoo Finance
⚠️ Dados de mercados internacionais (EUA, Europa) ⚠️ Projetos que já usam yfinance e funcionam ⚠️ Análises de ações americanas
Migração do Yahoo Finance para brapi.dev
Antes (Yahoo Finance):
import yfinance as yf
def get_stock_data_yahoo(ticker):
"""Função legada com Yahoo Finance"""
try:
stock = yf.Ticker(f"{ticker}.SA")
info = stock.info
return {
'symbol': ticker,
'price': info.get('regularMarketPrice'),
'change': info.get('regularMarketChangePercent'),
'volume': info.get('regularMarketVolume')
}
except Exception as e:
return None # Falhas frequentesDepois (brapi.dev):
import requests
def get_stock_data_brapi(ticker, token=''):
"""Função atualizada com brapi.dev"""
url = f"https://brapi.dev/api/quote/{ticker}"
if token:
url += f"?token={token}"
response = requests.get(url)
data = response.json()
if data.get('results'):
stock = data['results'][0]
return {
'symbol': stock['symbol'],
'price': stock['regularMarketPrice'],
'change': stock['regularMarketChangePercent'],
'volume': stock['regularMarketVolume']
}
return None
# Uso idêntico, resultado mais confiável
dados = get_stock_data_brapi('PETR4')Guia de Migração Completo
# Mapeamento Yahoo Finance → brapi.dev
CAMPO_MAPPING = {
# Yahoo Finance → brapi.dev
'regularMarketPrice': 'regularMarketPrice', # Igual
'regularMarketChange': 'regularMarketChange', # Igual
'regularMarketVolume': 'regularMarketVolume', # Igual
'marketCap': 'marketCap', # Igual
'trailingPE': 'trailingPE', # Igual
'forwardPE': 'forwardPE', # Igual
'priceToBook': 'priceToBook', # Igual
'dividendYield': 'dividendYield', # Igual
}
# Os campos são compatíveis!
# Migração é simples: trocar endpoint e remover .SA do tickerExemplo Completo: Dashboard de Ações
import requests
from datetime import datetime
class BrapiClient:
"""Cliente para API brapi.dev"""
def __init__(self, token=''):
self.base_url = "https://brapi.dev/api"
self.token = token
def get_quote(self, tickers):
"""Obtém cotações de uma ou mais ações"""
if isinstance(tickers, list):
tickers = ','.join(tickers)
url = f"{self.base_url}/quote/{tickers}"
if self.token:
url += f"?token={self.token}"
response = requests.get(url)
return response.json()
def get_fundamentals(self, ticker, modules=None):
"""Obtém dados fundamentalistas"""
if modules is None:
modules = ['defaultKeyStatistics', 'financialData']
url = f"{self.base_url}/quote/{ticker}"
params = {
'modules': ','.join(modules),
'token': self.token
}
response = requests.get(url, params=params)
return response.json()
def get_historical(self, ticker, range='1mo', interval='1d'):
"""Obtém dados históricos"""
url = f"{self.base_url}/quote/{ticker}"
params = {
'range': range,
'interval': interval,
'token': self.token
}
response = requests.get(url, params=params)
return response.json()
# Uso
client = BrapiClient(token='SEU_TOKEN')
# Dashboard rápido
print("📊 DASHBOARD DE AÇÕES - brapi.dev")
print("=" * 50)
quotes = client.get_quote(['PETR4', 'VALE3', 'ITUB4', 'WEGE3', 'ABEV3'])
for stock in quotes['results']:
emoji = "🟢" if stock['regularMarketChangePercent'] > 0 else "🔴"
print(f"{emoji} {stock['symbol']:6} | R$ {stock['regularMarketPrice']:8.2f} | {stock['regularMarketChangePercent']:+.2f}%")
print(f"\n⏱️ Atualizado: {datetime.now().strftime('%H:%M:%S')}")
print(f"📡 Fonte: brapi.dev")Conclusão
Por Que Escolher brapi.dev?
| Aspecto | Vantagem |
|---|---|
| Especialização | Feita para o mercado brasileiro |
| Confiabilidade | API estável com SLA |
| Suporte | Atendimento em português |
| Documentação | Completa e em PT-BR |
| Preço | Competitivo e transparente |
| Dados | Completos para ações brasileiras |
Próximos Passos
- Crie sua conta gratuita - 15.000 requisições/mês grátis
- Leia a documentação - Guias completos de integração
- Teste a API - Experimente sem código
- Veja exemplos - Python, JavaScript, Excel e mais
Migre do Yahoo Finance para brapi.dev e tenha dados mais confiáveis do mercado brasileiro. Comece gratuitamente agora!
