/insider-module/api/insiders/transactions/latestGet 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.
Why use this
Common use case
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=Technologyto track trades clustering in one sector. - Aggregate-flow charts — set
dedup_owners=trueto 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
| Name | In | Required | Default | Allowed | Description | Example |
|---|---|---|---|---|---|---|
| limit | query | optional | 50 | — | Limit results | 20 |
| standard_type | query | optional | — | purchase, sale, grant, exercise, gift, other | Normalized 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 |
| sector | query | optional | — | — | Filter by sector (e.g., Technology, Healthcare). Case-sensitive, Sharadar classification. | Technology |
| industry | query | optional | — | — | Filter by industry (e.g., Software, Biotechnology). Case-sensitive, Sharadar classification. | Consumer Electronics |
| dedup_owners | query | optional | false | — | When 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_total | query | optional | true | — | When `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
| Field | Type | Nullable | Description |
|---|---|---|---|
| status | string | no | Always `success` on a 2xx response. Use the HTTP status code (not this field) for error branching. |
| data | array | no | Array 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_id | string | yes | Stable 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_date | string | yes | ISO `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_code | string | yes | Raw 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_description | string | yes | Human-readable description of the transaction code (e.g. 'Open-market purchase' for `P`). Joined from the `transaction_codes` lookup table. |
| data[].acquired_disposed_code | string | yes | `A` (Acquired) or `D` (Disposed) — the SEC's directional flag, orthogonal to `transaction_code`. |
| data[].shares | number | no | Share 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_share | number | yes | Per-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_value | number | yes | Computed `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_following | number | yes | Per-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_following | number | yes | Computed `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_nature | string | yes | `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_derivative | boolean | yes | `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_1 | boolean | no | `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_exercise | boolean | no | `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_sold | number | yes | When `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_name | string | yes | Reporting-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_cik | string | yes | SEC-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_entity | boolean | yes | `true` when the reporting owner is an entity (LP, fund vehicle, trust, family office); `false` for individuals. |
| data[].is_director | boolean | no | `true` if the insider's relationship to the issuer is `director` (Form 4 Item 1 checkbox). |
| data[].is_officer | boolean | no | `true` if the insider's relationship to the issuer is `officer`. |
| data[].is_ten_percent_owner | boolean | no | `true` if the insider holds ≥10% of any class of registered equity — triggers Section 16 disclosure obligations. |
| data[].is_other | boolean | no | `true` if the insider's relationship is the catch-all 'Other' (with free-text in `other_description`). |
| data[].other_description | string | yes | Free-text relationship label when `is_other=true` — e.g. 'Designee' or 'Trustee'. Null when not 'Other'. |
| data[].beneficial_ownership_pct | number | yes | Beneficial-ownership percentage of the registered class (0..100). Null when not disclosed (most non-10%-owner filings). |
| data[].insider_title | string | yes | Officer title as raw text from the filing (e.g. `'Chief Executive Officer'`, `'Sr VP, Engineering'`). Null when not an officer. |
| data[].officer_title_standardized | string | yes | Officer title normalized to FinRadar's controlled vocabulary (CEO/CFO/COO/CIO/CTO/General Counsel/etc.). Null when no canonical mapping exists. |
| data[].is_c_suite | boolean | no | `true` when `officer_title_standardized` resolves to a C-suite role. |
| data[].seniority_rank | integer | yes | Numeric seniority ranking (1=highest, e.g. CEO; lower numbers = higher rank). Null when no canonical title mapping. |
| data[].is_section_16_officer | boolean | yes | `true` for Section-16 officers (CEO/CFO/COO/President/principal-accounting-officer subset). |
| data[].is_named_executive_officer | boolean | yes | `true` for Named Executive Officers per the most-recent DEF 14A. Null for issuers without a recent proxy match. |
| data[].title_category | string | yes | Coarse title category — `executive`, `finance`, `legal`, `technology`, `operations`, etc. |
| data[].ticker | string | yes | Issuer ticker (canonical hyphen form, e.g. `BRK-A`). May be null for issuers whose primary exchange ticker has not been resolved. |
| data[].company_name | string | yes | Issuer name from the filings table. |
| data[].sector | string | yes | Sharadar sector classification. Null when the issuer ticker is unmapped. |
| data[].industry | string | yes | Sharadar industry classification. Null when unmapped. Em-dash characters preserved verbatim. |
| data[].issuer_cik | string | yes | Issuer CIK (10-character zero-padded). |
| data[].security_type | string | yes | Security title from the filing (e.g. `Common Stock`, `Class A Common Stock`, `Stock Option`). |
| data[].security_class | string | yes | Normalized security class (`Class A`, `Class B`, etc.) when discriminable from `security_type`. |
| data[].is_common_stock | boolean | yes | `true` for cash-equity common-stock rows; `false` for preferred / warrant / option / RSU rows. |
| data[].share_class | string | yes | Share class indicator for multi-class issuers (`A`, `B`, etc.). |
| data[].accession_number | string | yes | Source 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_type | string | yes | Form type: `3`, `4`, `5`, `4/A`, etc. Filtered server-side to insider-trading forms. |
| data[].filing_date | string | yes | ISO-8601 UTC timestamp mirroring `filed_at` (pre-Phase-65 alias kept for back-compat). |
| data[].filed_at | string | yes | ISO-8601 UTC timestamp the filing was accepted by SEC EDGAR. |
| data[].accepted_at | string | yes | ISO-8601 UTC timestamp of EDGAR acceptance (typically equal to or seconds after `filed_at`). |
| data[].published_at | string | yes | ISO-8601 UTC timestamp the filing first appeared in the SEC EDGAR RSS feed (the FinRadar ingestion-discovery moment). |
| data[].rss_updated_at | string | yes | ISO-8601 UTC timestamp of the most recent RSS update for this filing (re-fires when EDGAR re-publishes; rare). |
| data[].updated_at | string | yes | ISO-8601 UTC timestamp of the last FinRadar-side update (parser re-runs, ticker remapping). |
| data[].period_of_report | string | yes | ISO `YYYY-MM-DD` Form 4 Item 3 — the period this filing covers (typically the largest constituent trade date). |
| data[].is_late | boolean | yes | `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_file | integer | yes | Business days between `transaction_date` and `filed_at`. Values >2 indicate late filings. |
| data[].is_amendment | boolean | yes | `true` for Form `*/A` amendments. Amendments supersede their original filing for downstream rollups. |
| data[].indirect_owner_name | string | yes | When `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_involved | boolean | no | `true` when the transaction involved an equity-swap derivative (rare; relevant for total-return-swap unwind analysis). |
| data[].xml_url | string | yes | Direct URL to the SEC EDGAR XML primary document. Stable per-accession. |
| data[].index_url | string | yes | Direct URL to the SEC EDGAR filing index page (HTML). Lists all documents in the filing. |
| data[].owner_id | string | yes | Internal FinRadar `ReportingOwner` UUID (the unified-holder identifier). Distinct from `insider_cik` — `owner_id` survives CIK reassignments. |
| data[].non_derivative_holding_count | integer | no | Count of non-derivative holdings rows in the parent filing (Form 4 Table I holdings — positions held but not transacted). |
| data[].derivative_holding_count | integer | no | Count of derivative holdings rows in the parent filing (Form 4 Table II holdings). |
| data[].footnote_count | integer | no | Count 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_owners | array | yes | Present 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_count | integer | yes | Length of `co_owners`. Present ONLY when `dedup_owners=true`. `1` = single owner (no joint filing); ≥2 = joint filing. |
| meta | object | yes | Result metadata block carrying pagination state. |
| meta.pagination | object | no | Pagination sub-block: `{total, limit, offset, has_more}`. |
| meta.pagination.total | integer | no | Total matching rows for the full filter set (parallel COUNT query — not just the size of the returned page). |
| meta.pagination.limit | integer | no | Effective page size after server-side capping. |
| meta.pagination.offset | integer | no | Echo of the requested offset. |
| meta.pagination.has_more | boolean | no | `true` when `offset + limit < total` — i.e. another page is available. |
| request_id | string | yes | Per-request UUID for log correlation. Forward to support tickets to accelerate triage. |
| timestamp | string | no | ISO-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
| Status | Label | Description |
|---|---|---|
| 200 | OK | Request succeeded. |
| 400 | Bad Request | Invalid query, body, or path parameter. |
| 401 | Unauthorized | Missing or invalid Authorization header / api_Token. |
| 402 | Payment Required | Insufficient token balance for this call. Top up |
| 429 | Too Many Requests | Rate limit exceeded for your tier (see /pricing for tier limits). Tier limits |
| 500 | Server Error | Unexpected 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).