# ECB Data Portal

Het dataportaal van de Europese Centrale Bank, met ruim honderd dataflows: ECB-rentes, wisselkoersen, inflatie (HICP), hypotheek- en spaarrentes van banken, bankbalansen, geldhoeveelheid en betalingen. Voor Nederland vind je er cijfers die De Nederlandsche Bank aan de ECB levert, steeds naast de andere eurolanden. Alles via een open SDMX-API, zonder sleutel. In september 2026 was de inflatie in Nederland 3,0 procent, in de eurozone 3,8 procent.

- Uitgever: Europese Centrale Bank, De Nederlandsche Bank
- Gebied: Europa · Laagste detail: land (eurolanden en eurozone), per maand of per dag
- Periode: verschilt per reeks; wisselkoersen sinds 1999, HICP-reeksen voor Nederland sinds 1997 · Ververst: dagelijks
- Toegang: Open · Licentie: Vrij te gebruiken met bronvermelding (ECB-voorwaarden, geen CC-licentie)
- Koppelsleutels: landcode (NL, U2 = eurozone), periode (dag, maand, kwartaal), SDMX-reekssleutel
- Status: warn (2026-09-01) · HICP Nederland 3 procent (2026-09)
- URL: https://data.ecb.europa.eu/

## Wat kun je ermee?
- **Inflatie in Nederland naast de eurozone.** Haal HICP voor NL en U2 in één aanroep (sleutel M.NL+U2…). In september 2022 piekte de Nederlandse inflatie op 17,1 procent, ver boven het eurogemiddelde.
- **Betaalt Nederland meer voor een hypotheek?.** De MIR-reeksen geven de rente op nieuwe woninghypotheken per euroland. In augustus 2026: Nederland 3,91%, België 3,7%, Duitsland 4,0%, Frankrijk 3,2%, eurozone 3,6%.
- **Spaarrente tegen inflatie.** Zet de rente op spaarrekeningen van Nederlandse huishoudens (MIR) naast de HICP. Het verschil is wat spaarders aan koopkracht winnen of verliezen.
- **Wisselkoers en ECB-rente als tijdlijn.** De depositorente (FM, DFR) en de koers euro-dollar (EXR) zijn dagreeksen. Op 16 oktober 2026 stond de depositorente op 2,5 procent.

## Zo verwerk je het
1. **Zoek de dataflow.** De lijst van dataflows (SDMX-XML) noemt elke code met naam: HICP (consumentenprijzen), MIR (bankrentes), EXR (wisselkoersen), FM (financiële markten), BSI (bankbalansen).
   `https://data-api.ecb.europa.eu/service/dataflow/ECB`
2. **Haal een reeks als CSV.** Een reeks is dataflow + sleutel, met punten tussen de dimensies. Met + vraag je meer landen tegelijk; detail=dataonly laat de metadata weg.
   `https://data-api.ecb.europa.eu/service/data/HICP/M.NL+U2.N.000000.4D0.ANR?startPeriod=2024-01&format=csvdata&detail=dataonly`
3. **Hypotheekrente per euroland.** Rente op nieuwe woninghypotheken (A2C) voor huishoudens, alle looptijden. lastNObservations=1 geeft alleen de nieuwste maand.
   `https://data-api.ecb.europa.eu/service/data/MIR/M.NL+DE+BE+FR+U2.B.A2C.AM.R.A.2250.EUR.N?lastNObservations=1&format=csvdata&detail=dataonly`
4. **Dagkoers euro-dollar.** Referentiekoers van de ECB, alleen op werkdagen. Op 15 oktober 2026: 1,1208 dollar per euro.
   `https://data-api.ecb.europa.eu/service/data/EXR/D.USD.EUR.SP00.A?lastNObservations=5&format=csvdata&detail=dataonly`

## Interessante koppelingen
- Volgen huizenprijzen de hypotheekrente? → [cbs-statline](https://www.opendataindex.nl/bron/cbs-statline.md) via periode (maand). Zet de MIR-hypotheekrente naast de CBS-prijsindex van bestaande koopwoningen per maand en kijk of een rentedaling later in de prijzen terugkomt.
- Rente en schuld per land → [eurostat](https://www.opendataindex.nl/bron/eurostat.md) via landcode. Combineer de hypotheekrente per euroland met de schuld van huishoudens uit Eurostat en zie waar een renteverhoging het zwaarst aankomt.

## Vergelijkbare bronnen
- [dnb-statistieken](https://www.opendataindex.nl/bron/dnb-statistieken.md): DNB publiceert de Nederlandse cijfers zelf en met meer detail (pensioenfondsen, verzekeraars), maar de DNB-API vraagt een sleutel. Bij de ECB staan ze open, naast de andere eurolanden.
- [eurostat](https://www.opendataindex.nl/bron/eurostat.md): Eurostat maakt de HICP en heeft alle EU-landen, ook buiten de euro. De ECB neemt die cijfers over en voegt rente- en bankstatistiek toe.
- [cbs-statline](https://www.opendataindex.nl/bron/cbs-statline.md): Het CBS heeft de Nederlandse CPI (de nationale inflatiemaat) en veel meer detail per productgroep, maar geen vergelijking met andere landen.

## Waar je op moet letten
- **HICP is niet de CPI.** De Europese HICP en de Nederlandse CPI van het CBS meten inflatie net anders (onder meer eigen woning). Noem altijd welke maat je gebruikt.
- **Oude HICP-reeksen stoppen eind 2025.** In de dataflow ICP liepen de reeksen op 16 oktober 2026 tot december 2025. De lopende reeksen staan in dataflow HICP, met een extra dimensie voor de leverancier (4D0 = Eurostat).
- **Geen sterretje in de sleutel.** Een * als jokerteken gaf een blokkade van de firewall (HTTP 400, 'access has been blocked'). Laat een dimensie leeg (twee punten achter elkaar) of noem codes met +.
- **Bewerkingen vermelden.** De ECB-voorwaarden vragen bronvermelding en dat je zegt wat je zelf hebt bewerkt, bijvoorbeeld seizoenscorrectie of zelf berekende groeicijfers.
- **Eurozone verandert van samenstelling.** Code U2 is de eurozone met wisselende samenstelling. Een lange reeks bevat dus niet steeds dezelfde landen.

## API (SDMX 2.1 REST)

- Basis: https://data-api.ecb.europa.eu/service
- Toegang: Geen sleutel of account nodig (getest)
- Formaten: csv, json, xml
- Omvang: 105 dataflows in /dataflow/ECB (16 okt 2026) (getest)
- Filteren: Reekssleutel in het pad: één plek per dimensie, punten ertussen, + voor meer codes, leeg voor alle codes. Geen *. Tijd met startPeriod/endPeriod of lastNObservations.; ., +

### Endpoints
- `GET /data/{dataflow}/{sleutel}`: Tijdreeksen. Sleutel = codes in de volgorde van de dimensies met punten ertussen; + voor meer codes, leeg voor alles. Bv. HICP/M.NL+U2.N.000000.4D0.ANR (inflatie NL en eurozone).
- `GET /dataflow/ECB`: Alle dataflows met naam en datastructuur (SDMX-ML): HICP, MIR, EXR, FM, BSI …
- `GET /dataflow/ECB/{dataflow}?references=all`: Eén dataflow met datastructuur, concepten en codelijsten (HICP: 700 kB).
- `GET /datastructure/ECB/{dsd}`: Datastructuur, bv. ECB_EXR1 (wisselkoersen) of ECB_ICP1 (prijzen): volgorde van de dimensies.
- `GET /codelist/ECB/{codelijst}`: Codelijst met namen, bv. CL_AREA (landen en gebieden), CL_CURRENCY, CL_FREQ.

### Parameters
- `startPeriod`: Begin: 2024, 2024-Q1, 2024-01, 2024-W01, 2024-01-15 (naar frequentie). (getest)
- `endPeriod`: Einde, zelfde notatie. (getest)
- `lastNObservations`: Hoogstens N waarnemingen per reeks, vanaf de nieuwste. (getest)
- `firstNObservations`: Hoogstens N waarnemingen per reeks, vanaf de oudste. (uit de beschrijving)
- `updatedAfter`: Alleen wat sinds dit moment is toegevoegd, herzien of verwijderd (procent-gecodeerd, bv. 2026-10-01T00:00:00%2B01:00). Elke rij krijgt dan een kolom ACTION. (getest)
- `detail`: full (standaard), dataonly (zonder attributen), serieskeysonly (alleen welke reeksen bestaan), nodata. (getest)
- `includeHistory`: true geeft ook eerdere versies, met VALID_FROM en VALID_TO per waarde: zo zie je wanneer een cijfer verscheen of herzien werd. (getest)
- `format`: csvdata, jsondata (SDMX-JSON), structurespecificdata, genericdata (standaard, SDMX-ML). Of via de Accept-kop: text/csv, application/json. (getest)
- `references`: Bij structuurvragen: none, parents, children, descendants, all. (uit de beschrijving)

### Kolommen in format=csvdata (HICP) (9)
`KEY` tekst, `FREQ` code, `REF_AREA` code, `ICP_ITEM` code, `DATA_PROVIDER` code, `ICP_SUFFIX` code, `TIME_PERIOD` periode, `OBS_VALUE` getal, `OBS_STATUS` code

### Limieten en valkuilen
- Geen sleutel en geen gedocumenteerde aanvraaglimiet. Compressie met Accept-Encoding: gzip, deflate. (uit de beschrijving)
- Wie een lokale kopie bijhoudt, vraagt met updatedAfter alleen de wijzigingen op, of stuurt If-Modified-Since (304 als er niets veranderde). Wij kregen met If-Modified-Since nog een 200, omdat de reeks dezelfde dag was bijgewerkt. (uit de beschrijving)
- Een * als jokerteken in de sleutel gaf een blokkade van de firewall (HTTP 400, HTML 'access has been blocked'). Laat een dimensie leeg of noem codes met +. (ervaring)
- Geen reeks gevonden = 404 met application/problem+json: 'No Series was returned for the query'. (getest)
- robots.txt (doorverwezen naar data.ecb.europa.eu) verbiedt de user-agents curl, Wget, python-requests, axios, Go-http-client en Java, maar laat andere toe. Zet in je code een eigen User-Agent met contactadres (curl -A, requests headers). (getest)
- Dataflow ICP liep op 16 okt 2026 tot december 2025. De lopende HICP staat in dataflow HICP met een extra dimensie DATA_PROVIDER (4D0): september 2026 NL 3,0%, eurozone 3,8%. (getest)
- Met Accept: application/json zonder format krijg je SDMX-JSON; zonder Accept en format SDMX-ML (genericdata). Gebruik format=csvdata&detail=dataonly voor een kleine tabel. (getest)
- MIR (bankrentes per euroland, van DNB voor NL): hypotheekrente nieuwe leningen M.NL.B.A2C.AM.R.A.2250.EUR.N, augustus 2026 3,91%. Wisselkoers euro-dollar: EXR/D.USD.EUR.SP00.A (alleen werkdagen). (getest)

### Voorbeeld
```
https://data-api.ecb.europa.eu/service/data/HICP/M.NL+U2.N.000000.4D0.ANR?lastNObservations=3&format=csvdata&detail=dataonly
```

## Zo haal je het op

### curl
```bash
curl "https://data-api.ecb.europa.eu/service/data/HICP/M.NL+U2.N.000000.4D0.ANR?lastNObservations=3&format=csvdata&detail=dataonly"
```

### python
```python
import csv, io, requests

url = "https://data-api.ecb.europa.eu/service/data/MIR/M.NL+U2.B.A2C.AM.R.A.2250.EUR.N"
r = requests.get(url, params={"startPeriod": "2020-01", "format": "csvdata", "detail": "dataonly"},
                 headers={"User-Agent": "mijn-project/0.1 (mail@voorbeeld.nl)"})
for rij in csv.DictReader(io.StringIO(r.text)):
    print(rij["REF_AREA"], rij["TIME_PERIOD"], rij["OBS_VALUE"])
```

## Wat je ermee kunt bouwen
- [Monitor voor inflatie, hypotheekrente en spaarrente](https://www.opendataindex.nl/bouwen/inflatie-rente-monitor.md): Eén dashboard dat elke maand laat zien hoe snel prijzen stijgen, wat een nieuwe hypotheek kost en wat sparen oplevert, in Nederland en in de eurozone.


## Wat er allemaal in zit: 126 dataflows

Alle dataflows van het ECB Data Portal (ook die van Eurostat en het IMF die de ECB verspreidt), in de categorieën van het portaal, elke nacht opgehaald. Wat de ECB niet heeft ingedeeld staat apart, gesplitst in actief en stopgezet. Elke dataflow heeft een eigen pagina met de SDMX-aanroep, voor Nederland als de dataflow landen heeft.

- Soorten: dataflow 126
- Met een API-aanroep op de datasetpagina: 126
- Zoeken: https://www.opendataindex.nl/api/catalogus/ecb?q=… of de MCP-functie zoek_datasets met herkomst=ecb
- Elke rij heeft een eigen pagina: https://www.opendataindex.nl/dataset/ecb/<sleutel>

### Mappen
- ECB/Eurosystem policy and exchange rates (7)
- Money, credit and banking (1)
- Financial corporations (11)
- Financial markets and interest rates (13)
- Macroeconomic and sectoral statistics (16)
- Balance of payments and other external statistics (4)
- Supervisory and prudential statistics (5)
- Payments statistics (7)
- ECB surveys (3)
- Niet ingedeeld door de ECB (62): Niet op het Data Portal (5), Actief (43), Stopgezet (14)

## Voorbeelden met echte cijfers (1)

Per voorbeeld de bevinding, de peildatum en de aanroep die precies deze cijfers ophaalt.

- **Inflatie in Nederland: 3,0 procent in september 2026, 0,8 procentpunt lager dan in de eurozone (3,8 procent)** (september 2026). Tabel HICP.M.NL+U2.N.000000.4D0.ANR. [Voorbeeld](https://www.opendataindex.nl/voorbeeld/ecb-inflatie-nl-eurozone)
  - `https://data-api.ecb.europa.eu/service/data/HICP/M.NL+U2.N.000000.4D0.ANR?format=csvdata&detail=dataonly&startPeriod=2015-01`
