Skip to content
/insider-module/api/insiders/transactions/top

Get largest transactions by value.

Get largest transactions by value. Each row includes total_beneficial_ownership and sector/industry classification.

10 tokensSince v1.5.0

Why use this

The 'whale activity' leaderboard — returns the largest insider buys or sells by absolute USD value over the recent rolling window, sorted descending by `transaction_value`. Drives high-conviction signal panels for retail dashboards and quant pre-screens looking for outsized cluster anchors. The cardinal-direction filter (`direction=BUY` vs `direction=SELL`) is the most-used lever; sector/industry let you drill into 'biggest tech sells this week' or 'biggest healthcare buys'. Always set `dedup_owners=true` for trading-flow analysis to avoid joint-filer inflation (an LGN $514M × 9-owner sale will show up 9× without it). Pair with `GET /insider-module/api/insiders/clusters` when you want coordinated multi-insider activity rather than individual whales.

Common use case

Spotting 'whale' activity to see where high-conviction money is moving.

Largest insider transactions by absolute value over the recent window — drives "whale activity" feeds and high-conviction signal panels. Pass dedup_owners=true to collapse joint-filer rows into one canonical row (e.g. an LGN $514M × 9-owner sale shows up at $514M, not the inflated 9× sum). Note: derivative-exercise rows with transaction_value=0 are still included and are NOT collapsed by the dedup flag — that is a separate quality issue tracked under the v3.17.0 known-limitations callout. Pair with GET /insider-module/api/insiders/clusters when you want coordinated activity instead of individual whales.

Parameters

NameInRequiredDefaultAllowedDescriptionExample
directionqueryoptionalBUYDirection of trades to rank — accepts `BUY` (returns largest purchase + exercise transactions sorted by `transaction_value DESC`) or `SELL` (returns largest sale transactions). Case-insensitive. Aliases `up`/`down` are accepted for backward compatibility but `BUY`/`SELL` are canonical.BUY
limitqueryoptional50Number of top rows to return (capped at 200 server-side). Most callers want 10-50; values >100 typically only useful for backfill or CSV-export workflows. The largest individual filings can be 100-500× the median, so even small limits surface the most material flows.20
sectorqueryoptionalSector classification, case-sensitive (e.g. `Technology`, `Healthcare`, `Energy`). Restricts the leaderboard to one sector — useful for sector-rotation thesis confirmation ('which Energy names are insiders dumping?'). Rows whose ticker has no sector mapping are excluded when this filter is set.Technology
industryqueryoptionalIndustry classification, case-sensitive (more specific than `sector` — e.g. `Software—Application`, `Biotechnology`, `Semiconductors`). Em-dash characters require URL-encoding when round-tripping. Use the `/financials/tickers` endpoint to enumerate exact valid values.Consumer Electronics
dedup_ownersqueryoptionalfalseOpt-in server-side joint-filer dedup (introduced v3.17.0). When `true`, joint filings collapse to one canonical row (an LGN $514M × 9-owner sale appears once at $514M, not 9× inflated to $4.6B) and gain `co_owners` + `co_owner_count` fields. CRITICAL for any trading-flow analysis — without this flag the leaderboard's top entries are dominated by joint-filer artifacts. Note: derivative-exercise rows with `transaction_value=0` are still included and are NOT collapsed by this flag (separate v3.17.0 known-limitation).true
collapse_joint_filersqueryoptionalfalseWithin-filing variant of `dedup_owners` (mirrors `/transactions/latest`). Collapses joint-filer rows of the SAME economic transaction reported on ONE Form 4 into a single canonical row (deterministic min `transaction_id` survivor) with an additive integer `co_owner_count` (no `co_owners` array). On this leaderboard it stops one joint trade (e.g. LGN $514M × 9 owners) from occupying 9 slots. If both `dedup_owners` and this are set, `dedup_owners` wins. Default false → byte-identical per-owner shape.true
include_totalqueryoptionaltrueWhen `true` (default) `meta.pagination.total` is the exact total row count. Set `false` to skip that `COUNT(*)` — `total` is returned as `null` while `meta.pagination.has_more` stays exact (derived from a limit+1 probe). Use on wide market-wide / sector / industry windows where the exact count would otherwise dominate latency.false

Response schema

FieldTypeNullableDescription
statusstringnoAlways `success` on a 2xx response.
dataarrayyesTop-N largest transactions, sorted by `transaction_value DESC` (largest dollar value first), tie-broken by `transaction_date DESC` then `transaction_id DESC`. Empty array if no transactions match the filters — never null. Excludes any rows where `transaction_value` is null (grants/gifts), since they have no dollar value to rank by.
data[].transaction_idstringyesStable internal primary key from `insiders_transactions`. When `dedup_owners=true`, this is the canonical winner of the joint-filer dedup partition. Use as a deterministic deduplication key on the client side across re-runs.
data[].tickerstringyesIssuer ticker (the company whose insider is selling/buying), normalized to canonical hyphen form (e.g. `BRK-A`). Multi-class issuers preserve the class actually traded — NOT collapsed to the primary share class.
data[].insider_namestringyesReporting-person legal name as filed on Form 4 Item 1. May be an individual or an entity (LP, fund vehicle, trust, family office). Casing preserved verbatim from the filing — do NOT use as a join key; `insider_cik` is the stable identifier. Whale-list entries are commonly entities (e.g. `GENERATION INVESTMENT MANAGEMENT LP`).
data[].sharesnumbernoShare count for the transaction exactly as filed on the Form 4 — NOT split-adjusted server-side (preserves the as-filed view); no split-adjusted insider surface exists. Always positive; direction (acquired vs disposed) is encoded in `acquired_disposed_code`. Form 4 Table II rows are always included on this endpoint and carry the derivative transaction amount, so the value can be an option/RSU contract count rather than a common-share count.
data[].price_per_sharenumberyesPer-share transaction price in USD. Null only for code-A grants and code-G gifts (which are excluded from this endpoint anyway since `transaction_value` would be null). NOT split-adjusted — the as-filed price, on the same as-filed basis as the `shares` field. On Form 4 Table II rows this is the price of the derivative security itself (Table II column 8), never the strike — exercises and conversions leave column 8 blank per the SEC's instructions, so code-M rows can serve 0 here (0 is not null, so such rows are not excluded); the strike lives in the row's `conversion_or_exercise_price`.
data[].transaction_valuenumberyesComputed `shares × price_per_share` in USD — the sort key for this leaderboard. Always non-null on this endpoint (rows with null value are filtered out before sorting). Never adjusted for joint-filer inflation unless `dedup_owners=true` is set — read the `co_owner_count` field carefully when comparing against external sources.
data[].transaction_datestringyesISO `YYYY-MM-DD` date the trade was executed (NOT the filing date — Form 4 has a 2-business-day disclosure window, so very recent leaderboard entries may have `transaction_date` 1-2 days before today).
data[].sectorstringyesSector classification (e.g. `Technology`, `Healthcare`, `Industrials`). Null when the issuer ticker is unmapped (private CUSIPs, recently-listed issuers, foreign issuers without ADRs).
data[].industrystringyesIndustry classification (more specific than `sector`). Null when unmapped. Em-dash characters preserved verbatim.
data[].co_ownersarrayyesJoint-filer co-owners collapsed into this canonical row. Present ONLY when `dedup_owners=true`. JSON array of `{name, cik, is_officer, is_director, is_ten_percent_owner}` objects. Length 1 = single owner; length ≥2 = joint filing. Critical for trading-flow analysis — without inspecting `co_owners` you cannot tell whether a $500M sale represents one decision-maker or nine.
data[].co_owner_countintegeryesNumber of reporting owners collapsed into this canonical row. Present when `dedup_owners=true` (= length of `co_owners`) OR when `collapse_joint_filers=true` (within-filing count; no `co_owners` array). `1` = single owner; ≥2 = joint filing.
metaobjectyesResult metadata block.
meta.paginationobjectnoPagination sub-block.
meta.pagination.totalintegeryesTotal matching rows when include_total=true; null when the count is skipped.
meta.pagination.limitintegernoEffective page size after server-side capping.
meta.pagination.offsetintegernoEcho of the requested offset.
meta.pagination.has_morebooleannoTrue when the bounded page fetch finds another matching row after this page.
request_idstringyesPer-request UUID for log correlation.
timestampstringnoISO-8601 UTC response generation timestamp; the runtime can omit the timezone offset.

Sample response

·
  • "status": "success"
  • "data":
    ]
  • "meta":
    • "pagination":
    }
  • "error": null
  • "request_id": null
  • "timestamp": "2026-05-02T15:32:18.094000"
}

Errors

StatusLabelDescription
200OKRequest succeeded.
400Bad RequestInvalid query, body, or path parameter.
401UnauthorizedMissing or invalid Authorization header / api_Token.
402Payment RequiredInsufficient token balance for this call. Top up
429Too Many RequestsRate limit exceeded for your tier (see /pricing for tier limits). Tier limits
500Server ErrorUnexpected server-side failure. Retry with backoff; report if persistent.

Code samples

curl "https://api.finradar.ai/insider-module/api/insiders/transactions/top?api_Token=YOUR_API_KEY&direction=BUY&limit=20&sector=Technology&industry=Consumer+Electronics&dedup_owners=true&collapse_joint_filers=true&include_total=false" \
  -H "Authorization: Bearer YOUR_JWT_TOKEN"

Generate an API key in /account/credentials to run live queries (literal YOUR_API_KEY placeholder shown until then).

Try it

Related endpoints