How a portfolio gets its grade
Every rule, every threshold, and the exact numbers three sample portfolios produce. There is no hidden weighting and no machine learning: the grade is the average of five rule grades, and each rule is arithmetic on the dataset below.
node scripts/build-methodology.mjs. Every figure below is computed at build time, and the
page records a fingerprint of the engine (7f0bf9a950caaecd) so a stale page fails the test suite.
1. What the analysis reads
The dataset covers 314 ETF and each entry carries: category, subcategory, issuer, expenseRatio, aum, inception, indexTracked, country, assetClass, sector, topHoldings.
Where each field comes from: sector weights and the top-ten holding names are fetched from Yahoo Finance's fund summary; net assets from stockanalysis.com, which reports the ETF/share-class figure rather than a whole trust; the country mandate is read off the index definition rather than measured, so it carries no date and cannot go stale. Composition and assets were fetched on the same day — 2026-10-27 — and a page states one date because all three of its numbers come from that one day. Two consequences are visible on the pages: a fund whose positions are not listed equities (bonds, bullion, futures, crypto) has no sector split at all rather than one relabelled "Bonds 100%", and a fund the source gives fewer than five holdings for gets no holdings list rather than a list of one. Sector weights are as published and are not renormalised, so they often add to slightly under 100%; the remainder is cash, derivatives or positions the breakdown does not classify.
What it does not have: constituent weights. The data lists a fund's top-10 holding names, not how much of each it owns. So this tool cannot tell you "12% of your money is in Apple". It can tell you two funds hold the same names, and it can fold tickers that track the same index into one exposure. Anyone publishing an exact single-stock percentage from this kind of dataset is estimating, not measuring — say that plainly rather than guess.
Prices and fund attributes are a snapshot, not a live feed. Every run is computed in your browser; holdings you type are not uploaded.
2. The rules
Concentration risk — measured in effective exposures
Positions are folded into exposures before anything is graded. VOO + SPY + IVV are one S&P 500 exposure, not three. VXUS + VEA + VWO are one international exposure. Broad exposures (US broad, international broad, aggregate bonds) are allowed to be large; narrow ones (a sector, a single country, a theme) are judged tighter, because the same 50% means different things in VTI and QQQ.
- Broad exposure: A up to 60%, C up to 80%, F above.
- Narrow exposure: A up to 25%, C up to 40%, F above.
- Top-three test runs only at 5+ exposures (C above 80%, F above 90%). Below that, top-three is ≥75% by construction and says nothing.
Geographic diversification
Each fund is labelled with the country it is chartered to hold. The rule asks how much of the measured book a single country carries, then discounts that by how big the country is: severity = largest single-country share × (1 − that country's share of global equity). A book entirely in the United States scores 0.36; entirely in Japan, 0.95; entirely in a fund that spans many countries, zero. A is below 30%, C up to 60%, F above. Funds that span several countries by mandate (global, ex-US, emerging) carry no single country, so they neither raise nor lower the largest-country share — their internal split is not assumed. Bullion, futures, a currency and crypto have no country at all: a book made only of them is left ungraded on this rule rather than graded F.
Cost efficiency
The weighted expense ratio of the portfolio, ignoring everything else: A below 0% a year, C below 0%, F above.
Asset class balance
A needs 2+ asset classes and a largest class under 80%. Holding a single asset class scores F; anything above 80% with two or more scores C. There is deliberately no further cut-off: the tool does not claim 85% equity is worse than 82%.
Holding overlap
Pairwise: two funds tracking the same index score 0.70; otherwise the share of shared names among their top-10 holdings. Pairs above 0.70 count as redundant, above 0.40 as partially redundant.
Issuer scale — shown, not scored
Holding only Vanguard funds is not a defect, so this dimension is information rather than a grade input. What it measures is fund size: the share of your money in funds under $1B in assets (closure, spreads, delisting). A up to 5%, C up to 30%, F above. A large issuer does not rescue a small fund — a $10M fund carries the same closure risk whoever runs it.
3. The overall grade
The overall grade is the unweighted average of the five scored rules (A=100, B=80, C=60, D=40, F=20), mapped back to a letter. Issuer scale is excluded. Nothing else is in the number.
4. Three portfolios, computed
Three-fund, 60/30/10
The plainest portfolio in the book. Three tickers, three exposures.
VOO 60% · VXUS 30% · BND 10%
Overall grade A (score 92)
| Rule | Grade | What it said | Counted? |
|---|---|---|---|
| Concentration risk | A | Well distributed — largest exposure is US broad equity at 60.0% across 3 distinct exposures. | scored |
| Geographic diversification | A | the United States is 70.0% of the measured book and about 63.6% of global equity, so the money is not sitting in one market. 30.0% is in multi-country funds (VXUS); their internal split is not assumed here. | scored |
| Cost efficiency | A | Excellent cost efficiency — weighted ER of 0.042% costs you $42/year on a $100,000 portfolio | scored |
| Asset class balance | C | 2 asset classes present, but Equity dominates at 90.0% | scored |
| Holding overlap | A | No significant overlap detected — your ETFs provide distinct exposures | scored |
| Issuer scale | A | All holdings are in funds above $1B in assets. Largest issuer: Vanguard at 100% across 1 issuer. | shown, not scored |
Six tickers, four exposures
Six ETFs that look diversified and are three-quarters one market.
VOO 25% · SPY 20% · VTI 20% · QQQ 15% · SCHG 10% · VYM 10%
Overall grade F (score 52)
| Rule | Grade | What it said | Counted? |
|---|---|---|---|
| Concentration risk | C | Your largest exposure is US broad equity (VOO + SPY + VTI) at 65.0% of the portfolio. Your 6 tickers collapse into 4 distinct exposures. | scored |
| Geographic diversification | C | 100.0% of the measured book is chartered to the United States, which is about 63.6% of global equity. | scored |
| Cost efficiency | A | Excellent cost efficiency — weighted ER of 0.070% costs you $70/year on a $100,000 portfolio | scored |
| Asset class balance | F | Your portfolio is 100% Equity — no diversification across asset classes | scored |
| Holding overlap | F | Significant overlap detected — 10 pairs of ETFs are highly redundant | scored |
| Issuer scale | A | All holdings are in funds above $1B in assets. Largest issuer: Vanguard at 55% across 4 issuers. | shown, not scored |
Two-fund, 70/30
A single market above the 60% comfort line.
VOO 70% · BND 30%
Overall grade B (score 84)
| Rule | Grade | What it said | Counted? |
|---|---|---|---|
| Concentration risk | C | Your largest exposure is US broad equity at 70.0% of the portfolio. | scored |
| Geographic diversification | C | 100.0% of the measured book is chartered to the United States, which is about 63.6% of global equity. | scored |
| Cost efficiency | A | Excellent cost efficiency — weighted ER of 0.030% costs you $30/year on a $100,000 portfolio | scored |
| Asset class balance | A | Good asset class diversification across 2 classes | scored |
| Holding overlap | A | No significant overlap detected — your ETFs provide distinct exposures | scored |
| Issuer scale | A | All holdings are in funds above $1B in assets. Largest issuer: Vanguard at 100% across 1 issuer. | shown, not scored |
5. What this is not
- Not investment advice, and not a recommendation to buy or sell anything.
- Not a forecast. Nothing here predicts returns.
- Not a measure of whether a portfolio suits you. The tool does not know your age, horizon, tax position or liabilities, and a grade deliberately stays silent on all four.
- Not complete: a fund outside the 314-ETF dataset is excluded from the analysis and reported as such, not silently dropped.