/insider-module/api/insiders/transactions/by-ticker/{ticker}Get insider transactions for a specific ticker.
Get insider transactions for a specific ticker. Each row includes total_beneficial_ownership and sector/industry classification from Sharadar.
Why use this
Common use case
Ticker-scoped insider transaction history — one company at a time. The natural lookup when a ticker is the analyst's primary key (stock-quote pages, equity-research dashboards, alert pipelines wired to a watchlist).
The path parameter accepts canonical NYSE/NASDAQ/AMEX symbols including multi-class hyphens (e.g. BRK-A, GOOG-L); server normalizes BRK.A/BRK/A/BRKA → BRK-A via the Phase 49 ticker_norm_aliases lookup. Returns HTTP 404 when the ticker cannot be resolved at all (vs the latest/search endpoints which return an empty array).
For screen-style multi-ticker filtering use GET /insider-module/api/insiders/transactions/search; for the rolled-up sentiment summary (counts, value totals, sentiment scores) for the same ticker use GET /insider-module/api/insiders/summary/by-ticker/{ticker}; for the position-level (not transaction-level) view use GET /insider-module/api/insiders/holdings/by-ticker/{ticker}.
Parameters
| Name | In | Required | Default | Allowed | Description | Example |
|---|---|---|---|---|---|---|
| ticker | path | required | — | — | Stock Ticker (e.g. TSLA) | AAPL |
| limit | query | optional | 50 | — | Limit results | 20 |
| filed_at_days | query | optional | 7 | — | Filter by filing date (days ago). | 30 |
| transaction_days | query | optional | — | — | Filter by transaction date (days ago). | 30 |
| 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 |
| dedup_owners | query | optional | false | — | Opt-in server-side joint-filer dedup. When true, collapses (transaction × reporting_owner) duplicates into one canonical row per economic transaction and adds co_owners JSON array + co_owner_count. Default-path response shape unchanged. | true |
Response schema
| Field | Type | Nullable | Description |
|---|---|---|---|
| status | string | no | Always `success` on 2xx. |
| data | array | no | Array of insider transaction rows scoped to the requested issuer ticker. Sorted by `filed_at DESC`. Empty array when the ticker exists but has no qualifying transactions in the date range — never null. Returns HTTP 404 when the ticker cannot be resolved to an issuer CIK at all. |
| data[].transaction_id | string | yes | Stable internal primary key. When `dedup_owners=true`, the canonical winner of the joint-filer dedup partition. |
| data[].transaction_date | string | yes | ISO `YYYY-MM-DD` trade execution date (Form 4 Item 3). |
| data[].transaction_code | string | yes | Raw SEC Form 4 transaction code (P/S/A/M/G/F/D/J/K/L). |
| data[].transaction_description | string | yes | Human-readable code description (e.g. 'Open-market purchase' for `P`). |
| data[].acquired_disposed_code | string | yes | `A` (Acquired) or `D` (Disposed). |
| data[].shares | number | no | Share count (split-adjusted to most recent split). |
| data[].price_per_share | number | yes | Per-share USD price, rounded to 2 decimals. Null for grants/gifts. |
| data[].transaction_value | number | yes | Computed `shares × price_per_share` in USD. |
| data[].shares_owned_following | number | yes | Per-vehicle holdings after the transaction (NOT cross-vehicle total). |
| data[].value_owned_following | number | yes | Computed `shares_owned_following × price_per_share` in USD. |
| data[].ownership_nature | string | yes | `D` (Direct) or `I` (Indirect — held via trust/LLC/family). |
| data[].is_derivative | boolean | yes | `true` for option exercises, RSU vests, warrant grants (Form 4 Table II). |
| data[].is_rule_10b5_1 | boolean | no | `true` when executed under a pre-planned 10b5-1 trading plan. |
| data[].is_cashless_exercise | boolean | no | `true` for option-exercise-and-immediate-sale patterns. |
| data[].excess_shares_sold | number | yes | Shares sold above the exercise count when `is_cashless_exercise=true`. |
| data[].insider_name | string | yes | Reporting-person legal name (verbatim from Form 4 Item 1). |
| data[].insider_cik | string | yes | Reporting-person CIK (10-character zero-padded). |
| data[].is_entity | boolean | yes | `true` for entity reporters (LP, fund, trust); `false` for individuals. |
| data[].is_director | boolean | no | Insider's director relationship to this issuer. |
| data[].is_officer | boolean | no | Insider's officer relationship to this issuer. |
| data[].is_ten_percent_owner | boolean | no | Insider's 10%-beneficial-owner relationship to this issuer. |
| data[].is_other | boolean | no | Insider's catch-all 'Other' relationship. |
| data[].other_description | string | yes | Free-text relationship label when `is_other=true`. |
| data[].beneficial_ownership_pct | number | yes | Beneficial-ownership percentage (0..100). Null when not disclosed. |
| data[].insider_title | string | yes | Officer title raw text from the filing. |
| data[].officer_title_standardized | string | yes | Officer title normalized to FinRadar's controlled vocabulary. |
| data[].is_c_suite | boolean | no | `true` for CEO/CFO/COO/CIO/CTO/General Counsel. |
| data[].seniority_rank | integer | yes | Numeric seniority ranking (1=highest). |
| data[].is_section_16_officer | boolean | yes | `true` for Section-16 officers. |
| data[].is_named_executive_officer | boolean | yes | `true` for Named Executive Officers per most-recent DEF 14A. |
| data[].title_category | string | yes | Coarse title category. |
| data[].ticker | string | yes | Issuer ticker — equals the requested path parameter (canonical hyphen form). |
| data[].company_name | string | yes | Issuer name. |
| data[].sector | string | yes | Sharadar sector classification. Null when unmapped. |
| data[].industry | string | yes | Sharadar industry classification. Null when unmapped. |
| data[].issuer_cik | string | yes | Issuer CIK (10-character zero-padded). |
| data[].security_type | string | yes | Security title (e.g. `Common Stock`, `Class A Common Stock`). |
| data[].security_class | string | yes | Normalized security class (`Class A`, `Class B`). |
| data[].is_common_stock | boolean | yes | `true` for cash-equity common-stock rows. |
| data[].share_class | string | yes | Share class indicator for multi-class issuers. |
| data[].accession_number | string | yes | Source filing accession number. |
| data[].form_type | string | yes | Form type (`3`, `4`, `5`, `4/A`, etc.). |
| data[].filed_at | string | yes | ISO-8601 UTC filing acceptance timestamp. |
| data[].filing_date | string | yes | Mirror of `filed_at` (back-compat alias). |
| data[].accepted_at | string | yes | ISO-8601 UTC EDGAR acceptance timestamp. |
| data[].published_at | string | yes | ISO-8601 UTC RSS-publication timestamp. |
| data[].rss_updated_at | string | yes | ISO-8601 UTC most-recent RSS update. |
| data[].updated_at | string | yes | ISO-8601 UTC last FinRadar-side update. |
| data[].period_of_report | string | yes | ISO `YYYY-MM-DD` Form 4 Item 3 period. |
| data[].is_late | boolean | yes | `true` when filed past the 2-business-day deadline. |
| data[].business_days_to_file | integer | yes | Business days between trade and filing. |
| data[].is_amendment | boolean | yes | `true` for `*/A` amendments. |
| data[].indirect_owner_name | string | yes | Indirect-ownership vehicle name when `ownership_nature='I'`. |
| data[].equity_swap_involved | boolean | no | `true` for equity-swap derivative involvement. |
| data[].xml_url | string | yes | SEC EDGAR XML primary document URL. |
| data[].index_url | string | yes | SEC EDGAR filing index page URL. |
| data[].owner_id | string | yes | Internal ReportingOwner UUID. |
| data[].non_derivative_holding_count | integer | no | Form 4 Table I holdings count for the parent filing. |
| data[].derivative_holding_count | integer | no | Form 4 Table II holdings count for the parent filing. |
| data[].footnote_count | integer | no | Footnote count on the parent filing. |
| data[].co_owners | array | yes | Present ONLY when `dedup_owners=true`. Joint-filer co-owners array. |
| data[].co_owner_count | integer | yes | Length of `co_owners` (only when `dedup_owners=true`). |
| meta | object | yes | Result metadata block. |
| meta.pagination | object | no | Pagination sub-block. |
| meta.pagination.total | integer | no | Total matching rows for the filter set. |
| 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 another page is available. |
| request_id | string | yes | Per-request UUID for log correlation. |
| timestamp | string | no | ISO-8601 UTC response generation timestamp. |
Sample response
- "status": "success"
- "data":
- "meta":
- "pagination":
- "request_id": "8a4d2e1c-bd8a-4f81-9e21-c32d40bf9e45"
- "timestamp": "2026-05-02T15:34:11.205Z"
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/by-ticker/{ticker}?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).