Dados agrícolas brasileiros em uma linha de código
Infraestrutura Python para dados agrícolas brasileiros com camada semântica sobre 40 fontes públicas — preços de mercado, produção e safras, comércio exterior, crédito rural, clima, monitoramento ambiental, cadastros territoriais e regulatório.
v1.1.0 — 6.400+ testes passando, 92% de cobertura, golden tests com fixtures de referência por fonte, retry centralizado em todos os clients HTTP.
pip install agrobr
Com extras opcionais:
pip install agrobr[pdf] # pdfplumber para ANDA, Lista Suja, Rio Verde
pip install agrobr[polars] # Suporte a Polars
pip install agrobr[browser] # Playwright (opcional, para fontes com JS)
pip install agrobr[bigquery] # Base dos Dados (fallback BCB/SICOR)
pip install agrobr[geo] # GeoPandas — habilita variantes _geo (PRODES, DETER, SICAR, FUNAI, ICMBio, INCRA, IBAMA, Queimadas, MapBiomas Alerta, ANA, SFB, EMBRAPA Solos, Acervo Fundiário)
pip install agrobr[all] # Tudo incluído
docker build -t agrobr .
docker run -it --rm agrobr
>>> from agrobr.sync import cepea
>>> df = cepea.indicador('soja', inicio='2024-01-01')
# CLI
docker run --rm agrobr agrobr cepea indicador boi
# Persistir cache entre execuções
docker run -it --rm -v agrobr-cache:/home/agrobr/.agrobr agrobr
# Com extras adicionais (EXTRAS substitui o default "browser,pdf")
docker build --build-arg EXTRAS="browser,pdf,polars" -t agrobr:extras .
# Rodar script local
docker run --rm -v "$(pwd)":/work agrobr python /work/analise.py
A imagem default inclui Playwright + Chromium e pdfplumber. Veja o guia Docker para extras adicionais.
Os exemplos abaixo usam a forma async. Para a equivalente sem async/await, veja Modo síncrono. Funções que retornam DataFrame aceitam as_polars=True e return_meta=True (proveniência).
CEPEA (spot diário), B3 (futuros agro), IMEA (Mato Grosso), CONAB CEASA/PROHORT (atacado hortifruti), ANP Diesel.
from agrobr import cepea
# Indicadores diários CEPEA — soja, milho, café, boi, trigo, algodão, arroz, etc.
df = await cepea.indicador('soja', inicio='2024-01-01')
ultimo = await cepea.ultimo('soja')
print(f"Soja: R$ {ultimo.valor}/sc em {ultimo.data}")
print(await cepea.produtos()) # 21 produtos disponíveis
print(await cepea.pracas('soja')) # praças de comercialização por produto
| Fonte | Função carro-chefe | Doc |
|---|---|---|
| B3 futuros agro | b3.ajustes(data="13/02/2025"), b3.posicoes_abertas(data=...), b3.historico(contrato="boi", inicio=..., fim=...) |
docs/sources/b3.md |
| CFTC COT posicionamento de fundos (Chicago/NY) | cftc.cot("soja", start="2026-05-01") |
docs/sources/cftc.md |
| IMEA Mato Grosso | imea.cotacoes("soja", safra="24/25") |
docs/sources/imea.md |
| CONAB CEASA | conab.ceasa_precos(produto="tomate", ceasa="SAO PAULO") |
docs/sources/conab_ceasa.md |
| ANP Diesel | alt.anp_diesel.precos_diesel(uf="MT"), alt.anp_diesel.vendas_diesel(uf="MT") |
docs/sources/anp_diesel.md |
CONAB (safras, balanço, custo, série histórica, progresso), IBGE (PAM, LSPA, PPM, Abate, PEVS, Leite, PIB, Censo Agro), DERAL, USDA PSD, ABIOVE, ANEC, UNICA, Rio Verde.
from agrobr import conab, ibge
# CONAB — safra atual + balanço oferta/demanda
df = await conab.safras('soja', safra='2024/25')
df = await conab.balanco('soja')
df = await conab.serie_historica('soja', inicio=2010, fim=2024)
df = await conab.progresso_safra(cultura='Soja', estado='MT', operacao='Colheita')
df = await conab.custo_producao(cultura='soja', uf='MT', safra='2024/25')
# IBGE — Produção Agrícola Municipal (anual)
df = await ibge.pam('soja', ano=2023, nivel='uf')
df = await ibge.pam('cafe', ano=2023, nivel='municipio', uf='MG')
df = await ibge.lspa('soja', ano=2024, mes=6) # Levantamento Sistemático mensal
df = await ibge.ppm('bovino', ano=2023) # Pecuária Municipal
df = await ibge.abate('frango', trimestre='202303', uf='PR')
# Censo Agropecuário — 1995/2006/2017 + série histórica 1920-2006 + 1985 municipal
df = await ibge.censo_agro('efetivo_rebanho')
df = await ibge.censo_agro_historico('estabelecimentos_area')
df = await ibge.censo_agro_municipal_1985('bovinos', uf='SP')
| Fonte | Função carro-chefe | Doc |
|---|---|---|
| IBGE PEVS | ibge.silvicultura('madeira_tora', ano=2023), ibge.extracao_vegetal('acai', ano=2023) |
docs/sources/ibge.md |
| IBGE Leite | ibge.leite_trimestral(trimestre='202303', uf='MG') |
docs/sources/ibge.md |
| IBGE PIB Agro | ibge.pib_agro(trimestre='202501', setor='agropecuaria') |
docs/sources/ibge.md |
| DERAL condição PR | deral.condicao_lavouras('soja') |
docs/sources/deral.md |
| USDA PSD internacional | usda.psd('soja', country='BR', market_year=2024) (requer AGROBR_USDA_API_KEY) |
docs/sources/usda.md |
| ABIOVE complexo soja | abiove.exportacao(ano=2024, produto='grao') |
docs/sources/abiove.md |
| ANEC embarques semanais | anec.embarques(ano=2026), anec.destinos(ano=2026) |
docs/sources/anec.md |
| UNICA moagem Centro-Sul | unica.moagem_quinzenal('cana'), unica.safra_resumo(), unica.producao_historica('acucar') |
docs/sources/unica.md |
| Rio Verde ensaios cultivares MT | rio_verde.ensaio_soja(safra='2023/24') |
docs/sources/rio_verde.md |
ComexStat (BR), UN Comtrade (mundial bilateral), ANTAQ (portos), ANTT Pedágio (rodovias).
from agrobr import comexstat, comtrade
# Exportações/importações brasileiras por NCM/UF, mensal
df = await comexstat.exportacao('soja', ano=2024, agregacao='mensal')
df = await comexstat.importacao('fertilizante', ano=2024)
# Comércio bilateral mundial (UN Comtrade)
df = await comtrade.comercio('soja', reporter='BR')
df = await comtrade.trade_mirror('soja', reporter='BR') # validação cruzada exportador/importador
| Fonte | Função carro-chefe | Doc |
|---|---|---|
| ANTAQ portos | antaq.movimentacao(ano=2024) |
docs/sources/antaq.md |
| ANTT Pedágio | alt.antt_pedagio.fluxo_pedagio(ano=2024), alt.antt_pedagio.pracas_pedagio(uf='SP') |
docs/sources/antt_pedagio.md |
BCB (SICOR + SGS + PTAX + Focus), MAPA PSR.
from agrobr import bcb, alt
# BCB SICOR — crédito rural
df = await bcb.credito_rural('soja', safra='2024/25')
df = await bcb.credito_rural('soja', safra='2024/25', programa='Pronamp')
# BCB SGS — séries temporais (Selic, IPCA, IPA agro, câmbio, etc.)
df = await bcb.sgs('selic', ultimos=12)
df = await bcb.sgs('ipa_agropecuario', data_inicial='2020-01-01')
df = await bcb.sgs('pib_agropecuaria') # também: ipca, igpm, cdi, tjlp, dolar_ptax_venda...
# BCB PTAX — cotação dólar
df = await bcb.ptax(data_inicial='2024-01-01', data_final='2024-12-31')
# BCB Focus — expectativas de mercado
df = await bcb.focus('PIB Agropecuária')
# MAPA PSR — apólices e sinistros do seguro rural
df = await alt.mapa_psr.apolices(cultura='soja', ano=2023)
df = await alt.mapa_psr.sinistros(cultura='soja', uf='MT')
NASA POWER (climatologia global), INMET (estações brasileiras, requer token), ANA/SNIRH (hidrografia, irrigação).
from agrobr import nasa_power, inmet, ana
# NASA POWER — climatologia por ponto ou UF (sem auth)
df = await nasa_power.clima_uf('MT', ano=2024)
df = await nasa_power.clima_ponto(-12.6, -56.1, '2024-01-01', '2024-12-31')
# INMET — estações observacionais (requer AGROBR_INMET_TOKEN)
df = await inmet.estacao('A001', '2024-01-01', '2024-01-31')
df = await inmet.clima_uf('SP', ano=2024)
# ANA/SNIRH — pivôs de irrigação por UF
df = await ana.pivos_irrigacao(uf='MT')
gdf = await ana.pivos_irrigacao_geo(uf='MT') # requer agrobr[geo]
INMET retorna
SourceUnavailableError(HTTP 403) sem token. Configure:export AGROBR_INMET_TOKEN=seu_token. Para clima sem token, use NASA POWER.
Queimadas (focos INPE), Desmatamento (PRODES + DETER), MapBiomas (cobertura/transição), MapBiomas Alerta, IBAMA (embargos), ICMBio (UCs), SFB (florestas públicas).
from agrobr import queimadas, desmatamento, mapbiomas
# Queimadas — focos de calor por satélite (6 biomas, 13 satélites)
df = await queimadas.focos(ano=2024, mes=9, uf='MT', bioma='Amazonia')
# Desmatamento — PRODES (anual consolidado) + DETER (alertas em tempo real)
df = await desmatamento.prodes(bioma='Cerrado', ano=2022, uf='MT')
df = await desmatamento.deter(
bioma='Amazônia', uf='PA',
data_inicio='2024-01-01', data_fim='2024-06-30',
)
# MapBiomas — uso e cobertura da terra (1985-presente)
df = await mapbiomas.cobertura(estado='MT', ano=2022)
df = await mapbiomas.transicao(estado='PA')
# Variantes geo (requerem agrobr[geo])
gdf = await desmatamento.prodes_geo(bioma='Cerrado', ano=2022, uf='MT')
gdf = await queimadas.focos_geo(ano=2024, mes=9, uf='MT')
| Fonte | Função carro-chefe | Doc |
|---|---|---|
| MapBiomas Alerta | mapbiomas_alerta.alertas(start_date='2024-01-01') (requer AGROBR_MAPBIOMAS_ALERTA_TOKEN) |
docs/sources/mapbiomas_alerta.md |
| IBAMA embargos | ibama.embargos(uf='PA') |
docs/sources/ibama.md |
| ICMBio UCs federais | icmbio.ucs(uf='AM', grupo='PI') |
docs/sources/icmbio.md |
| SFB florestas públicas | sfb.cnfp(uf='AM'), sfb.concessoes(uf='AM'), sfb.ifn_conglomerados(uf='MT') |
docs/sources/sfb.md |
SICAR (CAR), Acervo Fundiário INCRA (SIGEF/SNCI/assentamentos), FUNAI (terras indígenas), INCRA (quilombolas), EMBRAPA Solos (PronaSolos + SiBCS).
from agrobr import alt, acervo_fundiario, funai, incra, embrapa_solos
# SICAR — Cadastro Ambiental Rural (imóveis rurais por UF)
df = await alt.sicar.imoveis('DF')
df = await alt.sicar.resumo('MT', municipio='Sorriso')
# Acervo Fundiário/INCRA — parcelas certificadas e assentamentos
df = await acervo_fundiario.sigef('MT')
df = await acervo_fundiario.snci('PA')
df = await acervo_fundiario.assentamentos(uf='PA')
# FUNAI — terras indígenas
df = await funai.terras_indigenas(uf='AM', fase='Regularizada')
# INCRA — territórios quilombolas
df = await incra.quilombolas(uf='BA')
# EMBRAPA Solos — perfis pedológicos PronaSolos + mapa SiBCS
df = await embrapa_solos.perfis(uf='SP')
df = await embrapa_solos.mapa_solos(ordem='LATOSSOLO')
# Variantes geo (requer agrobr[geo])
gdf = await alt.sicar.imoveis_geo('DF')
gdf = await funai.terras_indigenas_geo(uf='AM')
gdf = await acervo_fundiario.sigef_geo('MT')
gdf = await embrapa_solos.mapa_solos_geo(ordem='LATOSSOLO')
ANDA (fertilizantes), Defensivos/Agrofit (agrotóxicos), RNC (cultivares), Lista Suja (trabalho escravo), ZARC (zoneamento).
from agrobr import anda, defensivos, rnc, lista_suja, zarc
# ANDA — entregas de fertilizantes (requer agrobr[pdf])
df = await anda.entregas(ano=2024, uf='MT')
# Defensivos/Agrofit — agrotóxicos registrados no Brasil
df = await defensivos.formulados(ingrediente_ativo='glifosato')
df = await defensivos.tecnicos(titular='Bayer')
df = await defensivos.autorizacoes(cultura='soja')
# RNC/CultivarWeb — cultivares registradas (~37K) e protegidas (~5K)
df = await rnc.registradas(especie='Soja')
df = await rnc.protegidas(titular='Embrapa')
# Lista Suja — empregadores em condição análoga à escravidão
df = await lista_suja.empregadores(uf='PA')
# ZARC — Zoneamento Agrícola de Risco Climático
df = await zarc.zoneamento(cultura='soja', uf='MT')
print(zarc.culturas()) # 40+ culturas disponíveis
Quando você que
$ claude mcp add agrobr \
-- python -m otcore.mcp_server <graph>