How it works
Run Clean plans running routes in Copenhagen and Frederiksberg along streets with less traffic pollution. This page explains where the numbers come from, what they mean, and what they can't tell you.
1. What this is
Road traffic produces pollution that changes sharply from one street to the next — especially ultrafine particles and soot (black carbon), and also nitrogen dioxide (NO₂). Measurements in Copenhagen found roughly 3 times more ultrafine particles and NO₂, and 5 times more soot, on major roads than on quiet residential streets. Runners breathe several times more air than people at rest, so where you run matters.
Run Clean offers three things:
- Run a loop — loops of the distance you choose, starting where you are, ordered from cleanest.
- A to B — the route with the cleanest air within a detour limit you set.
- Check my run — open a GPX file of a run you already do; I grade it, show its most polluted stretch and suggest a cleaner swap.
2. How the pollution map is made
The measurements
Between November 2018 and March 2020, Google Street View cars fitted with air-quality instruments drove every street in Copenhagen and Frederiksberg many times, in a project with Utrecht University and the City of Copenhagen (“Air View”). Researchers combined the repeated drives with a statistical model to estimate long-term average levels for about 32,000 street segments of around 40 metres each. Soot and ultrafine particles were measured in the daytime; NO₂ represents all hours.
From streets to running paths
I map those values onto the OpenStreetMap network of footpaths, pavements and shared paths:
- a pavement or cycle track next to a measured street takes that street's value;
- a path away from streets (parks, lakes, harbour) gets a value that falls off with distance from nearby busy streets, down to a background level (the cleanest tenth of streets). This part is estimated, not measured, and hasn't been validated against measurements.
Bringing it closer to today
Air has improved since 2018–20. Using the official monitoring stations run by Aarhus University (DCE), I scale soot and NO₂ down to 2024 levels — both the city background and the extra pollution on busy streets. Ultrafine particles are not scaled, because there's no comparable station record to do it with.
One combined number
To compare routes I combine the three pollutants into one index: ultrafine particles 40%, soot 40%, NO₂ 20%, each relative to the city's median street. The weights are my judgement, based on studies linking short-term effects of busy streets mostly to ultrafine particles and soot (e.g. Sinharay et al., The Lancet 2018). That's why I always show the three pollutants separately too.
3. What the numbers mean
| You see | It means |
|---|---|
| “About 20% cleaner air per km” | The route's average modelled pollution is about 20% lower than the reference: the shortest route (A to B), a typical loop from your start that ignores pollution (loops), or your own run (Check my run). |
| “Modelled total exposure” | Pollution × distance over the whole route. At a steady pace this roughly tracks how much polluted air you'd breathe — but I don't model your breathing, so treat it as a rough guide. |
| “About the same” | The difference is under 5%. That's within what the model can't reliably tell apart, so I don't present it as a win. |
| Rounded percentages | I round to the nearest 5% because more precision would be false precision. |
| Per-pollutant lines | The three pollutants often change by different amounts; soot changes least. If any pollutant gets worse on a suggested route, I show it. |
| “modelled estimate ⓘ” | A link back to this page. |
4. Route grades A–E
A grade compares a route's average with all of Copenhagen's and Frederiksberg's paths, by length:
- A — among the cleanest fifth · B — cleaner than most · C — about average · D — more polluted than most · E — among the most polluted fifth.
Grades are a ranking within Copenhagen, not a health rating. An E-graded street in Copenhagen can still have cleaner air than an average street in many other cities.
5. Detours and loops
A to B and swaps: you set the longest detour you'll accept (default +20%). I compute a set of candidate routes — some favouring less distance, some favouring cleaner streets — and, within your limit, pick the one with the cleanest air per km, but never one with higher modelled total exposure than the shortest route. It's the best of the candidates I try, not a guaranteed optimum. Extra distance is only added when it buys cleaner air; most routes use much less than the limit. Beyond about +15–20%, extra detours rarely help much.
Loops keep the distance you chose (within about 5%), so there's no detour limit. All options are compared with the same reference: a typical loop of that length from your start, planned without looking at pollution. Options are listed cleanest first.
Check my run compares the suggested swap with your own run, not with the shortest route.
6. Limitations
- Estimates, not measurements. Nobody has measured your route. The map comes from 2018–20 measurements, adjusted to 2024 only for soot and NO₂.
- Daytime averages. Soot and ultrafine particles were measured in the daytime; the map shows long-term averages, not what the air is like right now.
- Paths away from streets are estimated. Measurements from 2024 suggest green paths may be cleaner than I show; open squares right next to busy boulevards may be more polluted than I show.
- Junctions and local sources such as idling traffic, wood stoves, barbecues or construction aren't fully captured.
- No live data. Weather, wind and traffic jams change pollution from hour to hour; I don't model that.
- Coverage: Copenhagen and Frederiksberg only.
7. Roadworks and time of day
I use the City of Copenhagen's list of active excavation permits, updated daily, and steer around heavy works (asphalt, district heating, works in the carriageway) during their permitted working hours. Permits don't say whether machines are actually running, so this is approximate, and it isn't included in the percentages. If the roadworks data hasn't been updated for three days, I switch this off and say so.
I don't adjust for the time of day. Studies of cyclists in Copenhagen found ultrafine particle levels similar in and outside rush hour.
8. Safety
Run Clean is not a safety or navigation guarantee. Routes can pass through quiet, unlit or isolated places, closed paths, or busy crossings. “Prefer lit paths” relies on OpenStreetMap lighting data, which is incomplete. Always use your own judgement, follow traffic rules and signs, and avoid places that feel unsafe — and please tell me about problems using “Report a problem”.
9. Privacy
- Routes are planned on your device. Your browser downloads the street data once (about 4 MB) and does all the routing itself: the points you choose and your GPX files never leave your device.
- Place search: the text you type in a search box is sent to this site to look up matching places. It isn't stored or logged.
- Server logs: like the rest of stefanvoinea.com, the web server keeps a standard access log (your IP address, the time and the files requested) for about 10 days. It never contains coordinates, search text or GPX data.
- Anonymous usage counts (for example “a loop of 10 km was planned”, or how much cleaner a suggested route was) are stored without locations, IP addresses or identifiers, to see whether the tool is useful.
- Reports you send keep your note and the route line for up to 90 days.
- No cookies, no trackers. Your settings are saved in your own browser (local storage).
- Map tiles are loaded from OpenFreeMap (openfreemap.org), which, like any web server, receives your IP address and the map area you view.
- Shared links contain the start and end points of the route.
- Your location is only requested when you tap “Use my location”, and is used to set your start point.
Data controller and contact: Stefan Voinea, webmaster@stefanvoinea.com.
10. Data sources and credits
| Data | Source and licence |
|---|---|
| Street-level air pollution (2018–20) | Copenhagen Air View — Utrecht University & Google 2021, via opendata.dk. CC BY 4.0. |
| Paths, streets, parks, addresses | © OpenStreetMap contributors. Open Database License (ODbL). |
| Roadworks permits | Københavns Kommune (City of Copenhagen), via opendata.dk. CC BY 4.0. |
| 2024 scaling for soot and NO₂ | Aarhus University (DCE) national air-quality monitoring reports. |
| Map tiles | OpenFreeMap, © OpenMapTiles, data © OpenStreetMap contributors. |
| Map software | MapLibre GL JS (BSD-3-Clause). |
Licence confirmations for the Air View data and my use of OpenStreetMap data are being completed during the beta.
11. FAQ
Should I stop running on busy roads?
No need to stop running — but if you can choose, a parallel quieter street or a park path usually means noticeably less traffic pollution, often for little extra distance.
Why is my street red?
Red streets had high average pollution in the 2018–20 measurements, usually because of heavy traffic, buses or lorries, or tall buildings that trap exhaust. Things may have changed since — if you think the map is wrong, use “Report a problem”.
Is this live?
No. The pollution map is a long-term average. Only roadworks are updated daily.
Can I trust “20% cleaner”?
Trust the direction more than the number. The 2018–20 measurements show large, consistent differences between busy and quiet streets, and the model is built around them — but the route-level estimates haven't yet been checked with measurements on actual runs. The exact percentage is uncertain, which is why I round it and show the pollutants separately.
Why doesn't my loop go through the park I like?
Loops are planned from geometry around your start and may not reach every park. Try another start point or distance, or use A to B with the park as a destination.
12. Contact
This is a beta. Feedback is very welcome — use “Report a problem” under any route.
Run Clean is made by Stefan Voinea. Email webmaster@stefanvoinea.com or find me on LinkedIn.