Ownership · US only
Institutional holdings
- Coverage
- US
- Billing
- 20 cr / thousand calls
Query institutional investors’ reported quarterly holdings, quantities and market values. Each row is one holding record from an SEC 13F-HR filing or amendment, rather than an aggregated institution–security position.
Start with investor_cik to retrieve an institution’s holdings. Queries by ticker return only records with a mapped CUSIP and may have incomplete coverage; queries by institution also retain unmapped records, where ticker is null.
Quick example
curl -H "X-API-KEY: $DRILLR_API_KEY" \
"https://gateway.drillr.ai/api/v2/institutional-holdings?investor_cik=0001067983&report_period=2026-06-30"Query parameters
At least one of ticker or investor_cik is required.
| Parameter | Type | Required | Description |
|---|---|---|---|
| ticker | string | one of | A single ticker; provide this or investor_cik, or both. Returns mapped records only. |
| investor_cik | string | one of | Institution 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. |
| report_period | date | optional | Quarter-end report period in YYYY-MM-DD format, for example 2026-06-30; returns that period only, or all ingested quarters when omitted. Default: all quarters. |
| limit | int | optional | Maximum 500. Default: 50. |
| page | int | optional | Starts at 1. Default: 1. |
Sort order: 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
| Field | Type | Description |
|---|---|---|
| ticker | string | The 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_name | string | Holder name (as filed) |
| investor_cik | string | Holder CIK (10 digits, zero-padded) |
| report_period | date | Quarter-end report period |
| shares | number | Shares held |
| market_value | number | Reported market value, in base US dollar units (not thousands of dollars) |
| change_in_shares | number | Quantity difference from the most recent earlier matching holding record; may span missing quarters, or be null when no match exists. See Data notes |
| accession_number | string | SEC accession number (e.g. 0000320193-25-000123) identifying this filing |
| form_type | stringenum | SEC form name, either 13F-HR or 13F-HR/A |
| filing_url | string | Deep link to the filing on SEC EDGAR; opens directly |
| filing_date | date | Filing date: the date the filing became public on EDGAR |
Common queries
- An institution’s holdings for one quarter:
investor_cik=0001067983&report_period=2026-06-30. Use a zero-padded, 10-digit CIK; look up an institution by name with SEC EDGAR company search. - Holders of a stock:
ticker=AAPL&report_period=2026-06-30. Covers mapped records only; an empty array does not establish that there are no institutional holdings. - An institution’s holdings in a stock:
investor_cik=0001067983&ticker=AAPL&report_period=2026-06-30. Both filters apply together, subject to the same ticker mapping coverage.
Data notes
report_periodis the quarter-end holding date inYYYY-MM-DDformat, for example2026-06-30;filing_dateis the public disclosure date. Omitting the report period returns all ingested quarters, not just the latest quarter.from/toare not accepted.- The same institution, quarter and security may have multiple rows for different share classes, investment discretion or other managers. Amendments,
13F-HR/A, are retained separately. Review corrections and holding categories before aggregation; do not simply add originals and amendments or assume the latest amendment replaces the entire filing. market_valueis normalized to base US dollars; do not multiply it by 1000.change_in_sharessubtracts the quantity in the most recent earlier matching holding record from the current row. Matching considers institution, CUSIP, share class, quantity unit, investment discretion and other managers. Missing quarters can cause comparisons across a gap; no matching record givesnull. It is not a strict measure of quarterly net trading.- A
nullvalue fortickermeans the symbol is unmapped, not that the holding is zero. The response example illustrates field structure; usefiling_urlto verify security identity and corrections in the original filing. - For 13D / 13G ownership disclosures, use Stake changes.
Pagination
- The default page contains 50 rows and may cover only part of an institution’s portfolio. Start with
limit=50&page=1, keep the institution, report period and other filters unchanged, then requestlimit=50&page=2. Stop whendatacontains fewer than 50 rows. accession_numberidentifies the whole filing, not a unique holding row. Do not deduplicate by it alone or add together holdings from different quarters when the report period is omitted.
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.