Free SEC Insider Trading API
Form 4 insider transactions from SEC EDGAR, Form 144 notices of planned sales, and Schedule 13D and 13G large-holder cover pages. Open market buys and sells by officers, directors and 10% owners, what they have told their broker they will sell, and who crossed 5%. Polled every 30 minutes.
Endpoints
/api/markets/insidersLatest Form 4 transactions across all companies. Filterable by type and date.
/api/markets/insiders/{ticker}?from=2020-01-01&to=2026-12-31&limit=2000Every Form 4 transaction for one ticker, newest first, filings since 2020: the newest 200 by default, from, to and limit (max 2,000) select the window.
/api/markets/planned-sales?symbol=DELL or ?days=30Form 144 notices of proposed sale: seller, relationship, shares, aggregate market value, shares outstanding, approximate sale date, broker. Without symbol: the largest notices in the window. CSV of the last 90 days: /api/markets/planned-sales/csv.
/api/markets/large-holders?symbol=HIMS or ?form=13D|13G&days=30&new=1Schedule 13D and 13G cover pages, one row per reporting person: shares owned, percent of class, type of holder, event date, amendment number. Without symbol: filings in the window, newest first (sort=percent for the largest stakes); new=1 excludes amendments. CSV of the last 90 days: /api/markets/large-holders/csv.
/api/markets/insiders/clusters?days=30&minInsiders=3&minUsd=100000Cluster buying: companies where several different insiders bought on the open market within the window, one row per company with the distinct buyers, trades, combined value and the first and latest trade dates. Sorted by number of insiders, then value; ticker= narrows to one company. Same rows as CSV: /api/markets/insiders/clusters/csv.
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; /api/markets/insiders/clusters does the grouping (distinct buyers, combined value, dates) so you can poll one endpoint.
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 or API key needed. Attribution is appreciated: xoomar.com/markets.
Need more headroom? A free account raises your limit to 120 requests a minute with an X-API-Key header.
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 | Trading symbol of the issuer |
| company | string | null | Company name from the SEC ticker list |
| insiders | number | Distinct insiders who bought on the open market in the window |
| trades | number | Open-market purchase transactions in the window |
| valueUsd | number | Combined purchases in USD (shares x price per filing) |
| shares | number | Combined shares bought |
| firstTxDate | string (date) | Earliest purchase in the window |
| latestTxDate | string (date) | Latest purchase in the window |
| latestFiledAt | string (ISO 8601) | null | When the latest of those filings reached EDGAR |
| buyers | array | Up to five buyers, largest first |
| buyers[].name | string | Insider name as filed |
| buyers[].title | string | null | Role at the company, when the filing gives one |
| buyers[].valueUsd | number | That insider's combined purchases in the window |
/api/markets/insiders/clusters: days=1..365 (default 30), minInsiders=2..20 (default 3), minUsd (default 0), ticker, limit up to 500 (default 100). Open-market purchases only (transaction code P); awards, option exercises and plan purchases are not buys. Derived by XOOMAR from the Form 4 rows above, so a company appears the same day its filings do.
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 or API key needed. Attribution is appreciated: xoomar.com/markets.
Need more headroom? A free account raises your limit to 120 requests a minute with an X-API-Key header.
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.