How to check how much two ETFs overlap, and what a portfolio holds

Overlap by weight or by count, two funds or a whole portfolio, on holdings that may be a day or a quarter old. The tools, the arithmetic and what it misses.

For two equity ETFs, ETF Research Center gives overlap by weight free with a login: the smaller of the two weights for every shared stock, summed. For a whole US portfolio, ETF Insider rolls every fund down to its stocks on quarterly SEC holdings; Parqet's X-Ray does it for European portfolios on a paid plan. What breaks is the holdings date, two share classes of one company, and funds that hold other funds.

The short way

There are two questions here, and the tools split along them.

  • Do these two funds hold the same things? That is pairwise overlap. Use ETF Research Center's Fund Overlap with a free Basic login, which lifts the five-row limit anonymous visitors get.
  • What does my whole portfolio hold underneath? That is a look-through: every fund broken into its holdings, scaled by how much of your money is in that fund, and added up. Use ETF Insider for US-listed funds and Parqet's X-Ray for a European portfolio already tracked there.

Before reading either number, find the date of the holdings it was computed from.

What the options are

Pairwise. ETF Research Center prints overlap by weight, the count of shared holdings, the share of each fund found in the other, the sector drift and the largest over- and underweights, for any two equity ETFs in its US, Canadian and UCITS universes. Bond ETFs are out of its scope. The comparison of ETF Research Center and ETF Insider works through which of the two answers which question.

A whole portfolio, US. ETF Insider takes ETFs, mutual funds and stocks by symbol, or a CSV of symbol and quantity, and draws an overlap matrix for every pair together with the roll-up to single names, sectors and countries. Its help page says overlap is the percentage of assets shared between the funds, without saying whether that is by weight or by count.

A whole portfolio, Europe. Parqet's X-Ray adds up every stock across all the ETFs, funds and directly held shares in a portfolio, on the Plus and Investor plans only. justETF covers UCITS funds and has no overlap tool; what it has is each fund's Exposure tab, with the top ten holdings, countries and sectors updated once a month, and an app that its page says shows a portfolio's split by country, sector and individual security. Trackinsight runs the other way round: its free Stock Exposure Finder lists which ETFs hold a given stock, and its portfolio analytics, holding overlap included, come in full only with the Enterprise product.

Morningstar's X-Ray used to be the free answer outside the US. It was retired there in June 2025, and what to use instead of Morningstar Portfolio Manager and X-Ray covers what each replacement does and does not reproduce.

The arithmetic, if you have the files

With two holdings files from the issuers — getting ETF holdings as data covers where they come from — both numbers are a few lines:

# Weights in percent of each fund, keyed by one identifier per company.
# Top lines only, for illustration; a real file has every holding.
fund_a = {"AAPL": 7.0, "MSFT": 6.0, "NVDA": 6.5, "AMZN": 4.0, "XOM": 1.0, "JPM": 1.5}
fund_b = {"AAPL": 12.0, "MSFT": 11.0, "NVDA": 12.5, "AMZN": 7.0}

shared = fund_a.keys() & fund_b.keys()

# By weight: the smaller of the two weights for each shared holding, summed.
# The same number from either side.
by_weight = sum(min(fund_a[s], fund_b[s]) for s in shared)

# By count: shared names as a share of each fund's names. Two numbers.
a_in_b = len(shared) / len(fund_a)
b_in_a = len(shared) / len(fund_b)

print(f"overlap by weight: {by_weight:.1f}%")
print(f"count: {a_in_b:.0%} of A's names are in B, {b_in_a:.0%} of B's are in A")

# Look-through: what the whole portfolio holds in each company.
portfolio = {"A": 0.6, "B": 0.4}          # your money in each fund
funds = {"A": fund_a, "B": fund_b}
exposure = {}
for f, w in portfolio.items():
    for s, h in funds[f].items():
        exposure[s] = exposure.get(s, 0) + w * h
for s, e in sorted(exposure.items(), key=lambda x: -x[1]):
    print(f"{s}: {e:.2f}% of the portfolio")

The weight figure is symmetric; the count figures are not, which is why a small fund inside a large one reads as almost wholly duplicated from its own side and barely present from the other. On 7 October 2026 ETF Research Center's table for SPY against QQQ showed the method row by row, the overlap column equal to the smaller weight in every line, for 54% in total. And pairwise figures do not add up to a portfolio: the overlap of A with B says nothing about C, which is what the look-through loop is for.

Where this breaks

Stale holdings. Each tool reads a different file at a different date, and why an ETF's price, NAV and holdings differ explains the clocks. A US ETF operating under Rule 6c-11 publishes its full holdings every business day; the SEC's copy from Form N-PORT is quarterly and up to 60 days late. ETF Insider's FAQ says its holdings update with those quarterly filings. Trackinsight's and justETF's are month ends, a month or more behind. ETF Research Center's public overlap page printed no date at all. For a broad index fund the difference rarely matters; for an active or thematic fund the list may have turned over since.

Two share classes, two lines. S&P Dow Jones Indices has included each listed share class as a separate line since 2015, and the SPY holdings file dated 7 October 2026 lists Alphabet's class A at 3.06% and class C at 2.46%, with different tickers and CUSIPs. A tool or a script that matches on the security rather than the company counts a fund holding only one class and a fund holding only the other as sharing nothing. The same happens between a company's home listing in a global fund and its American depositary receipt in a US one: one company, two identifiers. CUSIP, ISIN and FIGI covers what each identifier names. Match on the issuer before summing, and check whether a tool's top lines show both classes.

Lines that are not stocks. Index funds equitise cash with futures, and a swap-based fund holds a basket that is not its index. Parqet says that since February 2025 its X-Ray shows a swap-based ETF with the holdings of a physically replicating ETF on the same index. That is a sensible stand-in for exposure and not what the fund owns.

Funds that hold funds. An allocation ETF or a fund-of-funds lists other funds as its holdings. A tool that does not open those lines again sees one holding called a fund and finds no overlap with anything, however much the underlying stocks repeat. None of the cards here documents whether the tool recurses. Test it on a fund you know is a wrapper before trusting the result, and in a script, replace each fund line with that fund's own holdings scaled by its weight.

Funds outside the daily rule. UCITS ETFs are not under Rule 6c-11. ESMA's guidelines require a UCITS ETF to state its portfolio transparency policy and where the information can be found, not a frequency. The Central Bank of Ireland's UCITS Q&A of April 2025 lets an Irish ETF disclose its holdings either daily or periodically, the periodic route requiring quarter-end holdings to be public within 30 business days, with daily information going to authorised participants and market makers. An overlap figure for a European fund may therefore rest on a quarter-end list however recent the tool's own date stamp looks. A US mutual fund is not under Rule 6c-11 either, and in ETF Insider, whose holdings come mostly from the quarterly SEC filings, a mutual fund line in a look-through is a quarter-end view.

If you outgrow this

When the question is the whole portfolio, tracked over time, a look-through needs your actual positions, and that is a tracker's job — Parqet's X-Ray is the one in this catalogue, and the portfolio trackers page has the rest.

When you need the holdings themselves, dated and archived, the script above is only as good as its inputs; getting ETF holdings as data covers the daily issuer files, the quarterly SEC data sets and the paid feeds. The rest of the ETF tools are on the ETF research page.

The tools that do this

In the order this page recommends trying them. Paid placement does not affect this order.

  1. ETF Research Center

    Two equity ETFs at a time, by weight and by count from both sides, over US, Canadian and UCITS funds. Full results with a free login; no date on the holdings.

    Holdings-level ETF research — overlap, stock locator and fundamentals rolled up per fund.

    $29/moFree tier

  2. ETF Insider

    A portfolio of US-listed ETFs, mutual funds and stocks, as an overlap matrix and a roll-up to single names. Four portfolios free; holdings are quarterly.

    Look-through overlap, concentration and correlation for a portfolio of US funds.

    $14/moFree tier

  3. Parqet

    X-Ray adds up every stock across a tracked portfolio's ETFs, funds and shares. Plus plan, EUR 11.99 a month; built for German brokers.

    German portfolio tracker built on broker PDF imports, with a read-only MCP server.

    €11.99/moFree tier

  4. justETF

    UCITS only. Each fund's top ten holdings, countries and sectors, updated monthly, and a country, sector and security breakdown of a portfolio in its app.

    A screener and portfolio planner for European UCITS ETFs — no US listings, no API.

    €14.90/moFree tier

  5. Trackinsight

    The reverse lookup, free, across 15,875 funds — which ETFs hold a given stock. Holding overlap itself sits with the Enterprise product.

    A free global ETF screener — 15,875 funds across listing venues, with daily flows.

    Free tier onlyFree tier

FAQ

What does "54% overlap" between two ETFs mean?

On ETF Research Center it is overlap by weight. For every stock both funds hold, take the smaller of its two weights, and add those up. On 7 October 2026 SPY against QQQ came to 54%, while 84% of QQQ's holdings appeared in SPY and only 17% of SPY's in QQQ. The weight figure is the same from either side; the count figures are not.

Can I check the overlap of UCITS ETFs?

Pairwise, yes. ETF Research Center's overlap tool takes UCITS funds, London listings included. justETF has no overlap tool, only each fund's top ten holdings, countries and sectors, and Parqet's X-Ray does the portfolio look-through on its Plus plan. ETF Insider takes US listings only.

Why does the overlap tool show a different holdings list from the issuer's website?

Usually because of the date. A US ETF under Rule 6c-11 publishes holdings every business day, while ETF Insider works from quarterly SEC filings and Trackinsight and justETF from month-end data. Cash, futures and the price used to compute each weight also differ between files.

Is the overlap the same as how correlated two funds are?

No. Overlap counts shared holdings; correlation measures how the two funds' returns moved together. Two funds with no stock in common can move closely together, and two funds sharing most of their names can diverge if the weights differ. ETF Insider shows both, as separate matrices.

Sources

  1. ETF Overlap — ETF Research Center (AltaVista Research), read
  2. Help — ETF Insider, read
  3. Parqet X-Ray — Parqet, read
  4. Parqet X-Ray — blog — Parqet, read
  5. The justETF app — justETF, read
  6. ETF constituents — tutorial — justETF, read
  7. ETF Portfolio Insights — Trackinsight, read
  8. SPDR S&P 500 ETF Trust daily holdings file — State Street Global Advisors,
  9. S&P U.S. Indices Methodology Update — S&P Dow Jones Indices, . The separate-line treatment it announced is the one the SPY holdings file of 7 October 2026 shows, with Alphabet's class A and class C on two lines.
  10. UCITS Q&A, 42nd Edition — Central Bank of Ireland,
  11. Guidelines on ETFs and other UCITS issues (ESMA/2014/937) — European Securities and Markets Authority, read

The catalogue next door

This page names a handful of cards. The rest of them are in ETF Research & Screeners, each filled in against the same schema, with the fields to narrow it yourself.

Last updated . Corrected in place: this is a reference page, not a dated post.

Report an error on this page

Quote the line and say what it should be.

The vendor’s page, filing or documentation that says otherwise.

Only if you want to hear back. Never published.

Read by a person. It fixes a fact and moves nothing else.