All data is processed, validated, and served as static JSON. All rent values are Nettokaltmiete (net cold rent) in β¬/mΒ²/month.
1. Extraction: Official Mietspiegel PDFs downloaded from municipal websites. Tables extracted with pdfplumber (Python).
2. Normalization: Each city's table structure mapped to a standard schema (Lage Γ Baujahr Γ Size). Wohnlage categories harmonized across cities.
3. Validation: 14 automated checks: monotonicity, range, cross-source reconciliation. CI gate blocks deployment on failure.
4. Reconciliation: Immoscout24 (market) and Zensus 2022 (census) data matched to Mietspiegel grids using spatial joins.
5. Deployment: Validated JSON files deployed to GitHub Pages. No server, no database, no API keys.
Pre-computed CSV exports for common analyses: