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.

Free 1,000 requests a month·Pro $29 a month for 100,000

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

Query the API in plain English from AI tools through our Model Context Protocol server, hosted at https://api.insidertrades.us/mcp. Calls use your API key and count toward your plan like any other request.

Claude on the web, desktop and mobile (sign in)

Connect with your Insider Trades account. There is nothing to install and no key to paste into Claude:

  1. Sign in at insidertrades.us/connect, create a free API key if you don't have one, and click Connect in the AI assistants card. Requests from Claude run on that key.
  2. In Claude, open Settings → Connectors. Add Insider Trades from the directory, or add a custom connector with the URL https://api.insidertrades.us/mcp.
  3. Click Connect and sign in with the same Insider Trades account. Then ask, for example, “What were the largest insider purchases last week?”

To stop Claude using your key, click Disconnect in the AI assistants card, or remove the connector in Claude. Revoking the key also disconnects it.

Claude Code

Install the plugin, which adds the server and a skill that teaches Claude how to read the data:

/plugin marketplace add goodtech-llc/insider-trades-mcp
/plugin install insider-trades@goodtech

The install asks for your API key and keeps it in your system's secure credential store. To change it later, run /plugin, open Insider Trades on the Installed tab and choose Configure.

Cursor and other remote MCP clients

Point the client at the hosted URL and send your key as an x-api-key header:

mcp.json
{
"mcpServers": {
"insider-trades": {
"url": "https://api.insidertrades.us/mcp",
"headers": {
"x-api-key": "YOUR_API_KEY"
}
}
}
}

That is Cursor's format. Other clients take the same URL and header in their own config shape.

Other local MCP clients

Clients that run MCP servers as a local command can use the npm package instead (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?”

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

Pricing

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

Free

Try it, or power a personal project.

$0 / month

  • 1,000 requests a month
  • The last 12 months of filings
  • 1 API key · 2 requests a second
  • Node.js and Python SDKs, MCP server, Claude connector
  • Personal and evaluation use
Get a free API key
For production

Pro

For apps, research and products built on the data.

$29 / month

  • 100,000 requests a month
  • Full filing history, not just the last year
  • 2 API keys · 10 requests a second
  • Commercial use: show the data in your website, app, newsletter or client work
  • Optional overage billing: keep going past 100,000 at $1.00 per 1,000 requests, with a spend cap you set
  • Everything in Free

Requests reset every month on your billing day. Cancel anytime; Pro stays active until the end of the period you paid for. 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