Where demand outruns the housing stock
Where more people want to live than there are flats, rents come under pressure. We measure both sides in every district.
Empty flats against population growth
Supply is the in the 2022 census.[10] Housing research usually puts the vacancy a market needs for normal moving at 2 to 3%.[8] Demand is population change over the last five years. The combines the two, so a district with few empty flats and a growing population scores high. German rent law uses the same two signals, low vacancy and population growth without enough new building, to define a tight housing market.[9]
400 districts: empty flats versus population growth
Each bubble is a district, sized by population. Dashed lines mark the German middle on each axis.
The chart always shows all 400 districts. Search for one to highlight it and see where it sits.
How to read this chart
Top left: few empty flats and a growing population. That is where competition for flats is fiercest. Bottom right: many empty flats and a shrinking population, which keeps rents low. The horizontal axis is stretched at the low end because the difference between 1% and 2% empty matters far more than between 8% and 9%.
Use the search box to find your district on the chart.
The ten tightest and ten slackest districts
Tightest
Highest supply-demand index
- 1Dahme-Spreewald2.3% empty, +6.8% pop.2.80
- 2Potsdam1.3% empty, +5.4% pop.2.68
- 3Neu-Ulm1.3% empty, +4.7% pop.2.32
- 4Cloppenburg2.1% empty, +5.6% pop.2.32
- 5Unterallgäu1.9% empty, +5.4% pop.2.29
- 6Landshut1.6% empty, +5.0% pop.2.28
- 7Pfaffenhofen a.d.Ilm1.3% empty, +4.6% pop.2.27
- 8Leipzig2.2% empty, +5.7% pop.2.27
- 9Mühldorf a.Inn1.5% empty, +4.7% pop.2.22
- 10Kaufbeuren2.2% empty, +5.5% pop.2.19
Slackest
Lowest supply-demand index (shown as distance below zero)
- 1Görlitz8.9% empty, -2.6% pop.6.14
- 2Zwickau8.9% empty, -2.6% pop.6.14
- 3Erzgebirgskreis8.3% empty, -3.3% pop.6.13
- 4Altmarkkreis Salzwedel8.8% empty, -2.3% pop.5.93
- 5Salzlandkreis8.1% empty, -3.1% pop.5.92
- 6Prignitz9.6% empty, -1.2% pop.5.85
- 7Altenburger Land9.0% empty, -1.8% pop.5.79
- 8Burgenlandkreis8.5% empty, -2.2% pop.5.66
- 9Vogtlandkreis7.9% empty, -2.8% pop.5.62
- 10Mansfeld-Südharz6.8% empty, -4.1% pop.5.62
Does the index match what renters experience?
The index uses census data, which is a snapshot. To check it, we compare it with live listing data for the 37 cities: how many a flat stays online and how many are gone within a week. The correlation is 0.75, so where the census says a market is tight, flats really do go faster.
| City | Market | Empty flats | Population, 5 y | Days online | Index |
|---|---|---|---|---|---|
| Potsdam | tight | 1.3% | +5.4% | 22 | 2.68 |
| Leipzig | tight | 2.2% | +5.7% | 31 | 2.27 |
| Hamburg | tight | 1.0% | +3.6% | 23 | 1.91 |
| Berlin | tight | 1.3% | +3.9% | 26 | 1.88 |
| Munich | tight | 1.4% | +3.3% | 22 | 1.51 |
| Münster | tight | 1.1% | +2.5% | 21 | 1.32 |
| Bonn | tight | 1.6% | +3.0% | 23 | 1.25 |
| Frankfurt | tight | 1.9% | +3.3% | 25 | 1.21 |
| Bocholt | tight | 1.5% | +2.7% | 30 | 1.18 |
| Rhein-Erft district | tight | 1.2% | +2.3% | 25 | 1.15 |
| Mannheim | balanced | 1.8% | +2.4% | 28 | 0.84 |
| Augsburg | balanced | 2.1% | +2.8% | 24 | 0.82 |
| Mönchengladbach | balanced | 2.2% | +2.6% | 31 | 0.69 |
| Düsseldorf | balanced | 1.6% | +1.9% | 26 | 0.69 |
| Wiesbaden | balanced | 2.0% | +2.1% | 27 | 0.53 |
| Nuremberg | balanced | 1.6% | +1.5% | 31 | 0.47 |
| Aachen | balanced | 1.7% | +1.6% | 26 | 0.45 |
| Bielefeld | balanced | 1.7% | +1.6% | 30 | 0.44 |
| Hanover | balanced | 2.2% | +1.8% | 27 | 0.25 |
| Lübeck | balanced | 1.5% | +0.8% | 24 | 0.19 |
| Mettmann district | balanced | 1.6% | +0.9% | 29 | 0.17 |
| Dresden | balanced | 2.7% | +2.2% | 27 | 0.14 |
| Dortmund | balanced | 2.1% | +1.3% | 33 | 0.06 |
| Brunswick | balanced | 2.3% | +1.5% | 29 | 0.05 |
| Hamm | balanced | 1.8% | +0.9% | 32 | 0.05 |
| Cologne | balanced | 1.3% | +0.3% | 22 | 0.02 |
| Wuppertal | balanced | 2.3% | +1.4% | 35 | -0.02 |
| Bremen | balanced | 2.0% | +0.8% | 26 | -0.14 |
| Kiel | balanced | 1.6% | +0.2% | 23 | -0.20 |
| Duisburg | balanced | 2.4% | +0.9% | 35 | -0.32 |
| Erfurt | balanced | 2.5% | +0.9% | 29 | -0.38 |
| Stuttgart | balanced | 1.8% | -0.1% | 29 | -0.48 |
| Bochum | balanced | 2.2% | +0.3% | 31 | -0.54 |
| Gelsenkirchen | balanced | 3.4% | +1.5% | 41 | -0.62 |
| Essen | balanced | 2.6% | +0.4% | 32 | -0.71 |
| Karlsruhe | balanced | 1.5% | -1.0% | 22 | -0.78 |
| Chemnitz | slack | 9.4% | +1.0% | 61 | -4.55 |