See what hedge funds and asset managers own, and who owns a stock.
Institutional Holdings returns SEC Form 13F holdings: every position a fund manager reported for a quarter, with shares, value, portfolio weight, put/call, discretion and voting authority, plus the quarter-over-quarter change on every position. Look up a manager by CIK or name, or reverse it and list every institution holding a ticker or CUSIP.
Try it — live request, no key required
No key required to try it. Get a key to use it in your app.
{
"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
}
]
}
}
About the Institutional Holdings API
A 13F API built on the SEC's Form 13F data sets, which carry every quarterly holdings report filed by institutional investment managers with over $100 million in US equities: hedge funds, mutual fund families, banks, pensions and endowments. The API keeps the latest eight quarters.
Ask for a manager by CIK or name and get each position with the issuer, ticker, CUSIP, class, shares or principal amount, value in dollars, weight in the portfolio, put or call, investment discretion and voting authority. Every plan also gets the change since the previous quarter on each position: previous shares and value, the share change in units and percent, and whether the position is new, increased, decreased, unchanged or sold out. Filter by ticker, CUSIP, value range, put/call or change type, and sort by value, shares, change or weight.
Ask for a ticker or CUSIP instead and get the reverse view: every manager holding that security, largest first, with the same change fields, plus holder count and total shares. Paid plans add earlier quarters, larger pages and paging, and a summary: a manager's value change, new and sold-out counts, top-10 concentration and turnover, or a security's net share change and holder flows. Tickers are matched to CUSIPs through SEC data and can be null for bonds, preferreds and some thinly traded issues.
How it works
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.
What people use it for
- 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.
Ways to call it
One endpoint, many ways in — REST with JSON, XML, YAML and CSV, plus GraphQL and an MCP interface for AI agents.
- JSON
- Default REST response
- XML
- Markup format
- YAML
- Human-readable
- CSV
- Tabular export
- GraphQL
- Query language
- MCP
- For AI agents
Other ways to use Institutional Holdings
Same data, same APIVerve account, same credit balance — one key works on all of them.
Which managers and quarters are covered?
How current is the data?
What does the Free plan include?
Which plan fits 10,000 holdings lookups a month?
Why is a ticker null on some holdings?
Request parameters — GET /v1/institutionalholdings
Sent in the query string. Premium parameters are accepted on every plan but only take effect on plans that include them. Anything not listed here is dropped rather than passed through.
Optional
| Parameter | Type | Example | Description |
|---|---|---|---|
cikOptional | string | 1067983 | SEC Central Index Key of the 13F filer, e.g. 1067983 for Berkshire Hathaway. Returns that manager's holdings. length 0-10 |
managerOptional | string | berkshire hathaway | 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 | AAPL | Ticker symbol. Alone, lists the managers holding it; with cik or manager, filters that manager's holdings to it. length 0-10 |
cusipOptional | string | 037833100 | 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 | 2026Q1 | Quarter to read, as a quarter end (2026-03-31) or quarter (2026Q1). Defaults to the latest quarter. |
changeTypeOptional | string | new | Only positions that are new, increased, decreased, unchanged or soldout since the previous quarter. Sold-out positions appear only with soldout.newincreaseddecreasedunchangedsoldout |
putCallOptional | string | none | Option filter: put, call, none (shares and principal only) or all. Defaults to all.putcallnoneall |
minValueOptional | number | 1000000 | Only positions worth at least this many US dollars. range 0-inf |
maxValueOptional | number | 1000000000 | Only positions worth at most this many US dollars. range 0-inf |
sortOptional | string | value | Sort by value (default), shares, change (share change), changepercent or portfolio (weight).valueshareschangechangepercentportfolio |
orderOptional | string | desc | Sort order: desc (default) or asc.descasc |
limitOptionalPremium | integer | 25 | Rows to return (1-100). Defaults to 10. range 1-100 |
offsetOptionalPremium | integer | 25 | Rows to skip, for paging through a large portfolio or holder list. range 0-inf |
summaryOptionalPremium | boolean | true | 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. |
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"Authentication
Send your key in the x-api-key header. That is the only auth step — no token exchange, and no per-endpoint scope to configure.
| Header | When | Value |
|---|---|---|
x-api-keyRequired | Every request | Your API key. Header names are case-insensitive, so X-API-Key is the same header. |
AuthorizationAlternate | Instead of the above | Bearer <key> — for clients that only expose bearer auth. Resolves to the same account and the same billing. |
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.
Response — GET /v1/institutionalholdings
Every APIVerve endpoint returns the same three top-level keys, so one response handler covers your whole integration: status, error and data. Only data changes shape.
{
"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 |
Response headers
Every response carries your balance, so your own code always knows where it stands without polling anything. All four are exposed to browsers through CORS.
| Header | What it carries |
|---|---|
x-api-remaining-credits | Credits left in the current cycle |
x-api-credits-used | Credits spent in the current cycle |
x-api-max-credits | The allowance for the cycle |
x-api-version | Version of the endpoint that answered |
Errors
Read the HTTP status first, then error for the specific reason. The body names the parameter that has to change.
| Status | Meaning | What to do |
|---|---|---|
400 | Input was rejected | Read error; it names the parameter that has to change. |
401 | Key missing or invalid | Check the header name and the key value. |
403 | Key valid, but not permitted here | A key restriction or an IP allow-list — never a bad key. |
429 | Rate limited, or out of credits | Read error to tell them apart, then back off or top up. |
What a call costs — 5 credits per call
Credits are shared across every APIVerve API — one balance, one key, one bill. Failed requests never count against it, so a rejected input costs nothing.
| Plan | Per month | Credits | Institutional Holdings calls | Per 1,000 calls |
|---|---|---|---|---|
| Free | Free | 200 | 40 | Free |
| Starter | $29.99 | 200,000 | 40,000 | $0.75 |
| Pro | $99.99 | 1,000,000 | 200,000 | $0.50 |
| Mega | $299.99 | 4,000,000 | 800,000 | $0.37 |
Calls are what the credits buy at this API's rate — spend them here, on any of the other APIs, or across both. Nothing is reserved per endpoint.
Call it from cURL — GET /v1/institutionalholdings
No SDK to install — this is a plain HTTPS call to /v1/institutionalholdings with your key in the x-api-key header. Swap in a real key and it runs as-is.
curl "https://api.apiverve.com/v1/institutionalholdings" \
-H "x-api-key: YOUR_API_KEY"Resources
Call it from Node.js — GET /v1/institutionalholdings
No SDK to install — this is a plain HTTPS call to /v1/institutionalholdings with your key in the x-api-key header. Swap in a real key and it runs as-is.
const res = await fetch("https://api.apiverve.com/v1/institutionalholdings", {
headers: { "x-api-key": "YOUR_API_KEY" },
});
const { data } = await res.json();
console.log(data);Resources
Call it from Python — GET /v1/institutionalholdings
No SDK to install — this is a plain HTTPS call to /v1/institutionalholdings with your key in the x-api-key header. Swap in a real key and it runs as-is.
import requests
res = requests.get(
"https://api.apiverve.com/v1/institutionalholdings",
headers={"x-api-key": "YOUR_API_KEY"},
)
print(res.json()["data"])Resources
Call it from C# / .NET — GET /v1/institutionalholdings
No SDK to install — this is a plain HTTPS call to /v1/institutionalholdings with your key in the x-api-key header. Swap in a real key and it runs as-is.
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("x-api-key", "YOUR_API_KEY");
var json = await client.GetStringAsync("https://api.apiverve.com/v1/institutionalholdings");
Console.WriteLine(json);Resources
Call it from Go — GET /v1/institutionalholdings
No SDK to install — this is a plain HTTPS call to /v1/institutionalholdings with your key in the x-api-key header. Swap in a real key and it runs as-is.
req, _ := http.NewRequest("GET", "https://api.apiverve.com/v1/institutionalholdings", nil)
req.Header.Set("x-api-key", "YOUR_API_KEY")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))Resources
Call it from PHP — GET /v1/institutionalholdings
No SDK to install — this is a plain HTTPS call to /v1/institutionalholdings with your key in the x-api-key header. Swap in a real key and it runs as-is.
$ch = curl_init("https://api.apiverve.com/v1/institutionalholdings");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["x-api-key: YOUR_API_KEY"]);
$response = curl_exec($ch);
echo $response;Resources
Call it from Ruby — GET /v1/institutionalholdings
No SDK to install — this is a plain HTTPS call to /v1/institutionalholdings with your key in the x-api-key header. Swap in a real key and it runs as-is.
require "net/http"
uri = URI("https://api.apiverve.com/v1/institutionalholdings")
req = Net::HTTP::Get.new(uri)
req["x-api-key"] = "YOUR_API_KEY"
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |h| h.request(req) }
puts res.bodyResources
Zero-code embed — one snippet, no backend
Drop an interactive Institutional Holdings form onto any page. The widget calls the API for you, so no key ever appears in your markup and there is nothing to deploy.
Changelog — Institutional Holdings API
Every change to this endpoint, newest first. Breaking changes ship as a new version and the previous one keeps serving — response fields are added, never removed or retyped in place, so an integration written against v1 keeps working.
Entries are picked up from dated catalog snapshots, so the first one appears after the next snapshot that moves something. A period where nothing changed produces no entry — silence is a valid changelog for the Institutional Holdings API.
Finance
- Balance Sheet
- Bank Lookup
- Benchmark Rate
- BIN Lookup
- Bitcoin Price
- Cash Flow Statement
- Company Lookup
- Cost of Living
- CPI Inflation
- Currency Converter
- Currency Rate
- Currency Symbols
- Dividends
- Earnings Report
- Energy Prices
- Ethereum Price
- Exchange Rate
- Financial Ratios
- Gas Prices
- GDP Data
- Global Stock Market
- Gold Price
- I-Bond Rates
- IFSC Lookup
- Income Statement
- Income Tax Brackets
- Income Tax Calculator
- Inflation Rate
- Insider Trading
- Institutional Holdings
- Interest Rate
- Jobs Report
- Loan Calculator
- Minimum Wage
- Mortgage Calculator
- Mortgage Rate
- National Debt
- Palladium Price
- Platinum Price
- Population Data
- Purchasing Power
- Routing Number Lookup
- Sales Tax Calculator
- Sales Tax Lookup
- Sanctions Screening
- SEC Filings
- Silver Price
- Stock Exchange
- Stock Market Open Times
- SWIFT Code Lookup
- Ticker News
- Ticker Symbols
- Trade Balance
- Treasury Yields
- Unemployment Rate
- VAT Rates