Geographic unit: NUTS-3 regions (312 across ES, PT, FR, IT, NL).
Housing prices: National statistical offices (INE, INSEE, CBS, ISTAT) and transaction registries.
Wages: National sources (Quadros de Pessoal, AEAT, DADS/INSEE, INPS, CBS) at NUTS-3; Eurostat NUTS-2 fallback for missing regions.
Employment: Eurostat (nama_10r_3empers).
Tourism: Eurostat (tour_occ_nin3).
Housing cost burden: Eurostat EU-SILC (ilc_mded01, ilc_mded04), 2023.
Effort metric: months of gross regional wage per m² of housing (monthly wage = annual salary / 12; note that PT, ES and IT pay 14 salaries).
Mortgage simulation: Annuity formula, 90% LTV, 4% annual interest, 45% of net salary (≈70% of gross).
The 10% deposit is not included in the repayment timeline. In high-effort regions,
saving that deposit - plus transaction taxes and fees, which are substantial in
Spain and Portugal - can itself take years, competing with the repayment period
and making the total time to ownership longer than the figures shown.
All data is from 2023 except where noted, using the NUTS 2024 classification and boundaries. Eurostat employment and tourism series for 2023 are already published in NUTS 2024 codes for the five countries in this study. French wages use 2022 (latest available). Regions using Eurostat NUTS-2 fallback wages are flagged and excluded from regression fits. Full data and source code are available in the project repository.
#Source datasets
All source data is publicly available. Eurostat datasets cover the full EU; national sources cover NUTS-3 regions within each country. The Local copy column links to our downloaded snapshot used for this analysis.
| Dataset | Source | Coverage | Local copy |
|---|---|---|---|
| Employment (all countries) | Eurostat - nama_10r_3empers | NUTS-3, employed persons (thousands) | csv |
| Land area (all countries) | Eurostat - reg_area3 | NUTS-3, km² | csv |
| Tourism nights (all countries) | Eurostat - tour_occ_nin2 | NUTS-3 (NUTS-2 in some countries) | csv |
| Share of housing costs in disposable household income (all countries) | Eurostat - ilc_mded01 (EU-SILC) | Country level, total households | csv |
| Financial burden of housing cost (all countries) | Eurostat - ilc_mded04 (EU-SILC) | Country level, total households | csv |
| Housing costs over income, HC 1.2 (all countries) | OECD Affordable Housing Database | Country level, median mortgage and rent burden | xlsx |
| NUTS-3 boundaries (all countries) | Eurostat - GISCO 2024, 1:10M | GeoJSON polygons | geojson |
| Housing prices (Portugal) | INE - indicator 0012235 | NUTS-3, median transaction price per m² | csv |
| Wages (Portugal) | MTSS - Quadros de Pessoal | NUTS-3, mean monthly earnings (ganho) × 14 | csv |
| Housing prices (Spain) | Colegio de Registradores - Portal Estadístico | Province, mean transaction price per m² | csv |
| Wages (Spain) | AEAT - Mercado de Trabajo (IRPF) | Province, mean annual salary | csv |
| Housing prices (France) | DGFIP - Demandes de Valeurs Foncières (DVF) | Département, median transaction price per m² | csv |
| Wages (France) | INSEE - DADS/DSN T401b | Département, gross annual salary EQTP (2022) | csv |
| Housing prices (Italy) | Agenzia delle Entrate - OMI quotazioni | Province, appraised market values per m² | csv |
| Wages (Italy) | INPS - Osservatorio lavoratori dipendenti | Province, mean gross annual pay | csv |
| Housing prices (Netherlands) | CBS - StatLine (Bestaande koopwoningen) | COROP, mean transaction price per m² | csv |
| Wages (Netherlands) | CBS - StatLine (Regionale rekeningen) | COROP, compensation per employee (÷ 1.27) | csv |
#Derived datasets
The following datasets are produced by the analysis scripts and underpin the charts in this story. Each file can be downloaded for independent verification.
#Why only five countries?
This analysis requires three datasets at NUTS-3 level for every country: housing prices per m², wages, and employment. No single European source publishes all three. Each country must be assembled from national statistical offices, tax authorities and property registries - each with its own methodology, coverage and access conditions. Portugal, Spain, France, Italy and the Netherlands are the five where the necessary data could be obtained at comparable quality. Germany was investigated but its regional price data (AK OGA) is published only as binned ranges, not as values usable in regression. Denmark's wages are available only at NUTS-2, too coarse for this analysis. Other countries face similar gaps. Expanding coverage is a matter of data access, not methodology.
#Why 2023?
2023 is the most recent year for which all five countries have both housing prices and wages at NUTS-3 level. France is the binding constraint - INSEE publishes regional wages with a one-year lag, so 2022 wages are the latest available and are used as a proxy for 2023. Portugal's transaction price series (INE 0012235) starts in Q4 2019, making anything before 2020 unavailable at comparable quality. Italy's INPS wage data begins in 2019. Tourism data from Eurostat (tour_occ_nin3) switched to NUTS 2024 codes in 2023, making that the only year where tourism intensity can be matched to the current regional boundaries without manual code reconciliation. The housing cost burden chart uses the same 2023 reference year as the rest of the analysis.
#Comparability caveats
Cross-country comparisons should be read with care. The wage concept differs: Portugal (MTSS Quadros de Pessoal) and Italy (INPS) cover private-sector employees only, while Spain (AEAT) and France (INSEE DADS) include all sectors. The Netherlands (CBS) reports compensation of employees - gross salary plus employer social contributions - which is corrected by dividing by 1.27 to approximate gross salary. Within each country all regions use the same concept, so regional rankings are unaffected.
Housing prices also differ in concept: Portugal and France use median transaction prices from notarial records; Spain and the Netherlands use mean transaction prices; Italy uses expert-appraised market value ranges (OMI quotations), not actual transactions. Mean prices are typically 5-15% higher than medians due to luxury outliers. The Italian figures are methodologically closer to valuations than to recorded sales.
There are also differences between national definitions of dwelling floor area. These include the treatment of common areas in apartment buildings, balconies and terraces, as well as other spaces such as cellars, attics and storage rooms. Consequently, the reported price per square metre is not based on a perfectly harmonised measure of floor area across countries.
Per-country scatter plots and regressions are reliable. The combined multi-country plots are useful for seeing overall patterns but should not be read as precise cross-country rankings.
#Tourism metric caveat
Visitor nights per worker is a NUTS-3 average. In a capital region, tourists cluster near the city centre while the workforce spreads across the whole metropolitan area, so the metric undercounts tourism pressure where it is most intense and dilutes it across suburbs where it barely exists. In regions like Algarve or Corsica, where tourism is the defining activity across the territory, visitors are more distributed and this average is far more representative of reality. Naturally, when comparing regions, this nuance can only be evaluated qualitatively, because NUTS-3 is the finest granularity we have data for.
#NUTS-3 regions are not equal
NUTS-3 boundaries follow administrative divisions, not a standard grid. Paris (FR101) is 103 km² - just the city proper. Madrid (ES300) is 7,972 km² - the entire province, including sparsely populated countryside. Grande Lisboa sits between at 1,322 km²; Rome covers 5,280 km². This matters most for employment density: Paris registers 21,700 jobs per km² while Madrid shows 484 - a 45-fold difference that is largely a boundary artefact, not a real difference in urban intensity.
Housing effort (price ÷ wage) is more robust, since both numerator and denominator are measured at the same geographic scale and area does not enter the calculation. However, large regions like Madrid average high-effort urban cores with low-effort rural fringes, which understates peak affordability pressure. Paris, by contrast, captures almost exclusively the dense, expensive centre - which is why its effort figure looks extreme even by capital-city standards. The adjacent Petite Couronne départements (Hauts-de-Seine, Seine-Saint-Denis, Val-de-Marne) have effort values of 1.1 to 1.3 - still elevated, but far below the 2.1 of Paris itself.
This is why in the cross-country scatter plots we merge Paris with its Petite Couronne into a single employment-weighted data point. The case for merging is straightforward. At 103 km², Paris is the smallest NUTS-3 region in our entire dataset - smaller than any region in Portugal, Spain, the Netherlands, or Italy. Even after merging with the three surrounding départements the combined area is just 753 km², still well below the median NUTS-3 area of 4,500 km² across our five countries. The four regions form a contiguous urban mass where housing markets are deeply intertwined: Paris prices would not sustain themselves without the millions of workers who commute from the Petite Couronne every day, and those same workers face housing costs inflated by their proximity to the centre. Treating Paris as an isolated data point overstates its density by an order of magnitude and places its effort on a mathematical cliff where small assumption changes produce wild swings. The merge does not hide the problem - Paris + Petite Couronne still ranks as the highest-priced and densest unit in our dataset - it simply brings the measurement closer to what the other capital regions already capture by default through their wider boundaries.
If anything, this intervention errs on the side of caution: the functional Paris labour market extends well beyond the Petite Couronne into the grande couronne and further, and a case could be made for merging a larger area still. We stop at four départements because they form the obvious contiguous core and because extending further would require judgement calls about where the commuter basin ends - a question that the NUTS classification was supposed to answer for us. None of this is a criticism of the NUTS-3 classification itself. EU regulation requires NUTS regions to follow existing administrative divisions within each member state, and for good reason: administrative units have the data-collection infrastructure, legal authority, and political legitimacy that purpose-built statistical areas would lack. France's départements date to the Revolution, designed so any citizen could reach the capital in a day on horseback - sensible for 18th-century governance, less so for 21st-century labour-market analysis.
Not every country maps NUTS-3 to a traditional administrative division. The Netherlands is the clearest exception: its COROP regions are non-administrative areas designed around commuting patterns. Portugal's Comunidades Intermunicipais are a hybrid - created to coordinate EU structural funding, they have no role in day-to-day governance, which remains with the individual municipalities. But France, Spain and Italy map NUTS-3 directly to long-established administrative divisions - départements, provincias, province - whose boundaries reflect centuries of political history. The Paris merge is our way of working with what we have: not redrawing the map, but acknowledging that one boundary was drawn too tightly for the question we are asking.
Per-country scatter plots and regressions are not affected - regions within the same country are drawn from the same administrative system and are reasonably comparable. The combined cross-country scatter plots use the Paris + Petite Couronne merge described above, which mitigates the most extreme size asymmetry. The x-axis (density) still mixes differently sized containers across countries, but no other region presents a distortion as severe as unmerged Paris.
#Wage detail
The effort metric uses gross salary - the broadest wage concept consistently available at NUTS-3 level across all five countries. The exact source differs: Portugal uses mean monthly earnings from employer reports (MTSS Quadros de Pessoal, "ganho" × 14); Spain uses mean annual salary from tax returns (AEAT); France uses gross annual salary in full-time equivalents (INSEE DADS/DSN); the Netherlands uses total compensation of employees divided by headcount (CBS); and Italy uses mean gross pay from social security records (INPS).
These concepts are not perfectly harmonised. The Dutch figure includes employer social contributions, making it broader than the others. The Spanish figure comes from tax returns, which may undercount informal or irregular earnings. The Portuguese "ganho" includes overtime and regular bonuses beyond base pay.
We use gross rather than net salary because net wages are only published at NUTS-3 level in France. For the remaining countries, computing net salary would require modelling each country's tax and social security system - which varies by household composition, deductions, and (in Spain) by autonomous community. Disposable household income is available at NUTS-3 in four of the five countries, but not in Italy, and it includes non-work income (pensions, transfers, investment), which measures something different from what a worker earns. Gross salary, despite its imperfections, is the only metric that isolates worker income at the regional level across all five countries.
#Regression notes
Outliers are detected in two steps. First, a log-linear model is fitted to all points (effort against ln(density)). The residuals of this initial fit are then tested using the interquartile range (IQR): points whose residual falls more than 1.5 × IQR below the first quartile or above the third quartile are flagged as outliers. The regression is then refitted without them. This is a standard non-parametric method that does not assume normally distributed residuals, and it is applied independently within each country so that cross-country differences in wage or price concepts do not influence which points are flagged.
Despite the comparability limitations described above, the single-variable fits are strong within each country. When countries are combined, the Portugal + Spain and Portugal + Spain + France subsets offer a good balance between sample size and methodological similarity: the Iberian pair shares a similar housing market structure and data tradition, while adding France extends the sample with a well-documented price source (notarial DVF data) and a comparable wage concept. In both combinations the role of the outliers identified in the individual Portuguese and Spanish fits is confirmed with higher statistical confidence thanks to the larger sample.
The two-variable model uses a logarithmic term for density and a linear term for tourism intensity. The logarithm captures the expectation that density's contribution to housing effort has diminishing returns: workers who pay for housing, whether through mortgages or rents that ultimately reflect purchase prices, are constrained by their wages and by credit rules. After the 2008 financial crisis, banking regulation tightened debt-to-income limits across Europe, not primarily to protect borrowers from high effort, but to protect the banking system from systemic risk. These constraints act as a ceiling: as density grows, effort cannot grow without bound. A logarithm approximates this saturating behaviour.
Tourism intensity, by contrast, enters linearly. The demand that tourism brings to a housing market can be inelastic to price: if a region reaches full accommodation capacity and prices rise, the visitor profile may shift to higher-paying segments rather than the volume declining. The supply of housing is locally rigid, but the pool of potential visitors is drawn from a global market whose purchasing power is large relative to any single region's stock, especially when that purchasing power is time-shared across the same property, as in short-term holiday rentals.
As an empirical check, we fitted the alternative model effort = a · ln(density) + b · ln(tourism) + c, replacing the linear tourism term with a logarithmic one. The R² was lower for four of five countries and for the pooled sample: the linear tourism term provides a better fit, consistent with the argument above.
#Housing cost burden (EU-SILC)
Part one uses two Eurostat EU-SILC indicators. The first, ilc_mded01, reports total housing costs as a share of disposable household income. Housing costs are defined as rent (for tenants) or mortgage interest (for owners), utilities, structural insurance, mandatory services, maintenance, and housing-related taxes. Mortgage principal repayment is explicitly excluded on the grounds that it constitutes saving rather than expenditure. This means the indicator captures the interest component of a mortgage payment but not the principal component, systematically understating the cash-flow burden for homeowners with active mortgages.
The second indicator, ilc_mded04, is a subjective measure: households report whether housing costs represent a heavy burden, some burden, or no burden. For the five countries in this analysis, the subjective ranking (NL least burdened, ES/IT most burdened) contradicts the calculated one (NL most burdened, PT least). The divergence illustrates how the exclusion of mortgage principal and the averaging of very different tenure structures can produce a calculated indicator that points in the opposite direction of lived experience.