Free ETF Overlap API — Compare Any Two ETFs
Find out if your ETFs are secretly holding the same stocks. Our free API returns exact overlap percentages, shared holdings with weight breakdowns, and a diversification verdict.
Endpoint
GET https://securitiesdb.com/api/v1/etfs/overlap?etf1=SPY&etf2=IVV
Parameters
| Param | Required | Description |
|---|---|---|
| etf1 | Yes | First ETF ticker (e.g. SPY) |
| etf2 | Yes | Second ETF ticker (e.g. IVV) |
Example Response
{
"status": "success",
"data": {
"etf1": "SPY",
"etf2": "IVV",
"overlap_pct": 99.7,
"shared_holdings": 503,
"etf1_unique_holdings": 0,
"etf2_unique_holdings": 0,
"verdict": "Near-duplicate — little diversification benefit",
"top_shared_holdings": [
{
"ticker": "AAPL",
"name": "Apple Inc",
"weight_in_etf1": 7.12,
"weight_in_etf2": 7.14,
"overlap_contribution": 7.12
}
]
}
}Python Example
import requests
url = "https://securitiesdb.com/api/v1/etfs/overlap"
params = {"etf1": "VTI", "etf2": "VOO"}
response = requests.get(url, params=params)
data = response.json()["data"]
print(f"Overlap: {data['overlap_pct']}%")
print(f"Shared holdings: {data['shared_holdings']}")
print(f"Verdict: {data['verdict']}")
# Top shared positions
for h in data["top_shared_holdings"][:5]:
print(f" {h['ticker']}: {h['weight_in_etf1']:.1f}% / {h['weight_in_etf2']:.1f}%")How Overlap Is Calculated
For each stock held by both ETFs, we take the minimum weight in either fund. The overlap is the sum of these minimums, capped at 100%.
overlap = Σ min(weight_in_etf1, weight_in_etf2)
This is the standard methodology used by institutional investors. Two ETFs tracking the same index (e.g. SPY and IVV both track S&P 500) will show ~99% overlap.
Common Use Cases
- Portfolio deduplication — Check if your ETFs overlap before adding a new position
- Tax-loss harvesting — Find similar-but-not-identical ETFs to avoid wash sale rules
- Robo-advisor audit — Verify your robo-advisor isn't double-charging for overlapping funds
- Research — Study how different index methodologies lead to different holdings