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 API →
Endpoint
One host, one path per API. The block below shows this call in four languages; every one of them is the same HTTP request. Making requests covers the timeouts, retries and parameter rules that apply to all of them. The SDKs wrap the same call in a typed client.
curl "https://api.apiverve.com/v1/institutionalholdings?cik=1067983&manager=berkshire%20hathaway&ticker=AAPL&cusip=037833100&period=2026Q1&changeType=new&putCall=none&minValue=1000000&maxValue=1000000000&sort=value&order=desc&limit=25&offset=25&summary=true" \
-H "x-api-key: your_api_key_here"const res = await fetch('https://api.apiverve.com/v1/institutionalholdings?cik=1067983&manager=berkshire%20hathaway&ticker=AAPL&cusip=037833100&period=2026Q1&changeType=new&putCall=none&minValue=1000000&maxValue=1000000000&sort=value&order=desc&limit=25&offset=25&summary=true', {
headers: { 'x-api-key': 'your_api_key_here' },
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const { data } = await res.json();
console.log(data);import requests
res = requests.get(
"https://api.apiverve.com/v1/institutionalholdings?cik=1067983&manager=berkshire%20hathaway&ticker=AAPL&cusip=037833100&period=2026Q1&changeType=new&putCall=none&minValue=1000000&maxValue=1000000000&sort=value&order=desc&limit=25&offset=25&summary=true",
headers={"x-api-key": "your_api_key_here"},
timeout=15,
)
res.raise_for_status()
print(res.json()["data"])package main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, _ := http.NewRequest("GET", "https://api.apiverve.com/v1/institutionalholdings?cik=1067983&manager=berkshire%20hathaway&ticker=AAPL&cusip=037833100&period=2026Q1&changeType=new&putCall=none&minValue=1000000&maxValue=1000000000&sort=value&order=desc&limit=25&offset=25&summary=true", nil)
req.Header.Set("x-api-key", "your_api_key_here")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(string(out))
}Replace your_api_key_here with the key from your dashboard. When the inputs arrive as a list rather than one at a time, batch requests run up to 200 of them through this same API in a single call.
Authentication
Send your key in the x-api-key header. That is the only auth step — there is no token exchange and no per-endpoint scope to configure. Authentication covers creating, rotating and revoking keys.
A 401 means the key is missing, invalid or expired. A 403 means the key is valid but not permitted here — blocked by a key restriction or an IP allow-list. Running out of credits is a 429.
Parameters
Sent in the query string. Premium parameters are accepted on every plan but only take effect on plans that include them.
| Parameter | 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. |
Response
Every API returns the same three top-level keys, so one response handler covers your whole integration: status, error and data. Only data changes shape. Response format covers the envelope, the other output formats and how premium fields are withheld.
{
"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 |
cik | string | "0001067983" | SEC Central Index Key, 10 digits |
name | string | "Berkshire Hathaway Inc" | Filing manager name |
city | string | "Omaha" | City of the filing manager |
state | string | "NE" | State or country code of the filing manager |
filing | object | {...} | Manager mode: the report the holdings come from |
formType | string | "13F-HR" | 13F-HR, or 13F-HR/A when a restatement replaced the original |
accessionNumber | string | "0001193125-26-352200" | SEC accession number |
filingDate | string | "2026-08-14" | Date the report was filed (YYYY-MM-DD) |
amendments | number | 0 | Amendments filed for this quarter |
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 | |
issuer | string | "APPLE INC" | Issuer name as filed |
ticker | string | "AAPL" | Ticker matched through SEC data, or null |
cusip | string | "037833100" | CUSIP |
figi | string | "BBG001S5N8V8" | FIGI when the filer supplied one, else null |
titleOfClass | string | "COM" | Class of security as filed |
shares | number | 227917808 | Shares, or principal amount when shareType is PRN; 0 for a sold-out position |
shareType | string | "SH" | SH (shares) or PRN (principal amount) |
value | number | 65950296923 | Reported value in US dollars |
portfolioPercent | number | 22.0383 | Value as a percent of the manager's total reported value |
putCall | object | null | Put or Call for option positions, null for shares |
investmentDiscretion | string | "DFND" | SOLE, DFND (shared-defined) or OTR (shared-other); MIXED when rows differed |
votingAuthority | object | {...} | Shares by voting authority |
sole | number | 227917808 | Shares with sole voting authority |
shared | number | 0 | Shares with shared voting authority |
none | number | 0 | Shares with no voting authority |
previousShares | number | 227917808 | Shares in the previous quarter (0 for a new position); null without an earlier report |
previousValue | number | 57843260493 | Value in the previous quarter in US dollars; null without an earlier report |
shareChange | number | 0 | Change in shares since the previous quarter |
shareChangePercent | number | 0 | Change in shares in percent; null for a new position |
valueChange | number | 8107036430 | Change in value in US dollars |
changeType | string | "unchanged" | new, increased, decreased, unchanged or soldout |
isNew | boolean | false | True when the position was not held in the previous quarter |
Errors
Read the HTTP status first, then error for the specific reason. The body names the parameter that has to change. Error handling covers the full status list and which of them are worth retrying.
| Status | Meaning | What to do |
|---|---|---|
400 | Input was rejected | Read error; it names the parameter. |
401 | Key missing or invalid | Check the header name and the key value. |
403 | Key valid, but not permitted | A key restriction or IP allow-list; see key scoping. |
429 | Rate limited, or out of credits | Read error to tell them apart; see rate limits. |
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
Set up Institutional Holdings on APIVerve, or reach the same source a different way. Your APIVerve account and credits work on all of them — one key, one balance.
Related
More in Finance: