ETF Holdings API
ETF holdings by ticker and date.
Explore holdings in a clean table or call the API directly. Send a ticker and date. Get holdings with weights and exact identifiers.
Coverage
Check ticker coverage.
See whether a ticker has current holdings and which historical years are supported.
CurrentWaiting
Check current endpoint coverageCheck current endpoint coverage.
HistoricalWaiting
Check historical endpoint coverageCheck supported historical years.
ETF overlap
See what two ETFs hold in common.
Compare SPY and QQQ for shared holdings, allocation differences, unique positions, and portfolio exposure.
Compare SPY and QQQSPY · QQQ
Shared holdingsCompare the latest snapshot
Pricing
$1 per 100,000 holdings returned.
Add prepaid credits as needed. The minimum top-up is $10.
- Billing is based on the number of holdings returned.
- Authentication errors, validation errors, and requests with no holdings are not billable.
- Usage is shown by API key.
- Monthly requests
- 3,000
- Holdings returned
- 1,500,000
- Estimated daily spend
- $0.50
- Estimated monthly spend
- $15.00
- $10 top-up covers
- 1,000,000 holdings
API
Programmatic REST API access.
Ask for a ticker and date. The API returns the resolved holdings date, the SEC source form when historical data is used, and each holding's weight and identifiers.
GET
/api/v1/historical/holdings?ticker=SPY&at=1997-12-31&limit=3Need more info?Read the docs
Request
curl "https://etf-holdings.com/api/v1/historical/holdings?ticker=SPY&at=1997-12-31&limit=3" \
-H "Authorization: Bearer $ETF_HOLDINGS_API_KEY"Response
{
"ticker": "SPY",
"asOf": "1997-09-30",
"source": "N-30D",
"holdings": [
{
"weight": 0.03035840526,
"identifiers": {
"ticker": "GE",
"name": "General Electric Co.",
"original": "General Electric Co."
}
},
{
"weight": 0.021660011916,
"identifiers": {
"name": "Exxon Corp.",
"original": "Exxon Corp."
}
},
{
"weight": 0.021600987918,
"identifiers": {
"ticker": "MSFT",
"name": "Microsoft Corp. *",
"original": "Microsoft Corp. *"
}
}
]
}