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,000Installation
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 argumentsconst 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:
- 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.
- In Claude, open Settings → Connectors. Add Insider Trades from the directory, or add a custom connector with the URL
https://api.insidertrades.us/mcp. - 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:
{"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):
{"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.
| Parameter | Type | Description |
|---|---|---|
| filingId | string | Direct lookup by filing ID |
| issuerTicker | string | Filter by ticker symbol, e.g. "AAPL" |
| issuerCik | string | Filter by issuer CIK |
| reportingOwnerCik | string | Filter by insider CIK |
| accessionNumber | string | Filter by SEC accession number |
| formTypes | string | string[] | Form types: "3", "4", "5" (default: all) |
| transactionTypes | TransactionType[] | See transaction types below |
| ownerRoles | OwnerRole[] | "director", "officer", "tenPercentOwner" |
| officerTitles | string[] | Normalized titles: "CEO", "CFO", etc. |
| filingDateInEstStartDate | string | Filing date start (YYYY-MM-DD, ET) |
| filingDateInEstEndDate | string | Filing date end (YYYY-MM-DD, ET) |
| periodOfReportStartDate | string | Period of report start (YYYY-MM-DD) |
| periodOfReportEndDate | string | Period of report end (YYYY-MM-DD) |
| minTotalAmount | number | Minimum total dollar value |
| maxTotalAmount | number | Maximum total dollar value |
| fieldset | "minimal" | "standard" | "full" | Control response size |
| limit | number | Max results, default 100, max 900 |
Transaction Types
Values accepted by the transactionTypes parameter, with their underlying SEC transaction codes.
| Value | SEC Code | Description |
|---|---|---|
| purchase | P | Open market purchase |
| sale | S | Open market sale |
| grant | A | Grant or award |
| gift | G | Bona fide gift |
| exercise | M | Option exercise (Rule 16b-3) |
| derivativeExercise | O, X | Derivative exercise |
| disposition | D | Disposition to issuer |
| discretionary | I | Discretionary transaction |
| derivativeConversion | C | Conversion of derivative |
| derivativeExpiration | E, H | Expiration of derivative |
| smallAcquisition | L | Small acquisition (Rule 16a-6) |
| inheritance | W | Inheritance |
| equitySwap | K | Equity swap |
| tender | U | Tender offer / change of control |
| other | J | Other 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:
{"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);}
| Status | Meaning |
|---|---|
| 400 | Invalid parameters (bad date, invalid CIK, inverted range) |
| 403 | Invalid or missing API key |
| 429 | Rate limit exceeded — retried automatically |
| 504 | Request 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
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.