---
title: "Insider Trading API"
description: "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."
order: 2
tier: "PRO (free preview available)"
baseUrl: "/api/v1/insider"
endpointCount: 3
endpoints:
  - id: get-activity
    method: GET
    path: /activity
    auth: pro
    summary: "Market-wide insider buys and sells aggregated by ticker"
    tryIt: false
  - id: get-trades
    method: GET
    path: /trades/{ticker}
    auth: pro
    summary: "Insider transactions for a specific stock"
    tryIt: false
  - id: get-cluster-buys
    method: GET
    path: /cluster-buys
    auth: pro
    summary: "Cluster buy signals (3+ insiders buying same stock)"
    tryIt: false
---

## 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 (1-365) |

**Example Request:**

```bash
curl -H "X-SentiSense-API-Key: ss_live_YOUR_KEY" \
  "https://app.sentisense.ai/api/v1/insider/activity?lookbackDays=90"
```

```python
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):**

```json
{
  "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):**

```json
{
  "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 (1-365) |

**Example Request:**

```bash
curl -H "X-SentiSense-API-Key: ss_live_YOUR_KEY" \
  "https://app.sentisense.ai/api/v1/insider/trades/AAPL?lookbackDays=90"
```

```python
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 Rule 10b5-1 pre-planned trading plan |

**Example Response:**

```json
[
  {
    "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 (1-365) |

**Example Request:**

```bash
curl -H "X-SentiSense-API-Key: ss_live_YOUR_KEY" \
  "https://app.sentisense.ai/api/v1/insider/cluster-buys?lookbackDays=90"
```

```python
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:**

```json
[
  {
    "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"
  }
]
```
