Who's buying or selling their own stock — recent insider trades from official SEC filings.
/api/v1/insider-trades/{ticker}Recent insider transactions from official SEC Forms 3, 4 and 5 for any covered US equity — who bought (code P) or sold (code S), their role, shares, price and dollar value, 10b5-1 status, footnotes and direct links to each filing. Form 3/4/5 amendments no longer duplicate the original transaction: the store replaces only rows that map unambiguously to an original filing and the read path conservatively removes exact amendment repeats from older profiles; `storeStats.supersededAmendmentDuplicates` discloses how many were suppressed. Untouched original rows remain available when an amendment is partial. `summary.activity` measures three-month net direction, price coverage, buy/sell value ratio and the largest priced trade before response filters and limits. If even one active trade is unpriced, its direction and buy/sell ratio become `insufficient_priced_data`/`null` rather than drawing a conclusion from only the priced subset. `summary.momentum3Months` compares the latest three-month window with the preceding non-overlapping three months and applies the same complete-value requirement. Administrative codes A/M/F/G and tax-withholding sales are retained only when requested and never treated as voluntary market trades. Source: SEC EDGAR (no X/Twitter).
Use it toSee what a company's own executives and directors are doing with their shares.
Successful responses expose the latest SEC retrieval in `X-Raspberry-Insiders-Retrieved-At` and `Last-Modified`. Authenticated results are private-cacheable and are never marked for a shared public cache. Stored transaction values are rejected unless shares, price and gross value are non-negative and gross value reconciles to shares × price within half a cent; incomplete price inputs must keep gross value null. Transaction-code filters accept individual one-letter SEC codes; malformed codes return HTTP 400 instead of a misleading empty result. `code` may repeat as a list; repeated scalar `limit`, `since` or `include_noise` parameters return HTTP 400. A ticker the SEC company map does not hold returns HTTP 404 with a body that says why — ETFs and funds (SMH, XLK), index or futures symbols (NQ, MNQ) and foreign shares listed only abroad (RMS, ADYEN) never file company reports — plus `suggestions`, the mapped tickers one typo away (APPL → AAPL) or an empty list when none is close. `coverage` states how many Forms 3, 4 and 5 are stored for the mapped registrant and, when there are none, says why in `coverage.note` instead of implying those insiders never traded — foreign private issuers do not file ownership forms (ASML), a recently reorganized registrant can keep its insider history under a predecessor entity this API does not map (XOM), and forms listed under a company's CIK can be filings where it is only a reporting owner of another issuer (SHOP, BAM, ARL). When a reviewed ownership-CIK alias merges a predecessor or successor registrant's stored history, `coverage.aliasCiks` names the CIKs that were merged, so a client can always see when one answer combines two registrants. Each transaction carries the flags that decide how it must be read: `voluntaryMarketTrade` (an actual decision to buy or sell on the market), `administrativeNoise`, `isTaxWithholding` (shares surrendered to pay tax on a vesting, not a sale), `isPlanPurchase` (acquired through an employee plan such as an ESPP or a dividend reinvestment: a purchase, but not a decision), `is10b5One` (a pre-scheduled plan), and `alertEligible` with the `alertReason` that explains an exclusion. `summary.clusterBuy30Days` splits its buyers into `insiderBuyers` (directors and officers — the people who run the company) and `tenPercentBuyers` (large holders and nothing else), because a fund accumulating and four executives buying are different readings of the same count: measured on 2026-09-22 over the 56 issuers with a cluster, 39 were executives only, 11 mixed and 6 were entirely ten-percent holders. `summary.activity` reports how much of the period is actually priced (`valueCoverageRatio`, `pricedTrades3Months`, `unpricedTrades3Months`), the buy/sell value balance and the largest priced trade; `summary.momentum3Months` compares the current three months with the previous three and states each delta. Every field of this response is declared, field by field, in the machine-readable contract at `/api/v1/schema` (JSON Schema 2020-12); the test suite validates each response against it.
Send your ra_live_… key in the x-api-key header. Pick your language:
curl "https://raspberrytrades.com/api/v1/insider-trades/AAPL" \
-H "x-api-key: ra_live_your_key_here"tickercodeinclude_noisesincelimitx-api-key| Parameter | Type | Description |
|---|---|---|
ticker | path | Covered US equity symbol, e.g. AAPL (required) |
code | string | Comma-separated Form 4 transaction codes, e.g. P for open-market purchases (optional) |
include_noise | 0 | 1 | 1 = also return administrative A/M/F/G, tax-withholding and plan purchases (employee/director stock purchase plans, dividend reinvestment; `alertReason` `plan_purchase`) (optional) |
since | date | Minimum transaction or filing date, YYYY-MM-DD (optional) |
limit | number | Maximum transactions to return (optional, max 500) |
x-api-key | header | Your API key (required) |
Example, not a live result. Field shapes are exact; the values, prices and timestamps are illustrative. Call the endpoint for current data.
{
"requestedTicker": "AAPL",
"mappingStatus": "exact",
"issuer": { "cik": "0000320193", "name": "Apple Inc.", "ticker": "AAPL" },
"query": { "includeNoise": false, "limit": 100 },
"count": 31,
"transactions": [
{
"transactionDate": "2026-05-27",
"code": "S",
"shares": 50000,
"pricePerShare": 311.02,
"grossValue": 15551000,
"signal": "sell",
"is10b5One": false,
"isTaxWithholding": false,
"alertEligible": true,
"reportingOwners": [
{ "name": "EXAMPLE DIRECTOR", "roles": ["Director"] }
],
"source": {
"source": "sec_ownership_xml",
"filingDetailUrl": "https://www.sec.gov/Archives/edgar/data/..."
}
}
],
"summary": {
"threeMonths": { "netValue": -15551000, "distinctBuyers": 0 },
"twelveMonths": { "netValue": -15551000, "distinctBuyers": 0 },
"clusterBuy30Days": { "detected": false, "distinctBuyers": 0 }
}
}Create a free account, copy your ra_live_… key and make your first call to https://raspberrytrades.com/api/v1/insider-trades/{ticker}.
Keep your key on your server — never ship it in front-end code.