Skip to content

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/fields lists, 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]=true keeps 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 at insured, exported and apk_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", … }
}
Example: the counts and amounts are made up.

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 as make,trade_name.
  • Up to 100 groups per level with limit, 20 by default, largest first. other_count counts 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 true or false.
  • 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, lte or lt, 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, sum or median, such as metrics=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", … }
}
Example: the counts are made up.