Financial data is informational and may be inaccurate. See Disclaimer.

drillr.ai
API keys →

Ownership · US only

Institutional holdings

GET/api/v2/institutional-holdingsUS only
Coverage
US
Billing
20 cr / thousand calls

One row = one holding record in a 13F-HR filing, parsed from the as-filed SEC document; the same institution may have more than one row for the same security in the same report period (the filed form splits rows by investment discretion / other managers, and an amended filing 13F-HR/A produces separate rows, distinguished by accession_number). Aggregate positions must be summed by the caller. The endpoint supports both query directions: query by ticker to list the holders, query by investor_cik to list all holdings of that institution, and pass both to get one institution's position in one security.

  • No from / to date axis: 13F is filed by quarter-end report period; use report_period to select a single quarter. When omitted, all quarters are returned, paginated in report_period desc, investor_name asc, accession_number desc order.
  • 13F is filed by CUSIP; a query by ticker includes only the filed rows that map to that ticker, while a query by investor_cik also returns the unmapped rows (ticker is null on those rows). The CUSIP→ticker mapping has not been backfilled yet, so a query by ticker currently returns an empty array; use investor_cik to retrieve holdings.
  • 13D / 13G major shareholder ownership events are not part of this endpoint; /events-ownership.
Shared ownership conventions

Both endpoints in this group cover only US-listed companies, with the data parsed from the as-filed SEC documents; a non-US ticker returns 404.

Query parameters

ParameterTypeRequiredDescription
tickerstringoptional*At least one of this and investor_cik; a single ticker. One of the alternatives is required.
investor_cikstringoptionalInstitution CIK (the unique key of a 13F filer); returns 404 when there is no match. When only the institution name is known, use SEC EDGAR company search to obtain the CIK. One of the alternatives is required.
report_perioddateoptionalQuarter-end report period; returns only the records for that period. When omitted, returns all quarters for that security / institution. Default All quarters.
limitintoptionalMaximum 500. Default 50.
pageintoptionalStarts at 1. Default 1.

Sorted report_period desc, investor_name asc, accession_number desc. Paged with limit and page (pages start at 1); fewer rows than limit means the last page.

Response fields

FieldTypeDescription
tickerstringThe security's canonical ticker; null on rows whose CUSIP could not be mapped to a ticker (these rows appear only in the results of a query by investor_cik)
investor_namestringHolder name (as filed)
investor_cikstringHolder CIK (10 digits, zero-padded)
report_perioddateQuarter-end report period
sharesnumberShares held
market_valuenumberReported market value, in base US dollar units (not thousands of dollars)
change_in_sharesnumberChange in shares held versus the previous report period; null when there is no previous period
accession_numberstringSEC accession number (e.g. 0000320193-25-000123) identifying this filing
form_typestringSEC form name, either 13F-HR or 13F-HR/A
filing_urlstringDeep link to the filing on SEC EDGAR; opens directly
filing_datedateFiling date: the date the filing became public on EDGAR

No key yet? Create one under API Keys — it is shown once, so store it where your shell can read it. Connecting an agent over MCP instead? That signs in through the browser and needs no key at all.

Authentication, conventions, rate limits and error shapes are the same for every endpoint — they live on REST API.