303,525 datasets indexed1,419 publishers
Open Data IndexThe index of open data about the Netherlands
Sources›Climate and environment
Copernicus · European Centre for Medium-Range Weather Forecasts
International, relevant to the Netherlands

CAMS European air quality forecasts

Every day a forecast of air quality across Europe for the next four days, hourly and per cell of about 10 km. With nitrogen dioxide, particulate matter, ozone and also birch and grass pollen. It is the median of eleven models, including the Dutch LOTOS-EUROS.

Climate and environmentHealthAPIDownloadEurope · approx. 10 km (0.1 degree)
Up to date · updated 15 hours ago · checked 17:23
ads.atmosphere.copernicus.eu
Screenshot of ads.atmosphere.copernicus.eu

Fine particulate matter (PM2.5) at urban background stations in the Netherlands: lower than in 14 of the 26 other EU countries

Fine particulate matter (PM2.5) at urban background stations in 2025, in micrograms per cubic metre. Netherlands: 9.1. Highest: Greece (18.8); lowest: Estonia (4.0).

Source: EEA, luchtkwaliteitsstatistieken (Discodata, gevalideerde jaargemiddelden per meetpunt) · opgehaald 25 oktober 2026 · selection: Bij CAMS getoond omdat de CAMS-data een account vragen; de CAMS-analyse gebruikt metingen van ditzelfde EEA-meetnet; Gemiddelde van de meetpunten per land (Nederland: 19); landen met weinig meetpunten zijn minder zekerOpen the table Single block

What can you do with it?4 ideas

Getting started

Smog day ahead?

Fetch the ozone or particulate forecast for a cell over your city and plot the next four days hour by hour.

Getting started

Forecasting hay fever

The forecast includes grass, birch and alder pollen. Make a map of the Netherlands for the coming days.

Advanced

Forecast versus measurement

Put yesterday's forecast next to Luchtmeetnet's hourly measurements at the same spot. How far off was the model?

Advanced

Where does the pollution come from?

Compare the eleven models. Large differences between models mean an uncertain forecast.

How to process it4 steps

  1. Create a free account

    Register with the Atmosphere Data Store, accept this dataset's licence and put your personal token in ~/.cdsapirc.

    https://ads.atmosphere.copernicus.eu/how-to-api
  2. See which options exist

    The process description can be read without an account: pollutants, models, heights, time steps and formats.

    https://ads.atmosphere.copernicus.eu/api/retrieve/v1/processes/cams-europe-air-quality-forecasts
  3. Request only the Netherlands

    Use area (north, west, south, east) to get a cut-out. Choose level 0 for air at ground level.

    import cdsapi
    cdsapi.Client().retrieve("cams-europe-air-quality-forecasts", {
        "variable": ["nitrogen_dioxide"], "model": ["ensemble"], "level": ["0"],
        "date": ["2026-10-15/2026-10-15"], "type": ["forecast"], "time": ["00:00"],
        "leadtime_hour": [str(h) for h in range(0, 97)],
        "data_format": "netcdf_zip", "area": [53.6, 3.2, 50.7, 7.3]}).download("no2_nl.zip")
  4. Read the NetCDF file

    Unzip and open the file with xarray. One cell over your city is then a single time series.

Interesting combinations

Similar sources

What to watch out for

  • Account and licence needed

    Without an account you can read the catalogue and options, but not download. You also accept the licence (CC BY 4.0) per dataset.

  • A forecast, not a measurement

    Only nitrogen monoxide, nitrogen dioxide, sulphur dioxide, ozone, particulate matter and dust are routinely validated against measurements. CAMS calls the other variables experimental.

  • Too coarse for a single street

    A cell is about 10 by 10 km. Busy streets and motorways disappear into the average.

  • Archive from October 2023

    In the Atmosphere Data Store the forecasts go back to 10 October 2023 (as of 15 October 2026). For 2013 to 2024 there is a separate reanalysis (cams-europe-air-quality-reanalyses).

  • Requests are queued

    You don't get an immediate answer. A request is queued and later yields a file (GRIB or NetCDF in a ZIP).

APICADS (OGC API Processes + STAC-catalogus), via cdsapi · read 16 Oct 2026

StandardCADS (OGC API Processes + STAC-catalogus), via cdsapidocs
Access login

Catalogue, process description and costing work without an account (tested). Requesting data needs a free ECMWF account, accepting the dataset licence on the website and your personal key (PRIVATE-TOKEN header, or ~/.cdsapirc with url https://ads.atmosphere.copernicus.eu/api). Without a key: /jobs returns 401 'authentication required'. tested

Size16

CAMS datasets in the Atmosphere Data Store (16 Oct 2026); this one: Europe 0.1° (~10 km), 11 models + ensemble, 28 species, since 11 Oct 2023 tested

Formats

netcdfgribjson

Base URL

https://ads.atmosphere.copernicus.eu/api

Endpoints 7

  • GET/catalogue/v1/collectionsAll 16 datasets (EAC4 reanalysis, global forecasts, greenhouse gases, solar radiation, GFAS fire emissions …).
  • GET/catalogue/v1/collections/{dataset}One dataset as a STAC collection: licence, extent, DOI, links to form, constraints and costing.
  • GET/retrieve/v1/processes/{dataset}Which options the request takes, with all allowed values.
  • POST/retrieve/v1/processes/{dataset}/costingComputes how 'big' a request is against the limit ({"cost":2.0,"limit":5000.0}); works without an account.
  • POST/retrieve/v1/processes/{dataset}/executionSubmit a request (asynchronous, key required); body {"inputs": {…}}. Response: a job.
  • GET/retrieve/v1/jobs/{jobId}Status of your job (accepted, running, successful); then /results with the download link.
  • GET/catalogue/v1/collections/{dataset}/messagesNotices about outages or changes of the dataset.

Filtering from the description

No query language: pick values per option (lists) and optionally a rectangle (area). The result is always a file.

Parameters 9

variable28 species: nitrogen_dioxide, ozone, particulate_matter_2.5um, particulate_matter_10um, ammonia, dust, pollen (birch, grass, alder …) …from the description
modelensemble (median) or one of 11 models: chimere, dehm, emep, euradim, gemaq, lotos, match, minni, mocage, monarch, silam.from the description
levelHeight in metres: 0 (ground level), 50, 100, 250, 500, 750, 1000, 2000, 3000, 5000.from the description
dateYYYY-MM-DD/YYYY-MM-DD, from 2023-10-11 to today (in the form, not in the process description).from the description
typeanalysis or forecast.from the description
timeHour in UTC. forecast: only run 00:00 (with leadtime_hour 0–96); analysis: every hour 00:00–23:00 with leadtime_hour 0 (per the constraints).from the description
leadtime_hourHours ahead, 0 to 96.from the description
areaCut-out in degrees; the Netherlands roughly [53.6, 3.2, 50.7, 7.3]. Without: all of Europe.from the description
data_formatgrib or netcdf_zip.from the description

File contents (not downloaded ourselves; per the dataset description) 4

NameTypeMeaning
NetCDF: variabele per stofgetal · zie het attribuut units in het bestandConcentratie per rastercel, hoogte en tijdstap
time / stepdatetime · UTCRun-tijd en uren vooruit
latitude / longitudegetal · graden, 0,1° rasterMiddelpunt van de cel
levelgetal · mHoogte boven de grond

Limits and pitfalls

  • Each request has a cost limit of 5,000 (costing). One species, one model, one level, one run and two time steps for the Netherlands costs 2. tested
  • Requests run asynchronously in a queue; expect minutes, sometimes longer when busy. from the description
  • Not every combination exists: the rel=constraints link in the catalogue record (60 rules) says per date which models, species, levels and hours exist. Per the description only NO, NO2, SO2, O3, PM2.5, PM10 and dust are regularly validated against observations. from the description
  • The STAC catalogue is descriptive only: /items and /search return 501 ('STAC items is not implemented'). Data always go through processes/execution. tested
  • Without accepting the licence on the website a request fails, even with a valid key. from the description
  • ?limit= on /collections is ignored: you always get all 16. tested
  • The catalogue field cads:sanity_check tells whether the dataset passed its last check (on 16 Oct 2026: down). tested
  • Open map images: eccharts.ecmwf.int has a WMS with token=public, but its robots.txt is Disallow: / (not used). experience

Try it HTTP 200 · 564 ms · 16 Oct

https://ads.atmosphere.copernicus.eu/api/retrieve/v1/processes/cams-europe-air-quality-forecasts
{
  "title": "CAMS European air quality forecasts",
  "description": "This dataset provides daily air quality analyses and forecasts for Europe. \nCAMS produces specific daily air quality …",
  "id": "cams-europe-air-quality-forecasts",
  "version": "1.0.0",
  "jobControlOptions": [
    "async-execute"
  ],
  "outputTransmission": [
    "reference"
  ],
  "links": [
    {
      "href": "https://ads.atmosphere.copernicus.eu/api/retrieve/v1/processes/cams-europe-air-quality-forecasts",
      "rel": "self"
    },
    {
      "href": "https://ads.atmosphere.copernicus.eu/api/retrieve/v1/processes/cams-europe-air-quality-forecasts/execution",
      "rel": "execute",
      "type": "application/json",
      "title": "process execution"
    }
  ],
  "inputs": {
    "variable": {
      "title": "Variable",
      "schema": {
        "type": "array",
        "items": {
          "enum": [
            "alder_pollen",
            "ammonia"
          ],
          "type": "string"
        }
      }
    },
    "model": {
      "title": "Model",
      "schema": {

Shortened response, saved at harvest time. Click the URL for the real, current response.

Read from Process description (open): all options with their values · Catalogue record (STAC 1.1): licence, temporal and spatial extent, DOI, links to form and costing · Official Python client (also behind cdsapi ≥ 0.7.7): key in the PRIVATE-TOKEN header. 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://ads.atmosphere.copernicus.eu/api/catalogue/v1/collections/cams-europe-air-quality-forecasts"

Used by

More in this topic

See how this page is built
bron: copernicus-cams
blokken: []
secties:
  - ideeen
  - verwerken
  - koppelingen
  - vergelijkbaar
  - beperkingen
  - code
  - gebruiktDoor
cache:
  tag: bron:copernicus-cams
  ververs: na statuscheck, als de bron nieuwer is
statuscheck:
  methode: einde van de tijdsdekking in de ADS-catalogus
  verwacht: dagelijks

Source: content/bronnen/copernicus-cams.yaml · Markdown