Brazil CVM Filings for Quant Research Pipelines

You are a quant or data engineer building a fundamental layer for Brazil. You need a Brazil filings quant API: ticker → annual/quarterly PDFs → machine-readable text — not another price feed.

apicvm is built for that regulatory slice: resolve issuers, list DFP/ITR/FRE, download originals, and extract page-level markdown asynchronously.

The persona

  • Cross-asset quants adding B3 names beside US EDGAR pipelines
  • Research shops assembling panel datasets from audited statements
  • Feature stores that cite original filings, not scraped HTML

You already have prices elsewhere (B3 vendors, brokers). The gap is programmatic CVM documents.

The problem

Open-data ZIP/CSV dumps are excellent for some panels but awkward for “fetch VALE3 DFP 2024 PDF, then next quarter’s ITR.” Scrapers break. Multi-market APIs may bundle Brazil with event feeds you do not need yet.

Quant code wants a boring HTTP loop:

for ticker in watchlist:
  resolve → list DFP/ITR by year → download or extract → store with document.id

Solution flow

  1. GET /v1/companies/resolve — confirm issuer
  2. GET /v1/documents — filter type, year, ticker
  3. GET /v1/documents/:id/file — original PDF
  4. Optional: POST /v1/document-text-extractions — page markdown via callback
export APICVM_KEY='apicvm_...'
export APICVM_URL='https://apicvm.dev'

curl -H "Authorization: Bearer $APICVM_KEY" \
  "$APICVM_URL/v1/documents?ticker=VALE3&type=DFP&year=2024&perPage=20"

Python sketch — multi-ticker DFP index

import os, requests

BASE = os.environ["APICVM_URL"]
H = {"Authorization": f"Bearer {os.environ['APICVM_KEY']}"}
TICKERS = ["PETR4", "VALE3", "ABEV3"]

index = []
for t in TICKERS:
    r = requests.get(
        f"{BASE}/v1/documents",
        headers=H,
        params={"ticker": t, "type": "DFP", "year": 2024, "perPage": 50},
    )
    r.raise_for_status()
    for d in r.json()["data"]:
        index.append({"ticker": t, "id": d["id"], "name": d["name"], "dateRef": d["dateRef"]})

print(len(index), "DFP files indexed")

Respect rate limits when the watchlist grows — 60 requests / 60 seconds on standard plans.

What this is not

  • Not market data — no quotes, order books, or corporate-action calendars
  • Not real-time CVM firehose — corpus follows ingestion, not a live portal mirror
  • Not IPE / fato relevante alerts — see IPE

Next steps

Ready to integrate?

Get an API key and start querying Brazilian CVM filings programmatically.