Get the app!
Developer Documentation

Insider Trades API

Query real-time SEC Form 3, 4, and 5 insider transactions through our official Node.js and Python SDKs, or our MCP server for AI tools. Get your API key from the dashboard.

Installation

Install the official SDK. Node.js 20+ for the Node SDK, Python 3.8+ for the Python SDK.

npm install insider-trades-api

Authentication

Create an API key in your dashboard, then pass it to the client. You can also set the INSIDER_TRADES_API_KEY environment variable and omit the option.

import { InsiderTradesAPI } from "insider-trades-api";
// Pass the key explicitly…
const client = new InsiderTradesAPI({ apiKey: "YOUR_API_KEY" });
// …or set INSIDER_TRADES_API_KEY and call with no arguments
const client = new InsiderTradesAPI();

Quick Start

Fetch recent insider purchases for a company:

const { insiderTransactions } = await client.getInsiderTransactions({
issuerTicker: "AAPL",
transactionTypes: "purchase",
limit: 10,
});
for (const tx of insiderTransactions) {
console.log(tx.reportingOwnerInformation?.name, tx.purchaseAmount);
}

MCP Server

Use the API directly from AI tools via our Model Context Protocol server — works with Claude Desktop, ChatGPT, Cursor, Windsurf, VS Code Copilot, and other MCP clients. Add this to your tool's MCP config (no install needed — npx runs it):

claude_desktop_config.json
{
"mcpServers": {
"insider-trades": {
"command": "npx",
"args": ["-y", "insider-trades-mcp"],
"env": {
"INSIDER_TRADES_API_KEY": "YOUR_API_KEY"
}
}
}
}

Your assistant can then answer questions like “Show me recent insider purchases at Apple” or “Which CEOs bought their own stock this month?”

insider-trades-mcp on npm

getInsiderTransactions(params?)

Returns a promise resolving to { insiderTransactions, count, recordedTimeInUtc }. All parameters are optional.

In Python the method is get_insider_transactions(**params) with snake_case argument names (e.g. issuer_ticker), returning a dict with the same fields.

ParameterTypeDescription
filingIdstringDirect lookup by filing ID
issuerTickerstringFilter by ticker symbol, e.g. "AAPL"
issuerCikstringFilter by issuer CIK
reportingOwnerCikstringFilter by insider CIK
accessionNumberstringFilter by SEC accession number
formTypesstring | string[]Form types: "3", "4", "5" (default: all)
transactionTypesTransactionType[]See transaction types below
ownerRolesOwnerRole[]"director", "officer", "tenPercentOwner"
officerTitlesstring[]Normalized titles: "CEO", "CFO", etc.
filingDateInEstStartDatestringFiling date start (YYYY-MM-DD, ET)
filingDateInEstEndDatestringFiling date end (YYYY-MM-DD, ET)
periodOfReportStartDatestringPeriod of report start (YYYY-MM-DD)
periodOfReportEndDatestringPeriod of report end (YYYY-MM-DD)
minTotalAmountnumberMinimum total dollar value
maxTotalAmountnumberMaximum total dollar value
fieldset"minimal" | "standard" | "full"Control response size
limitnumberMax results, default 100, max 900

Transaction Types

Values accepted by the transactionTypes parameter, with their underlying SEC transaction codes.

ValueSEC CodeDescription
purchasePOpen market purchase
saleSOpen market sale
grantAGrant or award
giftGBona fide gift
exerciseMOption exercise (Rule 16b-3)
derivativeExerciseO, XDerivative exercise
dispositionDDisposition to issuer
discretionaryIDiscretionary transaction
derivativeConversionCConversion of derivative
derivativeExpirationE, HExpiration of derivative
smallAcquisitionLSmall acquisition (Rule 16a-6)
inheritanceWInheritance
equitySwapKEquity swap
tenderUTender offer / change of control
otherJOther acquisition / disposition

Fieldsets

Use the fieldset parameter to control response size. Smaller fieldsets are recommended for bulk queries.

  • minimal — ID, issuer, owner, key amounts, and dates.
  • standard — adds all aggregates, boolean flags, links, and the AI summary.
  • full — adds raw transaction and holding arrays.

Response

Each transaction is fully typed via the exported InsiderTransaction interface. A representative record:

response.json
{
"insiderTransactions": [
{
"formType": "4",
"accessionNumber": "0001140361-26-023363",
"issuerInformation": {
"tradingSymbol": "AAPL",
"companyName": "Apple Inc."
},
"reportingOwnerInformation": {
"name": "LEVINSON ARTHUR D",
"isDirector": true
},
"ownerRoles": "director",
"filingDateInEst": "2026-05-29",
"totalAmount": 15551000.0,
"saleAmount": 15551000.0,
"netSharesAcquired": -50000.0,
"hasSales": "true",
"summary": "Arthur D. Levinson sold 50,000 shares of Apple Inc..."
}
],
"count": 1,
"recordedTimeInUtc": "2026-05-29T22:30:00Z"
}

Note: boolean type flags such as hasSales are returned as the string "true" — use truthiness checks rather than strict equality.

Error Handling

Non-success responses throw an Error with the status code and a human-readable message. The SDK validates dates and CIKs before any network call and automatically retries on 429 and 504.

try {
const { insiderTransactions } = await client.getInsiderTransactions({
issuerTicker: "AAPL",
});
} catch (err) {
console.error((err as Error).message);
}
StatusMeaning
400Invalid parameters (bad date, invalid CIK, inverted range)
403Invalid or missing API key
429Rate limit exceeded — retried automatically
504Request timed out — retried automatically

Plans & Limits

API access is billed separately from the Insider Trades Pro consumer plan (email alerts, Trade Ideas, watchlist) — this pricing is only for programmatic access.

PlanPriceMonthly requestsAPI keysOverage
Free$0 / mo1,0001
Pro$79 / mo500,0002Optional, $1.00 / 1,000 extra requests

Requests reset on your monthly billing cycle. Pro can enable overage billing to keep serving requests past the 500,000 quota instead of being rate-limited, with a configurable monthly spend cap. Manage your plan, keys, and usage from the API dashboard.

Ready to start building?

Create an API key and make your first request in minutes.

Get your API key