XOOMAR

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

GET
/api/markets/insiders

Latest Form 4 transactions across all companies. Filterable by type and date.

GET
/api/markets/insiders/{ticker}?from=2020-01-01&to=2026-12-31&limit=2000

Every 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.

GET
/api/markets/planned-sales?symbol=DELL or ?days=30

Form 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.

GET
/api/markets/large-holders?symbol=HIMS or ?form=13D|13G&days=30&new=1

Schedule 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.

GET
/api/markets/insiders/clusters?days=30&minInsiders=3&minUsd=100000

Cluster 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.

1

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.

2

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.

3

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:

FieldTypeDescription
tickerstring | nullTrading symbol of the issuer, when reported in the filing
insiderNamestringReporting officer, director, or 10% owner
insiderTitlestring | nullRole at the company (CEO, CFO, Director...)
txDatestring (date)Transaction date from the filing, YYYY-MM-DD
sharesstring | nullShares bought or sold
pricePerSharestring | nullReported price per share in USD
valueUsdstring | nullshares 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:

FieldTypeDescription
tickerstringTrading symbol of the issuer
companystring | nullCompany name from the SEC ticker list
insidersnumberDistinct insiders who bought on the open market in the window
tradesnumberOpen-market purchase transactions in the window
valueUsdnumberCombined purchases in USD (shares x price per filing)
sharesnumberCombined shares bought
firstTxDatestring (date)Earliest purchase in the window
latestTxDatestring (date)Latest purchase in the window
latestFiledAtstring (ISO 8601) | nullWhen the latest of those filings reached EDGAR
buyersarrayUp to five buyers, largest first
buyers[].namestringInsider name as filed
buyers[].titlestring | nullRole at the company, when the filing gives one
buyers[].valueUsdnumberThat 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?
Form 4 filings from SEC EDGAR, filtered to open market purchases and sales only. Grants and exercises are excluded.
How often does it update?
Every 30 minutes during market hours. EDGAR filings typically appear 1-2 business days after the transaction.
Can I get a single company's history?
Yes. GET /api/markets/insiders/{ticker} returns the transaction history for that symbol from filings since 2020, including non-open-market codes; from, to and limit (max 2,000 rows) select the window.
Are crypto-related companies included?
Yes. Any company filing with the SEC is included: MSTR, COIN, MARA, etc.

Data on this page is provided for informational purposes only and is not financial advice. See our editorial policy.