How clean is the air on my street?
A monitoring station measures one spot, and Luchtmeetnet has 102 for the whole country. Amsterdam shows how big the difference is: in the week to 15 October 2026, nitrogen dioxide (NO2) averaged 10.7 micrograms per cubic metre in Vondelpark and 24.3 on Haarlemmerweg. For your own address there is RIVM's modelled map; at Dam Square it gives an annual mean of 20.1 for 2024. Hourly values are provisional, times are in UTC, and a weekly average cannot simply be compared with a standard for an annual mean.
Short answerAt Dam Square in Amsterdam: a modelled annual mean of 20.1 µg/m³ NO2 for 2024 (RIVM). That is half the EU limit of 40 and twice the WHO guideline of 10. The nearest station, Oude Schans, measured an average of 14.4 in the week to 15 October 2026.
Nitrogen dioxide in Amsterdam: highest along the main roads, lowest at the edges of the city
The modelled annual mean NO2 for 2024 from RIVM's map service, for an area of 16 by 12 kilometres around the centre. According to the service's legend, blue is below 14 micrograms per cubic metre and grey 14 to 16; cream and yellow 16 to 20, orange 20 to 30 and red 30 or more. The orange and red lines are the busy roads. It is a modelled map, not a measurement: for a value at your own address, query the map at that point (see the script).
Step by step
- 1
Find the nearest station in Luchtmeetnet.
- 2
For an annual average at your own location: the RIVM GCN map.
- 3
Compare with other European cities via the EEA.
Join on coördinaten
Start with AI
Paste this prompt into Claude or ChatGPT. It names the real endpoints, the join key and the pitfalls, so the assistant writes usable code straight away. Always check the result against the source itself.
Build a web page where I pick a point on the map and see how clean the air is there. All services below are open (no key, CORS is open). 1. Annual mean NO2 at that point, from the RIVM map (WMS GetFeatureInfo): https://data.rivm.nl/geo/alo/wms?service=WMS&version=1.3.0&request=GetFeatureInfo&layers=rivm_nsl_20260401_gm_NO22024&query_layers=rivm_nsl_20260401_gm_NO22024&styles=&crs=EPSG:4326&bbox=52.3721,4.8915,52.3741,4.8935&width=3&height=3&i=1&j=1&info_format=application/json The value is in features[0].properties.GRAY_INDEX, in µg/m³, for the year 2024. WMS 1.3.0 with EPSG:4326 expects the bbox as lat,lon (not lon,lat). It is a modelled map, not a measurement. 2. The three nearest Luchtmeetnet stations: - list: https://api.luchtmeetnet.nl/open_api/stations?page=1 (5 pages, number and name only) - details with coordinates, type (Traffic, Municipal …) and measured pollutants: https://api.luchtmeetnet.nl/open_api/stations/NL49017 - measurements: https://api.luchtmeetnet.nl/open_api/measurements?station_number=NL49017&formula=NO2&start=2026-10-08T00:00:00Z&end=2026-10-15T00:00:00Z At most one week per request, paginated (pagination.last_page), times in UTC, hourly values provisional. Not every station measures every pollutant: check components (NO2, PM10, PM25, O3 …). Fetch station details once and store them; don't request all 102 stations on every visit. Output: the RIVM value for the chosen point, and per station the distance, the type (traffic or background), the mean and maximum of the past week, and an hourly chart in Dutch local time. Add the WHO guideline (10 µg/m³ as an annual mean) and the EU limit (40), and say that a weekly average is not an annual mean. The map itself can be the background: the same WMS with request=GetMap and crs=EPSG:28992.
Try it yourself
A small script that answers the core of the question. Needs: Python 3.10+ en requests. Tested on 2026-10-15; below is the real output of that run.
# Hoe schoon is de lucht in mijn straat? (1) Berekend jaargemiddelde NO2 op je plek (RIVM-kaart, WMS), (2) metingen
# van de afgelopen week op de Luchtmeetnet-stations in je stad, op afstand gesorteerd. Geen sleutel nodig.
import math, requests
from datetime import datetime, timedelta, timezone
API = "https://api.luchtmeetnet.nl/open_api"
UA = {"User-Agent": "opendataindex-voorbeeld/0.2 (+https://opendataindex.nl)"}
STAD, LON, LAT = "Amsterdam", 4.8925, 52.3731 # de Dam; zet hier je eigen coördinaten
def alle_paginas(pad, **params):
uit, pagina = [], 1
while True:
j = requests.get(f"{API}/{pad}", params={**params, "page": pagina}, headers=UA, timeout=60).json()
uit += j["data"]
if pagina >= j["pagination"]["last_page"]:
return uit
pagina += 1
def km(lon1, lat1, lon2, lat2): # benadering, goed genoeg binnen een stad
return 6371 * math.hypot(math.radians(lon2 - lon1) * math.cos(math.radians(lat1)), math.radians(lat2 - lat1))
# 1. Jaargemiddelde op je plek uit de RIVM-kaart (GetFeatureInfo; WMS 1.3.0 met EPSG:4326 = lat,lon-volgorde).
LAAG = "rivm_nsl_20260401_gm_NO22024" # NO2-kaart over 2024, gepubliceerd 1 april 2026
info = requests.get("https://data.rivm.nl/geo/alo/wms", headers=UA, timeout=60, params={
"service": "WMS", "version": "1.3.0", "request": "GetFeatureInfo", "layers": LAAG, "query_layers": LAAG,
"styles": "", "crs": "EPSG:4326", "bbox": f"{LAT - .001},{LON - .001},{LAT + .001},{LON + .001}",
"width": 3, "height": 3, "i": 1, "j": 1, "info_format": "application/json"}).json()
print(f"Berekend jaargemiddelde NO2 in 2024 op {LAT}, {LON}: {info['features'][0]['properties']['GRAY_INDEX']:.1f} µg/m³\n")
# 2. Stations in je stad (de lijst heeft alleen nummer en naam; details per station apart).
stations = [s for s in alle_paginas("stations") if s["location"].replace(" ", "").startswith(STAD + "-")]
eind = datetime.now(timezone.utc).replace(minute=0, second=0, microsecond=0)
start = eind - timedelta(days=7) # maximaal één week per verzoek; tijden in UTC
rijen = []
for s in stations:
d = requests.get(f"{API}/stations/{s['number']}", headers=UA, timeout=60).json()["data"]
if "NO2" not in d["components"]:
continue # niet elk station meet elke stof
lon, lat = d["geometry"]["coordinates"]
m = alle_paginas("measurements", station_number=s["number"], formula="NO2",
start=start.isoformat().replace("+00:00", "Z"), end=eind.isoformat().replace("+00:00", "Z"))
w = [x["value"] for x in m if x["value"] is not None]
if w:
rijen.append((km(LON, LAT, lon, lat), s["location"], d["type"], sum(w) / len(w), max(w), len(w)))
print(f"NO2 in µg/m³, {start:%d-%m %H:%M} tot {eind:%d-%m %H:%M} UTC (voorlopige uurwaarden)\n")
print(f"{'afstand':>8} {'station':32} {'soort':12} {'gem.':>5} {'max':>6} {'uren':>5}")
for afstand, naam, soort, gem, mx, n in sorted(rijen):
print(f"{afstand:6.1f} km {naam:32} {soort:12} {gem:5.1f} {mx:6.1f} {n:5}")
print("\nTer vergelijking: WHO-advies 10 µg/m³ als jaargemiddelde, EU-grenswaarde 40.")
Berekend jaargemiddelde NO2 in 2024 op 52.3731, 4.8925: 20.1 µg/m³ NO2 in µg/m³, 08-10 22:00 tot 15-10 22:00 UTC (voorlopige uurwaarden) afstand station soort gem. max uren 0.8 km Amsterdam-Oude Schans Municipal 14.4 52.0 168 1.7 km Amsterdam-Stadhouderskade Traffic 18.6 55.8 168 1.8 km Amsterdam-Haarlemmerweg Traffic 24.3 61.2 166 1.9 km Amsterdam-Van Diemenstraat Traffic 19.7 55.7 168 2.2 km Amsterdam-Jan van Galenstraat Traffic 21.3 59.3 168 2.3 km Amsterdam-Vondelpark Municipal 10.7 39.5 168 3.3 km Amsterdam-Einsteinweg Traffic 21.5 62.6 167 3.9 km Amsterdam-Nieuwendammerdijk Municipal 14.4 44.4 162 6.8 km Amsterdam-Ookmeer Municipal 12.6 57.3 167 8.7 km Amsterdam -Kantershof Municipal 11.6 34.2 168 Ter vergelijking: WHO-advies 10 µg/m³ als jaargemiddelde, EU-grenswaarde 40.
The sources3

Luchtmeetnet air quality networkIn depth
Measurements of nitrogen dioxide, particulate matter and ozone, every hour, from about a hundred stations across the Netherlands.

Large-scale concentration maps (GCN)
Modelled annual averages of nitrogen dioxide and particulate matter for the whole country, in one-kilometre cells. Where Luchtmeetnet measures, GCN fills in between stations.

EEA air quality
The same Dutch stations as Luchtmeetnet, but next to the rest of Europe. Useful for comparing Amsterdam with Antwerp or Cologne.
More examples with this data
Premature deaths from fine particulate matter (PM2.5) in the Netherlands: lower than in 18 of the 26 other EU countries
Nitrogen dioxide in outdoor air in the Netherlands (annual mean of monitoring stations): 15.7 micrograms per cubic metre in 2025, 40% less than in 2013
Fine particulate matter (PM2.5) at urban background stations in the Netherlands: lower than in 14 of the 26 other EU countries
Ammonia in the air in 2025: highest concentrations in the Gelderse Vallei and the Peel, lowest along the coast
Also in the indexes
Datasets from data.overheid.nl, the National Georegister, CBS, Eurostat and city portals that fit this question.
- Deaths attributed to household air pollution vs. deaths attributed to ambient air pollutionOur World in Data
- Luchtkwaliteit langs wegen 2025 (Monitoringsronde 2024)Nationaal Georegister
- Data underlying the publication: Effect of drying conditions on quality of primed cabbage (Brassica oleracea) seeds and ethanol degradation as promising quality parameter4TU.ResearchData
- Lucht - Immissie verkeer 2024 Fijnstof (PM2,5)Nationaal Georegister
- Lucht - Immissie verkeer 2024 Fijnstof (PM10)Nationaal Georegister
- Lucht - Immissie verkeer prognose 2030 Fijnstof (PM2,5)Nationaal Georegister
- Lucht - Immissie verkeer prognose 2030 Fijnstof (PM10)Nationaal Georegister
- The influence of meteorology and air quality on parkrun athletic performance Meteorology, air quality and parkrunDANS Data Station Physical and Technical Sciences
- Fijnstof is een belangrijke indicator van luchtkwaliteit. De belangrijkste bronnen van fijnstof zijn verkeer en industrie. De advieswaarde van de Wereldgezondheids-organisatie (WHO) voor PM2.5 is 5 μg/m3. Het gemiddelde in Nederland is 8,7 μg/m3. Overal in Nederland wordt de WHO-advieswaarde …Provincie Noord-Holland
- Luchtkwaliteit langs wegen 2023 (Monitoringsronde 2024)Nationaal Georegister
Other worked-out questions
- Is there more nuisance in my neighbourhood than last year?3 sources
- How much grant money does a foundation in Amsterdam receive?3 sources
- How much warmer has it become?2 sources
- What does my area look like from space?3 sources
- Did house prices rise faster here than elsewhere in Europe?2 sources
- How many cars in my municipality are electric?2 sources