Luchtmeetnet API
Free Dutch air quality API with no key: the official national monitoring network's stations and their measured and forecast pollutant concentrations. Tested example included.
Endpoint tested and returned HTTP 200 on 21 Aug 2026
What is the Luchtmeetnet API?
Luchtmeetnet is the Netherlands' official air quality monitoring network, and its open API needs no key. The stations endpoint returns every monitoring site with its network identifier and location name, paginated.
Consumer air quality APIs mostly interpolate from sparse sources and present the result with more confidence than it deserves. Luchtmeetnet is the opposite: these are the actual regulatory monitoring stations operated by RIVM and its partners, the ones whose readings determine whether the Netherlands is meeting EU air quality limits. The measurements are reference-grade rather than modelled.
The station listing is deliberately minimal — a `number` and a `location` string, nothing more — because it exists to give you the identifier you need for everything else. Once you have a station number, `/stations/{number}/measurements` returns concentrations for NO2, PM10, PM2.5, ozone and the rest, and `/stations/{number}` returns the site's coordinates and metadata. The pagination block is more informative than most, giving you `last_page` and an explicit `page_list` array, so you know the total extent before you start walking it.
Quick facts
- Base URL
https://api.luchtmeetnet.nl/open_api- Authentication
- No API key and no account for the open API.
- Rate limit
- Not published as a fixed figure. Measurements update hourly, so hourly polling is the natural ceiling.
- Pricing
- Free. Dutch government open data.
- CORS
- Enabled — callable directly from browser JavaScript
- Official docs
- Read the docs
How to use the Luchtmeetnet API
Every request below was executed against the live API on 21 Aug 2026, and the response shown is the real body it returned — not an illustration.
1. List the national air quality monitoring stations
GET https://api.luchtmeetnet.nl/open_api/stations?page=1
curl 'https://api.luchtmeetnet.nl/open_api/stations?page=1'const res = await fetch("https://api.luchtmeetnet.nl/open_api/stations?page=1");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://api.luchtmeetnet.nl/open_api/stations?page=1", timeout=20)
res.raise_for_status()
print(res.json()){
"pagination": {
"last_page": 5,
"first_page": 1,
"prev_page": 1,
"current_page": 1,
"page_list": [
1,
2,
3,
4,
5
],
"next_page": 2
},
"data": [
{
"number": "NL49565",
"location": "Oude Meer-Aalsmeerderdijk"
},
{
"number": "NL53020",
"location": "Strijensas Buitendijk"
},
{
"number": "NL50013",
"location": "Meerssen- Beekerweg"
},
{
"number": "NL10741",
"location": "Nijmegen-Graafseweg"
},
{
"number": "NL10639",
"location": "Utrecht-Constant Erzeijstraat"
},
{
"number": "NL10636",
"location": "Utrecht-Kardinaal de Jongweg"
},
{
"number": "NL10446",
"location": "Den Haag-Bleriotlaan"
},
{
"number": "NL49701",
"location": "Zaandam-Wagenschotpad"
},
{
"number": "NL49012",
"location": "Amsterdam-Van Diemenstraat"
},
{
"number": "NL10301",
"location": "Zierikzee-Lange Slikweg"
},
{
"number": "NL10617",
"location": "Biddinghuizen-Kuilweg"
},
{
"number": "NL10404",
"location": "Den Haag-Rebecquestraat"
},
{
"number": "NL01912",
"location": "Ridderkerk-Voorweg"
},
{
"number": "NL53015",
"location": "Klundert-Kerkweg"
},
{
"number": "NL53004",
"location": "Moerdijk-Julianastraat"
},
{
"number": "NL54004",
"location": "Arnhem Velperbroek"
},
{
"number": "NL10450",
"location": "Den Haag-NeheParameters
| Parameter | Type | Required | Description |
|---|---|---|---|
page | query | Optional | 1-based page number. Read `pagination.last_page` to know how many there are. 1 |
organisation_id | query | Optional | Filter to stations run by one operating organisation. 1 |
/stations/{number}/measurements | path | Optional | Measured concentrations for one station, by pollutant formula. |
/components | path | Optional | The pollutant components the network measures, with units and formulas. |
Response fields
dataarray- Stations on this page.
data[].numberstring- Station identifier such as `NL49565` — the key every other endpoint takes.
data[].locationstring- Human-readable site name, usually town plus street, in Dutch.
pagination.current_page / last_page / first_pageinteger- Where you are and how far the result set runs.
pagination.next_page / prev_pageinteger- Adjacent page numbers, clamped at the ends rather than null.
pagination.page_listarray- Every available page number as an array, which is unusually convenient for building a pager.
What you can build with the Luchtmeetnet API
- Build a Dutch air quality map from official monitoring sites
- Alert on NO2 or PM2.5 exceedances near a specific location
- Compare regulatory station readings against low-cost sensor networks
- Analyse long-term pollutant trends for a city
Common errors and how to fix them
Only a handful of stations returned
Results are paginated.
Fix: Read `pagination.last_page` and walk the pages. The captured example shows five pages of stations.
Station number rejected downstream
The identifier is a string with a country prefix.
Fix: Pass `NL49565` verbatim, including the `NL`. Stripping it to a number will not resolve.
No measurements for a station
Not every site measures every pollutant, and instruments go offline for maintenance.
Fix: Query `/components` for what exists, and treat gaps as normal rather than as errors.
Location names look garbled
They are Dutch and contain diacritics and hyphens.
Fix: Ensure you are decoding as UTF-8 throughout; the API sends it correctly.
Luchtmeetnet API — frequently asked questions
Is the Luchtmeetnet API free?
Yes, free with no key or account. It is Dutch government open data from the national air quality monitoring network.
How accurate is the data?
These are regulatory reference monitoring stations, the same instruments used to assess compliance with EU air quality limits — considerably more reliable than interpolated consumer air quality services.
How do I get actual pollutant readings?
Take a station `number` from this listing and call `/stations/{number}/measurements`. The station list exists to supply that identifier.
How often does the data update?
Hourly, in line with how the monitoring network reports. Polling more frequently than that returns the same values.
Tools that pair with this API
Unit Converter
Convert between units of length, weight, temperature, area, volume, speed, time and data storage instantly, with a swap button and common conversion tables.
CSV Column Statistics Calculator
Profile a CSV column by column: type, blanks, distinct values, min, max, mean, median, standard deviation and percentiles, plus top values — all in-browser.
Coordinate Converter
Convert GPS coordinates between decimal degrees, degrees-minutes-seconds and decimal minutes instantly. Paste any format like 40°26'46"N and copy the result.
Alternatives to Luchtmeetnet API
If Luchtmeetnet does not fit, these environment apis cover similar ground. Every one was called before publishing, and each links to its own reference page with a working curl command and the response it returned.
| API | What it does | Auth | CORS | Last verified |
|---|---|---|---|---|
| UK Carbon Intensity | Free National Grid carbon intensity API with no key: current and forecast grid carbon per half hour, by region, with generation mix. Tested curl example. | No key | Yes | 19 Aug 2026 |
| GBIF | Free GBIF API with no key: 2 billion+ species occurrence records, taxonomic data and distribution maps from museums and research institutions worldwide. Tested. | No key | No | 19 Aug 2026 |
| iNaturalist | Free iNaturalist API with no key: millions of citizen-science species observations with photos, coordinates, identifications and quality grades. Tested example. | No key | Yes | 19 Aug 2026 |
| USGS Water Services | Free USGS Water Services API with no key: real-time river discharge, gauge height, water temperature and groundwater levels from thousands of US sites. Tested. | No key | Yes | 19 Aug 2026 |
| NESO Energy Data Portal | Free GB electricity data API with no key: the National Energy System Operator's open data catalogue over standard CKAN, covering demand, generation mix and carbon intensity. Tested example included. | No key | Yes | 21 Aug 2026 |
| NOAA Tides & Currents | Free NOAA Tides and Currents API with no key: tide predictions, observed water levels, currents, water temperature and wind from US coastal stations. Tested. | No key | Yes | 20 Aug 2026 |
Luchtmeetnet is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 21 Aug 2026; always check the official documentation before relying on this API in production, as terms and limits can change.