Housing cost and affordability by country

Rent measured against two different incomes at once: the caller's remote income and the local median wage. The gap between those shares is the arbitrage. Also price-to-income and price-to-rent, each expressed as a percentage of that country's own long-run average (127% means 27% less affordable than its historical norm) rather than as an absolute ratio, so comparing two countries' percentages against each other is meaningless. Euro-area mortgage rates from the ECB; outside the euro area the field is absent rather than approximated. Every row carries rentBasis: measured rows use real published Eurostat city rents (Spain, Portugal, Switzerland), modelled rows are derived from the site's price basket, which against Eurostat's housing price level errs in both directions - understating by up to ~36% where housing has decoupled from the general price level (Ireland, Denmark, Czechia) and overstating by ~60% in Turkiye. National averages; not a quote for any tenancy, and not financial advice.

get/api/housing.json

Request

  • Base URL: https://geo-parity.com
  • URL: https://geo-parity.com/api/housing.json
  • Auth: one of:
    • none
    • HTTP bearer
    • API key in query parameter key

Query parameters

sort'affordability' | 'rent' | 'localBurden' | 'priceToIncome'

Metric to rank by. Default affordability (rent as a share of the caller's remote income).

countrystring

ISO 3166-1 alpha-2 code; echoes that country's row, rank and measured city count.

remoteIncomenumber

Monthly remote income in USD. Drives the share-of-your-income and arbitrage-gap figures; omitted, those are absent.

maxRentPctOfIncomenumber

Keep only countries where rent is at or below this share of the caller's remote income (%).

flatM2number

Flat size in square metres used to turn a per-m2 rent into a monthly figure. Default 70.

Response

Ranked countries with rentBasis, per-metric reference years, a count of countries excluded for want of the sorted metric, and an attribution block.

Changes

No recorded changes to this operation across all 1 revision of this API.