get_institutional_holdings
Returns SEC Form 13F holdings: the quarterly long-equity positions of every institutional investment manager that files a 13F ($100M+ in 13(f) securities), whole books, every quarter since 2013-06-30. Each record is one (fund, security, quarter). Use this when the user asks which institutions hold a stock, what a fund owns, how a position changed quarter over quarter, or about "whale" activity in a name. Freshness: 13Fs are due 45 days after quarter end. Every 13F on EDGAR's daily list is normally loaded within a day of filing, deadline days included, and some sooner (EDGAR is also checked every 4 hours) (loaded_from "edgar"). Quarters covered by SEC's quarterly 13F data sets come from them (loaded_from "sec_dataset"). 13F does NOT include short positions, cash, most options, or non-US-listed equities. position_change ('new', 'increased', 'decreased', 'closed', 'unchanged') is measured against the same fund's whole prior-quarter book. Amendments are applied as filed: a RESTATEMENT replaces the report; a NEW HOLDINGS amendment adds to it, and a security it lists again is shown once at the sum, with combined_accessions naming every filing in it. form is '13F-HR' or '13F-HR/A'; amendment_type is 'RESTATEMENT', 'NEW HOLDINGS', or null. issuer_name is the security's registered name where known, otherwise the name 13F filers report for it. A ticker query follows the security (its CUSIP) across a ticker change, so older quarters are included (query.resolved_cusips lists the CUSIPs matched); on those older rows the ticker shown may be the security's current one. Values are US dollars. Filings before 2023 reported thousands and are multiplied by 1000. A filing that used the other unit is corrected once market prices confirm it (units_corrected true; value_as_filed holds the filed number). Where a filing's values could not be confirmed against market prices, market_value is null, value_as_filed holds the number as filed, units_note says why, and the row is left out of value sorts and min_value. A filing whose share counts do not line up with the fund's neighbouring filings is left out of shares_held sorts. On a fund's answer, coverage_warning says when a sort leaves filings out and which sort lists them; a security's or a quarter's holders ranked by value or shares simply omit such filings. portfolio_weight_pct is the position's share of the fund's total reported value that quarter. verification_status VERIFIED means the filing matches its own declared row count and, within rounding of up to $1 a row (filings before 2023, $1,000 a row, when they reported thousands), its total value: a consistency check, not a price check. Older filings may still read INSUFFICIENT_DATA on a gap this small until they are re-checked. INSUFFICIENT_DATA means that check failed or could not run, the values look filed in the wrong unit (a 2023+ filing in thousands, or a pre-2023 filing in dollars) but could not be confirmed, or the filing's values or share counts do not line up with market prices or the fund's neighbouring filings. Where such a filing's rows still show a market_value or shares_held, those numbers are as filed and unconfirmed. Give at least one filter that narrows the search: a fund (fund_cik or fund_name), a security (ticker or cusip), or a quarter. With no filter at all, the answer is the latest complete quarter (query.quarter says which). sort_by shares_held or shares_change_pct needs a quarter plus a fund or a security; position_change needs a fund or a security. Otherwise the call answers FILTER_REQUIRED and names the filter to add.
Tool call template
This tool declares no required parameters. Add optional parameters from the input schema as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {},
"name": "get_institutional_holdings"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| cusip | No | Alternative to ticker — 9-character SEC CUSIP identifier. Useful when a security has multiple share classes with different tickers. | |
| limit | No | Maximum records to return. Default 50, max 500. | |
| cursor | No | 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. | |
| ticker | No | Filter to holdings of one stock by US ticker, e.g. 'AAPL'. Case-insensitive. Follows the security across a ticker change. | |
| quarter | No | Period end, YYYY-MM-DD (e.g. '2026-03-31'). With a fund or security and no quarter, every quarter is returned; with no filter at all, the latest complete quarter. | |
| sort_by | No | Field used for ordering. Default: market_value (largest positions first). shares_held and shares_change_pct need a quarter plus a fund or security. | |
| fund_cik | No | SEC CIK of the fund (10-digit, padded). Preferred over fund_name when known. Berkshire Hathaway = '0001067983'. | |
| fund_name | No | Full or partial fund name, at least 3 characters; case-insensitive, and it matches every name the manager has filed under (query.resolved_fund_ciks lists the managers). A name matching more than 20 managers answers FILTER_REQUIRED; use fund_cik. Examples: 'Berkshire', 'Bridgewater', 'Citadel'. | |
| min_value | No | Filter to positions with market_value >= this amount (USD). Use to focus on large positions. | |
| sort_order | No | Default: desc (largest first). | |
| position_change | No | Filter to position-change type. Common queries: 'increased' for funds adding to a position, 'closed' for funds that exited. |