Insider Trading API
Track SEC Form 4 insider trading filings — buys, sells, awards, and exercises by company officers, directors, and 10%+ shareholders. Includes cluster buy detection where multiple insiders buy the same stock.
Overview
The Insider Trading API provides access to SEC Form 4 filing data — the mandatory disclosures that company insiders (officers, directors, and 10%+ shareholders) must file within 2 business days of any stock transaction. This is the same data that services like OpenInsider, Finviz Elite, and GuruFocus charge $70-200/month for.
Use cases:
- Track insider buying and selling across your portfolio or the entire market
- Detect cluster buy signals — when 3+ insiders buy the same stock within a short window (a historically bullish signal)
- Filter by transaction type (open market purchases vs. awards/exercises) for cleaner signals
- Identify 10b5-1 pre-planned trades (less informative) vs. discretionary trades (more informative)
- Build quantitative strategies based on insider flow data
- Cross-reference insider activity with institutional flows (13F) and news sentiment
Transaction types: BUY (open market purchase), SELL (open market sale), EXERCISE (option/derivative exercise), AWARD (grant from company), GIFT, OTHER.
Insider relationships: Each filer is classified as OFFICER, DIRECTOR, TEN_PCT_OWNER, or OTHER. A person can hold multiple roles simultaneously (e.g., both officer and director) — the officer, director, and tenPctOwner boolean fields capture this.
Access: All endpoints require a PRO subscription for full data. Free/unauthenticated users see a limited preview (top 5 results for activity/trades, top 3 for cluster buys) with isPreview: true in the response.
GET /activity
Returns market-wide insider activity aggregated by ticker, split into top insider buys and top insider sells by total dollar value. Each entry shows how many insiders traded, total shares, total value, and the most recent insider name.
Authentication: PRO required. Free users receive a preview of the top 5 results per direction.
Parameters:
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
lookbackDays |
integer | No | 90 | Number of days to look back. Must be between 1 and 365 (inclusive) — returns 400 otherwise |
Example Request:
curl -H "X-SentiSense-API-Key: ss_live_YOUR_KEY" \
"https://app.sentisense.ai/api/v1/insider/activity?lookbackDays=90"
from sentisense import SentiSenseClient
client = SentiSenseClient(api_key="ss_live_YOUR_KEY")
activity = client.get_insider_activity(lookback_days=90)
for buy in activity["buys"]:
print(f"{buy['ticker']}: {buy['insiderCount']} insiders bought ${buy['totalValue']:,.0f}")
Response Schema:
| Field | Type | Description |
|---|---|---|
buys |
array | Stocks with notable insider buying (see summary object below) |
sells |
array | Stocks with notable insider selling (see summary object below) |
Activity summary object:
| Field | Type | Description |
|---|---|---|
ticker |
string | Stock ticker symbol |
companyName |
string | Company name |
tradeCount |
int | Number of individual transactions |
insiderCount |
int | Number of distinct insiders who traded |
totalShares |
long | Total shares traded |
totalValue |
long | Total dollar value of trades |
latestDate |
string | Date of most recent transaction |
latestInsider |
string | Name of most recent insider |
latestTitle |
string | Title/role of most recent insider |
Example Response (PRO):
{
"buys": [
{
"ticker": "JPM",
"companyName": "JPMorgan Chase & Co",
"tradeCount": 8,
"insiderCount": 5,
"totalShares": 125000,
"totalValue": 28750000,
"latestDate": "2026-03-15",
"latestInsider": "Jamie Dimon",
"latestTitle": "Chairman & CEO"
}
],
"sells": [
{
"ticker": "TSLA",
"companyName": "Tesla, Inc.",
"tradeCount": 3,
"insiderCount": 2,
"totalShares": 50000,
"totalValue": 12500000,
"latestDate": "2026-03-14",
"latestInsider": "Vaibhav Taneja",
"latestTitle": "CFO"
}
]
}
Preview Response (Free/Unauthenticated):
{
"isPreview": true,
"previewReason": "PRO_REQUIRED",
"data": {
"buys": [ "... top 5 results ..." ],
"sells": [ "... top 5 results ..." ]
}
}
GET /trades/{ticker}
Returns individual insider transactions for a specific stock, sorted newest-first. Each transaction includes the insider's name, title, transaction type, shares, price, value, security description, and whether it was a pre-planned 10b5-1 trade.
Authentication: PRO required. Free users receive a preview of the top 5 transactions.
Parameters:
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
ticker |
path | Yes | - | Stock ticker symbol (e.g., AAPL) |
lookbackDays |
integer | No | 90 | Number of days to look back. Must be between 1 and 365 (inclusive) — returns 400 otherwise |
Example Request:
curl -H "X-SentiSense-API-Key: ss_live_YOUR_KEY" \
"https://app.sentisense.ai/api/v1/insider/trades/AAPL?lookbackDays=90"
client = SentiSenseClient(api_key="ss_live_YOUR_KEY")
trades = client.get_insider_trades("AAPL", lookback_days=90)
for t in trades:
print(f"{t['transactionDate']} {t['insiderName']} {t['transactionType']} {t['sharesTransacted']} @ ${t['pricePerShare']}")
Response Schema (array of trade objects):
| Field | Type | Description |
|---|---|---|
ticker |
string | Stock ticker symbol |
companyName |
string | Company name |
insiderName |
string | Name of the insider (e.g., "Tim Cook") |
insiderTitle |
string | Role/title (e.g., "Chief Executive Officer") |
insiderRelation |
string | OFFICER, DIRECTOR, TEN_PCT_OWNER, or OTHER |
officer |
boolean | Is the filer an officer? |
director |
boolean | Is the filer a director? |
tenPctOwner |
boolean | Is the filer a 10%+ shareholder? |
transactionDate |
string | Date of the transaction (ISO format) |
filedDate |
string | Date filed with SEC |
transactionCode |
string | SEC transaction code: P (purchase), S (sale), A (award), M (exercise), G (gift), F (sell-to-cover), etc. |
transactionType |
string | Simplified: BUY, SELL, EXERCISE, AWARD, GIFT, OTHER |
securityTitle |
string | Security description (e.g., "Common Stock", "Class C Google Stock Units") |
sharesTransacted |
long | Number of shares traded |
pricePerShare |
double | Price per share (null for awards at $0) |
totalValue |
long | Total dollar value of the transaction |
sharesOwnedAfter |
long | Shares owned after this transaction |
directOwnership |
boolean | Direct (true) vs indirect (false) ownership |
rule10b51 |
boolean | Whether this trade was under a confirmed Rule 10b5-1 pre-planned trading plan (false when parsing was ambiguous) |
Example Response:
[
{
"ticker": "AAPL",
"companyName": "Apple Inc",
"insiderName": "Tim Cook",
"insiderTitle": "Chief Executive Officer",
"insiderRelation": "OFFICER",
"officer": true,
"director": true,
"tenPctOwner": false,
"transactionDate": "2026-03-10",
"filedDate": "2026-03-12",
"transactionCode": "S",
"transactionType": "SELL",
"securityTitle": "Common Stock",
"sharesTransacted": 50000,
"pricePerShare": 235.50,
"totalValue": 11775000,
"sharesOwnedAfter": 3200000,
"directOwnership": true,
"rule10b51": true
}
]
GET /cluster-buys
Returns cluster buy signals — stocks where 3 or more distinct insiders purchased shares within the lookback period. Academic research shows insider buying clusters are one of the strongest predictive signals for future stock returns.
Authentication: PRO required. Free users receive a preview of the top 3 signals.
Parameters:
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
lookbackDays |
integer | No | 90 | Number of days to look back. Must be between 1 and 365 (inclusive) — returns 400 otherwise |
Example Request:
curl -H "X-SentiSense-API-Key: ss_live_YOUR_KEY" \
"https://app.sentisense.ai/api/v1/insider/cluster-buys?lookbackDays=90"
client = SentiSenseClient(api_key="ss_live_YOUR_KEY")
clusters = client.get_insider_cluster_buys(lookback_days=90)
for c in clusters:
print(f"{c['ticker']}: {c['insiderCount']} insiders bought ${c['totalValue']:,.0f} worth")
Response Schema (array of cluster buy objects):
| Field | Type | Description |
|---|---|---|
ticker |
string | Stock ticker symbol |
companyName |
string | Company name |
insiderCount |
int | Number of distinct insiders who bought (always >= 3) |
tradeCount |
int | Total number of buy transactions |
totalShares |
long | Total shares purchased across all insiders |
totalValue |
long | Total dollar value of all purchases |
firstBuyDate |
string | Earliest buy date in the cluster |
lastBuyDate |
string | Most recent buy date in the cluster |
Example Response:
[
{
"ticker": "BAC",
"companyName": "Bank of America Corp",
"insiderCount": 5,
"tradeCount": 8,
"totalShares": 250000,
"totalValue": 10500000,
"firstBuyDate": "2026-02-01",
"lastBuyDate": "2026-03-12"
},
{
"ticker": "WFC",
"companyName": "Wells Fargo & Co",
"insiderCount": 4,
"tradeCount": 6,
"totalShares": 180000,
"totalValue": 12600000,
"firstBuyDate": "2026-01-15",
"lastBuyDate": "2026-03-08"
}
]
Try It
Test endpoints directly from your browser. Paste your API key once — it's saved locally and shared across all widgets. Get a free key
GET/api/v1/insider/activity
Market-wide insider buys and sells aggregated by ticker
curl -H "X-SentiSense-API-Key: ssk_YOUR_KEY" \
"https://app.sentisense.ai/api/v1/insider/activity"GET/api/v1/insider/trades/{ticker}
Insider transactions for a specific stock
curl -H "X-SentiSense-API-Key: ssk_YOUR_KEY" \
"https://app.sentisense.ai/api/v1/insider/trades/AAPL"GET/api/v1/insider/cluster-buys
Cluster buy signals (3+ insiders buying same stock)
curl -H "X-SentiSense-API-Key: ssk_YOUR_KEY" \
"https://app.sentisense.ai/api/v1/insider/cluster-buys"