# RDW registered vehicles

Data on every Dutch licence plate: make, model, fuel, weight and inspection expiry. No personal data.

- Publisher: RDW
- Area: Netherlands · Finest detail: licence plate
- Period: heden · Refreshed: daily
- Access: Open · Licence: CC0
- Join keys: kenteken
- Status: ok (2026-10-15)
- URL: https://opendata.rdw.nl

## What can you do with it?
- **How old is the Dutch car fleet?.** Group by date of first registration and count per year.
- **Electric by make.** Join the fuel table to the vehicles and see which makes electrify fastest.

## Interesting combinations
- Where are the electric cars? → [cbs-kwb](https://www.opendataindex.nl/en/bron/cbs-kwb.md) via geen directe sleutel. RDW has no address; for location use CBS car counts per neighbourhood.

## Similar sources
- [CBS motorvoertuigen](https://opendata.cbs.nl): Counts per municipality, with location but without plates.

## API (Socrata SODA)

- Base: https://opendata.rdw.nl
- Access: Usable anonymously. A free app token gives higher limits. (platform)
- Formats: JSON, CSV, GeoJSON, XML
- Size: 16870095 rows (tested)
- Filtering: SoQL, an SQL-like query language in the URL; =, !=, >, <, AND, OR, IN(), LIKE, between, starts_with(), IS NULL

### Endpoints
- `GET /resource/m9d7-ebf2.json`: the rows, filterable with SoQL
- `GET /api/views/m9d7-ebf2.json`: metadata: columns, licence, modification date

### Parameters
- `<kolom>=<waarde>`: simple filter, e.g. merk=TESLA (platform)
- `$where`: SoQL condition, e.g. datum_eerste_toelating > 20250101 (platform)
- `$select`: columns and counts, e.g. merk, count(*) (platform)
- `$group / $order`: group and sort (platform)
- `$limit / $offset`: paging (default 1,000 rows) (platform)
- `$q`: full-text search across text columns (platform)

### Fields (98)
`kenteken` text, `voertuigsoort` text, `merk` text, `handelsbenaming` text, `vervaldatum_apk` number, `datum_tenaamstelling` number, `bruto_bpm` number, `inrichting` text, `aantal_zitplaatsen` number, `eerste_kleur` text, `tweede_kleur` text, `aantal_cilinders` number, `cilinderinhoud` number, `massa_ledig_voertuig` number, `toegestane_maximum_massa_voertuig` number, `massa_rijklaar` number, `maximum_massa_trekken_ongeremd` number, `maximum_trekken_massa_geremd` number, `datum_eerste_toelating` number, `datum_eerste_tenaamstelling_in_nederland` number, `wacht_op_keuren` text, `catalogusprijs` number, `wam_verzekerd` text, `maximale_constructiesnelheid` number, `laadvermogen` number, `oplegger_geremd` number, `aanhangwagen_autonoom_geremd` number, `aanhangwagen_middenas_geremd` number, `aantal_staanplaatsen` number, `aantal_deuren` number, `aantal_wielen` number, `afstand_hart_koppeling_tot_achterzijde_voertuig` number, `afstand_voorzijde_voertuig_tot_hart_koppeling` number, `afwijkende_maximum_snelheid` number, `lengte` number, `breedte` number, `europese_voertuigcategorie` text, `europese_voertuigcategorie_toevoeging` text, `europese_uitvoeringcategorie_toevoeging` text, `plaats_chassisnummer` text, `technische_max_massa_voertuig` number, `type` text, `type_gasinstallatie` text, `typegoedkeuringsnummer` text, `variant` text, `uitvoering` text, `volgnummer_wijziging_eu_typegoedkeuring` number, `vermogen_massarijklaar` number, `wielbasis` number, `export_indicator` text, `openstaande_terugroepactie_indicator` text, `vervaldatum_tachograaf` number, `taxi_indicator` text, `maximum_massa_samenstelling` number, `aantal_rolstoelplaatsen` number, `maximum_ondersteunende_snelheid` number, `jaar_laatste_registratie_tellerstand` number, `tellerstandoordeel` text, `code_toelichting_tellerstandoordeel` text, `tenaamstellen_mogelijk` text, `vervaldatum_apk_dt` calendar_date, `datum_tenaamstelling_dt` calendar_date, `datum_eerste_toelating_dt` calendar_date, `datum_eerste_tenaamstelling_in_nederland_dt` calendar_date, `vervaldatum_tachograaf_dt` calendar_date, `maximum_last_onder_de_vooras_sen_tezamen_koppeling` number, `type_remsysteem_voertuig_code` text, `rupsonderstelconfiguratiecode` text, `wielbasis_voertuig_minimum` number, `wielbasis_voertuig_maximum` number, `lengte_voertuig_minimum` number, `lengte_voertuig_maximum` number, `breedte_voertuig_minimum` number, `breedte_voertuig_maximum` number, `hoogte_voertuig` number, `hoogte_voertuig_minimum` number, `hoogte_voertuig_maximum` number, `massa_bedrijfsklaar_minimaal` number, `massa_bedrijfsklaar_maximaal` number, `technisch_toelaatbaar_massa_koppelpunt` number, `maximum_massa_technisch_maximaal` number, `maximum_massa_technisch_minimaal` number, `subcategorie_nederland` text, `verticale_belasting_koppelpunt_getrokken_voertuig` number, `zuinigheidsclassificatie` text, `registratie_datum_goedkeuring_afschrijvingsmoment_bpm` number, `registratie_datum_goedkeuring_afschrijvingsmoment_bpm_dt` calendar_date, `gem_lading_wrde` number, `aerodyn_voorz` text, `massa_alt_aandr` number, `verl_cab_ind` text, `aantal_passagiers_zitplaatsen_wettelijk` number, `aanwijzingsnummer` text, `api_gekentekende_voertuigen_assen` text, `api_gekentekende_voertuigen_brandstof` text, `api_gekentekende_voertuigen_carrosserie` text, `api_gekentekende_voertuigen_carrosserie_specifiek` text, `api_gekentekende_voertuigen_voertuigklasse` text

### Limits and pitfalls
- Dates are stored as numbers (20250101), not as dates. Filter with numbers. (from the description)
- Fuel and emissions are in a separate dataset (8ys7-d773), joinable on licence plate. (experience)

### Example
```
https://opendata.rdw.nl/resource/m9d7-ebf2.json?$select=merk,count(*)&$where=voertuigsoort='Personenauto'&$group=merk&$order=count(*)%20DESC&$limit=3
```
