ESG Screening with Brazil CVM Filings

ESG and stewardship teams running Brazil filings ESG screening need issuer-written disclosures — integrity programs, climate and social risk factors, governance structures — not a third-party scorecard. apicvm lets you list and download the underlying CVM PDFs (mainly FRE). It does not produce ESG ratings or materiality scores.

The persona

  • Asset managers screening portfolios for disclosure gaps
  • Stewardship / engagement teams preparing issuer meetings
  • Researchers comparing integrity and climate narratives across tickers

The problem

Brazilian ESG-relevant narrative often lives in the FRE (and sometimes DFP footnotes), not in a single “ESG form.” Manual portal work does not scale across a 30-name watchlist. You need:

watchlist → FRE section filter → download / extract → your rubric

Solution flow

GET /v1/companies/resolve
GET /v1/documents?type=FRE&name=<theme>
GET /v1/documents/:id/file
optional POST /v1/document-text-extractions

Example: integrity / compliance themes

export APICVM_KEY='apicvm_...'
export APICVM_URL='https://apicvm.dev'

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

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

Example: risk factors (often includes climate / social)

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

Try the public demo for VALE3 FRE 2025 risk-factor markdown: demo API guide.

Python: multi-issuer screen

import os, requests

BASE = os.environ["APICVM_URL"]
H = {"Authorization": f"Bearer {os.environ['APICVM_KEY']}"}
TICKERS = ["VALE3", "PETR4", "LREN3", "EMBR3"]
NEEDLES = ["Integridade", "Socioambiental", "Clima", "FatoresRisco"]

for ticker in TICKERS:
    print("===", ticker)
    for name in NEEDLES:
        docs = requests.get(
            f"{BASE}/v1/documents",
            headers=H,
            params={
                "ticker": ticker,
                "type": "FRE",
                "year": 2024,
                "name": name,
                "perPage": 5,
            },
        ).json()["data"]
        print(f"  {name}: {len(docs)}")

Your ESG framework (taxonomy, weights, pass/fail) stays outside apicvm — the API only supplies documents and optional page markdown.

What apicvm does not provide

  • ESG scores, SFDR labels, or controversy databases
  • News / NGO incident feeds
  • Assurance that a disclosure is complete or accurate
  • Non-CVM sustainability reports unless filed inside ingested types

Current limitations

  • Section titles differ by issuer — tune name filters empirically.
  • IPE / material facts outside MVP.
  • Extraction costs credits on Pro.

Next steps

Ready to integrate?

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