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

Get latest live insider transactions.

Get latest live insider transactions. Each row includes total_beneficial_ownership aggregated across all ownership vehicles and sector/industry classification from Sharadar.

5 tokensSince v1.0.0

Why use this

Real-time feed of all insider trades as they are filed.

Common use case

Building a news terminal or algorithmic trading signal based on immediate insider activity.

Real-time wire of every Form 4 insider transaction as it lands in EDGAR — primary feed for news terminals, in-house alert systems, and algorithmic strategies that key off freshly-filed insider activity. Default lookback is filed_at_days=7; narrow with transaction_days for a tighter trade-date window.

Common screening recipes:

  • High-conviction live alerts — set is_c_suite=true + min_value=1000000 + exclude_10b5_1=true + exclude_cashless=true (via the superset /transactions/search) to surface only discretionary senior-officer trades above $1M.
  • Sector-rotation thesis — set sector=Technology to track trades clustering in one sector.
  • Aggregate-flow charts — set dedup_owners=true to avoid the +112-223% inflation joint Form 4 filings (PE LP+GP+manager / 13D groups / SPAC sponsors) introduce.

For ticker-scoped history use GET /insider-module/api/insiders/transactions/by-ticker/{ticker}; for advanced filter screens use GET /insider-module/api/insiders/transactions/search; for cluster-anchored signals use GET /insider-module/api/insiders/clusters.

Parameters

NameInRequiredDefaultAllowedDescriptionExample
limitqueryoptional50Limit results20
standard_typequeryoptionalpurchase, sale, grant, exercise, gift, otherNormalized transaction-type filter — accepts `purchase` (SEC code P), `sale` (S), `grant` (A), `exercise` (M/X/C/O), `gift` (G), or `other` (every remaining code: F tax-withholding, D, J, K, …). FinRadar's mapping of the SEC's 10+ raw Form 4 codes into the 6 buckets analysts filter on. Omit to include all types; an unrecognized value returns HTTP 422.purchase
sectorqueryoptionalFilter by sector (e.g., Technology, Healthcare). Case-sensitive, Sharadar classification.Technology
industryqueryoptionalFilter by industry (e.g., Software, Biotechnology). Case-sensitive, Sharadar classification.Consumer Electronics
dedup_ownersqueryoptionalfalseWhen false (default) returns one row per (transaction × reporting_owner) — industry-standard per-owner shape, byte-identical to pre-Phase-65 production. When true, joint-filer rows are collapsed into a single canonical row per economic transaction; the response gains co_owners (JSON array of {name, cik, is_officer, is_director, is_ten_percent_owner}) and co_owner_count (int). Use this to avoid double-counting flow on PE LP+GP+manager / 13D group / SPAC sponsor filings.true
include_totalqueryoptionaltrueWhen `true` (default) `meta.pagination.total` is the exact total row count for the full matched set. Set `false` to skip that `COUNT(*)` — `total` is returned as `null` while `meta.pagination.has_more` stays exact (derived from a limit+1 probe). On wide market-wide / sector / industry windows the exact count is a multi-million-row scan that dominates latency; opting out returns the page in a fraction of the time. Entity-scoped queries (by-ticker) are already selective and ignore this flag.false

Response schema

FieldTypeNullableDescription
statusstringnoAlways `success` on a 2xx response. Use the HTTP status code (not this field) for error branching.
dataarraynoArray of transaction rows ordered by `filed_at DESC` (most recent filing first). One row per `(transaction × reporting_owner)` pair by default; one row per economic transaction when `dedup_owners=true`. Empty array when no rows match — never null.
data[].transaction_idstringyesStable internal primary key from the `insiders_transactions` table, serialized as a string. Safe to use as a deduplication key on the client. When `dedup_owners=true`, this is the canonical winner of the joint-filer dedup partition (deterministic by lowest `transaction_id`).
data[].transaction_datestringyesISO `YYYY-MM-DD` date the trade was executed (Form 4 Item 3, NOT the filing acceptance date). Trade dates can pre-date `filed_at` by up to 2 business days under the SEC's filing window.
data[].transaction_codestringyesRaw SEC Form 4 transaction code — `P` (open-market purchase), `S` (open-market sale), `A` (grant), `M` (exercise of derivative), `G` (gift), `F` (tax withholding), `D`/`J`/`K`/`L`. For the FinRadar-normalized 6-bucket version see `standard_type` on `/transactions/search`.
data[].transaction_descriptionstringyesHuman-readable description of the transaction code (e.g. 'Open-market purchase' for `P`). Joined from the `transaction_codes` lookup table.
data[].acquired_disposed_codestringyes`A` (Acquired) or `D` (Disposed) — the SEC's directional flag, orthogonal to `transaction_code`.
data[].sharesnumbernoShare count for the transaction (split-adjusted to most recent split via Sharadar's split-adjustment factor). Always non-negative; direction encoded in `acquired_disposed_code`. For derivative exercises, this is the underlying-share count, not the option contract count. Defaults to `0.0` for filings missing this field.
data[].price_per_sharenumberyesPer-share transaction price in USD, rounded to 2 decimals (Form 4 Item 5). Null for code-A grants and code-G gifts (no consideration). Already split-adjusted to align with the `shares` field.
data[].transaction_valuenumberyesComputed `shares × price_per_share` in USD, rounded to 2 decimals. Null when `price_per_share` is null. Use for `min_value`/`max_value` filtering — combine with `dedup_owners=true` for trading-flow analysis to avoid joint-filer double-counting.
data[].shares_owned_followingnumberyesPer-vehicle holdings after this transaction (the Form 4 Table I/II 'Amount of Securities Beneficially Owned Following Reported Transaction(s)' field). NOT the rolled-up cross-vehicle total — for that, query `/insider-module/api/insiders/insider/{insider_cik}` and read `ownership_summary`.
data[].value_owned_followingnumberyesComputed `shares_owned_following × price_per_share` in USD (rounded to 2 decimals). Null when either input is null. Approximation of position value at execution price — does NOT update with subsequent market movement.
data[].ownership_naturestringyes`D` (Direct — held in own name) or `I` (Indirect — held via trust, LLC, family member, etc.). Indirect positions surface a name in `indirect_owner_name`.
data[].is_derivativebooleanyes`true` for option exercises, RSU vests, warrant grants (Form 4 Table II); `false` for cash-equity transactions (Table I). Distinguishes underlying-share counts from option-contract counts.
data[].is_rule_10b5_1booleanno`true` when the transaction was executed under a pre-planned 10b5-1 trading plan (flagged via Form 4 footnote heuristics). Defaults to `false` when not flagged. Combine with `exclude_10b5_1=true` (when calling supersets like `/transactions/search`) to drop noise from discretionary-conviction screens.
data[].is_cashless_exercisebooleanno`true` for option-exercise-and-immediate-sale patterns (computed at query time via the Phase-31 cashless-indicator helper). Cashless exercises net-zero the insider's share position and are noisy live signals.
data[].excess_shares_soldnumberyesWhen `is_cashless_exercise=true`, the count of shares sold above the exercise count (the insider's actual net unwind). Null when not a cashless pattern. Indicates incremental conviction beyond the mechanical exercise.
data[].insider_namestringyesReporting-person legal name as filed on Form 4 Item 1. May be an individual or an entity (LP, fund vehicle, trust). Casing preserved verbatim — do NOT use as a join key; `insider_cik` is the stable identifier.
data[].insider_cikstringyesSEC-issued reporting-person CIK as a 10-character zero-padded string. Same insider may file at multiple companies — combine `insider_cik + ticker` for per-issuer position tracking.
data[].is_entitybooleanyes`true` when the reporting owner is an entity (LP, fund vehicle, trust, family office); `false` for individuals.
data[].is_directorbooleanno`true` if the insider's relationship to the issuer is `director` (Form 4 Item 1 checkbox).
data[].is_officerbooleanno`true` if the insider's relationship to the issuer is `officer`.
data[].is_ten_percent_ownerbooleanno`true` if the insider holds ≥10% of any class of registered equity — triggers Section 16 disclosure obligations.
data[].is_otherbooleanno`true` if the insider's relationship is the catch-all 'Other' (with free-text in `other_description`).
data[].other_descriptionstringyesFree-text relationship label when `is_other=true` — e.g. 'Designee' or 'Trustee'. Null when not 'Other'.
data[].beneficial_ownership_pctnumberyesBeneficial-ownership percentage of the registered class (0..100). Null when not disclosed (most non-10%-owner filings).
data[].insider_titlestringyesOfficer title as raw text from the filing (e.g. `'Chief Executive Officer'`, `'Sr VP, Engineering'`). Null when not an officer.
data[].officer_title_standardizedstringyesOfficer title normalized to FinRadar's controlled vocabulary (CEO/CFO/COO/CIO/CTO/General Counsel/etc.). Null when no canonical mapping exists.
data[].is_c_suitebooleanno`true` when `officer_title_standardized` resolves to a C-suite role.
data[].seniority_rankintegeryesNumeric seniority ranking (1=highest, e.g. CEO; lower numbers = higher rank). Null when no canonical title mapping.
data[].is_section_16_officerbooleanyes`true` for Section-16 officers (CEO/CFO/COO/President/principal-accounting-officer subset).
data[].is_named_executive_officerbooleanyes`true` for Named Executive Officers per the most-recent DEF 14A. Null for issuers without a recent proxy match.
data[].title_categorystringyesCoarse title category — `executive`, `finance`, `legal`, `technology`, `operations`, etc.
data[].tickerstringyesIssuer ticker (canonical hyphen form, e.g. `BRK-A`). May be null for issuers whose primary exchange ticker has not been resolved.
data[].company_namestringyesIssuer name from the filings table.
data[].sectorstringyesSharadar sector classification. Null when the issuer ticker is unmapped.
data[].industrystringyesSharadar industry classification. Null when unmapped. Em-dash characters preserved verbatim.
data[].issuer_cikstringyesIssuer CIK (10-character zero-padded).
data[].security_typestringyesSecurity title from the filing (e.g. `Common Stock`, `Class A Common Stock`, `Stock Option`).
data[].security_classstringyesNormalized security class (`Class A`, `Class B`, etc.) when discriminable from `security_type`.
data[].is_common_stockbooleanyes`true` for cash-equity common-stock rows; `false` for preferred / warrant / option / RSU rows.
data[].share_classstringyesShare class indicator for multi-class issuers (`A`, `B`, etc.).
data[].accession_numberstringyesSource filing's SEC accession number in canonical `XXXXXXXXXX-YY-NNNNNN` format. Pass to `/insider-module/api/insiders/filings/{accession_number}` for the full filing tree.
data[].form_typestringyesForm type: `3`, `4`, `5`, `4/A`, etc. Filtered server-side to insider-trading forms.
data[].filing_datestringyesISO-8601 UTC timestamp mirroring `filed_at` (pre-Phase-65 alias kept for back-compat).
data[].filed_atstringyesISO-8601 UTC timestamp the filing was accepted by SEC EDGAR.
data[].accepted_atstringyesISO-8601 UTC timestamp of EDGAR acceptance (typically equal to or seconds after `filed_at`).
data[].published_atstringyesISO-8601 UTC timestamp the filing first appeared in the SEC EDGAR RSS feed (the FinRadar ingestion-discovery moment).
data[].rss_updated_atstringyesISO-8601 UTC timestamp of the most recent RSS update for this filing (re-fires when EDGAR re-publishes; rare).
data[].updated_atstringyesISO-8601 UTC timestamp of the last FinRadar-side update (parser re-runs, ticker remapping).
data[].period_of_reportstringyesISO `YYYY-MM-DD` Form 4 Item 3 — the period this filing covers (typically the largest constituent trade date).
data[].is_latebooleanyes`true` when the filing was submitted past the SEC Section-16 2-business-day deadline. Null when timeliness data is unavailable.
data[].business_days_to_fileintegeryesBusiness days between `transaction_date` and `filed_at`. Values >2 indicate late filings.
data[].is_amendmentbooleanyes`true` for Form `*/A` amendments. Amendments supersede their original filing for downstream rollups.
data[].indirect_owner_namestringyesWhen `ownership_nature='I'`, the name of the indirect-ownership vehicle (e.g. `'GRAT Trust 2024'`, `'Family Limited Partnership'`). Null for direct ownership.
data[].equity_swap_involvedbooleanno`true` when the transaction involved an equity-swap derivative (rare; relevant for total-return-swap unwind analysis).
data[].xml_urlstringyesDirect URL to the SEC EDGAR XML primary document. Stable per-accession.
data[].index_urlstringyesDirect URL to the SEC EDGAR filing index page (HTML). Lists all documents in the filing.
data[].owner_idstringyesInternal FinRadar `ReportingOwner` UUID (the unified-holder identifier). Distinct from `insider_cik` — `owner_id` survives CIK reassignments.
data[].non_derivative_holding_countintegernoCount of non-derivative holdings rows in the parent filing (Form 4 Table I holdings — positions held but not transacted).
data[].derivative_holding_countintegernoCount of derivative holdings rows in the parent filing (Form 4 Table II holdings).
data[].footnote_countintegernoCount of footnotes attached to the parent filing. Footnotes carry crucial qualifying context (10b5-1 plan dates, gift-recipient identities, transfer-on-death assignments) — for the full text query `/insider-module/api/insiders/filings/{accession_number}`.
data[].co_ownersarrayyesPresent ONLY when `dedup_owners=true`. JSON array of `{name, cik, is_officer, is_director, is_ten_percent_owner}` objects representing the joint-filer co-owners collapsed into this canonical row.
data[].co_owner_countintegeryesLength of `co_owners`. Present ONLY when `dedup_owners=true`. `1` = single owner (no joint filing); ≥2 = joint filing.
metaobjectyesResult metadata block carrying pagination state.
meta.paginationobjectnoPagination sub-block: `{total, limit, offset, has_more}`.
meta.pagination.totalintegernoTotal matching rows for the full filter set (parallel COUNT query — not just the size of the returned page).
meta.pagination.limitintegernoEffective page size after server-side capping.
meta.pagination.offsetintegernoEcho of the requested offset.
meta.pagination.has_morebooleanno`true` when `offset + limit < total` — i.e. another page is available.
request_idstringyesPer-request UUID for log correlation. Forward to support tickets to accelerate triage.
timestampstringnoISO-8601 UTC timestamp the response was generated.

Sample response

·
  • "status": "success"
  • "data":
    ]
  • "meta":
    • "pagination":
    }
  • "request_id": "f7c5a3a2-3c1c-4f3a-9b8a-2c4d5e6f7a8b"
  • "timestamp": "2026-05-02T15:32:18.094Z"
}

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/latest?api_Token=YOUR_API_KEY" \
  -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).