Insider trading API: SEC Form 4 filings as normalized JSON
Facts last verified 2026-08-19; sample response fetched from production 2026-08-30.
When a corporate insider — an officer, director, or 10% owner — trades their company's stock, they must report it to the SEC on Form 4, generally within two business days. EDGAR publishes those filings as XML. FilingPulse polls that feed continuously, normalizes each filing into one frozen JSON schema, and serves it over a REST API with HMAC-signed webhooks — so your code works with complete, predictable objects instead of parsing ownership XML.
To be precise about what this is: FilingPulse is data infrastructure. We report what was filed, as it was filed — no scores, no recommendations, no interpretation of whether a trade means anything.
What a served filing looks like
This is the exact production response of GET /v1/insider-trades/0001653558-26-000110, fetched 2026-08-30 — a real July 2026 filing by a director of Priority Technology Holdings, one non-derivative leg and one derivative leg from an RSU vesting:
{
"form_type": "4",
"period": "2026-07-01",
"amendment_date": null,
"issuer": {
"name": "Priority Technology Holdings, Inc.",
"cik": "0001653558",
"ticker": "PRTH"
},
"reporting_owners": [
{
"name": "Main Clayton James",
"cik": "0002112683",
"is_director": "1",
"is_officer": "0",
"officer_title": null,
"is_ten_pct_owner": "0"
}
],
"transactions": [
{
"security_title": "Common Stock",
"transaction_date": "2026-07-01",
"transaction_code": "M",
"acquired_disposed": "A",
"shares": "4296",
"price_per_share": null,
"shares_owned_after": "17267",
"ownership_type": "D",
"is_derivative": false,
"conversion_or_exercise_price": null,
"exercise_date": null,
"expiration_date": null,
"underlying_security_title": null,
"underlying_security_shares": null,
"footnote_ids": [
"F1"
]
},
{
"security_title": "Restricted Stock Unit",
"transaction_date": "2026-07-01",
"transaction_code": "M",
"acquired_disposed": "D",
"shares": "4296",
"price_per_share": "0",
"shares_owned_after": "8590",
"ownership_type": "D",
"is_derivative": true,
"conversion_or_exercise_price": null,
"exercise_date": null,
"expiration_date": null,
"underlying_security_title": "Common Stock",
"underlying_security_shares": "4296",
"footnote_ids": [
"F1",
"F2"
]
}
],
"holdings": [],
"footnotes": {
"F1": "Each restricted stock unit represents a contingent right to receive one share of the Issuer's common stock.",
"F2": "On February 5, 2026, the Reporting Person was granted 17,182 restricted stock units which vest 25% on April 1, 2026, 25% on July 1, 2026, 25% on October 1, 2026, and 25% on January 1, 2027 subject to the Reporting Person's continued service as a director of the Issuer."
},
"remarks": "",
"holdings_only": false,
"source_url": "https://www.sec.gov/Archives/edgar/data/1653558/000165355826000110/wk-form4_1784832758.xml",
"normalized_by": "filingpulse-prototype-0.2",
"accession": "0001653558-26-000110",
"filed_date": "2026-07-23"
}
The properties that make this shape dependable:
- Numbers stay strings, exactly as filed.
"shares": "4296"is what the insider's filing said, byte for byte — including the occasional filing error, which you can then see rather than have silently coerced. You cast at your edge. - Every documented field is always present.
nullmeans the filing didn't state it; a missing key never means anything. No defensive.get()chains. - Derivative and non-derivative legs live in one
transactionsarray, flagged byis_derivative, with footnotes carried as first-class data: each leg lists itsfootnote_idsand the full text rides infootnotes. Holdings-only filings setholdings_onlyand fillholdings. accessionis the stable filing id — dedupe on it, fetch single filings by it.filed_dateis the date EDGAR accepted the filing, the same valuesince=filters on. Amendments (form_type4/A) carryamendment_date.- The schema is frozen v1, additive-only — served machine-readable at /v1/schema, no key needed. Breaking changes would require a v2 namespace; your parser won't rot.
Querying it
GET https://api.filingpulse.io/v1/insider-trades — filters compose; newest filed first:
- All filings for a ticker:
/v1/insider-trades?ticker=PRTH - By CIK (survives ticker changes):
/v1/insider-trades?cik=1653558 - Amendments only:
/v1/insider-trades?form_type=4/A - A fixed, reproducible window —
sinceanduntilare both inclusive, so the same window returns the same population forever (this is how our published research stays reproducible):/v1/insider-trades?since=2026-07-01&until=2026-07-31 - One filing by accession:
/v1/insider-trades/0001653558-26-000110
Pass your key in the X-API-Key header. limit goes to 200 per page with offset paging; copy-paste versions of every query live on the query patterns page, each one executed by our CI.
Push delivery
Polling tells you what already happened; for new filings you can register a webhook (1 subscription free) and get an HTTP POST when a Form 4 lands. Every delivery is HMAC-signed (X-FilingPulse-Signature, per-subscription secret) with a fixed retry ladder, so you can verify authenticity and survive downtime. Working receiver code is on the recipes page; importable n8n workflows cover the no-code route.
How fresh is Form 4 data — measured, not claimed
We publish reproducible studies on our own dataset rather than asserting freshness adjectives. Two findings that matter when you design on this data:
- How late is Form 4 data? — across all 11,241 July 2026 Form 4s, the median gap between transaction date and EDGAR filing date was 2 calendar days (p95: 7 days, with a long tail). Any consumer of insider data inherits that reporting lag before any provider's latency starts counting — ours included.
- When insider filings get corrected — about 1.6% of Form 4 traffic is amendments (4/A), and corrections arrive a median of 19 days after the original. If you store filings, process
form_type=4/Aor your copy slowly diverges from the record.
Both studies run on a free key and state their windows; both are framed as observed reporting lag, never as compliance claims about any filer.
Free tier and pricing
The free tier is 2,500 requests/month at 10/minute, email only, no card — enough to poll every 20 minutes around the clock, or to run either study above yourself. Paid tiers ($19/$49/$99 per month) raise volume and webhook counts; the data and schema are identical on every tier, and no tier carries a personal-use license restriction. Get a key — it takes under a minute.
How it compares
Who is writing this: we build FilingPulse, so we have an obvious interest. To keep this useful anyway, every factual claim about another provider below was read from that provider's own public pages on the date shown, each section links its source, and we say plainly where a competitor is the better choice. If you find something out of date, email keys@filingpulse.io and we will fix it.
| Provider | Free tier | Insider (Form 4) data |
|---|---|---|
| FilingPulse | 2,500 requests/month, 10/min, email only — no card | Yes — complete normalized Form 4 objects: owners, non-derivative and derivative transactions, holdings, footnotes, remarks |
| sec-api.io | First 100 API calls — one-time, not monthly | Yes — Form 3/4/5 Insider Trading API with transaction detail |
| SEC EDGAR (official APIs) | Free, no key — max 10 requests/second with a declared User-Agent | No — the official JSON APIs cover submissions history and XBRL financial facts; Form 4 content is raw XML you parse yourself |
| Financial Modeling Prep | 250 calls/day, end-of-day data | Yes — insider-trade records as flattened per-transaction rows |
| Finnhub | 60 API calls/minute, personal use | Yes — flattened insider-transaction records (name, shares, price, code), capped at 100 transactions per call |
| edgartools (open source) | Free — MIT-licensed Python library you run yourself | Yes — parses Form 3/4/5 into structured Python objects locally |
| Massive (formerly Polygon.io) | Market-data plans include a free tier; filings endpoints are part of the stocks plans | Yes — a Form 4 endpoint exists in their filings family |
The structural difference: FMP and Finnhub return flattened per-transaction rows (no footnotes, holdings, or derivative detail); sec-api.io returns detailed insider objects with the broadest EDGAR coverage overall; edgartools parses filings into Python objects on your own machine. FilingPulse returns the complete normalized filing over a hosted API with push delivery and a monthly free quota. Full comparison with pricing floors and sources: best SEC EDGAR API in 2026.
Know going in
Honest limits: we cover Form 4 and 4/A only — no Form 3 (initial ownership statements) or Form 5 (annual reports); if you need those today, sec-api.io or edgartools is the answer. Historical backfill grows continuously and the exact live coverage window is published at /v1/health (no key needed) — check it before assuming depth. We launched in July 2026 and would rather say so than pretend otherwise.
Other ways in
- Free screener — browse recent insider transactions in the browser, no key at all.
- Hosted MCP server — Claude, ChatGPT Developer Mode, or Cursor can query the dataset with no install.
- SDKs:
pip install filingpulseandnpm install filingpulse, both zero-dependency, both with webhook signature verification (docs). - OpenBB Platform:
pip install openbb-filingpulseaddsprovider="filingpulse"toobb.equity.ownership.insider_trading.
Sources
Competitor facts were read from these pages on the dates shown. Pricing and limits change; the linked page always wins over this one.
- sec-api.io — verified 2026-08-19
- SEC EDGAR (official APIs) — verified 2026-08-19
- Financial Modeling Prep — verified 2026-08-19
- Finnhub — verified 2026-08-19
- edgartools (open source) — verified 2026-08-19
- Massive (formerly Polygon.io) — verified 2026-08-19
More comparisons: Best SEC EDGAR API in 2026 · sec-api.io alternatives · FilingPulse vs sec-api.io · Free SEC EDGAR API options · 8-K API (corporate events by item code) · S-1 API (IPO registration lifecycle)