Methodology

We Built the CostLiving Engine: Real Public Data for 889 Locations

From today, every cost figure on CostLiving traces to a named public dataset. We have built the CostLiving Engine: a transparent pipeline that pulls from the BLS Consumer Expenditure Survey, MERIC, the BEA Regional Price Parities, Eurostat, the World Bank, and several national statistics offices, and produces a per-person monthly cost-of-living figure for every one of our 889 locations.

The full source list, the refresh process, and the operating principles are documented at /engine/.

What changed

Cost-of-living estimates that anyone can challenge with a public dataset are worth more than estimates that look precise but cannot be defended. Our previous figures were directionally correct but not source-citable at the per-loc level. The CostLiving Engine fixes that.

Every figure on every loc page now traces to a specific row in a specific public dataset. We can tell you, for any of our 889 locations, exactly which data source produced its number and when that data source was last refreshed.

How the engine works

The engine is anchored against one absolute USD value: the BLS Consumer Expenditure Survey single-consumer-unit annual expenditure for the New York-Newark-Jersey City metro area. From that anchor, every other location is positioned using its public cost-of-living index.

For US states we use the MERIC and C2ER Annual Average Cost of Living Index, the same dataset cited in the U.S. Census Bureau Statistical Abstract. For global cities and countries we use a leading international cost-of-living and rent index, validated against Eurostat Comparative Price Levels and the World Bank International Comparison Program. For sub-national regions like the Canary Islands or Bali, we use national statistics office data where available, with documented regional adjustment factors otherwise.

Every figure is produced by one of seven documented resolution paths. Each path leaves a provenance record in the cache showing which source produced the figure. The full list is on the engine page.

What this means for readers

For most readers planning a move or comparing locations, the practical impact is small. The numbers shift, but the directional ranking of locations is preserved: high-cost locations remain high-cost, low-cost locations remain low-cost.

For journalists, researchers, and analysts using CostLiving figures in published work, the practical impact is large. Every figure is now defensible against a public dataset. Every refresh is logged. Every figure cites the source on the engine page directly.

Quarterly refresh

The engine refreshes on the 1st of January, April, July, and October. Each refresh is automated through a GitHub Actions workflow that pulls the latest source data, runs the aggregation, executes ten validator cross-checks, and opens a pull request with a movers report comparing the new cache to the previous one. No change reaches the site without a documented diff and a human-reviewed validation.

What this is not

The engine does not predict the future. Costs change. Currency moves. The engine refreshes quarterly, but a sharp post-pandemic price change or a sudden currency move may not be reflected until the next refresh.

The engine does not capture intra-loc variation. The difference between an apartment in central London and one 45 minutes outside can be 60 percent. Our figures are a reasonable middle ground, not a guarantee.

Looking ahead

Future quarterly refreshes will expand the Tier 2 source coverage: more national statistics offices for sub-regional accuracy, deeper BEA metro coverage for US cities, and direct Eurostat HICP feeds for European country validation. The architecture supports it. The first deploy ships with a credible Tier 1 backbone and a documented expansion roadmap.

If you have feedback on the methodology, find a number you cannot reproduce from the listed sources, or want to suggest a dataset we should add, write to us. The engine is built to be challenged.

Read the full engine methodology โ†’