Skip to content

The Danish Motor Register (DMR) as an API: what is public and how the weekly extract works

Every week, Motorstyrelsen, the Danish Motor Vehicle Agency, puts out a free extract of the public technical data in the Danish Motor Register. No REST API comes with it, just a large file. Here is what the extract holds, how it is built, and how to look up vehicles in it from your own code.

By · Last checked

What the Danish Motor Register (DMR) is

Motorregistret, often shortened to DMR, is the register of motor vehicles in Denmark. Motorstyrelsen says it holds information about every motor vehicle registered in Denmark. Motorstyrelsen is part of the Danish Customs and Tax Administration, and its job is to make sure every vehicle is registered correctly and taxed on the same basis. It counts 5,113,300 active registered vehicles.

Dealers, inspection companies, importers, and leasing and insurance companies use the register every day, each with access of their own. Anyone can also view one vehicle at a time without signing in, under "Køretøjsdetaljer" and "Vis køretøj". That is a page for people. When your code needs to look up vehicles, the extract is what you build on.

What Motorstyrelsen publishes

What a developer can build on is the statistics extract (statistikudtræk): an extract of all public (technical) information in the register. Motorstyrelsen says this about it:

  • It is on an FTP server. The address, user name and password are on Motorstyrelsen's page.
  • It is updated weekly, normally on Monday morning.
  • It costs nothing to use.
  • There are no custom extracts of selected fields. You get the whole extract.
  • Motorstyrelsen gives no support on using it.
  • Motorstyrelsen can't guarantee that the updates happen, and says the extract shouldn't be used in business-critical processes.

So the extract is a free service, and running it is up to you: fetching the file, watching for new extracts and noticing when one is late. That is exactly the work an API like Motorbay takes off your hands.

The file

The folder is ESStatistikListeModtag, and the file is named ESStatistikListeModtag- followed by a date and a time, so you can tell when it was made. The server keeps only the latest files, not an archive. The figures below are from the extract of 7 Oct 2026.

  • Size: a ZIP of about 7 GB holding one XML file of about 129 GB unpacked. Motorstyrelsen recommends 64-bit software because the extract is very large.
  • Contents: about 14.1 million Statistik elements. Some vehicles appear in more than one element, so the file has about 13.0 million distinct vehicle IDs. Deregistered, scrapped and exported vehicles are in it too, so the count is far larger than the active vehicles above.
  • Format: the namespace is http://skat.dk/dmr/2007/05/31/, and codes come as a number and a Danish name, for example kind 1, named Personbil (passenger car).

What the extract holds

Each vehicle has a vehicle ID (KoeretoejIdent) and a VIN, and the plate is there when the vehicle has one. Beyond that:

  • Identity: kind, usage, status, make, model, variant, color and body type.
  • Engine and environment: power, displacement, cylinders, euro standard, particle filter and emissions.
  • Fuels: each fuel with its consumption, for example both electricity and petrol on a plug-in hybrid.
  • Technical data: weights, axle loads, towing weights, dimensions, seats and type approval.
  • Latest inspection: date, inspection type, result and odometer reading.
  • Equipment: the equipment registered on the vehicle.

The extract is technical data about vehicles, not about people. Owners and users are not in it, and neither are insurance or liens. Owner and user lookups on specific vehicles are a separate access that Motorstyrelsen grants after an individual assessment, for example to parking companies and municipalities. For most tasks that is an advantage: when you only process vehicle data, data protection is simpler.

Each file is a snapshot of the register, and its contents follow the register. Motorregistret gets new releases about four times a year. In 2023 the euro standard was missing from the extract for a while, and a release in April 2023 brought it back.

What the weekly cycle means for freshness

Data from the extract is data as of the extract's date. If a car is deregistered on a Tuesday, the change arrives with the next extract. "Normally on Monday morning" isn't always Monday: of the two latest files on the server, one was from a Sunday and the other from a Wednesday. Trust the date in the file name, not the weekday.

Motorbay watches Motorstyrelsen's server for you and imports each new extract automatically. Every /v1 response has the Motorbay-Data-As-Of header with the time Motorstyrelsen published the extract, and GET /v1/dataset also shows when we imported it and how many vehicles it holds. Store the header next to what you store, and you always know how old your data is.

Motorbay is serving data from Motorstyrelsen's extract of .

200 OK GET /v1/…
Motorbay-Data-As-Of: 2026-10-07T14:09:11Z

The /health/data endpoint is public and needs no key. It answers fresh when the data is at most 8 days old and stale when it is older. Use it in your own monitoring, so you don't have to watch Motorstyrelsen's server yourself.

Lookups by plate, VIN and vehicle ID

Most lookups start with a plate, and there are two things to know. Plates are reused: among the roughly 13.0 million vehicles in the extract of 7 Oct 2026, 139,202 plates were on more than one vehicle, so a lookup has to choose. And not every vehicle has one: about 1.2 million had none. Every vehicle had a VIN.

  • GET /v1/vehicles/plate/{plate} returns the vehicle registered with the plate now. Case, spaces and hyphens are ignored, so "ab 12 345" and "AB-12345" are the same.
  • GET /v1/vehicles?registrationNumber= returns every vehicle that has carried the plate.
  • GET /v1/vehicles/vin/{vin} looks up a VIN (stelnummer).
  • GET /v1/vehicles/{id} looks up a vehicle ID, the same ID as KoeretoejIdent in the extract. It is a string in the API, so don't treat it as a number.

Details come per vehicle: technical data, engine, environment, the latest inspection, equipment and, since 8 Oct 2026, fuels and consumption with GET /v1/vehicles/{vehicleId}/fuel-types. The OpenAPI document describes all of it, so you can generate a client in your own language.

GET
curl -i -H "X-Api-Key: $MOTORBAY_API_KEY" \
  "https://api.motorbay.app/v1/vehicles/plate/AB12345"

Build it yourself, or use an API

The extract is free, and you can build your own import. This is what it takes:

  • Download about 7 GB every week, and watch for when a new file arrives.
  • Read 129 GB of XML as a stream. The file won't fit in memory at once.
  • Catch format changes when the register gets a new release, before they turn into wrong data.
  • Map the codes for kind, usage, color, make, model, euro standard and fuel, and keep the lists current.
  • Handle repeats. Some vehicles appear more than once in the file, so keep one record per vehicle ID.
  • Swap data atomically, so your users never see a half-imported extract, and keep last week's data in case the new file is bad.

If you are analysing the whole register, or want every record in your own database anyway, it can pay off. If your code looks up single vehicles, an API gets you started the same day, with no import to run. Motorbay's import does all of the above: it fetches each new file, checks the XML's structure against the last import, builds the new dataset next to the old one, refuses an extract with more than 5% fewer vehicles, and swaps in one transaction. You send a plate and get JSON back.

Motorbay imports the extract as it is, without correcting or filling in values, so the values are the ones in Motorstyrelsen's file. Motorbay is not affiliated with Motorstyrelsen. See every field in the API, one by one.

The sources are Motorstyrelsen's own pages, Motorstyrelsen's extract and Motorbay's API docs.

Make your first lookup today

Create an account, make an API key and send your first call. The quickstart takes about five minutes. Your first 1,000 requests every month are free, and you need no card.