SEC filings & market structure

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.

EndpointGET /v1/institutional-holdings
SourceSEC Form 13F
Authx-api-key, a free key works

Live from the data

Loading the latest numbers…

What it returns

One record per result. Fields (from a live response):

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

tickerFilter to holdings of one stock by US ticker, e.g. 'AAPL'. Case-insensitive.
cusipAlternative to ticker, 9-character SEC CUSIP identifier. Useful when a security has multiple share classes with different tickers.
fund_nameFull or partial fund name; case-insensitive substring match. Examples: 'Berkshire', 'Bridgewater', 'Citadel'.
fund_cikSEC CIK of the fund (10-digit, padded). Preferred over fund_name when known. Berkshire Hathaway = '0001067983'.
quarterPeriod ending date in YYYY-MM-DD form (e.g. '2026-03-31'). Defaults to all quarters available in the database.
position_changeFilter to position-change type. Common queries: 'increased' for funds adding to a position, 'closed' for funds that exited.
min_valueFilter to positions with market_value >= this amount (USD). Use to focus on large positions.
sort_byField used for ordering. Default: market_value (largest positions first).
sort_orderDefault: desc (largest first).
limitMaximum records to return. Default 50, max 500.
cursorPass 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

Related datasets

Query Institutional Holdings (13F) from your AI

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 →
← All 60+ datasets