# Netherlands Pollutant Release and Transfer Register (Emissieregistratie)

The official figures on what the Netherlands emits: greenhouse gases, nitrogen, particulate matter and hundreds of other substances, to air, water and soil. Per sector, per source, per municipality or province, and separately for large companies. From 1990. The Netherlands uses the same figures for its international reporting. The national totals are also available as a CBS table, with an open API.

- Publisher: Rijksinstituut voor Volksgezondheid en Milieu, Centraal Bureau voor de Statistiek
- Area: Netherlands · Finest detail: municipality, company, sector
- Period: 1990 – 2025 (2025 voorlopig) · Refreshed: yearly
- Access: Open · Licence: Overnemen met bronvermelding; CBS-tabellen CC BY 4.0
- Join keys: stof, emissiebron of sector, jaar, gemeente
- Status: ok (2026-09-03) · Emissies naar lucht op Nederlands grondgebied; totalen · nieuwste periode: 2025
- URL: https://www.emissieregistratie.nl

## What can you do with it?
- **CO₂ since 1990.** Plot total CO₂ emissions on Dutch territory as a line. According to CBS table 85668NED they were 170.9 billion kilos in 1990 and 142.2 billion kilos in 2025 (provisional).
- **The biggest emitters in your province.** Companies covered by the European PRTR rules report their emissions per substance. The company reporting tool shows per company what went into the air or water.
- **Nitrogen per municipality.** Export ammonia and nitrogen oxides per municipality and per sector. Where does most come from agriculture, and where from traffic or industry?
- **The quarter after the year.** CBS calculates provisional quarterly figures for greenhouse gases (table 84979NED). That lets you see within the current year whether emissions are rising or falling.

## How to process it
1. **National totals via the CBS API.** Table 85668NED has ten substances and 50 emission sources. This fetches total CO₂ emissions per year, in million kilos. The source key is padded with spaces: 'T001176  '.
   `https://opendata.cbs.nl/ODataApi/OData/85668NED/TypedDataSet?$filter=Emissiebronnen%20eq%20'T001176%20%20'%20and%20EmissiesNaarLucht%20eq%20'A044109'&$select=Perioden,EmissiesNaarLucht_1`
2. **Regional figures via the export module.** For municipalities, provinces, sectors and more than 375 substances, use the export module on the site. You choose years, substances and areas and download the result. There is no documented API behind it.
   `https://www.emissieregistratie.nl/data/data-export`
3. **Map layers via WMS.** The data portal's maps run on a GeoServer with ten layers, such as companies, municipalities and river basins. WFS is disabled, so only images, no data.
   `https://data.emissieregistratie.nl/geoserver/wms?service=WMS&request=GetCapabilities`
4. **Know which year is final.** Every September, provisional figures for the previous year are published. The final figures for 2025 appear in early 2027. The whole series is then recalculated: always fetch everything again.

## Interesting combinations
- Which municipality emits the most per inhabitant? → [cbs-kwb](https://www.opendataindex.nl/en/bron/cbs-kwb.md) via gemeente. Divide emissions per municipality by the number of inhabitants from the key figures. Watch out for large point sources (a power plant, a factory) that push one municipality up sharply.
- Does concentration fall along with emissions? → [luchtmeetnet](https://www.opendataindex.nl/en/bron/luchtmeetnet.md) via locatie en jaar. Compare the trend in nitrogen oxide emissions in a region with the annual mean NO₂ at the stations there.

## Similar sources
- [luchtmeetnet](https://www.opendataindex.nl/en/bron/luchtmeetnet.md): Measures what is in the air (concentration), not what is emitted.
- [rivm-gcn](https://www.opendataindex.nl/en/bron/rivm-gcn.md): Modelled concentrations per kilometre, partly based on these emission figures.
- [Industrial Emissions Portal (EEA)](https://industry.eea.europa.eu): Emissions of large companies across Europe. For the Netherlands the same PRTR reports, next to those of neighbouring countries.

## What to watch out for
- **Regional figures sit behind a web form.** The export module is a web application without a documented API. Addresses such as data.emissieregistratie.nl/export even return HTTP 404, although the browser shows the app normally. Scripts can only fetch the national totals (via CBS) and the WMS images.
- **Figures change afterwards.** With every new round the whole series from 1990 is recalculated with the latest method. Never compare an old figure with a new figure from a later publication.
- **Regional figures are partly estimated.** Part of the emissions is distributed across the country, for example by number of jobs. That sometimes gave high emissions at a head office location; the method was adjusted with the 1990-2024 series (September 2026).
- **Territory or economy.** Table 85668NED counts emissions on Dutch territory. CBS also has a table on emissions by the Dutch economy (83300NED, national accounts), with a different scope. Always state which one you use.

## API (OData v3)

- Base: https://opendata.cbs.nl/ODataApi/OData/85668NED
- Access: No key or account; the description and our call work anonymously. (tested)
- Formats: JSON, Atom/XML
- Size: 14000 rows (cells) in TypedDataSet (tested)
- Filtering: OData expressions in $filter, keys in single quotes; eq, ne, gt, ge, lt, le, and, or, substringof(), startswith()

### Endpoints
- `GET /TableInfos`: title, summary, period and modification date of the table
- `GET /UntypedDataSet`: the figures, all values as text
- `GET /TypedDataSet`: the figures, with numbers as numbers
- `GET /DataProperties`: all columns: dimensions and topics with unit
- `GET /CategoryGroups`: grouping of categories
- `GET /Emissiebronnen`: codes and names of dimension Emissiebronnen
- `GET /EmissiesNaarLucht`: codes and names of dimension EmissiesNaarLucht
- `GET /Perioden`: codes and names of dimension Perioden

### Parameters
- `$filter`: select rows, e.g. WijkenEnBuurten eq 'GM0363    ' (platform)
- `$select`: only these columns (platform)
- `$top / $skip`: paging (platform)
- `$orderby`: sorting (platform)
- `$format`: json or atom (platform)
- `$count`: after a path: count only (platform)

### Dimensions
- `Emissiebronnen` (50 codes): 'T001176  ' = Totaal Stationaire en mobiele bronnen; 'A025447  ' = Stationaire bronnen; totaal; '800044   ' = Energiesector
- `EmissiesNaarLucht` (10 codes): 'A044109' = Kooldioxide (CO2); 'A044107' = Methaan (CH4); 'A044110' = Distikstofoxide (N20)
- `Perioden` (28 codes): '1990JJ00' = 1990; '1995JJ00' = 1995; '2000JJ00' = 2000

### Fields (1)
`EmissiesNaarLucht_1` double

### Limits and pitfalls
- At most 10,000 rows per request; page with $skip. (experience)
- This is the CBS table with the national totals from the Emissieregistratie. Regional figures and companies are only in the export module on emissieregistratie.nl. (experience)
- Emissiebronnen keys are padded with spaces ('T001176  ' is the total). Substance codes are not: 'A044109' is CO₂. (tested)
- The years 1991 to 1994 and 1996 to 1999 are missing; the series jumps from 1990 to 1995 to 2000. (from the description)
- The unit is million kilos (mln kg). 142,200 therefore means 142.2 billion kilos, or 142.2 megatonnes. (from the description)

### Example
```
https://opendata.cbs.nl/ODataApi/OData/85668NED/TypedDataSet?$filter=Emissiebronnen%20eq%20'T001176%20%20'%20and%20EmissiesNaarLucht%20eq%20'A044109'&$select=Perioden,EmissiesNaarLucht_1
```

## How to fetch it

### curl
```bash
curl "https://opendata.cbs.nl/ODataApi/OData/85668NED/TypedDataSet?\$filter=Emissiebronnen%20eq%20'T001176%20%20'%20and%20EmissiesNaarLucht%20eq%20'A044109'&\$select=Perioden,EmissiesNaarLucht_1"
```

### python
```python
import requests

# Totale CO2-uitstoot op Nederlands grondgebied, per jaar (CBS 85668NED, mln kg)
r = requests.get("https://opendata.cbs.nl/ODataApi/OData/85668NED/TypedDataSet", params={
    "$filter": "Emissiebronnen eq 'T001176  ' and EmissiesNaarLucht eq 'A044109'",
    "$select": "Perioden,EmissiesNaarLucht_1"})
for rij in r.json()["value"]:
    print(rij["Perioden"][:4], rij["EmissiesNaarLucht_1"] / 1000, "megaton")
```


## Examples with real figures (2)

For each example the finding, the reference date and the call that fetches exactly these figures.

- **CO₂ emissions by source: energy sector is the largest part, 30% in 2025** (2025). Table 85668NED. [Example](https://www.opendataindex.nl/en/voorbeeld/emissieregistratie-co2-bronnen)
  - `https://opendata.cbs.nl/ODataApi/OData/85668NED/TypedDataSet?$filter=EmissiesNaarLucht%20eq%20'A044109'%20and%20(Emissiebronnen%20eq%20'800044%20%20%20'%20or%20Emissiebronnen%20eq%20'800045%20%20%20'%20or%20Emissiebronnen%20eq%20'1050010%20%20'%20or%20Emissiebronnen%20eq%20'800051%20%20%20'%20or%20Emissiebronnen%20eq%20'A025421%20%20')%20and%20Perioden%20eq%20'2025JJ00'&$select=Emissiebronnen,EmissiesNaarLucht_1`
- **CO₂ emissions on Dutch territory: 142.2 megatonnes in 2025, 17% less than in 1990** (2025). Table 85668NED. [Example](https://www.opendataindex.nl/en/voorbeeld/emissieregistratie-co2-reeks)
  - `https://opendata.cbs.nl/ODataApi/OData/85668NED/TypedDataSet?$filter=Emissiebronnen%20eq%20'T001176%20%20'%20and%20EmissiesNaarLucht%20eq%20'A044109'%20and%20substringof('JJ'%2CPerioden)&$select=Perioden,EmissiesNaarLucht_1`
