Skip to content
/insider-module/api/insiders/holdings/by-ticker/{ticker}

Current insider holdings for a ticker.

Current insider holdings for a ticker. 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

See who currently holds shares as an insider for a company.

Common use case

Viewing all insider positions in AAPL — direct holdings, trust holdings, and total beneficial ownership per insider.

Current insider position table for one issuer — one row per (insider, security, vehicle) snapshot, derived from the most-recent Form 3/4/5 filing reporting that position. Combines non-derivative (Form 4 Table I) and derivative (Table II) holdings when include_derivative=true (default). Pagination is applied AFTER combining, so a single page can mix both kinds.

The meta.company block surfaces issuer identity (ticker/name/cik) so UIs don't need a second call to render the page header. The meta.summary block is page-scoped (not full-set) — useful as a quick chip but for full-issuer totals call this with a high limit or aggregate total_beneficial_ownership client-side.

Note: each total_beneficial_ownership field is the cross-vehicle rollup (direct + all indirect) for that insider AT this issuer — not the same as amount_owned which is per-vehicle. For the time-machine view (positions as-of a historical date) use GET /api/insiders/holdings/snapshot/{snapshot_date}; for an insider's cross-issuer holdings use GET /insider-module/api/insiders/holdings/by-insider/{cik}.

Parameters

NameInRequiredDefaultAllowedDescriptionExample
tickerpathrequiredStock TickerAAPL
limitqueryoptional50Limit results20

Response schema

FieldTypeNullableDescription
statusstringnoAlways `success` on 2xx.
dataarraynoArray of unique-position holding rows for the requested issuer. One row per `(insider, security_title, ownership_nature, indirect_owner_name)` combination — the most-recent reported snapshot per vehicle. Combines Form 4 Table I (non-derivative) and Table II (derivative) when `include_derivative=true` (default). Empty array when the ticker has no insider holdings on file. Returns HTTP 404 when the ticker cannot be resolved at all.
data[].holding_idstringnoStable internal UUID for this holding row, serialized as a string. Safe to use as a deduplication key on the client.
data[].security_titlestringnoTitle of the security (e.g. `Common Stock`, `Class A Common Stock`, `Stock Option`, `Restricted Stock Unit`). For derivatives the underlying is in `underlying_security_title`.
data[].amount_ownednumbernoNumber of shares (or contract units, for derivatives) currently owned in this vehicle. Defaults to `0` for filings missing the value. Split-adjusted to match transaction rows.
data[].ownership_naturestringno`'direct'` (held in own name) or `'indirect'` (held via trust, LLC, family). Defaults to `'direct'` when the source filing's nature field is missing.
data[].reported_datestringyesISO `YYYY-MM-DD` date of the source Form 3/4/5 filing that reported this position (the snapshot's as-of date). Subsequent transactions in newer filings supersede.
data[].indirect_owner_namestringyesWhen `ownership_nature='indirect'`, the name of the indirect-ownership vehicle (e.g. `'GRAT Trust 2024'`, `'Family Limited Partnership'`). Null for direct ownership.
data[].is_derivativebooleanno`true` for option/warrant/RSU positions (Form 4 Table II); `false` for cash-equity positions (Table I).
data[].conversion_or_exercise_pricenumberyesExercise/conversion price in USD for derivatives (the strike). Null for non-derivative rows.
data[].expiration_datestringyesISO `YYYY-MM-DD` expiration date for derivatives. Null for non-derivative rows or perpetual instruments.
data[].underlying_security_titlestringyesFor derivatives, the underlying security title (e.g. `'Common Stock'` for an option). Null for non-derivatives.
data[].total_beneficial_ownershipnumberyesAggregate shares this insider beneficially owns at this issuer across ALL vehicles (direct + indirect; the cross-vehicle rollup). Null when the underlying filings do not report it. Distinct from `amount_owned` (per-vehicle) — use this for conviction-magnitude analysis.
data[].sectorstringyesSharadar sector classification for the issuer. Null when unmapped.
data[].industrystringyesSharadar industry classification for the issuer. Null when unmapped.
data[].insider_namestringyesReporting-person legal name (verbatim from the most-recent filing reporting this position).
data[].insider_cikstringyesReporting-person CIK (10-character zero-padded).
data[].is_entitybooleanyes`true` for entity reporters (LP, fund vehicle, trust).
data[].is_directorbooleannoDirector relationship to the issuer (current).
data[].is_officerbooleannoOfficer relationship to the issuer (current).
data[].is_ten_percent_ownerbooleanno10%-beneficial-owner relationship (current).
data[].insider_titlestringyesOfficer title raw text (e.g. `'Chief Financial Officer'`).
data[].is_c_suitebooleannoC-suite indicator.
data[].accession_numberstringyesSource filing's SEC accession number.
data[].filed_atstringyesISO-8601 UTC filing acceptance timestamp.
data[].accepted_atstringyesISO-8601 UTC EDGAR acceptance timestamp.
data[].published_atstringyesISO-8601 UTC RSS-publication timestamp.
data[].rss_updated_atstringyesISO-8601 UTC most-recent RSS update.
metaobjectyesResult metadata block — pagination + company profile + holdings summary.
meta.paginationobjectnoPagination sub-block.
meta.pagination.totalintegernoTotal combined holdings rows (non-derivative + derivative).
meta.pagination.limitintegernoEffective page size.
meta.pagination.offsetintegernoEcho of requested offset.
meta.pagination.has_morebooleanno`true` when another page is available.
meta.companyobjectnoCompany profile block (ticker, name, cik) — surfaces issuer identity so UIs don't need a separate company-info call.
meta.company.tickerstringnoIssuer ticker (canonical hyphen form). Falls back to the upper-cased path parameter when the issuer has no CompanyStub row.
meta.company.namestringnoIssuer name. Falls back to `'Unknown'` when missing.
meta.company.cikstringnoIssuer CIK.
meta.summaryobjectnoHoldings summary block computed across the CURRENT PAGE (not the entire filtered set) — direct/indirect totals + unique-insider count. Use as a quick UI chip; for full-set totals run `total_beneficial_ownership` aggregation client-side.
meta.summary.total_insidersintegernoDistinct count of insiders with positions in the current page.
meta.summary.total_shares_directnumbernoSum of `amount_owned` across non-derivative direct rows in the current page.
meta.summary.total_shares_indirectnumbernoSum of `amount_owned` across non-derivative indirect rows in the current page.
request_idstringyesPer-request UUID for log correlation.
timestampstringnoISO-8601 UTC response timestamp.

Sample response

·
  • "status": "success"
  • "data":
    ]
  • "meta":
    • "pagination":
    • "company":
    • "summary":
    }
  • "request_id": "5b7d3c1a-8f2e-4a6b-9d4e-c5b6a7d8e9f0"
  • "timestamp": "2026-05-02T15:42:18.703Z"
}

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/holdings/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).