How we calculate MOT statistics
By Plateworthy · Updated · Method version 2.0
An MOT outcome describes one test. It does not measure a car's whole reliability, establish its condition today or predict your repair bill. Our figures are descriptive counts of the records supplied to the calculation.
Sources and licence
We use third-party anonymised MOT test results and failure items, with its class-specific reason-for-rejection detail and group lookup tables. This is a bulk open dataset; we do not generate statistics by collecting people's number plates.
Contains public sector information licensed under the Open Government Licence v3.0. A third party supplies the source; Plateworthy's calculations are our own and are not an official third-party statistic or endorsement.
The Third-party dataset guide (ODT) defines the codes and joins. A file's publication date is different from the dates of the tests it contains. Verified rows display the earliest and latest included tests and their calculation date. These dates alone do not prove that a full calendar year was supplied.
Which tests count?
Version 2 includes normal initial tests (NT), test class 4 and completed outcomes P, F or PRS. It excludes retests, abandoned and aborted tests, other vehicle classes, unrecognised models and invalid test dates. Class 4 includes cars and some light vans, motor caravans, taxis and other vehicles; it is not a perfect passenger-car-only sample.
We remove exact duplicate test IDs across overlapping input files. If the same ID has conflicting data, import stops so an operator must choose a consistent release. Counts refer to tests, not unique vehicles: one vehicle can contribute tests in several years.
Make/model names are mapped to our finite catalogue using explicit aliases, including trim variants. A model page can combine several generations and engines. We do not treat its average as a prediction for a particular variant.
Pass, failure and PRS denominators
Let N = P + F + PRS for included tests. P means passed; F means failed. PRS means defects were found and rectified at the test station before the final result was recorded.
- Final recorded pass rate
- (P + PRS) ÷ N × 100
- Initial failure rate
- (F + PRS) ÷ N × 100
- Strict failed outcome
- F ÷ N × 100
Final pass and initial failure rates are not complements because PRS contributes to both. A 90% final pass rate does not necessarily mean only 10% arrived without defects. The CSV includes the underlying counts so you can recalculate the rates.
How failure categories are joined
Failure-item records join to results by test ID. Their RfR IDs join to the detail table using vehicle class 4, and the section ID joins to the top-level group for that same class. We include F and P item types from failed or PRS initial tests; advisory and minor items do not count as failures.
Each test counts at most once in a category, even if both tyres or several lamps fail. A test can appear in several different categories. We show both the percentage of all included initial tests and the percentage of initial-failure tests; these percentages need not sum to 100%.
Rankings are withheld unless failure files were supplied, at least 100 initial-failure tests exist, at least 95% of initial failures have a resolved category and no included failure items have unresolved lookup codes. These are our publication quality gates, not a third-party rule. Partial joins are reported as incomplete rather than silently treated as no failures.
Mileage, age and fuel cohorts
The mileage metric is the mean of odometer miles divided by age at each test: a lifetime annualised estimate, not distance driven between two tests. It uses positive finite readings, valid first-use and test dates, age of at least six months and estimates between 500 and 60,000 miles a year. We publish the number of usable mileage observations separately from total tests.
The guide identifies 1 January 1971 as a placeholder first-use date, so we treat it as unknown. We withhold pre-2022 mileage estimates because those files may contain unconverted kilometre readings. We require at least 1,000 valid mileage observations to display a mean.
Age groups are 0–4, 5–9, 10–14 and 15+ years at test, with an unknown group. Fuel codes are retained as recorded and combined age/fuel groups are available where at least 1,000 tests exist. Fuel recording errors and mixed generations still affect comparisons. These slices are not a validated age-adjusted reliability score.
Legacy data, freshness and reproducibility
Older aggregate rows lack test-period, deduplication and valid-mileage evidence. We label them legacy, withhold their mileage and failure rankings, and do not silently attach the new methodology to them. A calculation timestamp does not recover an unknown test period.
The offline importer records source filenames, SHA-256 digests, row counts, duplicate removals and method version. It stages joins in a local SQLite database and exports aggregate JSON before any separately authorised database write. Re-running the same inputs and code version produces the same numerical results. No registrations, VINs, vehicle IDs or test IDs appear in the public CSV.
Pages require at least 1,000 tests for model-wide figures. Comparisons may still reflect servicing, age, mileage, use and which vehicles survive to be tested. A pass is not a service history; a failure is not evidence of fraud. For a purchase, inspect the individual vehicle and its own records.
Found an issue? Contact us with the model, metric and source period. We describe material corrections and update the affected calculation date after a verified reimport.