Skip to content

The insider record, over HTTP.

A read-only JSON API over the same data as the site and the MCP server: transactions with their signals, insiders with their track records, companies with their fundamentals. Part of the Desk plan.

Authentication

Create a key in your account and send it as a bearer token. A key is shown once, only its hash is stored; revoke it the moment it leaks.

Request

curl -H "Authorization: Bearer il_…" \
  "https://insiderlens.com/api/v1/transactions?signal=cluster_buy&limit=5"

Limits

10,000 requests a month per seat on Desk (3 seats), 600 an hour per key. Every response carries X-Quota-Limit and X-Quota-Remaining. A request rejected for bad parameters costs nothing.

Use of the data

For your own analysis and your firm's. Republishing or reselling the data, or feeding a competing product with it, needs an Institutional licence: talk to us.

Endpoints

GET/api/v1/transactions

Current insider transactions, newest filing first. Filters combine; comma lists accept any of their values. Paginate with next_cursor.

issuer
Company id
insider
Insider id
ticker
Company ticker, e.g. AAPL
code
P, S, A, M, G, O (comma list)
signal
cluster_buy, size_anomaly, first_buy_12mo (comma list)
source
sec_edgar, amf, bafin
min_value_usd
Minimum value in USD
filed_from
Filed on or after, YYYY-MM-DD
filed_to
Filed on or before, YYYY-MM-DD
limit
1 to 100, default 50
cursor
next_cursor from the previous page

GET/api/v1/insiders/{id}

One insider by id or page slug: roles, activity and track record (win and hit rates, median returns, proven flag).

GET/api/v1/issuers/{id}

One company by id, page slug or ticker: identifiers, insider activity and the latest fundamentals.

GET/api/v1/clusters

Multi-insider clusters: 3 or more insiders trading the same company in the same direction within 90 days, latest first.

direction
buy (default) or sell
since
Window ending on or after, YYYY-MM-DD (default: 30 days ago)
limit
1 to 100, default 50

GET/api/v1/backtests

The latest signal-backtest registry: every tested cell, the signals that fail included.

signal
Signal key, e.g. cluster_buy, first_buy_12mo
horizon
Horizon in days: 21, 63, 126 or 252

Response

Shape of a transactions page

{
  "data": [
    {
      "id": "…",
      "filed_at": "2026-09-24T00:00:00.000Z",
      "transaction_date": "2026-09-22",
      "code": "P",
      "shares": 25000,
      "price": 41.2,
      "currency": "USD",
      "value_usd": 1030000,
      "insider": { "id": "…", "name": "…", "slug": "…" },
      "issuer": { "id": "…", "name": "…", "slug": "…" },
      "signals": { "cluster_buy": true, "size_anomaly": false, "first_buy_12mo": true, … },
      "conviction_score": 81,
      "returns": { "d21": 0.064, … },
      …
    }
  ],
  "next_cursor": "eyJ…"
}

Errors

Errors come back as JSON, with the HTTP status and the code below and a message for humans:

{ "error": { "code": "…", "message": "…" } }

400
invalid_parameters
A parameter is unknown or malformed. Nothing was counted.
401
unauthorized
Missing, unknown or revoked key.
403
plan_required
The key's account is not on Desk.
404
not_found
No such insider or company.
429
rate_limited
More than 600 requests in the hour for this key.
429
quota_exceeded
The month's quota is used. It resets on the 1st.
503
unavailable
The query could not be completed. Retry shortly.