Tracefour API
Read-only access to the same public-disclosure data the site renders: SEC Form 4 insider filings, 13F and Congress tracker portfolios, buy clusters, streaks, and European PDMR filings. No key needed to read: 60 requests/hour per IP. A free key raises that to 600 requests/hour. Filing data never moves behind a price; Tracefour Pro is alerts tooling and leaves the API as it is.
Quick start
No sign-up, no key. Every endpoint below answers this today, rate-limited to 60 requests/hour per IP address.
curl "https://tracefour.com/v1/filings?direction=P&min_value=1000000&limit=50"Machine-readable spec: /v1/openapi.json · Discovery endpoint (every tracker and Congress slug): /v1/catalog · Site overview for agents: /llms.txt
Guides
Four pages, each documenting its endpoints in full: every parameter with its type and default, curl, Python and JavaScript examples, and a real captured response.
Authentication (optional)
A key is an upgrade for volume, not a requirement. Past 60 requests/hour, sign in (free) and create one under Settings → API access, then pass it as a bearer token:
curl -H "Authorization: Bearer tf_YOUR_KEY" \
"https://tracefour.com/v1/filings?limit=50"Keys are shown once at creation and can be revoked at any time. A key is scoped to itself, not the account, so two keys on one account budget independently.
Rate limits
| Anonymous (no key) | 60 requests/hour | Keyed per IP address. |
| Free API key | 600 requests/hour | Keyed per key, not per account, so two keys on one account budget independently. |
Endpoints (API v1, keyless reads)
GET /v1/catalog | Discovery: every endpoint, every tracker and Congress slug, and how to search insiders. |
GET /v1/filings | U.S. SEC Form 4 open-market filings (P and S). Filters: since, direction (P|S|all), min_value, ticker, limit. Details |
GET /v1/insiders?q= | Search insider slugs by name. Slugs are EDGAR name-order and are not guessable. Details |
GET /v1/insiders/{id} | One insider identity plus in-window transactions, by slug. Details |
GET /v1/clusters | Cluster digests: 3+ distinct insiders, same ticker, same direction, 60-day window. Details |
GET /v1/streaks | Streak digests: consecutive-week filing runs with track records. Details |
GET /v1/congress | Every Congress member with a slug, one row per person. Details |
GET /v1/congress/{member} | STOCK Act trades for one member, e.g. nancy-pelosi. Details |
GET /v1/trackers | Every tracker portfolio slug (13F fund, Congress member, or OGE filer). Details |
GET /v1/trackers/{slug} | One tracker portfolio, holdings and recent activity, e.g. pelosi, berkshire. Details |
GET /v1/eu/{country} | Recent European PDMR filings: de, uk, se, or nl. Omits meta.sourceLicense (unverified upstream terms). Details |
POST /v1/mcp | MCP server, streamable HTTP. Nine tools mirroring the endpoints above, also keyless. Details |
Every response uses the envelope { data, error, meta }. All endpoints are read-only and refreshed hourly. An MCP server exposing the same data to tool-calling agents is available at POST /v1/mcp (9 tools, also keyless).
Errors
400 | A query or path parameter failed validation. |
401 | A presented API key is malformed, unknown, or revoked. An absent key is anonymous, not rejected, it gets a 200. |
404 | Unknown slug (tracker, Congress member, or insider). |
429 | Rate limit reached. Retry-After and X-RateLimit-* headers are set on every response, keyed and anonymous alike. |
Static JSON exports (/data)
Whole-entity JSON files, prerendered hourly, CORS-open, no key needed. Each file carries source, license (the Tracefour compilation, CC BY 4.0), source_license (the upstream filings, public-domain government works), as_of and terms provenance. This layer covers trackers and Congress members only; there is no per-ticker or per-insider file here (that family was removed after it overloaded the hourly build). For an individual ticker or insider, call GET /v1/filings or GET /v1/insiders/{id} instead, both keyless.
GET /data/trackers/{slug}.json | Full tracker portfolio export, e.g. /data/trackers/pelosi.json. |
GET /data/congress/{member}.json | All STOCK Act trades for one member. |
License and attribution
The underlying filings are public-domain U.S. government works. Tracefour's compilation (normalization, split-adjustment, deduplication, scoring) is licensed CC BY 4.0. Every response carries this in meta.license; SEC-sourced endpoints also carry the upstream license in meta.sourceLicense. The four /v1/eu/* endpoints omit meta.sourceLicense because those regulators' publication terms have not been verified.
Data via Tracefour (https://tracefour.com/filings), CC BY 4.0.
Underlying filings are public-domain U.S. government works.Pro is alerts tooling, not an API tier
Tracefour Pro adds delivery channels, more follows, filters, and screens for the alerts product. It does not raise API rate limits, unlock endpoints, or move any of the data above behind a price. See /pro for what it covers.
Frequently asked questions
Is the Tracefour API free?
Yes. Every read endpoint is keyless: 60 requests/hour per IP with no sign-up. A free account and API key raise that to 600 requests/hour. The underlying data pages carry no paywall of any kind. Tracefour Pro adds alerts tooling (delivery channels, more follows, filters, screens) and does not change API access.
Where does the data come from?
Public regulatory filings only: SEC EDGAR (Form 4, 13F-HR), U.S. House STOCK Act PTR disclosures, OGE Form 278-T reports, and the PDMR registers of BaFin, the FCA, Finansinspektionen, and the AFM. Every record links back to its source filing. Refreshed hourly.
Do I need an API key?
No. Every endpoint answers unauthenticated requests up to 60 requests/hour per IP. A free account and API key raise the limit to 600 requests/hour and are worth creating only past that volume: sign in to Tracefour and create a key under Settings, then pass it as "Authorization: Bearer tf_…". Keys are shown once at creation and can be revoked at any time.
Can I show the data in my own app or site?
Yes. The one condition is attribution: link to the Tracefour page named in meta.attribution.page of every response, or the url carried by each filing, tracker, and record. That link keeps every number traceable to its source filing.
Is there a way to fetch data without a key?
Every /v1 read already works without a key, at 60 requests/hour per IP. Separately, the /data static JSON layer covers whole-entity exports for trackers and Congress members, keyless, CORS-open, and rebuilt hourly. It does not cover individual tickers or insiders: for those, call GET /v1/filings or GET /v1/insiders/{id}, both also keyless.