Overview
Data comes from the SEC's Form 13F data sets (public), one zip per three-month filing window. A daily collector checks the SEC listing and, when a data set is new or revised, rebuilds the affected quarter: it reads every 13F-HR in the window for that quarter end plus late filings from the next window, keeps the latest original or restatement per manager and adds NEW HOLDINGS amendments to it. Rows for the same security, put/call and manager are merged. The latest eight quarter ends are kept; requests are served from that store, never from SEC live.
Change fields compare each position with the same manager's report for the previous stored quarter, matched on CUSIP and put/call. A position missing from the previous report is `new`; one in the previous report but not this one is `soldout` (shares 0, shown only with `changeType=soldout`). When the manager filed no report for the previous quarter, or the quarter is the oldest stored, every change field is null. `value` is in US dollars as filed (13F values have been reported in dollars since 2023), and `portfolioPercent` is value over the manager's total reported value, options included.
Tickers: 13F identifies securities by CUSIP, and CUSIP tables are licensed, so none is used. A CUSIP gets a ticker from SEC fails-to-deliver files (which list CUSIP and symbol), or, for common stock with a valid CUSIP check digit, from an exact issuer-name match against SEC company_tickers.json that resolves to a single company. Otherwise `ticker` is null; a ticker can map to several CUSIPs (`otherCusips`). `turnoverPercent` estimates buys and sells from share changes priced at this quarter's value per share and divides the lesser by the average of this and last quarter's total value.
Live Test Institutional Holdings Skill Skill →
The tool
Once your client is connected to the VerveKit server, this appears in its tool list as InstitutionalHoldingsSkill. It is read-only and open-world — it fetches and never mutates anything on your side — so most clients call it without asking you to confirm.
{
"name": "InstitutionalHoldingsSkill",
"arguments": {}
}Connecting
One server URL covers every skill in the catalog, including this one. Authorization is OAuth: the client opens a browser once, and there is no key to paste into a config file.
{
"mcpServers": {
"vervekit": {
"url": "https://api.vervekit.com/v1/mcp"
}
}
}https://api.vervekit.com/v1/mcpPer-client setup — Claude, Cursor, VS Code, ChatGPT — is on the MCP setup page.
Arguments
These are the properties on the tool's inputSchema, so a well-behaved client validates them before the call is made. Premium arguments are accepted on every plan but only take effect on plans that include them.
| Argument | Type | Description |
|---|---|---|
cikOptional | string | SEC Central Index Key of the 13F filer, e.g. 1067983 for Berkshire Hathaway. Returns that manager's holdings. length 0–10 |
managerOptional | string | Manager name to search for instead of cik, e.g. bridgewater. The best match is returned, with other close matches in otherMatches. length 0–100 |
tickerOptional | string | Ticker symbol. Alone, lists the managers holding it; with cik or manager, filters that manager's holdings to it. length 0–10 |
cusipOptional | string | 9-character CUSIP. Alone, lists the managers holding it; with cik or manager, filters that manager's holdings to it. length 8–9 |
periodOptionalPremium | string | Quarter to read, as a quarter end (2026-03-31) or quarter (2026Q1). Defaults to the latest quarter. |
changeTypeOptional | string | Only positions that are new, increased, decreased, unchanged or soldout since the previous quarter. Sold-out positions appear only with soldout.newincreaseddecreasedunchangedsoldout |
putCallOptional | string | Option filter: put, call, none (shares and principal only) or all. Defaults to all.putcallnoneall |
minValueOptional | number | Only positions worth at least this many US dollars. range 0–∞ |
maxValueOptional | number | Only positions worth at most this many US dollars. range 0–∞ |
sortOptional | string | Sort by value (default), shares, change (share change), changepercent or portfolio (weight).valueshareschangechangepercentportfolio |
orderOptional | string | Sort order: desc (default) or asc.descasc |
limitOptionalPremium | integer | Rows to return (1-100). Defaults to 10. range 1–100 |
offsetOptionalPremium | integer | Rows to skip, for paging through a large portfolio or holder list. range 0–∞ |
summaryOptionalPremium | boolean | Add a summary: for a manager, value change, position counts by change type, top-10 concentration and turnover; for a security, holder flows and top-10 share concentration. |
What the model gets back
The result carries a structuredContent object matching the tool's declared outputSchema, so a client reads fields without parsing prose. status is "ok" and error is null on success; a null field means the value was not available for that input, not that the call failed.
{
"status": "ok",
"error": null,
"data": {
"mode": "manager",
"period": "2026-06-30",
"quarter": "2026Q2",
"previousPeriod": "2026-03-31",
"manager": {
"cik": "0001067983",
"name": "Berkshire Hathaway Inc",
"city": "Omaha",
"state": "NE"
},
"filing": {
"formType": "13F-HR",
"accessionNumber": "0001193125-26-352200",
"filingDate": "2026-08-14",
"amendments": 0,
"url": "https://www.sec.gov/Archives/edgar/data/1067983/000119312526352200/"
},
"totalValue": 299253556246,
"positionCount": 29,
"count": 5,
"offset": 0,
"totalMatches": 29,
"holdings": [
{
"issuer": "APPLE INC",
"ticker": "AAPL",
"cusip": "037833100",
"figi": "BBG001S5N8V8",
"titleOfClass": "COM",
"shares": 227917808,
"shareType": "SH",
"value": 65950296923,
"portfolioPercent": 22.0383,
"putCall": null,
"investmentDiscretion": "DFND",
"votingAuthority": {
"sole": 227917808,
"shared": 0,
"none": 0
},
"previousShares": 227917808,
"previousValue": 57843260493,
"shareChange": 0,
"shareChangePercent": 0,
"valueChange": 8107036430,
"changeType": "unchanged",
"isNew": false
},
{
"issuer": "AMERICAN EXPRESS CO COM",
"ticker": "AXP",
"cusip": "025816109",
"figi": "BBG001S5P034",
"titleOfClass": "Stock",
"shares": 151610700,
"shareType": "SH",
"value": 51282319275,
"portfolioPercent": 17.1367,
"putCall": null,
"investmentDiscretion": "DFND",
"votingAuthority": {
"sole": 151610700,
"shared": 0,
"none": 0
},
"previousShares": 151610700,
"previousValue": 45859204536,
"shareChange": 0,
"shareChangePercent": 0,
"valueChange": 5423114739,
"changeType": "unchanged",
"isNew": false
},
{
"issuer": "COCA COLA CO",
"ticker": "KO",
"cusip": "191216100",
"figi": "BBG001S5SMQ8",
"titleOfClass": "COM",
"shares": 400000000,
"shareType": "SH",
"value": 32508000000,
"portfolioPercent": 10.863,
"putCall": null,
"investmentDiscretion": "DFND",
"votingAuthority": {
"sole": 400000000,
"shared": 0,
"none": 0
},
"previousShares": 400000000,
"previousValue": 30420000000,
"shareChange": 0,
"shareChangePercent": 0,
"valueChange": 2088000000,
"changeType": "unchanged",
"isNew": false
},
{
"issuer": "ALPHABET INC",
"ticker": "GOOGL",
"cusip": "02079K305",
"figi": "BBG009S39JY5",
"titleOfClass": "CAP STK CL A",
"shares": 78791167,
"shareType": "SH",
"value": 28157599351,
"portfolioPercent": 9.4093,
"putCall": null,
"investmentDiscretion": "DFND",
"votingAuthority": {
"sole": 78791167,
"shared": 0,
"none": 0
},
"previousShares": 54249798,
"previousValue": 15600071913,
"shareChange": 24541369,
"shareChangePercent": 45.24,
"valueChange": 12557527438,
"changeType": "increased",
"isNew": false
},
{
"issuer": "BANK OF AMER CORP COM",
"ticker": "BAC",
"cusip": "060505104",
"figi": "BBG000BD2C18",
"titleOfClass": "Stock",
"shares": 483394015,
"shareType": "SH",
"value": 27543790975,
"portfolioPercent": 9.2042,
"putCall": null,
"investmentDiscretion": "DFND",
"votingAuthority": {
"sole": 483394015,
"shared": 0,
"none": 0
},
"previousShares": 513624165,
"previousValue": 25039178044,
"shareChange": -30230150,
"shareChangePercent": -5.89,
"valueChange": 2504612931,
"changeType": "decreased",
"isNew": false
}
]
}
}
Response fields
Paths are relative to data. Premium fields are absent rather than zeroed on plans that do not include them, so check for presence instead of comparing to 0.
| Field | Type | Example | Description |
|---|---|---|---|
mode | string | manager | manager (a manager's holdings) or holders (the managers holding a security) |
period | string | 2026-06-30 | Quarter-end date of the report (YYYY-MM-DD) |
quarter | string | 2026Q2 | Quarter of the report, e.g. 2026Q2 |
previousPeriod | string | 2026-03-31 | Quarter the change fields compare against; null when there is no earlier report |
manager | object | {…} | Manager mode: the 13F filer |
manager.cik | string | 0001067983 | SEC Central Index Key, 10 digits |
manager.name | string | Berkshire Hathaway Inc | Filing manager name |
manager.city | string | Omaha | City of the filing manager |
manager.state | string | NE | State or country code of the filing manager |
filing | object | {…} | Manager mode: the report the holdings come from |
filing.formType | string | 13F-HR | 13F-HR, or 13F-HR/A when a restatement replaced the original |
filing.accessionNumber | string | 0001193125-26-352200 | SEC accession number |
filing.filingDate | string | 2026-08-14 | Date the report was filed (YYYY-MM-DD) |
filing.amendments | number | 0 | Amendments filed for this quarter |
filing.url | string | https://www.sec.gov/Archives/edgar/data/1067983/000119312526352200/ | EDGAR folder of the filing |
totalValue | number | 299253556246 | Manager mode: total reported value in US dollars; holders mode: total value of share positions in the security |
positionCount | number | 29 | Manager mode: number of positions reported |
count | number | 5 | Rows returned |
offset | number | 0 | Rows skipped |
totalMatches | number | 29 | Rows matching the filters before paging |
holdings | array[5] | Manager mode: positions, largest first by default | |
holdings.0.issuer | string | APPLE INC | Issuer name as filed |
holdings.0.ticker | string | AAPL | Ticker matched through SEC data, or null |
holdings.0.cusip | string | 037833100 | CUSIP |
holdings.0.figi | string | BBG001S5N8V8 | FIGI when the filer supplied one, else null |
holdings.0.titleOfClass | string | COM | Class of security as filed |
holdings.0.shares | number | 227917808 | Shares, or principal amount when shareType is PRN; 0 for a sold-out position |
holdings.0.shareType | string | SH | SH (shares) or PRN (principal amount) |
holdings.0.value | number | 65950296923 | Reported value in US dollars |
holdings.0.portfolioPercent | number | 22.0383 | Value as a percent of the manager's total reported value |
holdings.0.putCall | object | null | Put or Call for option positions, null for shares |
holdings.0.investmentDiscretion | string | DFND | SOLE, DFND (shared-defined) or OTR (shared-other); MIXED when rows differed |
holdings.0.votingAuthority | object | {…} | Shares by voting authority |
holdings.0.votingAuthority.sole | number | 227917808 | Shares with sole voting authority |
holdings.0.votingAuthority.shared | number | 0 | Shares with shared voting authority |
holdings.0.votingAuthority.none | number | 0 | Shares with no voting authority |
holdings.0.previousShares | number | 227917808 | Shares in the previous quarter (0 for a new position); null without an earlier report |
holdings.0.previousValue | number | 57843260493 | Value in the previous quarter in US dollars; null without an earlier report |
holdings.0.shareChange | number | 0 | Change in shares since the previous quarter |
holdings.0.shareChangePercent | number | 0 | Change in shares in percent; null for a new position |
holdings.0.valueChange | number | 8107036430 | Change in value in US dollars |
holdings.0.changeType | string | unchanged | new, increased, decreased, unchanged or soldout |
holdings.0.isNew | boolean | false | True when the position was not held in the previous quarter |
Failure modes
Errors come back as tool errors carrying a sentence the model can act on, not a bare status code. Error handling covers the full list.
| Status | What it means |
|---|---|
400 / 422 | The arguments did not validate. The message names the offending one. |
401 | The OAuth session is invalid or expired — reconnect the server. |
403 | Blocked by a key restriction or an IP allow-list. Never a bad identity. |
404 | This skill is not part of VerveKit. Check the catalog. |
429 | Out of credits, or a brief rate limit. The message tells them apart. |
A call costs 5 credits each time the tool actually runs; a model that reasons about the tool without calling it costs nothing.
Use cases
- Fund Tracking Apps
- Investor apps follow well-known managers each quarter, showing new buys, adds, trims and exits straight from the change fields.
- Institutional Ownership Pages
- Stock research sites list the largest institutional holders of a ticker with their share changes and how many funds entered or exited.
- Investor Relations Monitoring
- IR teams watch which institutions built or cut positions in their own stock and peers' stocks after each 13F deadline.
- Quant Signals
- Researchers measure crowding and conviction from holder counts, top-10 concentration and quarter-over-quarter flows across thousands of managers.
Other ways to use Institutional Holdings Skill
Set up Institutional Holdings Skill on VerveKit, or reach the same source a different way. Your VerveKit account and credits work on all of them — one key, one balance.
Related
More in Finance: