Count the whole register in one request
How many electric cars of each make are registered? Which defects are found most at inspections? Analytics answers over every vehicle in RDW’s open data, without you downloading and loading it first.
-
Filter on the fields
GET /api/v1/analytics/fieldslists, group by up to two of them, and ask for up to five metrics: average, minimum, maximum, sum or median. -
Dates group by year or month, for example
group_by=first_admission_date:year. -
The register is not a count of what is on the road today: exported and deregistered vehicles are counted too.
filter[registration_allowed]=truekeeps the vehicles that can be registered to an owner (RDW’s “tenaamstellen mogelijk”). That field does not say whether a vehicle may be on the road; for that, also look atinsured,exportedandapk_expiry_date. - You use the same API key as for lookups. Each answer counts as one analytics query; listing the fields is free.
Request
GET /api/v1/analytics/vehicles
?filter[fuels.fuel]=Elektriciteit
&group_by=make
&metrics=avg:catalog_price
&limit=3
Response
{
"data": {
"count": 612480,
"metrics": { "avg:catalog_price": 48210 },
"groups": [
{ "key": "TESLA", "count": 98213, "metrics": { "avg:catalog_price": 56940 } },
{ "key": "KIA", "count": 61027, "metrics": { "avg:catalog_price": 44380 } },
{ "key": "VOLKSWAGEN", "count": 52880, "metrics": { "avg:catalog_price": 47120 } }
],
"other_count": 400360
},
"meta": { "schema_version": "analytics.v1", … }
}
Filter, group and measure
Analytics has its own list of fields to filter, group and measure. The names are the field names per dataset, the same as field in the feed and the columns in the snapshots. Fields from a linked dataset start with that dataset’s name, such as fuels.fuel or defects.defect_code. A lookup arranges the same fields in sections and names them differently there; the table below puts the most used ones side by side.
Limits of one request
-
Up to two levels in
group_by, outer first, such asmake,trade_name. -
Up to 100 groups per level with
limit, 20 by default, largest first.other_countcounts what falls outside it. -
Up to 50 values per filter, separated by commas, such as
filter[make]=TESLA,KIA. - Grouping by month spans at most 120 months, with a filter on that date that has a start and an end.
- Attributes
- Filter on one or more values and group by value. Yes/no fields take
trueorfalse. -
- make
- trade_name
- vehicle_type
- body_style
- primary_color
- secondary_color
- european_vehicle_category
- fuel_efficiency_class
- odometer_judgement
- insured
- exported
- taxi
- open_recall
- registration_allowed
- fuels.fuel
- fuels.emission_code
- fuels.hybrid_class
- bodies.body_type_description
- recalls.recall_code
- recalls.status
- defects.defect_code
- defects.approval_type
- Dates
- Filter on a period with
gte,gt,lteorlt, and group by year or month. -
- first_admission_date
- first_registration_nl_date
- registration_date
- apk_expiry_date
- defects.report_date
- Numbers
- Filter on a range and measure with
avg,min,max,sumormedian, such asmetrics=median:catalog_price. -
- catalog_price
- gross_bpm
- empty_mass
- curb_mass
- max_mass
- displacement
- cylinders
- seats
- doors
- length
- width
- wheelbase
- power_to_mass_ratio
- fuels.co2_combined_wltp
- fuels.fuel_consumption_combined_wltp
- fuels.electric_range_electric_only_wltp
- fuels.net_max_power_electric
The same fields in a lookup
| Analytics | Lookup (vehicle.v1)
|
|---|---|
| make | vehicle.make |
| trade_name | vehicle.model |
| catalog_price | vehicle.fiscal.catalog_price_eur |
| gross_bpm | vehicle.fiscal.gross_bpm_eur |
| first_admission_date | registration.first_admission_date |
| apk_expiry_date | inspections.apk.expiry_date |
| registration_allowed | status.registration_allowed |
| fuels.fuel | environment.fuels[].type |
| fuels.co2_combined_wltp | environment.fuels[].emissions.co2.combined_wltp_g_per_km |
| defects.defect_code | inspections.reports[].defects[].code |
Amounts are numbers in euros, in analytics and in lookups. A lookup carries the unit in the name (_eur, _kg, _cm); analytics does not.
What inspectors find
GET /api/v1/analytics/defects counts the defects found at inspections, by defect code unless you group otherwise, with the description and article number from the latest version of RDW’s catalogue.
Next to the number of defects, every group tells you how many different vehicles they were found on. Filter on make, model or the date of the report, or group by make to compare makes.
Request
GET /api/v1/analytics/defects
?filter[make]=VOLKSWAGEN
&filter[defects.report_date][gte]=2025-01-01
&limit=2
Response
{
"data": {
"count": 84210,
"vehicles": 51630,
"groups": [
{
"key": "AC1", "description": "Band(en) aanwezig met een profieldiepte van 1,6 t/m 2,5 mm",
"count": 9120, "vehicles": 8870, …
},
{
"key": "210", "description": "Bandenspanning niet op juiste waarde",
"count": 6440, "vehicles": 6310, …
}
],
"other_count": 68650
},
"meta": { "schema_version": "analytics.v1", … }
}