Brazil EDGAR? CVM vs SEC Filings for Developers
Developers searching for Brazil EDGAR, Brazil SEC filings, or a Brazilian SEC equivalent usually want one thing: an EDGAR-like way to resolve an issuer, list filings, and download documents for B3 companies. Brazil's regulator is the CVM (Comissão de Valores Mobiliários). It plays a similar role to the US SEC — it is not a mirror of EDGAR's technical stack, and it is not correct to call CVM "Brazil's EDGAR."
If you already integrate with SEC EDGAR, the workflow pattern transfers. The filing types, portals, and data access paths do not. This guide maps the mental model and shows how apicvm gives you that programmatic path for Brazilian CVM documents.
The problem
Foreign developers often assume one of two things:
- SEC tools work for Brazil — they do not. EDGAR covers US issuers only.
- CVM has an EDGAR API — it does not. Official CVM data is published through portals and open-data bulk exports, not a ticker-first REST API.
The gap: you need Brazilian public company filings with the same developer ergonomics you expect from a financial data API.
CVM and SEC: same role, different systems
| SEC (US) | CVM (Brazil) | |
|---|---|---|
| Regulator | Securities and Exchange Commission | Comissão de Valores Mobiliários |
| Primary exchange context | NYSE, NASDAQ | B3 (Bovespa) |
| Filing repository | EDGAR | CVM portals + company submissions |
| Official API | EDGAR full-text search, submissions API | Open data dumps; no unified dev API |
Important: CVM is Brazil's securities regulator, analogous in role to the SEC. It is not a mirror of EDGAR's technical infrastructure.
Filing type mapping
Rough equivalents help you pick the right CVM document type:
| US (SEC) | Brazil (CVM) | apicvm type filter |
Cadence |
|---|---|---|---|
| 10-K (annual report) | DFP — Demonstrações Financeiras Padronizadas | DFP |
Annual |
| 10-Q (quarterly) | ITR — Informações Trimestrais (not income tax) | ITR |
Quarterly |
| Proxy / company handbook | FRE — Formulário de Referência | FRE |
Annual (updated) |
| 8-K (material events) | Fato relevante / IPE disclosures | FATO_RELEVANTE, … |
Event-driven |
For financial statement pipelines, DFP and ITR are your 10-K/10-Q equivalents. For company background and governance, use FRE. For event disclosures, see What is a fato relevante?.
EDGAR-style workflow with apicvm
The recommended flow matches what you would do with EDGAR submissions:
1. Resolve company → GET /v1/companies/resolve?query=PETR4&by=ticker
2. List filings → GET /v1/documents?ticker=PETR4&type=DFP&year=2024
3. Download or extract → GET /v1/documents/:id/file
POST /v1/document-text-extractions
Example: list PETR4 annual filings
export APICVM_KEY='apicvm_...'
export APICVM_URL='https://apicvm.dev'
# Resolve (like looking up CIK → ticker mapping)
curl -H "Authorization: Bearer $APICVM_KEY" \
"$APICVM_URL/v1/companies/resolve?query=PETR4&by=ticker"
# List DFP filings (like filtering 10-K on EDGAR)
curl -H "Authorization: Bearer $APICVM_KEY" \
"$APICVM_URL/v1/documents?ticker=PETR4&type=DFP&year=2024&perPage=20"
Response documents include UUID id, type, year, dateRef, and nested company metadata — enough to build filing indexes similar to EDGAR submission tables. Step-by-step listing, name filters, and download: List Brazil DFP filings (10-K equivalent) via API.
Python: compare DFP and ITR for one ticker
import os, requests
BASE = os.environ["APICVM_URL"]
H = {"Authorization": f"Bearer {os.environ['APICVM_KEY']}"}
def list_filings(ticker, doc_type, year):
r = requests.get(
f"{BASE}/v1/documents",
headers=H,
params={"ticker": ticker, "type": doc_type, "year": year, "perPage": 50},
)
r.raise_for_status()
return r.json()["data"]
for doc_type in ("DFP", "ITR"):
filings = list_filings("PETR4", doc_type, 2024)
print(f"{doc_type}: {len(filings)} document(s)")
for f in filings[:3]:
print(f" - {f['year']} {f['name']} ({f['id']})")
When to use CVM open data instead
CVM publishes bulk datasets at dados.cvm.gov.br. Use open data when:
- You need historical CSV across all companies for academic research
- One-time bulk import is acceptable
- You do not need per-ticker real-time-ish lookups
Use apicvm when:
- Your pipeline resolves tickers (PETR4, VALE3) and fetches specific filings
- You want PDF download and async text extraction in one API
- You are building agents or microservices, not batch ETL from ZIP files
Key differences from EDGAR APIs
| EDGAR | apicvm |
|---|---|
| CIK as primary identifier | Ticker, CNPJ, or company name via /resolve |
| accession numbers | UUID document.id |
| Inline XBRL on many filings | PDF originals; markdown extraction via callback |
| Free, no auth | API key required; rate limit per key |
| Comprehensive US coverage | Coverage = Hold corpus (growing) |
Current limitations
- apicvm does not replace EDGAR for US issuers — it covers Brazilian CVM filings only.
- Coverage equals the ingested corpus — not a live CVM mirror of every filing.
- Text extraction is async via callback, unlike EDGAR's inline text files on some submissions.
- Fato relevante / IPE types are available as PDFs; section prefixes apply only to DFP, ITR, and FRE.
Next steps
- CVM API overview
- Read the API docs for authentication, pagination, and error codes
- Get an API key
- Access CVM filings with Python — step-by-step code
- Download DFP and ITR filings — financial statement focus
- List Brazil DFP filings (10-K equivalent) —
type=DFP, nottype=10-K - List Brazil ITR filings (10-Q equivalent) —
type=ITR, nottype=10-Q
Ready to integrate?
Get an API key and start querying Brazilian CVM filings programmatically.