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:

Metadata

Release files for python-bcb 0.4.1

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.1
File Size Uploaded Provenance
python_bcb-0.4.1.tar.gz 1.6 MB Without provenance Details

Built distribution (wheel)

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

Total release size: 1.7 MB

Release files / python_bcb-0.4.1.tar.gz

Download URL python_bcb-0.4.1.tar.gz
Size 1.6 MB
Tags Source
SHA-256 checksum
How to use checksums
ca95995bb324e67a5e5f5a8157577f714de0be23ad273662f3ba5f7e95403b54
BLAKE2b-256 checksum
How to use checksums
a638ba1da27b483fd2b5dadef8567b17a8f53d65ce4c4421c7fc84a414b37f09
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":"26.04","id":"resolute","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.1-py3-none-any.whl

Download URL python_bcb-0.4.1-py3-none-any.whl
Size 35.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5e5ce0a9aa328395934d8484ecf8d256ed44660b4ac5638f17be2c73bbb0a4a6
BLAKE2b-256 checksum
How to use checksums
f167a88d74f9eea30d74afce4614930156f6f3c7e2f1fccd54a3b2472ac72ec0
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":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Security for python-bcb 0.4.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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