XOOMAR

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

GET
/api/markets/insiders

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

GET
/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.

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

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, no API key, no signup. Attribution is appreciated: xoomar.com/markets.

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 full tracked transaction history for that symbol, including non-open-market codes.
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.