
DUO open onderwijsdata
Alle scholen en opleidingen met adres, en per schoolvestiging het aantal leerlingen, schooladviezen, doorstroomtoetsscores, examencijfers en prognoses. Van basisschool tot universiteit. DUO publiceert het als downloads en als API (56 datasets met 274 tabellen in de datastore op 16 oktober 2026).

Wat er allemaal in zit348
Alle datasets in de catalogus van DUO, per onderwerp zoals DUO ze indeelt, met elk bestand erbij, elke nacht opgehaald. Elke tabel heeft een eigen pagina met het aantal rijen, de kolommen en de API-aanroep.
Arbeidsovereenkomst en cao5
Basisonderwijs74
Hoger onderwijs38
Inburgering3
Middelbaar beroepsonderwijs43
Speciaal onderwijs en leerproblemen55
Voortgezet onderwijs33
Zonder groep165
Leerlingen in het basisonderwijs: 1,36 miljoen in 2025/26, 10% minder dan in 1996/97
Leerlingen in het basisonderwijs, 1996/97 – 2025/26, in miljoen. Het hoogste punt was 2008/09 (1,55).
Mbo-studenten per opleidingsrichting: het meest Zorg en welzijn (141.737 studenten), dan Economie en administratie en Techniek en procesindustrie
Mbo-studenten per opleidingsrichting, oktober 2025, in studenten. Totaal: 475.113; de grootste 12 van 17 categorieën staan in de grafiek. Zorg en welzijn is 30% van het totaal. Inschrijvingen op 1 oktober 2025 (voorlopige cijfers volgens DUO). 567 cellen met 1 tot 4 studenten zijn afgeschermd en niet meegeteld.
Wat je ermee kunt bouwen1
Wat kun je ermee?4 ideeën
Welk advies krijgen kinderen op jouw basisschool?
Tel per vestiging de schooladviezen per jaar (sinds 2010) en vergelijk de school met andere scholen in de gemeente.
Krimp en groei per school
Leerlingen per vestiging staan er van 2010 tot en met 2025. Zoek scholen die in tien jaar de helft van hun leerlingen kwijtraakten.
Schooladvies naast de buurt
Koppel vestigingen via postcode of gemeentenummer aan inkomen en opleiding uit de CBS-kerncijfers. Krijgen kinderen in armere buurten lagere adviezen?
Waar komen de leerlingen vandaan?
Het bestand naar postcode4 laat per vestiging zien uit welke postcodegebieden de leerlingen komen. Zo meet je hoe ver ouders reizen voor een school.
Zo verwerk je het6 stappen
Zoek de dataset in de catalogus
De catalogus is een CKAN-portaal. Zoek op een woord en kijk bij elke dataset welke bestanden (resources) erbij horen.
https://onderwijsdata.duo.nl/api/3/action/package_search?q=advies&rows=5
Vraag rijen op via de datastore
Elk CSV-bestand staat ook in de datastore. Met resource_id, filters en sort haal je alleen wat je nodig hebt. Dit voorbeeld: schooladviezen van één school in 2024.
https://onderwijsdata.duo.nl/api/3/action/datastore_search?resource_id=454c5dd4-6815-4b52-ae2f-b9eebc6afa6d&filters=%7B%22INSTELLINGSCODE%22%3A%2200AP%22%2C%22PEILJAAR%22%3A2024%7D
Of download het hele bestand
Voor een volledige analyse is de CSV handiger. Sommige downloadlinks in de catalogus wijzen naar een interne server (beheer-ggm-ckan-prd…); vervang de host door onderwijsdata.duo.nl.
https://onderwijsdata.duo.nl/dataset/d6903313-8c64-4b12-b4ac-07e5655ef9f4/resource/454c5dd4-6815-4b52-ae2f-b9eebc6afa6d/download/brin6_advies.csv
Koppel aan adressen
Leerlingbestanden hebben alleen instellingscode en vestigingscode. Naam, adres, postcode en gemeentenummer staan in de adressenbestanden (bijvoorbeeld alle vestigingen in het basisonderwijs).
https://onderwijsdata.duo.nl/api/3/action/datastore_search?resource_id=dcc9c9a5-6d01-410b-967f-810557588ba4&limit=5
Haal de kleine aantallen eruit
Een -1 betekent 1 tot 4 leerlingen (afgeschermd). Tel die niet mee als getal; reken met een onder- en bovengrens of laat ze weg.
Erkende opleidingen in het hoger onderwijs
Het Overzicht Erkenningen ho (CC BY) geeft per instelling, vestiging en opleiding de erkenning, accreditatiedata, studielast, graad en status, actueel en historisch: 74.173 rijen op 16 oktober 2026. Deze dataset staat alleen in de catalogus van DUO, niet op data.overheid.nl.
https://onderwijsdata.duo.nl/api/3/action/datastore_search?resource_id=28a4d89b-c223-4dbc-8deb-9d02a533f215&limit=5
Interessante koppelingen


Hangt het schooladvies samen met het inkomen in de gemeente?
Zet GM voor het gemeentenummer uit het adressenbestand (1699 wordt GM1699) en koppel aan de kerncijfers van hetzelfde jaar.


In wat voor gebouwen zitten de scholen?
Zoek het adres van elke vestiging op in de BAG voor bouwjaar en oppervlakte.
Vergelijkbare bronnen
CBS StatLineCBS heeft onderwijscijfers per gemeente en landelijk, niet per school.
- SKScholen op de kaart nog niet uitgelegd
Schoolprofielen voor ouders, op basis van onder meer DUO-gegevens. Een website, geen dataset.
Waar je op moet letten
- Aantallen onder de 5 zijn afgeschermd
In de API staat dan -1, in sommige bestanden '<5'. Bij kleine scholen is dat een groot deel van de cellen.
- Niet elke dataset is actueel
De registratie van scholen en opleidingen (RIO) wordt elke dag ververst, leerlingtellingen eens per jaar (peildatum 1 oktober). Examencijfers per vestiging in de API lopen tot schooljaar 2017 (stand 15 oktober 2026).
- Codes zonder uitleg in de API
Het veld ADVIES is een getal (bijvoorbeeld 5, 7 of 11), geen tekst. Zoek de betekenis op bij DUO voor je telt.
- Geen SQL op de datastore
datastore_search_sql geeft 'Geen toegang'. Groeperen en tellen doe je zelf, na het ophalen.
- Niet alles staat ook op data.overheid.nl
Een paar datasets staan alleen in de DUO-catalogus, zoals het Overzicht Erkenningen ho en Sectorale Ontwikkelpaden (welke opleidingen bij een ontwikkelpad horen en of er SLIM-subsidie mogelijk is). Bij Sectorale Ontwikkelpaden staat geen licentie in de catalogus (16 oktober 2026): licentie niet vastgesteld.
APICKAN (Action API v3 + datastore) · gelezen 16 okt 2026
Geen sleutel of account nodig getest
tabellen in de datastore (van 290 bestanden in 56 datasets) getest
jsoncsv
Basisadres
https://onderwijsdata.duo.nl/api/3/action
Endpoints 8
- GET
/package_listNamen van alle 56 datasets (bv. adressen_bo, 03_voex-v1, historische-leerlingenaantallen-po). - GET
/package_search?q=…&fq=…&rows=…Zoeken in de catalogus; met rows=0 alleen het aantal. Geeft per dataset ook alle resources (bestanden) met id, formaat en datastore_active. - GET
/package_show?id={naam}Eén dataset: beschrijving, licentie, metadata_modified en de resources met hun resource_id en download-URL. - GET
/resource_show?id={resource_id}Eén bestand: naam, formaat, last_modified, download-URL. - GET
/group_listDe acht onderwerpgroepen (basisonderwijs, voorgezet-onderwijs, hoger-onderwijs, inburgering …). - GET
/group_show?id={groep}Eén groep met titel en beschrijving. - GET
/datastore_search?resource_id={id}De rijen van één tabel, met filters, vrij zoeken, sorteren, kolomkeuze en paginering. Het antwoord noemt ook de kolommen met type. - GET
/dataset/{dataset-id}/resource/{resource_id}/download/{bestand}.csvHet hele bestand als CSV (pad zonder /api/3/action, op https://onderwijsdata.duo.nl).
Filteren getest
Geen querytaal: gelijk-aan-filters als JSON in filters (waarde of lijst van waarden), plus vrij zoeken met q. Geen groter-dan of kleiner-dan; datastore_search_sql is uitgeschakeld.
Parameters 10
resource_id | Verplicht bij datastore_search: de id van het bestand (uit package_show). | getest |
filters | Gelijk-aan-filter per kolom als JSON, ook met een lijst: {"PEILJAAR":[2023,2024]}. Kolomnamen exact zoals in fields (soms met spaties: "BEVOEGD GEZAG NUMMER"). | getest |
q | Vrij zoeken in alle kolommen, of per kolom: {"PLAATSNAAM":"utrecht"} (woordovereenkomst, niet hoofdlettergevoelig). | getest |
fields | Alleen deze kolommen, kommagescheiden. | getest |
sort | Sorteren, bv. PEILJAAR desc. | getest |
limit | Aantal rijen; standaard 100 (CKAN). 40.000 werd gewoon geleverd; limit=0 geeft alleen total en kolommen. | getest |
offset | Paginering; het antwoord heeft _links.next met de volgende pagina. | getest |
records_format | objects (standaard), lists of csv (rijen als één CSV-tekst, zonder kop). | getest |
include_total | false slaat het tellen over (sneller bij grote tabellen). | getest |
q / fq / rows / start / sort (package_search) | Solr-zoeken in de catalogus: fq=groups:basisonderwijs (24 datasets), sort=metadata_modified desc. | getest |
Velden in de datastore (selectie: schooladviezen en adressen basisonderwijs) 8
| Naam | Type | Betekenis |
|---|---|---|
INSTELLINGSCODE | text | BRIN-code van de school (4 tekens, bv. 00AP) |
VESTIGINGSCODE | text | Vestiging: in leerlingbestanden 2 tekens (00), in adressenbestanden BRIN+2 (32JK00) |
PEILJAAR | numeric | Jaar van de telling (peildatum 1 oktober) |
ADVIES | numeric | Schooladvies als getalcode; de betekenis staat in de bestandsbeschrijving op duo.nl, niet in de API |
AANTAL_LEERLINGEN | numeric | Aantal leerlingen; -1 = 1 tot 4 (afgeschermd) |
GEMEENTENUMMER | text | Gemeentecode zonder GM, als tekst met voorloopnullen ("1699") |
POSTCODE | text | Postcode van de vestiging (adressenbestanden) |
_id | int | Rijnummer in de datastore |
Limieten en valkuilen
- Geen sleutel en geen gedocumenteerde rate limit. Standaard 100 rijen per aanroep; een limit van 40.000 werd geleverd. Pagineer met offset of _links.next. getest
- Alleen een deel van de CKAN-acties staat open (package_list, package_search, package_show, resource_show, group_list, group_show, datastore_search). getest
- Andere CKAN-acties (status_show, organization_list, tag_list, datastore_info, help_show) geven HTTP 200 met de HTML van de website, geen JSON-fout. Controleer altijd of het antwoord JSON is. datastore_search_sql geeft 400 "Action name not known". getest
- distinct=true telt goed (total 15 peiljaren in de schooladviezen) maar gaf maar één rij terug. Gebruik voor unieke waarden liever een kleine kolomselectie met een hoge limit. getest
- AVG: aantallen van 1 tot 4 staan als -1 in de API (in sommige bestanden als <5). Niet optellen als getal. getest
- Negen download-URL's in de catalogus wijzen naar een interne host (beheer-ggm-ckan-prd.apps.prd.duo.rijksapps.nl) die buiten DUO niet bestaat; vervang de host door onderwijsdata.duo.nl. getest
- Leerlingbestanden hebben alleen BRIN en vestigingscode; naam, adres en gemeente koppel je via de adressenbestanden (adressen_bo, adressen_vo …). Gemeentenummer zonder GM: plak er GM en voorloopnullen voor om met CBS te koppelen. ervaring
- Resource-id's veranderen niet bij een nieuwe levering; metadata_modified van de dataset en last_modified van de resource geven de versheid (adressen worden dagelijks ververst). ervaring
Probeer het HTTP 200 · 694 ms · 16 okt
https://onderwijsdata.duo.nl/api/3/action/datastore_search?resource_id=454c5dd4-6815-4b52-ae2f-b9eebc6afa6d&filters={"PEILJAAR"%3A2024}&sort=AANTAL_LEERLINGEN desc&limit=3
{
"help": "https://onderwijsdata.duo.nl/api/3/action/help_show?name=datastore_search",
"success": true,
"result": {
"filters": {
"PEILJAAR": 2024
},
"include_total": true,
"limit": 3,
"records_format": "objects",
"resource_id": "454c5dd4-6815-4b52-ae2f-b9eebc6afa6d",
"sort": "AANTAL_LEERLINGEN desc",
"total_estimation_threshold": null,
"records": [
{
"_id": 104633,
"INSTELLINGSCODE": "05VX",
"VESTIGINGSCODE": "00",
"TYPE_PO": "BO",
"PEILJAAR": 2024,
"ADVIES": 12,
"AANTAL_LEERLINGEN": 234
},
{
"_id": 492855,
"INSTELLINGSCODE": "17ON",
"VESTIGINGSCODE": "00",
"TYPE_PO": "BO",
"PEILJAAR": 2024,
"ADVIES": 12,
"AANTAL_LEERLINGEN": 78
}
],
"fields": [
{
"id": "_id",
"type": "int"
},
{
"id": "INSTELLINGSCODE",Ingekort antwoord, opgeslagen bij het oogsten. Klik op het adres voor het echte, actuele antwoord.
Gelezen uit CKAN Action API (platformdocumentatie) · CKAN datastore_search: filters, q, sort, fields, distinct · DUO: uitleg per onderwerp en bestandsbeschrijvingen. Labels: uit de beschrijving staat in wat de api zelf publiceert. getest uit onze eigen kleine aanroep. platform geldt voor elk api van dit platform, volgens de documentatie. ervaring zelf ondervonden bij het bouwen van open data index.
Zo haal je het op
curl -G "https://onderwijsdata.duo.nl/api/3/action/datastore_search" --data-urlencode "resource_id=454c5dd4-6815-4b52-ae2f-b9eebc6afa6d" --data-urlencode "filters={\"PEILJAAR\":2024}" --data-urlencode "limit=5"Meer van DUO in onze index
461 datasets in DUO open onderwijsdata, data.overheid.nl. Dit zijn de laatst gewijzigde.
- examenlicenties2026-10-30
- ho_opleidingsonderdelen2026-10-30
- Overzicht Erkenningen ho2026-10-30
- aangeboden_nfo_opleidingen2026-10-30
- formele_instellingsadressen2026-10-30
- ho_opleidingen2026-10-30
Meer in dit thema
Bekijk hoe deze pagina is opgebouwd
bron: duo-onderwijsdata blokken: [] secties: - ideeen - verwerken - koppelingen - vergelijkbaar - beperkingen - code cache: tag: bron:duo-onderwijsdata ververs: na statuscheck, als de bron nieuwer is statuscheck: methode: "CKAN-catalogus: nieuwste gewijzigde dataset (metadata_modified)" verwacht: dagelijks
Bron: content/bronnen/duo-onderwijsdata.yaml · Markdown

