Brazil Revenue Recognition Disclosures API: Track CPC 47 and IFRS 15 from CVM Filings
A Brazil revenue recognition disclosures API in the equity-research sense is not a subscription billing platform, a contract lifecycle SaaS, or an engine that auto-calculates recognized revenue from invoices. It is access to the CVM filings where Brazilian issuers disclose CPC 47 / IFRS 15 policies, deferred revenue (receita diferida), performance obligations, variable consideration, and changes in accounting estimates — explanatory notes in DFP and ITR (Informações Trimestrais, not US income tax returns), risk factors in FRE, and event PDFs when management revises revenue guidance or reclassifies contract balances. apicvm lets you list those rows by ticker, download the original filing, and diff new document.id values on an earnings-quality watchlist at the start of 3Q ITR season.
This guide shows which type values to query, keyword heuristics for revenue-recognition-related titles, and how this hub differs from segment reporting, working capital, and guidance outlook.
The problem
Revenue-quality surveillance splits into three stacks that English search results often merge:
- Market data terminals — rebased segment revenue and consensus estimates. They rarely store the issuer’s regulatory PDF with CPC 47 policy text, deferred revenue roll-forwards, and contract modification footnotes.
- Periodic packages —
DFP,ITR, andFREwith revenue notes, critical accounting judgments, and long-cycle contract narrative. Essential for construction, SaaS-like models, and industrial backlog stories, but you still need ticker-first access and stable file IDs. - Event disclosures — fatos relevantes when a material change in revenue recognition, a large contract win/loss, or a restatement of prior-period revenue is disclosed outside the normal filing calendar.
Scraping the CVM portal works for one ticker and breaks on a diversified watchlist. Bulk open-data ZIPs are dataset-oriented, not ticker-first. You want GET /v1/documents with stable document.id, then GET /v1/documents/:id/file for the original PDF — scoped to revenue recognition workflows.
For segment mix (not timing), see Brazil segment reporting disclosures API. This guide focuses on the API list-and-download pattern for CPC 47 / IFRS 15 disclosure layers.
Which filing type carries revenue recognition detail?
Brazilian issuers do not expose a dedicated type=REVENUE_RECOGNITION in the apicvm document list. Detail usually appears under:
type |
Role in revenue recognition workflows |
|---|---|
ITR / DFP |
Periodic financials — revenue policy notes, deferred revenue, contract balances, changes in estimates |
FRE |
Annual reference form — business model, revenue drivers, and risks that frame how sales convert to recognized revenue |
FATO_RELEVANTE |
Material fact when a restatement, large contract, or policy change hits recognized revenue |
COMUNICADO_AO_MERCADO |
Occasional market communication when revenue guidance or backlog is revised |
Practical rule: list latest ITR/DFP for each ticker during 3Q ITR season, narrow annex rows with name filters for notes (notas, notes, explicativas), poll FATO_RELEVANTE for revenue-restatement keywords, and pull FRE once per year for structural context. After download, search PDF text for receita, reconhecimento, CPC 47, IFRS 15, receita diferida, deferred revenue, contrato, performance obligation, variable consideration, mudança de estimativa, or policy change.
Issuer titles vary: long-cycle builders and equipment vendors file dense note PDFs; pure retailers may discuss revenue mainly in MD&A annexes without event-layer keywords. Zero rows in a given year does not prove immaterial deferred revenue — see limitations below.
How apicvm helps
- Resolve the issuer —
GET /v1/companies/resolve - List periodic packages —
GET /v1/documentswithtype=ITRortype=DFPandyear - Narrow to explanatory notes —
name=Notasor related annex tokens - List event filings —
GET /v1/documentswithtype=FATO_RELEVANTE - Scope with
dateRef; sort withfield=dateRef&order=desc - Download the PDF —
GET /v1/documents/:id/file(no extraction credits) - Optional (Pro): page-level markdown —
POST /v1/document-text-extractionswith async callback
Auth: Authorization: Bearer or X-API-Key. Try VALE3 without a key via the demo API.
Setup
export APICVM_KEY='apicvm_...'
export APICVM_URL='https://apicvm.dev'
Step 1: List quarterly filings for one ticker
curl -H "Authorization: Bearer $APICVM_KEY" \
"$APICVM_URL/v1/documents?ticker=WEGE3&type=ITR&year=2025&perPage=10&field=dateRef&order=desc"
Response rows include stable id, dateRef, name, and nested company metadata. Use id as your cache key — not name, which can be long and encoding-sensitive.
Paginate with page= when meta.lastPage > 1. perPage maxes at 50.
Step 2: Narrow to explanatory notes (CPC 47 tables live here)
curl -s -H "Authorization: Bearer $APICVM_KEY" \
"$APICVM_URL/v1/documents?ticker=WEGE3&type=ITR&year=2025&perPage=50&name=Notas" \
| jq '.data[] | {id, type, dateRef, name}'
Combine with filter CVM filings by section name when your catalog uses English or abbreviated tokens.
Step 4: Download the filing PDF
DOC_ID=123456
curl -H "Authorization: Bearer $APICVM_KEY" \
"$APICVM_URL/v1/documents/$DOC_ID/file" -o revenue-recognition-notes.pdf
Store document.id in your warehouse. Re-download when the issuer replaces a filing; do not assume name alone is a stable key.
Step 5: Watchlist poll (Python sketch)
import os, re, requests
BASE = os.environ["APICVM_URL"]
KEY = os.environ["APICVM_KEY"]
HEADERS = {"Authorization": f"Bearer {KEY}"}
WATCH = ["WEGE3", "MGLU3", "CYRE3", "RADL3"]
REV_RE = re.compile(
r"receita|revenue|reconhecimento|diferida|deferred|CPC.?47|IFRS.?15|"
r"restatement|reclassific|contrato|backlog|estimativa",
re.I,
)
seen = set()
def list_events(ticker):
r = requests.get(
f"{BASE}/v1/documents",
headers=HEADERS,
params={
"ticker": ticker,
"types": "FATO_RELEVANTE,COMUNICADO_AO_MERCADO",
"year": 2025,
"perPage": 50,
"field": "dateRef",
"order": "desc",
},
timeout=60,
)
r.raise_for_status()
return r.json().get("data") or []
for ticker in WATCH:
for doc in list_events(ticker):
if doc["id"] in seen:
continue
if not REV_RE.search(doc.get("name") or ""):
continue
seen.add(doc["id"])
print(f"REV {ticker} {doc['dateRef']} {doc['name'][:70]}")
Wire this into GitHub Actions CVM filings monitor or extend the diff pattern from Brazil material facts monitoring API. For NLP over downloaded PDFs, see extract text from CVM PDFs for AI agents.
Where revenue recognition sits in the filings stack
| Layer | Types | Revenue recognition relevance |
|---|---|---|
| Periodic | ITR, DFP |
CPC 47 / IFRS 15 policy, deferred revenue, contract balances |
| Reference | FRE |
Business model and revenue-risk narrative |
| Events | FATO_RELEVANTE, COMUNICADO_AO_MERCADO |
Restatements, large contracts, guidance revisions |
Brazil regulatory filings API explains the full layer map. Pair periodic note pulls with quarterly ITR monitoring during 3Q ITR season (typically Oct–Nov). When revenue quality ties to receivables timing, cross-check Brazil working capital disclosures API. When mix shifts across segments drive recognized revenue, see Brazil segment reporting disclosures API. When forward statements move before notes update, see Brazil guidance and outlook disclosures API. For the broader Brazil financial data API pillar, treat revenue recognition as one note cluster inside periodic filings.
Current limitations
- Documents, not parsed revenue engines — apicvm does not return recognized revenue, backlog, or deferred revenue balances parsed from tables.
- Keyword filters are heuristic —
nametokens help on the event layer; many CPC 47 tables appear only inside periodic PDF notes without matching keywords. - Polling, not push — no webhook when CVM publishes a new fact. Schedule polls and diff
document.id. - Ingestion lag — sync is not real-time. A notice may appear on the portal before it is in the corpus.
- Corpus coverage — not every issuer or period is present. Validate against the portal for production compliance use cases.
- Demo scope —
/v1/demo/*is limited to VALE3. Other tickers need a production key. - ITR disambiguation — Informações Trimestrais (CVM quarterly financials), not US income tax return software.
Next steps
- Read the API docs
- Get an API key
- Extract CVM financial footnotes from DFP — broader note workflow
Ready to integrate?
Get an API key and start querying Brazilian CVM filings programmatically.