Static snapshot · one location

Retail Site Intelligence

A tool to support retail real-estate location search — site scoring, flood-risk, footfall, and leasehold pro-forma — built on open data (OpenStreetMap · Swiss BFS · BAFU). Reference brand: On.

This page is a static showcase, not the live tool. The screenshots below capture a single analysed location — Niederdorfstrasse 21, 8001 Zürich (Altstadt, ~200 m from On's Limmatquai flagship). The actual tool is an interactive Streamlit application that runs live OSM/BFS/BAFU queries for any address — try it online or clone & run it locally (instructions at the bottom).

Launch live app →

What it does

A seven-step funnel that mirrors a retail analyst's daily workflow, from a broker lead to a deal memo — every score fully inspectable (glass-box).

Step 1 — Location & flood risk

Geocoded candidate with the BAFU surface-runoff hazard overlay and curated premium-hotel layer. Niederdorfstrasse 21 sits inside the Sihl/Limmat HQ100 flood perimeter.

Step 1 location map with flood and hotel overlays
Candidate · 500 m search radius · BAFU flood WMS · curated 5★/4★ hotels.

Step 2 — Market overview

BFS demographics for the municipality plus a live premium-environment signal — purchasing power, age structure, and curated 5★/4★ hotels in radius.

Step 2 market overview metrics
Zürich · Kaufkraft index 118 (CH avg 100) · 38.5% aged 18-45 · curated vs. OSM hotel counts side-by-side.

Step 3 — Proximity intelligence

One OSM query, brand-aware classification into sport / symbiose / premium / competitor / negative / partner, with curated overrides for stores OSM under-tags.

Step 3 proximity intelligence map and tables
Competitors detected on-site (Snipes Niederdorf) and nearby (Foot Locker, Titolo, Adidas) · cannibalization vs. the Limmatquai flagship 200 m away.

Step 4 — Footfall & accessibility

Amenity-richness Walk Score (Pandana-free, log-saturated so central locations differentiate realistically) plus transit access.

Step 4 footfall and walk score breakdown
Walk Score ≈ 71/100 · transit ≈ 95-100 · six walk-amenity categories (food / grocery / services / education / leisure / retail).

Step 5 — Glass-Box Site Score

Every dimension normalised 0-100 before weighting, with flood penalty and Bechtiger-2024 / ESI sustainability adjustment applied transparently.

Step 5 glass-box score breakdown
Per-dimension contribution breakdown · Premium Environment Index · verdict.

Step 6 — Leasehold Pro-Forma

A leasehold cashflow model (On leases, doesn't buy) — 5-year DCF with NPV / IRR / payback, Bear/Base/Bull scenarios, live sensitivity sliders, and retail KPIs (Occupancy Cost Ratio, Cash-on-Cash, Break-even sales).

Step 6 leasehold pro-forma DCF and KPIs
Year-0 CAPEX = fit-out · rent escalation modelled · Occupancy Cost Ratio benchmarked against the <10% premium-retail target.

Proximity layers (all 12)

Every analytical overlay is an independent, toggleable map layer. All twelve — each isolated over the baseline — captured at Niederdorfstrasse 21.

Baseline map, no overlay
Baseline — candidate + 500 m radius (no overlay)
BAFU flood hazard layer
🌊 BAFU flood hazard
Running infrastructure layer
🏃 Running infrastructure
Pedestrian streets layer
🚶 Pedestrian streets
Shop density heatmap
🔥 Shop-density heatmap
Transit stops layer
🚆 Transit stops (rail / tram / bus)
All shops layer
🛍️ All shops (generic)
Cannibalization overlap layer
⚠️ Cannibalization overlap
Classified POI markers layer
🔵 Classified POI markers
Competitor catchments layer
⚔️ Competitor catchments (200 m)
Walk-amenity density heatmap
🟢 Walk-amenity density
Sport-facility density heatmap
🏋️ Sport-facility density
Curated hotels layer
🏨 Curated hotels (5★ green / 4★ orange)

Run the interactive tool

The live app analyses any address — this static page only shows one. Open the hosted version (free tier: may take ~30 s to wake up) or run it locally:

git clone https://github.com/TStrathaus/retail-real-estate-site-intelligence.git
cd retail-real-estate-site-intelligence
python -m venv .venv && source .venv/bin/activate   # Windows: .venv\Scripts\activate
pip install -r requirements.txt
cp .env.example .env                                 # set NOMINATIM_USER_AGENT
streamlit run app.py

Launch live app View on GitHub Scoring methodology

Tech & data

StreamlitOSMnxGeoPandas Foliummatplotlibplotly contextilyReportLabpython-pptx
OpenStreetMapBFS STATPOP BAFU flood hazardESI / CCRS