13F holdings API

13F holdings data comes from Form 13F-HR, which institutional managers with $100M or more in 13F securities file within 45 days of each quarter-end. The ownership endpoints serve it from both sides: who holds a ticker, and what a manager holds. Schedule 13D and 13G filings, which disclose stakes above 5%, are served as a separate blockholders list.

A holder is a filer family: a manager's filing entities are summed into one row with a stable holderKey. History reaches back to the 2017-03-31 quarter, 13D/13G coverage runs from 2015, and values are in USD because Form 13F is filed in USD. By default a response is the newest quarter that has passed a completeness check; the newest quarter on file can be a partial one.

Who holds a ticker, and what a manager holds

curl
curl -s "https://api.distillmarkets.com/api/v1/sec/ownership/AAPL" \
-H "X-Api-Key: $DISTILL_API_KEY"
 
curl -s "https://api.distillmarkets.com/api/v1/sec/managers/vanguard?limit=3" \
-H "X-Api-Key: $DISTILL_API_KEY"
 
curl -s "https://api.distillmarkets.com/api/v1/sec/ownership/AAPL/blockholders" \
-H "X-Api-Key: $DISTILL_API_KEY"
python (requests)
import os
import requests
 
HEADERS = {"X-Api-Key": os.environ["DISTILL_API_KEY"]}
BASE = "https://api.distillmarkets.com"
 
r = requests.get(f"{BASE}/api/v1/sec/ownership/AAPL", headers=HEADERS, timeout=30)
r.raise_for_status()
own = r.json()
print(own["periodOfReport"], own["isPeriodComplete"], own["holdersCount"])
for h in own["topHolders"]:
print(h["rank"], h["holderName"])

Sample response

GET /api/v1/sec/ownership/AAPL
{
"ticker": "AAPL",
"periodOfReport": "<quarter-end date>",
"isPeriodComplete": <true|false>,
"holdersCount": <number>,
"filerCikCount": <number>,
"totalValue": <number, USD>,
"totalShares": <number>,
"topHolders": [
{ "rank": <number>, "holderName": "<string>", "holderKey": "<string>" }
],
"note": "<string>"
}
Shape only. This endpoint needs an API key, so no response was captured for it. Field names come from the endpoint reference; <...> marks a value that varies.
Manager portfolio: Vanguard, 13F quarter ended 2026-06-30
{
"holderKey": "vanguard",
"holderName": "The Vanguard Group",
"periodOfReport": "2026-06-30",
"isPeriodComplete": true,
"positionCount": 5014,
"totalValue": 7799885071085.00,
"storedPositionCount": 200,
"storedValueShare": 0.729682,
"positions": [
{
"rank": 1,
"ticker": "NVDA",
"value": 462177352662.00,
"shares": 2309847332,
"putCall": null,
"isPrincipalAmount": false
},
{
"rank": 2,
"ticker": "AAPL",
"value": 418590626300.00,
"shares": 1446608468,
"putCall": null,
"isPrincipalAmount": false
},
{
"rank": 3,
"ticker": "MSFT",
"value": 272652405713.00,
"shares": 730932405,
"putCall": null,
"isPrincipalAmount": false
}
]
}
Real response, captured Oct 4, 2026. Fetched from the public feed behind the /manager page, trimmed to the first three of the ten positions this feed returns. storedPositionCount is a field of the record. Keyed responses are tier-dependent; see the endpoint reference.

Limits

Related