Brazil CVM Filings for Competitor Monitoring

IR, strategy, and competitive-intelligence teams need primary Brazil filings competitor monitoring packs — not only news clips. apicvm lets you resolve peer tickers, list DFP/ITR/FRE documents, and archive UUIDs. It is not a news feed, alert SaaS, or market-data terminal.

The persona

  • Investor relations analysts tracking peer disclosure cadence
  • Corporate strategy teams comparing annual DFP packages
  • Competitive intel associates pulling FRE risk / business-model sections

The problem

Monitoring task Typical CVM source
Annual peer statements DFP
Quarterly updates ITR
Business description, risks, related parties FRE

Manual portal downloads across a peer set are slow and hard to cite in strategy decks.

Solution flow

Peer ticker list
  → GET /v1/companies/resolve
  → GET /v1/documents (type + year)
  → optional name= filter on FRE sections
  → GET /v1/documents/:id/file
  → store UUID in the competitive archive
export APICVM_KEY='apicvm_...'
export APICVM_URL='https://apicvm.dev'

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

For broader watchlists, see Multi-ticker CVM filings watchlist.

Example: peer pack job

import os, requests

BASE = os.environ["APICVM_URL"]
H = {"Authorization": f"Bearer {os.environ['APICVM_KEY']}"}
PEERS = ["RAIL3", "CCRO3", "ECOR3"]  # logistics / concessions peers — resolve each

for t in PEERS:
    r = requests.get(
        f"{BASE}/v1/companies/resolve",
        headers=H,
        params={"query": t, "by": "ticker"},
        timeout=30,
    )
    if r.status_code == 404:
        print(t, "not resolved — skip")
        continue
    for doc_type in ("DFP", "ITR"):
        docs = requests.get(
            f"{BASE}/v1/documents",
            headers=H,
            params={"ticker": t, "type": doc_type, "year": 2024, "perPage": 20},
            timeout=30,
        ).json()["data"]
        print(t, doc_type, [d["id"] for d in docs[:2]])

Skip tickers outside the ingested corpus. Do not invent peer coverage.

FRE section skim

When comparing risk narratives, filter FRE by name:

curl -H "Authorization: Bearer $APICVM_KEY" \
  "$APICVM_URL/v1/documents?ticker=RAIL3&type=FRE&year=2024&name=Risco&perPage=20"

Section-level filters are coverage-dependent. See Filter by section name and What is FRE.

Current limitations

  • No push alerts when a new filing appears — you poll or schedule a job.
  • Not a substitute for material-fact news wires.
  • Markdown extraction is async (Pro) via callback; Student keys cannot extract.
  • perPage max 50.

Next steps

Ready to integrate?

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