DVSA MOT History Check avatar

DVSA MOT History Check

Pricing

from $6.00 / 1,000 mot records

Go to Apify Store
DVSA MOT History Check

DVSA MOT History Check

🏷️ From $6.00 / 1K | Full MOT history for any UK vehicle by registration, from the official DVSA API. Test results, mileage at every test, advisories, failures and mileage anomaly detection. No API key needed.

Pricing

from $6.00 / 1,000 mot records

Rating

0.0

(0)

Developer

丂卩ㄖㄖҜㄚ

丂卩ㄖㄖҜㄚ

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

6 days ago

Last modified

Share

Look up the full MOT history of any UK vehicle by registration number, using the official DVSA MOT History API. No API key needed.

🔍 What does UK DVSA MOT History do?

You give it one or more UK registration plates. It returns test dates, pass and fail results, recorded mileage at every test, advisories and failure reasons, as structured data ready for export.

It also does the reading for you. Mileage across every recorded test is checked for a reading that goes backwards, dangerous defects are flagged, and every plate the vehicle has been tested under is listed, so a plate change shows up rather than hiding.

📊 What data can I extract from the MOT register?

One dataset item per registration looked up, with the full test history nested inside it.

FieldDescription
registrationThe plate, normalised
make, modelVehicle make and model
firstUsedDate, registrationDate, manufactureDateISO dates
fuelType, primaryColour, engineSizeVehicle details
motTestCountNumber of MOT tests on record
latestTestResultPASSED or FAILED at the most recent test
latestExpiryDateWhen the current MOT runs out
latestMileageOdometer reading at the most recent test
highestMileageHighest reading ever recorded, useful for spotting clocking
hasDangerousDefectsTrue if any test recorded a dangerous defect
hasOutstandingRecallDVSA outstanding safety recall status
mileageAnomalyTrue if a later test recorded lower mileage than an earlier one, the classic clocking signal
registrationsSeenEvery plate this vehicle has been tested under, useful for spotting a plate change
motTests[]Every test, newest first
sourceUrlThe vehicle on the DVSA checker
scrapedAtWhen the row was collected, ISO 8601

Each entry in motTests contains completedDate, testResult, passed, expiryDate, odometerValue, odometerUnit, odometerResultType, motTestNumber, registrationAtTimeOfTest, dataSource, defectCount, dangerousDefectCount, advisories, failureReasons, and the raw defects array.

💡 Why look up MOT history?

Used car buyers. Check mileage consistency across every recorded test before viewing a car.

Dealers and traders. Bulk check a batch of plates before auction or listing.

Fleet operators. Track MOT expiry dates across a fleet and catch dangerous defects early.

Garages. Pull prior advisories before a service so nothing gets missed.

🚀 How do I use UK DVSA MOT History?

  1. Click Try for free.
  2. Enter one or more registration plates in registration, separated by commas.
  3. Raise maxResults if you are checking a batch.
  4. Click Start and wait for the run to finish.
  5. Download the results as JSON, CSV or Excel, or pull them from the API.

⬇️ Input

{
"registration": "AB12CDE",
"maxResults": 1
}
FieldTypeDefaultWhat it does
registrationstringAB12CDEOne or more UK plates, comma separated, for example AB12CDE, ZZ99ABC. Spaces and case are ignored
maxResultsinteger1Cap on how many registrations to process in one run, maximum 1000
clientIdstringOptional, use your own DVSA account
clientSecretstringOptional, use your own DVSA account
apiKeystringOptional, use your own DVSA account
tokenUrlstringOptional, use your own DVSA account

⬆️ Output

Table view

Results arrive as a Vehicles table you can sort and filter in the Console, with make, model, fuel type, the latest result, expiry date, latest mileage, test count and the dangerous defect flag lined up per registration.

A plate with no MOT record is logged and skipped rather than failing the run. A run summary with any failures is written to RUN_SUMMARY in the key value store.

JSON

A typical row:

{
"registration": "AB12CDE",
"make": "VAUXHALL",
"model": "ASTRA",
"fuelType": "Petrol",
"latestTestResult": "PASSED",
"latestExpiryDate": "2027-06-11T00:00:00.000Z",
"latestMileage": 43244,
"motTestCount": 9,
"hasDangerousDefects": false,
"firstUsedDate": "2017-06-19T00:00:00.000Z"
}

Download it from the run as JSON, CSV or Excel, or read it straight from the API.

No API key needed

This Actor includes DVSA MOT History API access, so you can run it straight away. Nothing to register for and nothing to configure.

If you would rather run against your own DVSA account, fill in the four optional credential fields under "Advanced" and they take priority. Register free at documentation.history.mot.api.gov.uk.

Data licence

MOT data comes from DVSA and is published under the Open Government Licence v3.0. Commercial use is permitted with attribution:

Contains public sector information licensed under the Open Government Licence v3.0.

Respect the DVSA rate limits and terms of use.

⏱️ How long does a run take?

Measured on real runs, so you know what normal looks like and can tell it apart from a run that has stalled.

Registrations looked upTypical run time
13 to 5 seconds
5about 6 seconds

A lookup is one call to the DVSA MOT History API and it answers in well under a second, so almost all of a single registration run is the container starting rather than the work. That is why five registrations cost about six seconds rather than five times three: the fixed cost is paid once and each further plate adds a fraction of a second.

The one thing that can lengthen a run is DVSA rate limiting on a long list, which the Actor backs off from rather than pushing through. A registration that the register holds no record of is reported as a miss with the reason attached and does not stop the rest of the list.

A run is never silently stuck. Every registration is logged as it is looked up and written to the dataset as it returns rather than held back to the end, so a run that hits its time limit still leaves every vehicle history it had already collected. A run where no plate could be looked up at all finishes with an empty dataset and the reason in its status message, and the RUN_SUMMARY record lists every plate that missed.

Set the run timeout to suit the size of the ask. This Actor's default is 3600 seconds, which is comfortably more than the largest run in the table above (one registration takes well under a minute). You are charged per delivered result rather than per minute, so a generous timeout costs you nothing and a tight one risks losing the run's work. Lower it only if you want a hard ceiling on how long a scheduled run may sit.

💰 How much does it cost?

Right now this Actor rents at $10 a month, which covers as many lookups as you need.

From 21 August 2026 it moves to pay per result at $0.02 per registration. One charge covers the vehicle record and its complete test history, however many tests are on file. Set maxResults to cap what a run can cost.

Plates with no MOT record are skipped and cost nothing under the new pricing.

🔌 Integrations

Send results straight to Google Sheets, Slack, Airtable, Zapier, Make or your own webhook using Apify integrations. You can also trigger a run whenever something happens in another tool.

🔗 Using UK DVSA MOT History with the Apify API

curl -X POST "https://api.apify.com/v2/acts/spookyweb~uk-mot-history/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"registration": "AB12CDE", "maxResults": 1}'

Or with the Apify client:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('spookyweb/uk-mot-history').call({
registration: 'AB12CDE',
maxResults: 1,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Full detail is in the Apify API reference, and every run is also callable from the Python and JavaScript clients.

❓ FAQ

Do I need my own DVSA API key?

No. Access is built in, so you can run it straight away. There are four optional credential fields under "Advanced", clientId, clientSecret, apiKey and tokenUrl, if you would rather the requests ran against your own free DVSA account. Fill them in and they take priority.

What does mileage anomaly detection do?

It compares the odometer reading at every recorded test in order. If a later test reports fewer miles than an earlier one, mileageAnomaly is true. That is the classic clocking signal. highestMileage gives you the largest reading ever recorded, which is the figure to compare an advert against.

Can I check several registrations at once?

Yes. Put them all in registration separated by commas, and raise maxResults, which caps how many are processed in one run and goes up to 1000. Spaces and letter case in a plate are ignored.

How far back does the history go?

As far back as DVSA holds tests for that vehicle, newest first in motTests. motTestCount tells you how many are on record. A vehicle too new to have had its first MOT returns a vehicle record with no tests, which is an answer rather than an error.

What counts as a dangerous defect?

A defect the tester recorded at the dangerous level, meaning the vehicle should not be driven until it is repaired. hasDangerousDefects flags whether any test ever recorded one, and dangerousDefectCount on each test says how many, with the detail in defects and failureReasons.

What happens if a plate has no record?

It is logged and skipped, and the run carries on with the rest. A summary of anything that failed is written to RUN_SUMMARY in the key value store, so you can see exactly which plates did not resolve.

This uses the DVSA's official MOT History API, the government service provided for looking up a vehicle's test history. It returns data about a vehicle rather than about a person, and the registration is a vehicle identifier.

The data is published under the Open Government Licence v3.0 and commercial use is permitted with the attribution above. Respect the DVSA rate limits and terms of use. If you go on to link a registration to a named individual, that combination is personal data and handling it is on you under GDPR. Apify's ethical scraping guide covers the wider picture.

👍 Your feedback

Found a bug, or want a field that is not here yet? Open an issue on the Actor's Issues tab. Requests that make the data more useful get built, and problems get fixed quickly.

🔎 You might also like

ActorWhat it does
UK Insolvency Register SearchBankruptcies, IVAs, DROs and restrictions orders from the official register
UK Food Hygiene RatingsFood hygiene ratings for every UK food business, straight from the FSA
Website Contact ScraperEmails, phones, socials and addresses from company websites, one record per domain