Property Price and Sales (EU)
Overview
A decade of residential property in ten European cities at transaction grain. The cities are real; everything below them is generated: 321 districts in each city's own naming idiom, 60 developers, 1,492 projects, and every price, rent, index and volume. The decade is the European one, stated generically: the cheap-money climb runs to 2021 everywhere except the one market that stays flat from 2016, then the 2022-2023 rate shock cuts prices and volume hardest in the north while the southern recovery markets keep climbing late, and a subsidised-mortgage programme visibly lifts one market's volume in late 2023. Prices are local: two euro-zone rhythms, pounds, zloty and kronor, with a US dollar column on every transaction asserted consistent against the stated generated rate. Policy appears as dated events with invented rates, and foreign-buyer share falls after each foreign-buyer duty event in the city it applies to. Transactions carry project, district, unit type, floor band, area with its unit, local and dollar prices, price per square metre, buyer profile and sale type. The city price index is the exact median price per square metre of that month's transactions, the annual summary is the exact transaction aggregate, and the build re-verifies both; the guaranteed decade shapes are stated at quarter scale because monthly medians of a lumpy price mixture legitimately wobble. Built for price-index analytics, market-cycle modelling, policy-impact studies, currency work, ETL pipelines and BI logic. The licence and disclosure sections state the provenance of the data.
Row Counts by Table
Counted from the files that ship, not estimated.
| Table | Rows |
|---|---|
| pre_cities | 10 |
| pre_districts | 321 |
| pre_developers | 60 |
| pre_projects | 1,492 |
| pre_transactions | 393,404 |
| pre_price_index | 1,260 |
| pre_district_index | 40,446 |
| pre_rents | 121,146 |
| pre_supply_pipeline | 330 |
| pre_policy_events | 13 |
| pre_city_annual | 110 |
Table Relationships
One parent record and seven child tables, each joined back on the same key.
Schema
Every table ships with typed columns, referential integrity, and documentation.
| Column | Type | Description |
|---|---|---|
| city_code | varchar(8) | City key. Primary key. The ten cities are the only real geography in the dataset. |
| city_name | varchar(16) | The city in words. |
| country_code | varchar(8) | ISO 3166-1 alpha-2 country code. |
| currency | varchar(16) | ISO 4217 currency the city trades in: EUR, GBP, PLN or SEK. |
| decade_pattern | varchar(24) | RATE_SHOCK_NORTH, LATE_CLIMB_SOUTH or FLAT_DECADE: the side of the European decade the city sits on. |
| area_unit_note | varchar(24) | SQM everywhere; SQFT_TRADE_PRESS marks the one market whose trade press quotes square feet for prime stock, where the documented unit defect lives. |
| city_description | varchar(136) | What is generated below this city. |
+1 more columns in pre_cities. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| district_id | varchar(16) | District key. Primary key. Every district is a generated name in the city idiom; one is renamed mid-series into a second id. |
| city_code | varchar(8) | The city the district sits in. |
| district_name | varchar(24) | Generated district name. Collisions with real district names of the ten cities are a build failure. |
| zone_type | varchar(16) | core, inner, suburban or fringe. |
| land_area_km2 | numeric(6,2) | Generated land area in square kilometres. |
| price_factor | numeric(5,2) | Price multiple of the district against the city base level. |
| Column | Type | Description |
|---|---|---|
| developer_id | varchar(8) | Developer key. Primary key. |
| developer_name | varchar(32) | Generated developer name. Collisions with real European developers, housing companies and agencies are a build failure. |
| home_city_code | varchar(8) | The city the developer is based in. |
| founded_year | integer | Year the developer was founded. |
| ownership_type | varchar(16) | listed, private or state_linked. |
| Column | Type | Description |
|---|---|---|
| project_id | varchar(8) | Project key. Primary key. |
| district_id | varchar(16) | The district the project sits in. |
| developer_id | varchar(8) | The developer of the project. |
| project_name | varchar(32) | Generated project name from the district name and a generic suffix. |
| project_type | varchar(24) | apartment_block, mixed_use or terraced_houses. |
| total_units | integer | Units in the project. |
| completion_year | integer | Year the project completes; sales before it are presales. |
+3 more columns in pre_projects. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| transaction_id | varchar(16) | Transaction key. Primary key. A few pairs are exact double-posts, on purpose. |
| project_id | varchar(8) | The project the unit belongs to. |
| district_id | varchar(16) | The district of the project, denormalised. |
| city_code | varchar(8) | The city, denormalised. |
| year_month | varchar(16) | Month of the transaction, 2016-01 to 2026-06. Import as text: spreadsheets convert values like 2021-05 to dates. |
| unit_type | varchar(16) | STUDIO, 1BR, 2BR, 3BR or 4BR_PLUS. |
| floor_band | varchar(16) | LOW, MID, HIGH or PENTHOUSE. |
+9 more columns in pre_transactions. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| index_id | varchar(8) | Index row key. Primary key. |
| city_code | varchar(8) | The city the index measures. |
| year_month | varchar(16) | Month of the index. Import as text. |
| median_psm_local | numeric(10,2) | The exact median price per square metre of the month transactions, in the city currency. Re-verified by the build. |
| currency | varchar(16) | ISO 4217 currency code. |
| transaction_count | integer | Transactions behind the median that month. |
| yoy_change_pct | numeric(5,1) | Change against the same month one year earlier, in percent. Empty in the first year. |
+1 more columns in pre_price_index. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| district_index_id | varchar(16) | District index key. Primary key. |
| district_id | varchar(16) | The district the index measures. |
| year_month | varchar(16) | Month of the index. Import as text. |
| index_psm_local | numeric(10,2) | Modelled price per square metre for the district, in the city currency. |
| currency | varchar(16) | ISO 4217 currency code. |
| Column | Type | Description |
|---|---|---|
| rent_id | varchar(16) | Rent row key. Primary key. |
| district_id | varchar(16) | The district the rent measures. |
| year_month | varchar(16) | Month of the rent. One city is deliberately missing two months. Import as text. |
| bedroom_type | varchar(16) | 1BR, 2BR or 3BR. |
| median_monthly_rent_local | integer | Median monthly rent in the city currency. |
| currency | varchar(16) | ISO 4217 currency code. |
| gross_yield_pct | numeric(5,2) | Gross rental yield in percent, higher in the southern markets. |
+1 more columns in pre_rents. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| supply_id | varchar(8) | Supply row key. Primary key. |
| city_code | varchar(8) | The city. |
| year | integer | Completion year. |
| segment | varchar(16) | mass_market, mid_tier or luxury. |
| units_completing | integer | Units completing that year in the segment. |
| Column | Type | Description |
|---|---|---|
| event_id | varchar(8) | Event key. Primary key. |
| city_code | varchar(8) | The city the measure applies to. |
| year_month | varchar(16) | Month the measure took effect. Import as text. |
| event_type | varchar(24) | The measure class: buyer_stamp_duty, rent_control, lending_rule, tax_incentive or subsidy. |
| event_description | varchar(96) | The measure in generic words with an invented rate. |
| rate_change_pct | integer | The invented rate change in percentage points. Empty when the measure is not a rate. |
| Column | Type | Description |
|---|---|---|
| annual_id | varchar(8) | Annual row key. Primary key. |
| city_code | varchar(8) | The city. |
| year | integer | Calendar year. |
| transaction_count | integer | The exact transaction count for the year. Re-verified by the build. |
| median_psm_local | numeric(10,2) | The exact median price per square metre for the year, in the city currency. |
| currency | varchar(16) | ISO 4217 currency code. |
| median_psm_usd | numeric(9,2) | The same median converted to US dollars at the stated invented fixed rate. |
+1 more columns in pre_city_annual. The full schema ships with the download.
Sample Data
A snapshot of real rows from the dataset (values are fully synthetic).
| transaction_id | project_id | city_code | year_month | unit_type | floor_band | area_value | area_unit | price_local | currency | price_usd |
|---|---|---|---|---|---|---|---|---|---|---|
| TX000001 | PJ0100 | LON | 2016-01 | 1BR | LOW | 53.5 | SQM | 331681 | GBP | 419849 |
| TX000002 | PJ0029 | LON | 2016-01 | 4BR_PLUS | LOW | 193.8 | SQM | 3131071 | GBP | 3963381 |
| TX000003 | PJ0048 | LON | 2016-01 | STUDIO | MID | 39.9 | SQM | 404650 | GBP | 512215 |
Version History
| v1.0.0 | 2026-08-11 | First release. Ten cities on the European decade, 393,404 transactions in four local currencies plus a dollar column, exact monthly price indices, district indices, rents with yields, supply pipeline and policy events, 2016-01 to 2026-06. |
Related Datasets
Property Price and Sales (ASIA)
Real Estate DevelopmentA residential property dataset for ten Asian cities: Singapore, Tokyo, Hong Kong, Jakarta, Bangkok, Kuala Lumpur, Seoul, Taipei, Manila and Ho Chi Minh City, with 444,957 transactions, exact monthly price indices, rents, supply and policy events from 2016 to mid 2026, each city on its own market cycle.
Property Price and Sales (US)
Real Estate DevelopmentA residential property dataset for ten American metros: New York, Los Angeles, Chicago, Miami, Dallas, Houston, Phoenix, Atlanta, Seattle and Denver, with 415,989 transactions, exact monthly price indices, rents, supply, an invented mortgage-rate series and a measurable urban exodus, from 2016 to mid 2026.