Sentinel-5P nitrogen dioxide (TROPOMI)
The TROPOMI instrument on the Sentinel-5P satellite measures every day how much nitrogen dioxide (NO₂) hangs over the whole earth, in cells of 3.5 by 5.5 km. TROPOMI was built in the Netherlands, by Airbus Netherlands, TNO and SRON, with KNMI leading the consortium.

Nitrogen dioxide over the Netherlands on 20 March 2025: dark red from The Hague to beyond Amsterdam, measured by Sentinel-5P
The amount of nitrogen dioxide (NO₂) in the air column above the ground, measured by the TROPOMI instrument on Sentinel-5P during its overpass around midday. According to the legend, the colour runs from light yellow (almost nothing) through orange to dark red (2 × 10¹⁶ molecules per cm² or more). The dark red lies in a band from The Hague via Leiden to beyond Amsterdam; a second dark patch lies between Antwerp and Bergen op Zoom, and at the bottom right the Ruhr area shows red. It is a column, not the air you breathe at street level, and every day the picture looks different.
What can you do with it?4 ideas
A map of the pollution
Average a month of passes over the Netherlands and Belgium. Cities, ports and motorways show up as patches.
Weekday versus weekend
Compare the average of all Tuesdays with that of all Sundays. The difference says something about traffic and industry.
Covid spring 2020
Put April 2020 next to April 2019 and 2021. Mind the weather, because wind and clouds change the numbers too.
Satellite versus monitoring station
Compare the column value over a Luchtmeetnet station with the ground measurement. They don't measure the same thing, but the patterns should match.
How to process it4 steps
Find passes over the Netherlands
The fast version (NRTI) comes in five-minute pieces with their own box: filtering on bbox works well.
https://stac.dataspace.copernicus.eu/v1/collections/sentinel-5p-l2-no2-nrti/items?bbox=3.2,50.7,7.3,53.6&sortby=-datetime&limit=3&fields=id,properties.datetime
Use the offline version for analysis
OFFL is better processed and arrives a few days later. One file is a whole orbit (about 600 MB), so search by date: on 20 September 2026 there were fifteen.
https://stac.dataspace.copernicus.eu/v1/collections/sentinel-5p-l2-no2-offl/items?datetime=2026-09-20T00:00:00Z/2026-09-20T23:59:59Z&limit=20&fields=id,properties.datetime
Download with an account
Each search result has a download link on the Copernicus Data Space. You need a free account and an access token for it.
https://documentation.dataspace.copernicus.eu/APIs/OData.html
Filter on quality
Open the NetCDF with xarray (group PRODUCT) and use nitrogendioxide_tropospheric_column, in mol per m². Keep only pixels with qa_value above 0.75.
Interesting combinations


Does the satellite see what the station sees?
Take the pixel over a station each day and the station measurement around the time of the pass.


Which municipality has the most NO₂ above it?
Average the pixels per municipal boundary. The cells are too coarse for neighbourhoods.
Similar sources
Luchtmeetnet air quality networkMeasurements at breathing height, hourly, but only at about a hundred places.
CAMS European air quality forecastsA model with a four-day forecast, also when it is cloudy.
- TTTEMIS, troposferisch NO₂ not in the index yet
Ready-made NO₂ maps and files from satellite measurements, without an account.
What to watch out for
- A column, not street-level air quality
The satellite measures all NO₂ between the ground and the top of the troposphere, in mol per m². That is not the same as micrograms per m³ at breathing height.
- Clouds and quality
TROPOMI sees little under clouds. Use only pixels with qa_value above 0.75 and average over weeks or months.
- Searching by place doesn't work for OFFL
An OFFL file is a whole orbit with a box around the whole earth. Every bbox search therefore finds every orbit. Filter by date, or use NRTI.
- Large files
An OFFL orbit is about 600 MB, a five-minute NRTI piece about 67 MB. You always download the whole file.
- Account needed to download
Searching the catalogue works without an account. The download returns a 401 without a token.
APISTAC 1.1.0 · read 16 Oct 2026
Searching is anonymous. The files themselves require s3 (s3) or oidc (openIdConnect) (stated in the collection). from the description
GeoJSON (zoekresultaten)
Base URL
https://stac.dataspace.copernicus.eu/v1
Endpoints 3
- GET
/collections/sentinel-5p-l2-no2-nrti/itemsscenes in this collection, with bbox, datetime, limit - GET/POST
/searchsearch across collections, with filter (CQL2), sortby and fields - GET
/collections/sentinel-5p-l2-no2-nrti/queryablesfilterable fields
Filtering from the description
CQL2 (text or JSON) on the queryables
Parameters 6
bbox | lon/lat box: west,south,east,north | platform |
datetime | date or period, e.g. 2026-06-01/2026-08-31 | platform |
limit | per page; next via link rel=next | platform |
sortby | sorting, e.g. -datetime (newest first) | from the description |
filter | CQL2 filter on the queryables, e.g. eo:cloud_cover < 10 | from the description |
fields | return only these fields | from the description |
Limits and pitfalls
- Filtering is only possible on id, datetime and geometry (queryables); there is no cloud field to search on (15 Oct 2026). tested
- Three versions as separate collections: -nrti (within 3 hours, 5-minute pieces), -offl (a few days later, whole orbits) and -rpro (reprocessed). The sentinel-5p-l2-no2 collection mixes them. from the description
- Measured on 15 Oct 2026: the newest NRTI pass over Amsterdam (12:42 UTC) was in the catalogue 45 minutes later; the newest OFFL orbit was from 6 October. tested
Try it HTTP 200 · 403 ms · 16 Oct
https://stac.dataspace.copernicus.eu/v1/collections/sentinel-5p-l2-no2-nrti/items?bbox=3.2,50.7,7.3,53.6&sortby=-datetime&limit=3&fields=id,properties.datetime
{
"type": "FeatureCollection",
"links": [
{
"rel": "collection",
"type": "application/json",
"href": "https://stac.dataspace.copernicus.eu/v1/collections/sentinel-5p-l2-no2-nrti"
},
{
"rel": "parent",
"type": "application/json",
"href": "https://stac.dataspace.copernicus.eu/v1/collections/sentinel-5p-l2-no2-nrti"
}
],
"features": [
{
"id": "S5P_NRTI_L2__NO2____20261015T124254_20261015T124754_46664_03_020901_20261015T132437",
"properties": {
"datetime": "2026-10-15T12:42:48.000000Z"
},
"links": [
{
"rel": "collection",
"type": "application/json",
"href": "https://stac.dataspace.copernicus.eu/v1/collections/sentinel-5p-l2-no2-nrti"
},
{
"rel": "parent",
"type": "application/json",
"href": "https://stac.dataspace.copernicus.eu/v1/collections/sentinel-5p-l2-no2-nrti"
}
]
},
{
"id": "S5P_NRTI_L2__NO2____20261015T110254_20261015T110754_46663_03_020901_20261015T130501",
"properties": {
"datetime": "2026-10-15T11:02:49.000000Z"
},
"links": [
{Shortened response, saved at harvest time. Click the URL for the real, current response.
Read from collection: bands, coverage, licence, access · fields you can filter on · what the search API supports (conformsTo). Labels: from the description stated in what the api itself publishes. tested from our own small call. platform applies to every api on this platform, per its documentation. experience learned while building open data index.
How to fetch it
curl "https://stac.dataspace.copernicus.eu/v1/collections/sentinel-5p-l2-no2-nrti/items?bbox=4.7,52.2,5.1,52.5&sortby=-datetime&limit=5&fields=id,properties.datetime"
Used by
- TROPOMIExplanation, validation and examples of the NO₂ product
- Copernicus BrowserSearch and view images in the browser
More in this topic
See how this page is built
bron: sentinel5p-no2 blokken: [] secties: - ideeen - verwerken - koppelingen - vergelijkbaar - beperkingen - code - gebruiktDoor cache: tag: bron:sentinel5p-no2 ververs: na statuscheck, als de bron nieuwer is statuscheck: methode: "STAC: nieuwste NRTI-opname boven Amsterdam" verwacht: dagelijks
Source: content/bronnen/sentinel5p-no2.yaml · Markdown



