Asking prices on listing portals tell you what sellers hope for. Notarial deeds tell you what buyers actually paid. Here is how much apartment a fixed budget buys in each of Poland's largest cities, using the median price per m² from deeds signed in the last 12 months.
The numbers
| City | Median price per m² (PLN) | m² for 600,000 PLN |
|---|---|---|
| Czestochowa | 7,243 | 83 |
| Lodz | 9,250 | 65 |
| Olsztyn | 9,343 | 64 |
| Kielce | 9,483 | 63 |
| Torun | 9,512 | 63 |
| Rzeszow | 9,613 | 62 |
| Bialystok | 9,937 | 60 |
| Katowice | 10,000 | 60 |
| Lublin | 10,129 | 59 |
| Szczecin | 10,561 | 57 |
| Poznan | 11,540 | 52 |
| Gdynia | 11,936 | 50 |
| Gdansk | 12,622 | 48 |
| Wroclaw | 12,862 | 47 |
| Krakow | 14,961 | 40 |
| Warsaw | 15,742 | 38 |
What stands out
- Czestochowa gives you the most space: 83 m².
- Warsaw the least: 38 m² – 2.2× less than Czestochowa.
Methodology
- Apartment sales from the Polish Real Estate Price Register (RCN, published by GUGiK; free since 13 February 2026): market sales of full ownership only, implausible prices removed.
- 12-month window ending at the newest deed published in each city – counties publish with different delays.
- Weekly open data for all cities (CSV, CC BY 4.0) is on GitHub: poland-housing-prices.
Get the data for any address
- Transaction prices from notarial deeds – median, quartiles, trend and the deeds around any address.
- Apartment valuation (AVM) – an estimate for any apartment from comparable deeds.
- New-build prices – developers' asking prices from their daily price lists.
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("kris_fili/poland-real-estate-transaction-prices").call(run_input={
"location": "Kraków, Rynek Główny 1",
"radiusMeters": 1000,
"monthsBack": 24,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
if item["recordType"] == "summary":
print(item["statistics"]["pricePerM2Pln"])
The same tools work inside AI assistants through MCP. Questions or ideas for another analysis? Leave a comment.

Top comments (0)