Owners (by ticker)
Every institutional manager that holds a given security, parsed from SEC Form 13F-HR filings. Pass a ticker and get one position per filer — each filer's most recent 13F that includes the security — sorted by reported value, largest holder first. Answers 'who owns AAPL?'
/v1/institutional-holdings?ticker={ticker}Provide a ticker. By default you get the current institutional holders — one row per filer, drawn from each filer’s latest 13F that reports the security — sorted by value_usd descending. Use report_period or the date-range filters to narrow that set to filers whose latest reported position falls in a given quarter. Results come back under an institutional_holdings array.
Query parameters#
tickerstringrequiredAAPL. Provide ticker or filer_cik — exactly one is required.report_periodstringoptionalYYYY-MM-DD, a calendar quarter-end). It filters the latest-per-filer set down to those filers; it does not back-date each filer to retrieve its historical position for an arbitrary past quarter.report_period_gtestringoptionalYYYY-MM-DD). Also available: report_period_lte, report_period_gt, report_period_lt.limitnumberoptionalvalue_usd first. Defaults to 1000.Current holders#
Without a report_period, the response is the current institutional holders of the security. We define that precisely: one position per filer, taken from that filer’s most recent 13F that includes the ticker. When a filer reports both an ordinary long position and a derivative line (a put or call) on the same security in that filing, the main long position is the one returned. Holders are sorted by value_usd descending, so the largest reported position appears first.
Because each filer’s latest including-filing can be a different quarter, the rows in a current-holders response may carry different report_period values. Passing an explicit report_period filters this latest-per-filer set down to the filers whose most recent reported position falls on that date — filers whose latest report is a different quarter are dropped, not back-dated. This route does not retrieve every filer’s position for an arbitrary past quarter.
Example request#
curl "https://api.focusalpha.ai/v1/institutional-holdings?ticker=AAPL" \
-H "Authorization: Bearer $FOCUSALPHA_API_KEY"Response#
Returns the echoed ticker and an institutional_holdings array, sorted by reported value descending. Each row is one filer’s position in the security and carries the same fields as the by-investor view.
institutional_holding#
filer_cikstringrequiredfiler_namestringrequiredsharesnumber | nullrequiredshare_type is PRN), summed across the filer’s subsidiary blocks for this security.value_usdnumber | nullrequiredreported_pricenumber | nulloptionalvalue_usd / shares). null for derivatives and PRN rows.put_call"Put" | "Call" | nulloptionalnull for the ordinary long position (the one returned by default); Put or Call for an options line.share_type"SH" | "PRN"requiredshares is a share count (SH) or a principal amount (PRN).report_periodstringrequiredYYYY-MM-DD). In a current-holders response this can differ between filers.ticker / name_of_issuer / title_of_classstring | nullrequiredticker resolved from CUSIP). null when the value is not resolved or reported.cusipstringrequiredfiling_date / form_type / accession_numberstringrequired13F-HR or 13F-HR/A), and SEC accession number.Every row carries the full field set documented on the by-investor page — the two views share one row shape.
Example response#
{
"ticker": "AAPL",
"institutional_holdings": [
{
"ticker": "AAPL",
"name_of_issuer": "APPLE INC",
"cusip": "037833100",
"title_of_class": "COM",
"shares": 1426283914,
"share_type": "SH",
"value_usd": 387749544852,
"reported_price": 271.86,
"put_call": null,
"report_period": "2025-12-31",
"filing_date": "2026-02-11",
"form_type": "13F-HR",
"accession_number": "0000102909-26-000004",
"filer_cik": "0000102909",
"filer_name": "VANGUARD GROUP INC"
}
]
}shares and value_usd reflect its complete Form 13F position, not a single subsidiary line.null ticker means the security’s CUSIP couldn’t be mapped to a symbol.Errors#
Statuses: 400 (neither ticker nor filer_cik supplied, both supplied at once, or a malformed date), 401 (bad or missing API key), 402 (per-minute rate limit or monthly quota exceeded — upgrade your plan), 404 (disabled route), 500, and 503 (holdings store temporarily unavailable, with a Retry-After header). The ticker is not validated for existence: an unknown ticker, like a known ticker that no covered filer reports holding, returns a successful 200 with an empty institutional_holdings array. See Errors.