ETF Look-Through

Live

Finance / Tool

See the actual stocks behind your ETFs - and how much of each you really own.

ETF Look-Through in dark mode - a $23,340 demo portfolio of XEQT, VOO, QQQ and VFV decomposed into 105 stocks, with NVIDIA on top at 6.78%, colour-capped summary tiles, a top-exposures donut, a market-mix bar, and the light/dark theme toggle up top

What it does

Index investors hold the same stocks many times over without seeing it - the Microsoft inside VOO is also inside VFV and XEQT. ETF Look-Through decomposes every fund in your portfolio into its published holdings and adds up the overlap, so before you buy a stock directly you can see exactly how much of it you already own, which funds it comes through, and what share of your money sits in each market.

Current features

  • Portfolio builder - pick from a curated catalog of 27 popular US and Canadian ETFs, or add direct stock positions that merge into the same look-through
  • All-in-one funds unwrapped - XEQT, VEQT, XGRO and VGRO decompose through their underlying funds, bond sleeves and all
  • Auto-add any ETF by ticker - the page fetches a fund's top-25 holdings and live price on the fly and publishes it to a shared community catalog (Firestore), so the next visitor gets it too
  • Live prices - stockanalysis.com quotes direct for US listings, Yahoo through CORS proxies for TSX ones, ECB for the USD/CAD rate, auto-refreshing when over an hour stale; every price stays hand-editable
  • Answer card - search a ticker and get the direct answer: you already own $X of it, through these funds
  • Donut of top exposures, market-mix bar (US / Canada / international / emerging / bonds), and a searchable holdings table with per-fund source chips
  • No accounts, no build step - entries persist in the browser and export/import as JSON

Tech stack

  • Vanilla JS
  • SVG
  • Firebase Firestore

What I learned

The hard part was never the math - it was data honesty. Public holdings pages itemize only a fund's top ~25 positions, so the UI budgets for what it does not know: an explicit coverage number, visible 'smaller holdings' rows, and a warning when an auto-added fund is really a fund of funds. Also a practical lesson in hosting: the page began as a sandboxed Claude artifact that could not fetch anything, and every capability it gained since - live quotes, auto-add, the shared catalog - came from moving to real static hosting.

What's next

  • Curated look-throughs for popular funds the community adds
  • A first-party quote proxy so TSX prices stop depending on public CORS proxies