Case study
ETF & Fund Analysis
Three funds, or the same fund three times? The SEC filings already know.
Live
etffundanalysis.com ↗ · Shipped
The challenge
American investors hold ETFs and mutual funds side by side; the free tools that check those holdings for overlap mostly don't. A competitive pass in August 2026 scanned twelve US overlap tools: every dedicated free one was ETF-only, the ones covering both instruments either paywalled or required a brokerage connection, and the nearest free SEC-sourced competitor carried 64 ETFs. Not one of the twelve answered the inverse question — of everything that exists, which funds overlap mine the least? The reason is cost. Covering the whole US fund universe normally means licensing a commercial holdings feed, and that expense is what closed one competitor mid-2026.
The approach (built with Claude Code)
Enable built the tool on public filings instead of a data vendor. Holdings for the entire registered US universe come from the SEC's own EDGAR N-PORT filings — public domain, and the coverage floor the product can always fall back to. Sponsors' daily published files sit on top as a freshness layer where a sponsor's feed is machine-accessible; where it isn't, that fund quietly serves its N-PORT filing instead, labelled with its real as-of date rather than a borrowed one. A broken sponsor feed is therefore a freshness incident, never an outage. That architecture also carries a hard legal boundary set by the client's IP attorney: sponsor-sourced holdings may be computed on, never republished as rows. The rule is enforced in code, not in intent — every holdings record is tagged with its source, and a display guard plus a test make it structurally impossible to emit sponsor rows as a public table. The product is a data utility, not an adviser: no “best”, no “recommended”, no buy-or-sell language anywhere, and severity labels that describe the data rather than what to do about it.
What we shipped
Three free, un-gated tools at etffundanalysis.com — Compare (weighted overlap across two to five funds, ETFs and mutual funds in the same universe), Diversification Check (up to five portfolios scored on how much their own funds repeat each other), and Minimum Overlap, which ranks every fund in the universe by how little it overlaps one already held. Under them sit 9,314 funds and 3,093,508 holdings rows, refreshed by a cloud-owned ingestion pipeline with validation on every run, plus 1,890 statically-rendered “X vs Y overlap” pages as the SEO front door. 127 automated checks cover the overlap math, the ingestion validators and the display guard. A fully-built, passing backtesting module ships switched off: publishing figures derived from vendor price data needs a redistribution licence at $250/month, so that route serves an honest coming-soon page rather than numbers the project isn't licensed to show.
Outcome
Live since 13 August 2026. Traffic, indexing and usage figures aren't published here until the client supplies verified data — the same rule as every case study on this site.
Screenshots
Tech notes
Python/Flask + SQLite (WAL), SEC EDGAR N-PORT parser with declarative per-sponsor daily adapters, GitHub Actions ingestion publishing to a public data release, Cloudflare Worker–rendered comparison subdomain, Railway deploy.



