Monitor Brazil CVM Filings with GitHub Actions
Use GitHub Actions CVM filings checks to notice new DFP/ITR/FRE in your watchlist without building a worker. Call apicvm on a cron schedule; store the API key as a repository secret.
Pattern
cron (daily)
→ curl/Python list documents for tickers
→ compare IDs to a committed snapshot (or artifact)
→ open issue / fail job when new IDs appear
This is polling, not a CVM push webhook. apicvm does not emit filing-arrival events.
Secrets
| Secret | Value |
|---|---|
APICVM_KEY |
key from /signup |
Optional: APICVM_URL defaulting to https://apicvm.dev.
Workflow sketch
name: cvm-filings-watch
on:
schedule:
- cron: "0 12 * * 1-5"
workflow_dispatch:
jobs:
watch:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: List PETR4 ITR current year
env:
APICVM_KEY: ${{ secrets.APICVM_KEY }}
APICVM_URL: https://apicvm.dev
run: |
curl -fsS -H "Authorization: Bearer $APICVM_KEY" \
"$APICVM_URL/v1/documents?ticker=PETR4&type=ITR&year=2025&perPage=50" \
| tee /tmp/docs.json
python - <<'PY'
import json, pathlib
data = json.load(open("/tmp/docs.json"))["data"]
ids = sorted(d["id"] for d in data)
snap = pathlib.Path("snapshots/petr4-itr-2025.txt")
snap.parent.mkdir(exist_ok=True)
old = snap.read_text().splitlines() if snap.exists() else []
new = [i for i in ids if i not in old]
if new:
print("NEW", new)
raise SystemExit(1)
snap.write_text("\n".join(ids) + "\n")
print("ok", len(ids))
PY
Commit updated snapshots in a follow-up job if you want a green baseline after review.
Multi-ticker
Loop tickers from a YAML file. See Multi-ticker CVM filings watchlist.
Notify instead of only failing
After detecting new IDs, open a GitHub issue with gh or post to Slack. Keep the job red so the schedule is visible in Actions history.
Rate-limit-friendly batches
Sleep between tickers when watching >20 issuers. Read response headers:
curl -sSI -H "Authorization: Bearer $APICVM_KEY" \
"$APICVM_URL/v1/documents?ticker=VALE3&type=ITR&year=2025&perPage=1" \
| tr -d '\r' | grep -i x-ratelimit
Pair with compliance workflows
For policy-style monitoring language, see Monitor Brazil regulatory filings for compliance. Actions is the scheduler; apicvm is the data plane.
Current limitations
- Not real-time — schedule granularity is your cron.
- Empty responses can mean ingestion lag; do not alert as “missing filing” without a second check.
- Respect rate limits when watching many issuers (
X-RateLimit-*).
Next steps
Ready to integrate?
Get an API key and start querying Brazilian CVM filings programmatically.