Load Brazil CVM Filings into Tableau

Want Tableau CVM filings dashboards without scraping the portal? apicvm returns document metadata as JSON. Tableau has no native CVM connector — land rows as CSV (or a Web Data Connector) and build charts on inventory, type mix, and year coverage.

The problem

BI teams covering Brazilian issuers often need:

  • A watchlist inventory of DFP / ITR / FRE documents
  • Filters by ticker, type, and year
  • Stable document IDs for audit links — not portal session URLs

Portal ZIP dumps do not refresh cleanly into Tableau extracts.

Setup

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

Pull an inventory CSV

import csv, os, requests

BASE = os.environ["APICVM_URL"]
H = {"Authorization": f"Bearer {os.environ['APICVM_KEY']}"}

rows = []
page = 1
while True:
    r = requests.get(
        f"{BASE}/v1/documents",
        headers=H,
        params={
            "ticker": "PETR4",
            "type": "DFP",
            "year": 2024,
            "page": page,
            "perPage": 50,
        },
    ).json()
    rows.extend(r["data"])
    if page >= r["meta"]["lastPage"]:
        break
    page += 1

with open("petr4_dfp_2024.csv", "w", newline="") as f:
    w = csv.DictWriter(f, fieldnames=["id", "name", "type", "year", "ticker"])
    w.writeheader()
    for d in rows:
        w.writerow({
            "id": d["id"],
            "name": d.get("name"),
            "type": d.get("type"),
            "year": d.get("year"),
            "ticker": "PETR4",
        })

perPage max is 50. See Paginate and filter.

Connect in Tableau

  1. Open Tableau → Text file (or your CSV data source)
  2. Point at the exported inventory
  3. Build views: document counts by type / year, tables of name + id
  4. Optional: add a calculated URL field to your internal archive keyed by id

For analyst workflows that already live in Microsoft stacks, see Power BI and Excel Power Query.

curl cross-check

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

What Tableau should not do alone

  • Do not scrape CVM HTML into Tableau Web Data scrapers — brittle and against the spirit of primary-source APIs
  • Do not treat empty extracts as “company never filed”; empty means “not in corpus yet”
  • PDF binary download (GET /v1/documents/:id/file) is for your archive/job, not for Tableau viz cells

Current limitations

  • No official Tableau connector from apicvm — CSV/WDC is the path
  • Text extraction is async via callback (Pro); Student keys get 403 on extract
  • Corpus coverage depends on ingestion lag

Next steps

Ready to integrate?

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