Free SEC Insider Trading API
Form 4 insider transactions from SEC EDGAR. Open market buys and sells by officers, directors, and 10% owners. Polled every 30 minutes.
Endpoints
/api/markets/insidersLatest Form 4 transactions across all companies. Filterable by type and date.
/api/markets/insiders/{ticker}Insider transactions for a specific ticker symbol.
Examples
curl
curl "https://xoomar.com/api/markets/insiders?type=buys&window=7d"
Python
import requests
r = requests.get("https://xoomar.com/api/markets/insiders", params={"type": "buys", "window": "7d"})
for t in r.json()["data"][:5]:
value = float(t["valueUsd"]) if t["valueUsd"] else 0
print(f"{t['ticker']} | {t['insiderName']} | ${value:,.0f}")Main Features
- ✓Every SEC Form 4 filing parsed within 30 minutes of EDGAR publication, for all US-listed companies.
- ✓Open-market focus: buys (code P) and sells (code S) headlined, because voluntary trades carry the signal; grants and exercises kept but flagged.
- ✓Insider name, title, share count, price, computed USD value, and post-transaction holdings per row.
- ✓Per-ticker history endpoints and curated 13F fund holdings (Berkshire, Scion, Pershing Square and 12 more) from the same pipeline.
- ✓Spot-verified against source: a sampled filing matched SEC's ownership XML field for field.
How It Works
EDGAR is free but hostile to parse; that is the moat.
Index polling
Every 30 minutes the SEC daily index is checked for new Form 4 filings, with a walk-back window because the SEC publishes each day's index late in the US evening.
XML parsing
Each filing's ownership XML is fetched (throttled well under SEC's 10 req/s rule, with the mandated User-Agent) and parsed: transactions, codes, prices, holdings. The parser is fixture-tested against real filings.
Classification
Transactions are flagged open-market or not by code, values computed as shares x price, and rows upserted idempotently by accession number.
Real Example
Request
curl "https://xoomar.com/api/markets/insiders?type=buys&window=7d"
Response (captured live, trimmed)
{
"data": [
{
"ticker": "YEXT",
"insiderName": "Waugh Seth H.",
"insiderTitle": "",
"txDate": "2026-06-11",
"shares": "133000.0000",
"pricePerShare": "3.7460",
"valueUsd": "498218.0000"
},
{
"ticker": "BGDE",
"insiderName": "Danges Kyle B.",
"insiderTitle": "",
"txDate": "2026-06-11",
"shares": "1227.0000",
"pricePerShare": "7.1324",
"valueUsd": "8751.4548"
}
],
"updatedAt": "2026-06-12T15:08:35.580Z",
"source": "xoomar.com",
"docs": "https://xoomar.com/markets/api"
}Form 4 allows up to 2 business days between trade and filing; txDate is the trade date, not the filing date.
What People Build With This
Cluster-buy screens
Multiple insiders buying the same ticker within days is the classic strong signal. Group rows by ticker and count distinct insiders.
Earnings-window studies
Join insider trades against earnings dates to study pre-announcement behavior, all from free data.
13F replication
The funds endpoints expose famous portfolios with quarter-over-quarter changes for replication or monitoring.
Watchlist alerts
Poll per-ticker endpoints for your watchlist and push a notification on any new open-market buy.
Pricing and Fair Use
Free. No API key, no signup, no credit card. We rate limit per IP to keep the service fast for everyone; a 429 response carries a Retry-After header telling you exactly when to retry. Cache responses on your side where you can. If you are building something that needs guaranteed volume, contact us first instead of hammering the endpoint.
Response Shape
Every endpoint returns the same JSON envelope: { data, updatedAt, source, docs }. The data field is an array of records with these fields:
| Field | Type | Description |
|---|---|---|
| ticker | string | null | Trading symbol of the issuer, when reported in the filing |
| insiderName | string | Reporting officer, director, or 10% owner |
| insiderTitle | string | null | Role at the company (CEO, CFO, Director...) |
| txDate | string (date) | Transaction date from the filing, YYYY-MM-DD |
| shares | string | null | Shares bought or sold |
| pricePerShare | string | null | Reported price per share in USD |
| valueUsd | string | null | shares x price, null when the filing omits price |
Query params: type=buys|sells (default buys), window=7d|30d|90d (default 30d). Returns up to 100 open-market transactions, newest first. The per-ticker endpoint returns { ticker, transactions } with the same record fields plus txCode and isOpenMarket.
Numeric values arrive as strings where precision matters (prices, rates); parse with your language's decimal type for accounting-grade math. Rate limiting is fair-use per IP; a 429 response includes a Retry-After header. No authentication, no API key, no signup. Attribution is appreciated: xoomar.com/markets.
Frequently Asked Questions
What insider transactions are tracked?
How often does it update?
Can I get a single company's history?
Are crypto-related companies included?
Data on this page is provided for informational purposes only and is not financial advice. See our editorial policy.