Methodology
The maths, in daylight.
The calculation is deliberately simple to audit: multiply, aggregate, retain the residual, compare against a single reference year.
01 / Inputs
Allocation is a fraction of the whole portfolio.
Let ai be the share of the portfolio assigned to ETF i, expressed as a decimal. A 60% allocation is 0.60. Allocations must be between 0 and 100 and must total exactly 100.00%. The application rejects duplicate funds and more than two decimal places instead of rounding a user's percentages behind their back.
02 / Look-through
Country weights aggregate across funds.
For ETF i, let ci,k be the reported weight of country k inside that fund, as a decimal. The portfolio country exposure is:
A 60% MSCI World allocation and a 40% emerging-markets allocation therefore contribute 0.60 × the World country weight plus 0.40 × the EM country weight. We do not re-normalise the result to hide cash, derivatives or non-equity positions.
Coverage and residual
The country exposures in the snapshot are based on equity holdings. The difference between 100% and the weighted equity coverage is shown as an unclassified residual. A missing benchmark value is displayed as “not available”; it is never treated as a zero.
03 / Company look-through
Effective company weight is additive.
For security j inside ETF i, let hi,j be the security's reported fund weight as a decimal. Its effective portfolio weight is:
The same issuer can appear in several funds. We aggregate by a normalized issuer name (removing punctuation and common corporate suffixes such as Inc., Ltd., PLC, NV and Corp.), so Apple held by four ETFs is one row with several contributions. This is an issuer-name approximation, not a legal-entity identifier. It may merge or split entities with unusual naming.
The “fund contribution” columns show both the weight inside the ETF and the effective weight after your allocation. The reported country comes from the SEC filing. If the same normalized name carries conflicting countries, the row is flagged.
04 / Benchmarks
Benchmark shares use one reference year.
For a selected metric, the benchmark share of country k is its value divided by the sum of positive values across all countries with a reported value in the snapshot:
The difference is Ek − Bk, expressed in percentage points (pp). It is not a relative percentage change. The benchmark is normalised across the countries that actually reported the metric, so its coverage is shown beside the chart.
Nominal GDP
2024 · 200 countries · current US$
GDP at purchasing power parity
2025 · 185 countries · current international $
Listed domestic market capitalisation
2024 · 70 countries · current US$
Population
2025 · 217 countries · people
GDP per capita
2024 · 200 countries · current US$ per person
Context only — not an allocation benchmark
GDP is an economic output measure, not a target for stock ownership. Population is a demographic measure. Listed-market capitalisation measures listed domestic companies and is not total private wealth, bond value or real estate. The comparison is a lens, not a model of the “correct” portfolio.
05 / Limits
What the model refuses to pretend.
- Issuer country ≠ revenue exposure. A company organised in the US can earn most of its revenue elsewhere. We do not infer revenue geography.
- Holdings are snapshots. Funds change. The filing date, retrieval date and source are shown; stale data is flagged.
- Coverage differs by metric. The market-cap indicator covers fewer countries than population or GDP. The UI shows the count and missing values.
- Company aggregation is approximate. Names are normalized; share classes and cross-listings can complicate the mapping.
- No UCITS-wide coverage yet. The current catalogue uses US-listed reference funds with public SEC filings. A commercial UCITS holdings feed is a separate licensing decision.
- No natural-resource metric. A reliable, commercially usable country-level series was not selected; inventing or proxying one would weaken the comparison.
- Not advice. The tool does not assess suitability, tax, currency risk, costs or your objectives.
Audit the code
The calculation service is deliberately isolated from HTTP and database fetching. Automated tests cover zero/missing benchmarks, duplicate companies, rounding, invalid allocations, residual cash and the 60/40 example.
See the data register →