# OECD Data Explorer

Ruim 1.500 tabellen van de OESO over werk, inkomen, belastingen, onderwijs, zorg, wonen en milieu. Voor elk lidland op dezelfde manier gemeten, dus goed om Nederland te vergelijken met landen buiten Europa, zoals de Verenigde Staten, Japan of Canada.

- Uitgever: Organisatie voor Economische Samenwerking en Ontwikkeling
- Gebied: Wereld · Laagste detail: land (soms regio)
- Periode: verschilt per tabel, bv. werkuren 1970 – 2025 · Ververst: maandelijks
- Toegang: Open · Licentie: OESO-voorwaarden (vrij hergebruik met bronvermelding)
- Koppelsleutels: landcode (NLD), dataflow-id (DSD_…@DF_…)
- Status: warn (2026-08-01) · werkloosheid NL 4 % (2026-08), maandcijfers OESO
- URL: https://data-explorer.oecd.org

## Wat kun je ermee?
- **Werken we echt zo weinig?.** Een werkende in Nederland werkte in 2025 gemiddeld 1.436 uur, tegen 1.332 in Duitsland, 1.586 in België en 1.800 in de Verenigde Staten (OESO, werkelijk gewerkte uren per werkende per jaar). In 1970 was het in Nederland nog 1.809 uur.
- **Werkloosheid per maand, naast de buren.** In augustus 2026 was de werkloosheid in Nederland 4,0 procent, net als in Duitsland. België zat op 5,9 en het OESO-gemiddelde op 5,0 procent (seizoensgecorrigeerd, 15 jaar en ouder).
- **Belastingdruk op loon.** De OESO rekent voor elk land uit hoeveel belasting en premie een werknemer en werkgever betalen. Vergelijk Nederland met landen buiten de EU, waar Eurostat niet komt.
- **Eén URL per grafiek.** Bouw een vaste API-aanroep met lastNObservations en laat een grafiek zichzelf bijwerken zodra de OESO een nieuwe maand publiceert.

## Zo verwerk je het
1. **Zoek de tabel in de Data Explorer.** Kies een tabel, zet de filters goed en open 'Developer API'. Daar staat de SDMX-aanroep die precies jouw selectie ophaalt.
2. **Of zoek in de lijst van alle tabellen.** Eén aanroep geeft alle 1.550 tabellen (dataflows) met id, versie en uitgevende afdeling (15 okt 2026, 10 MB).
   `https://sdmx.oecd.org/public/rest/dataflow/all`
3. **Lees welke dimensies er zijn.** De sleutel in de URL heeft één plek per dimensie, gescheiden door punten. Leeg = alles. Vraag de structuur op met references=all om de volgorde en de codes te zien.
   `https://sdmx.oecd.org/public/rest/dataflow/OECD.ELS.SAE/DSD_HW@DF_AVG_ANN_HRS_WKD/1.0?references=all`
4. **Haal data op als CSV.** Met format=csvfilewithlabels krijg je codes én namen. Meerdere landen scheid je met een plus: NLD+DEU+BEL.
   `https://sdmx.oecd.org/public/rest/data/OECD.SDD.TPS,DSD_LFS@DF_IALFS_UNE_M,1.0/NLD+DEU+BEL+OECD.UNE_LF_M.PT_LF_SUB._Z.Y._T.Y_GE15._Z.M?lastNObservations=1&dimensionAtObservation=AllDimensions&format=csvfilewithlabels`

## Interessante koppelingen
- Waarom wijkt het OESO-cijfer af van het CBS? → [cbs-statline](https://www.opendataindex.nl/bron/cbs-statline.md) via jaar of maand. De Nederlandse cijfers komen van het CBS, maar de OESO harmoniseert definities. Zet beide reeksen naast elkaar en zoek het verschil in de definitie.

## Vergelijkbare bronnen
- [eurostat](https://www.opendataindex.nl/bron/eurostat.md): Alleen Europa, maar veel meer regionaal detail (NUTS).
- [worldbank](https://www.opendataindex.nl/bron/worldbank.md): Alle landen van de wereld, minder diep per onderwerp.
- [our-world-in-data](https://www.opendataindex.nl/bron/our-world-in-data.md): Uitgezochte reeksen met uitleg en grafieken, deels op OESO-cijfers gebaseerd.

## Waar je op moet letten
- **Verkeerde code = 404, geen lege lijst.** Een sleutel zonder resultaat geeft HTTP 404 met de tekst NoResultsFound. Ook de standaardweergave in de metadata noemde voor de maandwerkloosheid code UNE_M, terwijl de data code UNE_LF_M gebruiken (15 okt 2026). Begin met alleen het land en vul daarna de andere dimensies in.
- **Kies elke dimensie bewust.** Laat je een dimensie leeg, dan krijg je alle varianten door elkaar: bij werkuren bv. alle werkenden (_T) én alleen werknemers (ICSE93_1). Die verschillen voor Nederland ruim 80 uur per jaar (2025).
- **Rijen komen ongesorteerd.** De CSV is niet op land of jaar gesorteerd. Sorteer zelf voordat je een reeks tekent.
- **Website weigert scripts.** Op 15 oktober 2026 gaf www.oecd.org (ook de API-uitleg en de voorwaarden) HTTP 403 aan onze eerlijke user-agent. De API op sdmx.oecd.org werkte wel. De handleiding staat als PDF op gitlab.algobank.oecd.org.

## API (SDMX 2.1 REST (ook SDMX REST 2.0))

- Basis: https://sdmx.oecd.org/public/rest
- Toegang: Geen sleutel of account nodig (getest)
- Formaten: csv, json, xml
- Omvang: 1550 dataflows (tabellen) in dataflow/all (16 okt 2026) (getest)
- Filteren: Reekssleutel in het pad: codes in de volgorde van de dimensies, punten ertussen, + voor meer codes, leeg voor alles. Tijd met startPeriod/endPeriod of lastNObservations.; ., +, ge:, le:

### Endpoints
- `GET /data/{agency},{dataflow},{versie}/{sleutel}`: Data (SDMX API 1). Sleutel: één plek per dimensie (zonder tijd), punten ertussen, + voor meer codes, leeg = alles. Voorbeeld: OECD.SDD.TPS,DSD_LFS@DF_IALFS_UNE_M,1.0/NLD+DEU.UNE_LF_M.PT_LF_SUB._Z.Y._T.Y_GE15._Z.M
- `GET /v2/data/dataflow/{agency}/{dataflow}/{versie}/{sleutel}`: Data (SDMX API 2): één code per dimensie, * als jokerteken, tijd met c[TIME_PERIOD]=ge:2018+le:2024. Versie + = nieuwste.
- `GET /dataflow/all`: Alle 1.550 dataflows met id, agency, versie en naam (10 MB als JSON met Accept application/vnd.sdmx.structure+json).
- `GET /dataflow/{agency}/{dataflow}/{versie}?references=all`: Eén dataflow met datastructuur, codelijsten en concepten: de volgorde van de dimensies en alle codes.
- `GET /availableconstraint/{agency},{dataflow},{versie}/{sleutel}/all/{dimensie}`: Welke codes van één dimensie data hebben bij deze sleutel, plus het aantal waarnemingen (obs_count). Handig om de juiste MEASURE-code te vinden.
- `GET /codelist/{agency}/{codelijst}`: Codelijst met namen, bv. /codelist/OECD/CL_AREA (landen en gebieden, 576 kB JSON).

### Parameters
- `startPeriod`: Begin (inclusief): 2015, 2015-Q1, 2015-01 of 2015-M01, 2015-01-01. (getest)
- `endPeriod`: Einde (inclusief), zelfde notatie. (getest)
- `lastNObservations`: Hoogstens N waarnemingen per reeks, vanaf de nieuwste. lastNObservations=1 = alleen de nieuwste maand. (getest)
- `dimensionAtObservation`: AllDimensions = platte lijst (handig bij JSON); standaard gegroepeerd per tijdreeks. (uit de beschrijving)
- `format`: csvfile (CSV-bestand), csvfilewithlabels (codes én namen), csv, jsondata, genericdata, structurespecificdata. Zonder format: SDMX-ML generic. (getest)
- `detail`: Full (standaard), DataOnly, SeriesKeysOnly, NoData. (getest)
- `updatedAfter`: Alleen waarnemingen die sinds dit moment zijn toegevoegd, gewijzigd of verwijderd (met tijdzone, bv. 2026-10-01T00:00:00+02:00). (uit de beschrijving)
- `firstNObservations`: Hoogstens N waarnemingen per reeks, vanaf de oudste. (getest)
- `includeHistory, asOf`: Staan in de lijst toegestane parameters die de API zelf teruggeeft bij een onbekende parameter; niet verder getest. (getest)
- `references`: Bij structuurvragen: all (alles wat erbij hoort), met detail=referencepartial. (uit de beschrijving)

### Kolommen in format=csvfile (werkloosheid per maand) (9)
`DATAFLOW` tekst, `REF_AREA` code, `MEASURE` code, `UNIT_MEASURE` code, `ADJUSTMENT` code, `TIME_PERIOD` periode, `OBS_VALUE` getal, `OBS_STATUS` code, `UNIT_MULT` getal

### Limieten en valkuilen
- Bij aanroepen kort na elkaar geeft de API 429. Wacht dan oplopend (15, 30, 45 s) en vraag liever één keer meer landen tegelijk met +. (ervaring)
- De OESO kondigde in november 2024 een limiet op datadownloads aan (pagina 'API best practices'; zoekresultaten noemen 60 per uur). Die pagina op www.oecd.org gaf ons 403, dus het getal hebben we niet zelf gelezen. (ervaring)
- Geen sleutel nodig. Zet Accept-Encoding: gzip; dataflow/all is 10 MB. (getest)
- Geen resultaat = HTTP 404 met de platte tekst NoResultsFound, geen lege lijst. (getest)
- Een onbekende parameter (bv. lang=en) geeft 403 met de lijst toegestane parameters: startPeriod, endPeriod, updatedAfter, firstNObservations, lastNObservations, dimensionAtObservation, detail, includeHistory, asOf (format werkt ook). (getest)
- Verkeerd aantal dimensies in de sleutel: bij availableconstraint 403 'Not enough key values in query, expecting 9 got 11'; bij data kwam alleen NoResultsFound. Tel de punten. (getest)
- De codes in de standaardweergave kloppen niet altijd met de data: de metadata noemden UNE_M, de data gebruiken UNE_LF_M. Vraag availableconstraint voor de dimensie MEASURE. (getest)
- Accept-Language: * (de standaard van Node fetch) geeft HTTP 500 'Internal server error', op structuur- én datavragen (gemeten met curl: zonder die kop 200, met die kop 500; een antwoord dat al in de cache van de OESO staat komt wel door). Zet zelf Accept-Language: en. Volgens de handleiding hangt ook het scheidingsteken van SDMX-CSV af van Accept-Language (soms ;). (getest)
- Laat je een dimensie leeg, dan krijg je alle varianten door elkaar (bij werkuren alle werkenden én alleen werknemers). Kies elke dimensie bewust. (ervaring)
- CSV-rijen komen niet gesorteerd op land of periode. csvfilewithlabels heeft een andere kop (STRUCTURE, STRUCTURE_ID, met een namenkolom naast elke code). (getest)
- Dataflows verwijzen soms naar een oudere structuurversie; zonder versie in het pad (SDMX API 1) of met + (API 2) krijg je de nieuwste, die niet altijd achterwaarts compatibel is. (uit de beschrijving)
- De Data Explorer heeft per tabel een knop 'Developer API' met precies de aanroep voor jouw selectie. (uit de beschrijving)

### Voorbeeld
```
https://sdmx.oecd.org/public/rest/data/OECD.SDD.TPS,DSD_LFS@DF_IALFS_UNE_M,1.0/NLD+DEU+BEL.UNE_LF_M.PT_LF_SUB._Z.Y._T.Y_GE15._Z.M?lastNObservations=2&format=csvfile
```

## Zo haal je het op

### curl
```bash
curl "https://sdmx.oecd.org/public/rest/data/OECD.ELS.SAE,DSD_HW@DF_AVG_ANN_HRS_WKD,1.0/NLD+DEU+BEL+USA........_T....?startPeriod=2025&format=csvfilewithlabels"
```

### python
```python
import io, pandas as pd, requests

url = ("https://sdmx.oecd.org/public/rest/data/OECD.SDD.TPS,DSD_LFS@DF_IALFS_UNE_M,1.0/"
       "NLD+DEU+BEL.UNE_LF_M.PT_LF_SUB._Z.Y._T.Y_GE15._Z.M")
r = requests.get(url, params={"startPeriod": "2025-01", "format": "csvfile"})
df = pd.read_csv(io.StringIO(r.text)).sort_values(["REF_AREA", "TIME_PERIOD"])
print(df[["REF_AREA", "TIME_PERIOD", "OBS_VALUE"]].tail())   # werkloosheid in procent
```

## Wat je ermee kunt bouwen
- [Nederland naast Europa: een vergelijker voor elke indicator](https://www.opendataindex.nl/bouwen/nederland-naast-europa.md): Kies een cijfer (werkloosheid, werkuren, levensverwachting, CO2) en zie meteen waar Nederland staat tussen de 27 EU-landen, met vier internationale bronnen achter één knop.


## Wat er allemaal in zit: 1.550 dataflows

Alle dataflows van de OECD Data Explorer, in de onderwerpenindeling van de OESO zelf, elke nacht opgehaald. Een dataflow kan onder meer onderwerpen staan. Elke dataflow heeft een eigen pagina met de SDMX-aanroep voor de nieuwste waarneming van Nederland, het aantal waarnemingen en de periode.

- Soorten: dataflow 1.550
- Laatst gewijzigd: 2026-10-16 (339 in de afgelopen 30 dagen)
- Met een API-aanroep op de datasetpagina: 1.550
- Zoeken: https://www.opendataindex.nl/api/catalogus/oecd?q=… of de MCP-functie zoek_datasets met herkomst=oecd
- Elke rij heeft een eigen pagina: https://www.opendataindex.nl/dataset/oecd/<sleutel>

### Mappen
- Agriculture and fisheries (37): Agricultural policy monitoring (13), Agricultural trade and markets (6), Agriculture and environmental sustainability (11), Fisheries and aquaculture (7)
- Development (80): Africa (44), Key indicators of informality (KIIbIH) (5), Official Development Assistance (ODA) (23)
- Economy (307): Corporate sector (51), Economic outlook (7), External sector (16), Leading indicators and tendency surveys (4), National accounts (158), Prices (31), Productivity (4), Short-term economic statistics (54) …
- Education and skills (119): Education attainment (6), Education resources (6), Students (33), Subnational education indicators (9), Teachers (45), Youth and the labour market (24)
- Employment (69): Benefits, earnings and wages (21), Employment indicators (37), Employment protection (1), Unemployment indicators (19)
- Environment and climate change (71): Air and climate (15), Biodiversity, water and ecosystems (13), Energy (8), Environmental policy (11), Green growth (2), Land and forest (3), Plastics (11), Resource efficiency and circular economy (6) …
- Finance and investment (40): Foreign direct investment (FDI) (15), Pensions and insurance (20)
- Health (86): Health expenditure and financing (5), Health status (16), Healthcare coverage (1), Healthcare human resources (16), Healthcare provider resources (6), Healthcare quality and outcomes (14), Healthcare use (10), Long-term care (4) …
- Industry, business and entrepreneurship (87): Industry dynamics and globalisation (74), Industry sector analysis (1), Industry, business and entrepreneurship policy (2), SMEs and entrepreneurship (51), Tourism (7)
- Public governance (53): Anti-corruption and integrity (2), Openness, innovation and digital government (3), Public employment and management (7), Public finance and budgets (22), Public policymaking (3), Public procurement and infrastructure (9), Regulation (3), Trust, public services and prosperity (4)
- Regional, rural and urban development (181): Cities and functional urban areas (33), Municipalities and local areas (19), Regions (107), Subnational government finance and employment (22)
- Science, technology and innovation (48): Bibliometric indicators (4), Information and communication technology (ICT) (4), Innovation and R&D policy (14), Intellectual property (8), Research and development (R&D) (21)
- Society (51): Demography (2), Gender equality (3), Inclusion and equality (2), Migration (6), Social policy (12), Well-being and beyond GDP (26)
- Taxation (208): Corporate tax (24), Global tax revenues (162), Personal and property tax (14), Tax and environment (7)
- Trade (88): Digital trade (4), Global value and supply chains (10), Trade in goods and services (30), Trade policy (59)
- Transport (22): Annual transport trends (6), Infrastructure investment and maintenance spending (1), Short term transport indicators (7), Transport performance indicators (8)
- Zonder onderwerp (164)
