ETF X-Ray
Documentation
What is actually inside an index fund. ETF X-Ray reads SEC Form N-PORT filings position by position and answers the questions the filing cannot answer directly — sector exposure, what the fund bought and sold, how much two funds overlap, which securities the whole universe is crowding into, and who is borrowing the fund's stock.
What is ETF X-Ray?
Every US-registered fund files Form N-PORT with the SEC — a complete, position-level statement of what it held at the end of the period, including the share count, the market value, the fair-value level and whether the position was out on loan. It is the most detailed public disclosure a fund makes, and it is almost never read, because a single filing is thousands of rows of XML.
ETF X-Ray parses those filings, enriches each security with a sector and a ticker, and pre-computes the comparisons across funds and across quarters. Four questions it answers that a fund’s own factsheet does not:
Sector weights computed from the filed positions themselves — not from the index's marketing description — with the unclassified remainder shown rather than hidden.
Every position the fund opened, added to, trimmed or exited, measured on SHARE COUNTS. A position whose value rose because the price rose is not a decision, and is reported as unchanged.
Pairwise weight overlap, active share and Jaccard similarity across the universe. A 97% overlap means the second fund is buying you almost nothing.
Cross-fund crowding: how many funds hold a security, at what average weight, and whether the universe is net accumulating or distributing it.
ETF X-Ray vs. Fund Tracker. They read different filings and answer different questions. Fund Tracker reads Form 13F — what an institutional manager owned, long US equity only, quarterly. ETF X-Ray reads Form N-PORT — the complete book of a fund, including cash, derivatives, lending and every non-US position. Where 13F is a partial picture of a manager, N-PORT is a total picture of a fund.
Where does the data come from?
All data is sourced from SEC Form N-PORTfilings, pulled from EDGAR, transformed by a separate pipeline, and published into a dedicated database that only this site’s server reads. Your browser never talks to the database directly.
Eight large equity ETFs, chosen because between them they cover the US total market, the US large-cap core, the Nasdaq-100, US growth and developed ex-US — so the overlap and crowding panels have something meaningful to compare.
The dashboard is built to scale to 100+ funds with no interface change: every list is paged and sorted on the server, and adding funds changes the contents of two dropdowns and nothing else.
Step-by-step guide
The “Start here” card at the top of the page holds a fund picker and a period picker. The first fund's most recent period is selected automatically on load, so the page is never empty.
The period list is that fund's own filing dates, newest first. Funds do not share a filing calendar — IEFA files month-end while Vanguard and State Street file quarter-end — so the dates differ between funds by design.
Net assets, holdings count, top-10 weight, effective holdings, concentration, net quarterly flow, turnover and the share on loan. Every one of these is a figure computed over the WHOLE filing, never over the rows currently on screen.
The default tab. It shows what the fund is actually exposed to, and — where coverage is incomplete — says so beside the chart rather than quietly omitting the gap.
Clicking a sector bar jumps to the Holdings tab pre-filtered to that sector, so you go from “31% technology” to the names that make it up in one click.
In Holdings, Position changes or Crowding, clicking a security opens the cross-fund drawer: every fund in the universe that holds it, every period, with the deltas already computed.
The search box in the page header queries the whole security master — ticker, CUSIP, ISIN or name — and opens the same drawer. You do not need to know which fund holds it.
A tab you have not opened costs nothing.Loading the page issues exactly two requests — the fund list and one snapshot document — plus one request for whichever tab you open. Sector exposure and Returns & flows issue no request at all, because their rows already arrived inside the snapshot.
The seven panels
Weight by sector for the selected fund-period, as a composition bar plus a ranked list. Click any sector to drill into the holdings behind it. Where sector coverage is incomplete, the gap is stated beside the chart — see Data coverage below.
Every position in the filing, 50 at a time. Name, ticker, sector, share balance, market value, weight, fair-value level and whether the position is on loan. Search matches name, ticker or CUSIP; sector filter and sort are applied by the server across the whole book, not just the visible page.
New, increased, reduced, unchanged and exited positions between this period and the previous one, ordered by the size of the value change. Deltas are on SHARE COUNTS: a position that only moved in value because the price moved is correctly reported as unchanged.
The fund's own reported monthly total return for each month of the quarter, alongside sales, redemptions, reinvestment and net flow. Monthly figures print at the precision the filer used; the quarter figure is compounded from the months and labelled as derived, because the filing reports months only.
How much this fund shares with every other fund in the universe: weight overlap, active share, Jaccard index, shared position count and shared value. Where the two funds' filing dates differ, both real dates and the gap in days are named.
Universe-wide rather than fund-specific. The most widely held securities, the most heavily weighted, and the most accumulated — with how many funds are adding versus reducing each name.
Securities-lending counterparties and derivative counterparties for the fund-period: who is borrowing, notional exposure and share of net assets. This is disclosed in N-PORT and almost no free tool surfaces it.
There is no duration or credit-risk panel, and that is correct.DV01, credit-spread sensitivity and effective duration come from N-PORT Item B.3, which only funds holding debt are required to report. This universe is equity-only, so no filing in it carries those figures. Rather than render an empty panel, the product surfaces counterparty and lending exposure instead — real data that is genuinely hard to find elsewhere.
What the numbers mean
Every figure below is read from the filing or pre-computed in the warehouse. None of them is derived in your browser, which is why the totals do not change as you page through a table.
Why HHI carries no verdict label.The familiar antitrust bands (below 1,500 “unconcentrated”, above 2,500 “highly concentrated”) are a poor fit for cap-weighted equity funds: every fund in this universe scores under 1,500 and would read “well diversified” — including QQQ, which has about 32 effective holdings and 46.8% of its assets in its top ten. A label that says “diversified” for every input is not a label. Use effective holdings or top-10 weight instead; those discriminate.
Following one security across every fund
Any security name in Holdings, Position changes or Crowding is clickable, as is any result from the header search. All four routes open the same drawer, which answers one question: who owns this, how much, and what did they do with it?
On a phone the drawer becomes a bottom sheet with the close control at the top, because a right-edge close button on a six-inch screen is a thumb stretch.
Why some columns sort and others do not
Whether a column header is clickable is not a styling decision. It depends on whether the panel holds the complete answer or only the page you are looking at.
Sorting a paged table in the browser orders one page and presents it as the answer. If Holdings shows 50 of 3,600 rows and you sort those 50 by weight, the largest weight in the fund is almost certainly not among them. So paged tables re-query the server to sort, and any column the server cannot order by is left inert with a tooltip that says why — rather than silently lying.
Below 700px every table is replaced by one labelled card per row. An eleven-column table cannot be read on a phone even with horizontal scrolling — the header scrolls out of view sideways and every number loses its label. Where the clickable headers were the only way to sort, a select box takes their place.
What is complete, what is not, and why
A data-quality badge sits beside the fund summary on every page, and it reports the real coverage of the selected fund-period. It is shown rather than hidden, because a gap you can see is a caveat and a gap you cannot see is a wrong answer.
N-PORT contains no sector field. Sector is derived by matching each issuer to its SEC-assigned SIC code — a source that exists only for companies that file with the SEC. That produces a sharp split by geography:
For the two ex-US funds the sector chart is still shown, preceded by a dismissible notice stating the real coverage and followed by a banner that stays beside the chart. An earlier version collapsed the chart behind a “show anyway” button; that was worse, because the button was clicked without being read and the caveat disappeared along with it, leaving an unlabelled chart. The obligation is that the gap is stated, not that the data is withheld.
This gap is structural, not a bug, and closing it requires a commercial sector feed — a licensing decision rather than a code fix. The threshold that triggers the warning is read from the measured coverage of the selected fund, never from a hardcoded list of tickers, so a new ex-US fund is flagged automatically and these two stop being flagged the day a sector source exists. Security tickers, by contrast, resolve well everywhere — over 93% even for the ex-US funds.
N-PORT is filed monthly but only made public quarterly. This is the SEC's disclosure schedule, not a sync delay. ETF X-Ray is a structural tool, not a real-time one — for real-time, see AI Sentiment Pro.
Funds can amend a period they have already reported. Amended filings supersede the original, and the dashboard always shows the current version. A figure moving between visits is an amendment restating history.
Funds do not share a filing calendar. The overlap panel pairs each fund with the book it actually filed within 45 days of the anchor date, and where those dates differ it names both of them and the gap. Presenting a 30-day-apart comparison as same-date would be dishonest.
Important limitations
N-PORT is a point-in-time snapshot, not a live portfolio. It states what the fund held on the last day of the reporting period. Because the data is published quarterly with a lag, a fund’s current holdings may differ materially from the most recent filing by the time you read it.
Sector is derived, not filed. Every sector classification on this site is an enrichment applied by our pipeline, not a figure the fund reported. Where it is unavailable it is shown as unclassified rather than guessed, and the unclassified bucket is retained so weights still sum to 100%.
Nothing in ETF X-Ray constitutes investment advice, a recommendation to buy, sell or hold any security or fund, or a guarantee of any market outcome. It is a research and informational tool.
Market values are those reported by the fund at the period end. They are not marked to today's prices and should not be read as current.
Overlap, effective holdings, HHI and accumulation scores are formulas applied to filed data. The formula is stated beside each figure. They are not judgements about any fund or security.
We parse EDGAR data as filed. An error in the original filing is reproduced faithfully in the data, and will be corrected only when the fund files an amendment.
Eight funds and eight quarters today. Verify any figure against the original filing before acting on it.
Original filings are public. Look any of them up on SEC EDGAR by fund name or CIK and compare.
Rock Group · ETF X-Ray Documentation · Last updated August 2026
Questions? Contact us