Method
How we get these numbers
Short version: we do not make any up. Every figure is published by a statistical agency, and the only arithmetic we add is the kind you could repeat.
What you are looking at
A figure is not the same as a distribution
Most statistical agencies publish one number per country per year. That number tells you where the middle of a country sits. It does not tell you how people are spread around that middle, and no amount of arithmetic can recover the spread from the summary once it has been thrown away.
This is why the pages here say which side of a figure you fall on rather than giving you a percentile. A percentile needs the individual records — one row per person — and the sources behind these pages do not publish those. Where a source ever does, the page will say so and give you the real position instead.
Two concrete cases, both spelled out on their own pages. The wealth pages cannot give a percentile because the ECB publishes the average of each group and not where the groups begin: we know what the seventh decile owns on average, not where the seventh decile starts. The leaving-home page cannot either, because Eurostat publishes the age by which half have left — a midpoint, not a distribution.
Sources
Where the data comes from
Two statistical agencies, both publishing openly, both recorded per dataset in the repository with their code, coverage, licence and the date we fetched them.
Eurostat
yth_demo_030 — Estimated average age of young persons leaving the parental household. Derived from the EU Labour Force Survey, series 2000 to 2025, last updated by Eurostat on 2026-04-16.
European Central Bank
ECB Distributional Wealth Accounts. Quarterly, openly available through the ECB data portal, covering 21 countries through Q1 2026.
Natural Earth
The country outlines on the maps. Public domain, pinned to one package version and one checksum, projected once by a script in the repository rather than by hand.
Pipeline
What we do to it
- Fetch. A script pulls the source into an untracked folder and writes down what it got: the exact request, the agency's own update stamp, the periods and the areas. No checksum on the response itself, because these agencies publish on a schedule and a changing answer is correct behaviour. Instead the script checks the dataset's label, so that a silently reassigned code fails the build rather than quietly changing a number on the site.
- Build. A second script turns that into a compact JSON file that is committed to the repository. Aggregates like the EU total are kept apart from countries, because they sit in the same dimension at the source and are not countries. Each country carries its own reference year rather than being forced into a shared one.
- Validate. A gate recomputes every published figure from the raw response. If it fails, nothing is published.
The pages themselves calculate every sentence from that committed JSON at build time. There is no number typed into a page by hand anywhere on this site, which is the only way a figure cannot quietly go stale when a source republishes.
Checks
How we check ourselves
The gate does not trust the file we built. It goes back to the source response and recomputes.
For the wealth data, the sharpest check available is that the balance has to close: every published component, with debts counted negative, must add up to the published net wealth. If a component is missing, a subtotal is double-counted, or a scale is wrong, the sum breaks. All three are invisible on the page itself. Last run on 2026-10-24, across 21 countries and 13 quarters, the largest deviation was 0.11%.
For the Eurostat data, every figure and every series-break flag is recomputed from the raw response. That second part matters more than it sounds. Eurostat reorganised the Labour Force Survey in 2021 and flags the break; the break year itself is a transition, so even measuring from it is wrong. Compared with 2005 the gap between countries appears to grow. Compared across years that are actually comparable, it shrinks. The code refuses to calculate the first version rather than printing it with a footnote, and the comparable window starts at 2022.
Limits
What we will not do, and what we cannot
We will not invent a statistic. Not from memory, not from a search result, not as a placeholder to get a page finished. If a figure cannot be traced to a dataset, it does not go on the site, and the gap is left visible instead of filled.
We will not call something a percentile when it is not one. See the top of this page. It would read better and it would be false.
They are country-level. They describe a population, not anyone in it, and the spread inside a country is almost always wider than the gap between countries. Coverage is European: the United States, Canada and Australia are not in these datasets. And some countries stop reporting — Türkiye (2024), Montenegro (2020), United Kingdom (2019) are shown at their most recent year, marked on the map and labelled in the table rather than quietly mixed in with the rest.
Every dataset is recorded in data/sources.md in the repository, with its
code, coverage, licence and fetch date. The repository is public.