Skip to main content

python-bcb

python-bcb é uma interface em Python estruturada para obter informações da API de dados abertos do Banco Central do Brasil.

Downloads image Test workflow Lint workflow Sphinx workflow

O projeto de Dados Abertos do Banco Central do Brasil disponibiliza diversas APIs provendo acesso direto a dados de:

  • Moedas
  • Taxas de Juros
  • Índices de preços
  • Informações de Instituições Financeiras
  • Expectativas do Mercado (Expectativas do Boletim FOCUS)
  • E muito mais...

Instalação

python-bcb está disponível no Python Package Index e pode ser instalado via pip.

pip install python-bcb

APIs

SGS - Sistema Gerenciador de Séries Temporais

Utiliza o webservice do SGS (Sistema Gerenciador de Séries Temporais) para obter dados históricos de indicadores econômicos. Oferece a maior base de dados históricos com diversas séries temporais.

Conversor de Moedas

Implementado no módulo currency, realiza webscraping no site do Conversor de Moedas do Banco Central. Fornece séries temporais de frequência diária de taxas de câmbio (cotações de compra e venda).

OData - APIs Estruturadas

O Banco Central disponibiliza diversas informações em APIs que seguem o padrão OData. Inclui:

  • PTAX: Boletins diários de taxas de câmbio com dados institucionalmente detalhados
  • Expectativas: Expectativas de mercado coletadas do Boletim FOCUS
  • TaxaJuros: Diversas taxas de juros (Selic, CDI, Cheque especial, etc.)
  • MercadoImobiliario: Dados de financiamento imobiliário
  • IFDATA: Informações de instituições financeiras
  • SPI: Sistema de Pagamentos Instantâneos

Qual Módulo Devo Usar?

Use esta tabela para escolher o módulo certo para seu caso de uso:

Caso de Uso Módulo Características Principais
Séries temporais diárias (inflação, taxas de juros) bcb.sgs Maior base histórica, controle granular de frequência, múltiplas séries pré-definidas
Taxas de câmbio diárias (PTAX) bcb.currency Spreads de compra/venda, implementação rápida, frequência diária
Expectativas de mercado (Boletim FOCUS) bcb.odata (Expectativas) Indicadores de expectativas, previsões de consenso
Taxas de juros (diversos tipos) bcb.odata (TaxaJuros) Curvas detalhadas, taxas de financiamento imobiliário
Dados de financiamento imobiliário bcb.odata (MercadoImobiliario) Originações, taxas médias, volumes
Informações de instituições financeiras bcb.odata (IFDATA) Dados de balanço, informações regulatórias
Análise de dados avançada com filtros bcb.odata (qualquer serviço) API encadeável, filtragem tipo SQL, ordenação, seleção
Busca concorrente de dados APIs assíncronas (sgs, currency e OData) Requisições não-bloqueantes com async_get(), Endpoint.async_get() e ODataQuery.async_collect()

Início Rápido

Séries Temporais com SGS

from bcb import sgs

# Buscar taxa Selic (código 1)
df = sgs.get(1, start="2023-01-01", end="2024-12-31")

Taxas de Câmbio com Currency

from bcb import currency

# Buscar preços de compra/venda do USD
usd = currency.get("USD", start="2023-01-01", end="2024-12-31")

Expectativas de Mercado com OData

from bcb import Expectativas

api = Expectativas()
endpoint = api.get_endpoint("ExpectativasMercadoAnuais")

# Obter previsões do IPCA
df = endpoint.query().filter(endpoint.Indicador == "IPCA").limit(100).collect()

Perguntas Frequentes

P: Qual é a diferença entre dados de moedas do SGS e PTAX?

R: SGS contém principalmente indicadores econômicos. Para taxas de câmbio, use bcb.currency (dados PTAX) para cotações diárias ou o serviço bcb.odata PTAX para dados institucionais detalhados. O módulo currency é mais simples para casos comuns.

P: Quão longe no tempo os dados históricos vão?

R: Varia por série:

  • SGS: Maioria das séries remontam aos anos 1980/1990 (verifique documentação específica do código)
  • Currency: Cotações diárias disponíveis desde aproximadamente 1980
  • Serviços OData: Varia; consulte documentação BCB para endpoints específicos

P: Posso buscar dados de forma assíncrona?

R: Sim. SGS e currency oferecem async_get(), e os endpoints OData oferecem async_get() e async_collect(). Feche o cliente assíncrono ao final de aplicações de longa duração:

import asyncio
from bcb import http, sgs

async def main():
    try:
        results = await asyncio.gather(
            sgs.async_get(1),  # SELIC
            sgs.async_get(433),  # IPCA
        )
        return results
    finally:
        await http.aclose_async_client()

asyncio.run(main())

P: Como aumento o timeout de uma consulta lenta?

R: Passe timeout na própria chamada. O valor é local daquela chamada e não altera o cliente HTTP compartilhado globalmente:

from bcb import sgs, currency, Expectativas

# SGS
selic = sgs.get(11, start="1990-01-01", timeout=120)

# Currency
usd = currency.get("USD", start="1980-01-01", end="2026-01-01", timeout=120)

# OData
em = Expectativas(timeout=120)
ep = em.get_endpoint("ExpectativasMercadoAnuais")
df = ep.query().limit(1000).collect(timeout=120)

O padrão continua sendo 30 segundos. No SGS, o timeout vale por tentativa HTTP; quando houver retry, cada tentativa usa o mesmo valor.

P: Como trato erros e dados faltantes?

R: A biblioteca lança exceções específicas:

  • CurrencyNotFoundError: Símbolo de moeda não encontrado
  • SGSError: Erro do serviço SGS
  • BCBRateLimitError: Limite de requisições excedido (HTTP 429)
  • BCBAPIError: Outros erros de API
from bcb import sgs
from bcb.exceptions import SGSError, BCBRateLimitError

try:
    df = sgs.get(99999)  # Código inválido
except SGSError as e:
    print(f"Erro de dados: {e}")
except BCBRateLimitError:
    print("Limite de requisições excedido - tente novamente mais tarde")

P: Como habilito logging para depurar requisições?

R: A biblioteca usa o módulo logging padrão do Python:

import logging

logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger("bcb")
logger.setLevel(logging.DEBUG)

# Agora todas as requisições/respostas HTTP serão registradas

P: Existe cache para evitar requisições redundantes?

R: Sim:

  • bcb.currency: Cache em memória automático de listas de moedas
  • bcb.odata: Metadados OData em cache por URL de serviço
  • Chame currency.clear_cache() para resetar se dados mudarem

P: Posso usar isso em uma aplicação de longa duração?

R: Sim, mas tenha cuidado com:

  • Limites de requisições: APIs BCB podem ter limites; implemente backoff se necessário
  • Cache: Cache de moedas persiste em memória; limpe se atualizações de dados importarem
  • Pool de conexões: Usa httpx com connection pooling por padrão
  • API Assíncrona: use métodos async para comportamento verdadeiramente não-bloqueante e chame await bcb.http.aclose_async_client() no encerramento de aplicações assíncronas longas

P: Como contribuo ou reporto problemas?

R: Visite o repositório GitHub para:

  • Reportar bugs
  • Solicitar features
  • Enviar pull requests
  • Ver documentação

P: Como gero a documentação localmente?

R: As dependências de documentação ficam no grupo docs do uv:

uv run --group docs sphinx-build -b html docs docs/_build/html

A saída HTML é gerada em docs/_build/html. Edite os arquivos fonte em docs/; não edite os arquivos gerados em docs/_build.

P: Onde encontro documentação mais detalhada?

R:

Release files for python-bcb 0.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for python-bcb 0.4.0
File Size Uploaded
python_bcb-0.4.0.tar.gz 1.6 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for python-bcb 0.4.0
File Interpreter ABI Platform
python_bcb-0.4.0-py3-none-any.whl Python 3 none any Details

Total release size: 1.6 MB

Release files / python_bcb-0.4.0.tar.gz

Download URL python_bcb-0.4.0.tar.gz
Size 1.6 MB
Tags Source
SHA-256 checksum
How to use checksums
32e0ea43c7f7886d56593fec9a74567bf2d598b3254ce7814e41b09360522986
BLAKE2b-256 checksum
How to use checksums
7a0d3db347adfa3ebcb3a5fbe1969c1f06d8bc50007ee819e6eb55a7ca69b1e4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.9 {"installer":{"name":"uv","version":"0.9.9"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / python_bcb-0.4.0-py3-none-any.whl

Download URL python_bcb-0.4.0-py3-none-any.whl
Size 35.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
523bb0e427529c67ab7951ef0d4b4e7e89b962b699d0b29e533eb2c55ee01b70
BLAKE2b-256 checksum
How to use checksums
7db24b326d2bd14bebd9940d4ffff06031f853211cd2f22b2b6bceaa44b07597
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.9 {"installer":{"name":"uv","version":"0.9.9"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

0.4.0 This release

2 release files

0.3.6

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.9

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page