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.