Institutional Holdings (13F)
Returns 13F holdings, quarterly snapshots of equity positions held by institutional investment managers with $100M+ AUM, filed with the SEC. Each record is one (fund, security, quarter) tuple.
GET /v1/institutional-holdingsLive from the data
Loading the latest numbers…
What it returns
One record per result. Fields (from a live response):
- Identity:
issuer_name,fund_cik,position_change,fund_name - Subject:
cusip,ticker - Dates:
filing_date - The trade / event:
verification_status - Amounts:
market_value,shares_held,market_value_thousands,share_type,shares_change_pct,verification_value_expected,shares_change,verification_value_actual - Provenance:
filing_url,data_source,accession_number - Details:
investment_discretion,id,quarter,verification_expected,verification_actual
verification_status: VERIFIED means the filing matches its own totals (its rows add up to the row count and total value it declares) and passed the check for values filed in thousands. It is not a check against market prices: a filer's own consistent but wrong numbers still read VERIFIED. INSUFFICIENT_DATA means one of those checks failed or could not run.
Filters
| ticker | Filter to holdings of one stock by US ticker, e.g. 'AAPL'. Case-insensitive. |
| cusip | Alternative to ticker, 9-character SEC CUSIP identifier. Useful when a security has multiple share classes with different tickers. |
| fund_name | Full or partial fund name; case-insensitive substring match. Examples: 'Berkshire', 'Bridgewater', 'Citadel'. |
| fund_cik | SEC CIK of the fund (10-digit, padded). Preferred over fund_name when known. Berkshire Hathaway = '0001067983'. |
| quarter | Period ending date in YYYY-MM-DD form (e.g. '2026-03-31'). Defaults to all quarters available in the database. |
| position_change | Filter to position-change type. Common queries: 'increased' for funds adding to a position, 'closed' for funds that exited. |
| min_value | Filter to positions with market_value >= this amount (USD). Use to focus on large positions. |
| sort_by | Field used for ordering. Default: market_value (largest positions first). |
| sort_order | Default: desc (largest first). |
| limit | Maximum records to return. Default 50, max 500. |
| cursor | Pass the next_cursor from the previous response VERBATIM to fetch the next page. Keep every other filter and the sort identical while paging. Omit to start from the top. A quarter of 13F filings runs to far more than 500 rows, so a complete picture requires paging. |
Example request
curl "https://api.keyvex.com/v1/institutional-holdings?ticker=AAPL&limit=1" \
-H "x-api-key: YOUR_KEY"
Response
{
"results": [
{
"cusip": "67066G104",
"market_value": 422736430797,
"ticker": "NVDA",
"shares_held": 2266683275,
"filing_url": "https://www.sec.gov/Archives/edgar/data/102909/000010290926000031/13F_0000102909_20251231.xml",
"filing_date": "2026-01-29",
"market_value_thousands": 422736431,
"data_source": "SEC_EDGAR_13F",
"issuer_name": "NVIDIA CORPORATION",
"accession_number": "0000102909-26-000031",
"investment_discretion": "DFND",
"share_type": "SH",
"fund_cik": "0000102909",
"shares_change_pct": null,
"id": "13f-0000102909-67066G104-2025-12-31",
"quarter": "2025-12-31",
"verification_expected": 17686,
"verification_value_expected": 6897676080637,
"shares_change": null,
"verification_status": "VERIFIED",
"verification_value_actual": 6897676080637,
"verification_actual": 17686,
"position_change": null,
"fund_name": "Vanguard Group"
}
],
"count": 1,
"has_more": true
}
Example questions you can answer
- Which funds hold the most of a given stock this quarter?
- Track an institution's position changes across quarters.
Related datasets
Hand any AI your key + the OpenAPI spec and it can pull this dataset directly. A free key works: 60 requests/day, one year of history.
Get a free key OpenAPI spec → REST docs →Not investment advice. KeyVex is a data publisher: nothing on this site or in API responses is investment, legal, tax, or compliance advice (Terms §8).