Methodology
How we measure this
Every figure we publish comes from property listings we collect ourselves. This page states exactly what that means, what it does not mean, and what we throw away before we count anything.
The short version
- These are asking prices from listings, not transaction prices.
- They describe listings on the portals we track, not “the market”.
- Every listing is collapsed to one record, and every price converted at one exchange rate, before anything is aggregated.
- Any yield we publish is a gross yield. It ignores voids, agency fees, property tax and management.
Asking prices, not transaction prices
We hold asking prices from listings. We do not hold transaction prices. An asking price is what a seller is publicly requesting; a transaction price is what someone actually paid. The two differ, the gap varies by market, and it widens or narrows depending on which way the market is moving. We never blur them: if one of our articles quotes a price, it is an asking price.
That limitation is also why the numbers are early. Official transaction statistics across most of the EU are published three to six months in arrears, and asking prices move first.
Listings on the portals we track — not “the market”
We describe listings on the portals we track. We avoid the phrase “the market”, because in many cities our pool is one portal’s inventory. Milan, Rome, Turin, Paris, Lisbon, Porto, Prague, Bucharest, Amsterdam and Kyiv are each served in our data by a single dominant portal. Our tables carry a source count for exactly this reason — where it reads 1, the figure describes that portal’s listings.
In several of those markets that one portal carries most of the listing activity in the city. It is still not the same claim, and we do not make the larger one.
The window
Figures are computed over a rolling window ending on a stated date. Our default is the twelve months to the window edge, and every article prints both its window and its “data as of” date. Where an article uses a different window, it says so in its own Method section.
A long window is a deliberate choice. A short one over-weights whichever sources happened to be most active recently, and can drop entire countries out of a comparison because a crawl was interrupted rather than because anything changed on the ground.
Figures are frozen at publication. An article published in August 2026 keeps its August 2026 numbers; we do not silently recompute a page underneath a link somebody has already shared.
One record per listing
This is the step that moves the numbers most, and the one that is easiest to skip.
Our collection appends a new row every time a listing is re-parsed — in production, roughly seventeen times a month. A flat that stayed online for eight months is therefore present hundreds of times. Counting those rows would weight each property by how long it stayed up rather than by the fact that it existed, and listings that stay up longest are systematically the ones priced above the market.
So before anything is aggregated, every listing is collapsed to one record, taking its most recent values. A listing is identified by the pair of portal and listing id, never by the id alone — ids are not unique across portals. Attributes are read from that same latest record, including the attributes we filter on, because listings change: measured across 365 days and 32.3 million listings, whether a listing is for sale or for rent drifts on 3.3 % of them, and its city on 3.0 %.
We also never add up per-category counts to reach a total. A listing that changed category during its life appears in every category it touched, so summing the buckets counts it more than once.
One currency date
Prices arrive in many currencies. Every price is converted at a single exchange rate taken at the window edge, and the conversion happens before anything is aggregated — never afterwards, and never at a rate that varies inside the window. No city gains or loses from an exchange-rate movement that happened during the period being measured. A listing in a currency for which we hold no rate at that date is dropped rather than guessed.
Median, not mean
Property price distributions have long right tails: a handful of exceptional properties moves a mean and does not move a median. We publish medians.
What we exclude
We would rather publish a shorter table we can defend. Dropped before any figure is computed:
- Listings without a usable price per square metre, or without real coordinates. A listing we cannot place, or cannot normalise by floor area, cannot enter a per-m² figure. The share that survives this varies from about 27 % to 100 % depending on the market, which is why our sample floors are applied to the usable subset rather than to the raw count — applying them to the raw count would quietly let thin markets through.
- Cities below the article’s listing floor. The €200,000 comparison used a floor of 2,000 usable sale listings per city. Cities under the floor are left out rather than shown with a caveat.
- Sources whose rent period we have not established. A gross yield multiplies a monthly rent by twelve, and whether a portal quotes rent monthly or annually is a property of the portal, not of the market. We record it per source, from evidence, and a source nobody has established is excluded from yield work rather than assumed to be monthly. This is not hypothetical: one Indonesian portal quotes rent per year, and read as monthly it produced a 91 % “yield” — which did not look like an error, it looked like the best headline in the dataset.
- Yields outside 1.5 % to 15 %. A plausibility band, applied per city before a figure exists. It is a band on arithmetic that has gone wrong, not on markets we find unattractive: a genuinely high-yield city sitting at 8 % passes through it untouched.
- Figures carried entirely by a general classifieds site standing in for a property portal we do not have. A dedicated property portal lists property. A horizontal marketplace’s property section is bounded by whoever posted the ad. In one German city that difference put a blank-category bucket — 7,932 listings of parking spaces, plots, shares and allotments at a €776/m² median — into the city figure, which then read $313/m² in a city that trades at €1,500–2,000/m². Where a classifieds site is the primary listing venue of its market, as OLX is in Ukraine, it is not excluded: there is no dedicated portal it is standing in for.
Yields are gross
Where we publish a yield it is a gross asking yield: annualised asking rent over asking price. It ignores voids, agency fees, property tax and management. Realised net yields are materially lower, and how much lower depends on the country and on the property. We label it gross every time, and we never present it as a return anyone would receive.
One further caveat specific to yields: the rental pool and the sale pool are different properties. We match them on location and room band, which narrows the gap without closing it, so read a gross asking yield as a proxy computed from two listing populations rather than as a measurement of one.
What we never publish
- No forecasts. We describe listings we have already seen. We do not say what prices will do next, and we do not present a measured change as a trend that continues.
- No investment advice. We publish measurements; readers draw their own conclusions.
If you think a number is wrong
Write to [email protected]. Every article states its window, its as-of date and its sample sizes, which is enough to say precisely what we did.
Where our figures differ from a published index, the reason is usually methodological rather than a disagreement about the market: a different basis (asking versus transaction), a different statistic (median versus mean), a different mix (new-build included or not) or a different period. It is worth knowing that a house price index generally measures price change from a base date, and is not designed to compare absolute price levels between countries — which is the comparison most buyers actually want.
Asking prices from the property portals we track — not transaction prices, and not investment advice. Last updated 28 August 2026. Read the articles.