# UK Vehicle Recalls — DVSA Car, Motorcycle & Parts Recall Data (`nexgensignal/uk-vehicle-recall-records`) Actor

Every UK vehicle safety recall from the DVSA's official file since 1992: cars, vans, trucks, motorcycles and components, with make, model, concern, defect, remedy, vehicles affected and build dates. Part of NexGen Signal — official-source data products

- **URL**: https://apify.com/nexgensignal/uk-vehicle-recall-records.md
- **Developed by:** [NexGen Signal](https://apify.com/nexgensignal) (community)
- **Categories:** News, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $33.50 / 1,000 uk vehicle recall records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## UK Vehicle Recalls — DVSA Car, Motorcycle & Parts Recall Data

**Official source. No API key. Pay per record.**

This actor gives you every UK vehicle safety recall from the Driver and Vehicle Standards Agency (DVSA), read from the recalls file that the GOV.UK "Check if a vehicle, part or accessory has been recalled" service publishes. Cars, vans, trucks, motorcycles, motorhomes and quad bikes, trailers, tyres, components and even pedal cycles are in it, back to 1992: the DVSA recall number, launch date, make, model, the concern, the defect, the remedy, how many vehicles are affected, the manufacturer's reference and the build date range.

On 27 September 2026 the file held **17,696 rows covering 8,971 recall numbers**, from 1992 to September 2026 (17,691 rows and 8,969 recall numbers after the privacy rule below). Recall volume has been rising: 844 rows launched in 2023, 1,200 in 2024, 1,427 in 2025 and 1,006 in 2026 up to late September. A recall that covers several models has one row per model line, so one record here is one row of the DVSA file.

Use it three ways:

- **New-recall feed.** `lastDays: 7` or `30` returns recalls launched recently — 79 rows over the 30 days to 27 September 2026.
- **Make and model watch.** Every recall for a make, a model, or a defect type (`textContains: "AIRBAG"`), with build dates to match against a fleet or stock list.
- **Lookup.** Send DVSA recall numbers; numbers not in the file are listed in the run receipt.

### Who buys this and for what job

- **Fleet operators, leasing and rental companies** checking their makes and models against new UK recalls every week.
- **Used-car dealers, auction houses and vehicle-history services** flagging open recall campaigns by make, model and build period.
- **Insurers, claims and motor-finance teams** tracking safety defects by manufacturer.
- **Garages, parts distributors and aftermarket suppliers** planning around recall work.
- **Researchers, journalists and consumer groups** studying recall trends in the UK market.

### Sample output

![Sample output — UK Vehicle Recalls](https://api.apify.com/v2/key-value-stores/IXCaMKjxSmUTLHhmq/records/uk-vehicle-recall-records.png)

```json
{
  "record_id": "DVSA:R/2026/148:79be9cbd3b0f",
  "recall_number": "R/2026/148",
  "launch_date": "21/09/2026",
  "make": "MERCEDES-BENZ CARS UK LTD",
  "recalls_model_information": "GLC",
  "concern": "SRPC2603 - Drive Shaft Joint",
  "defect": "Mercedes-Benz AG has determined that on certain 4MATIC E-Class (213  platform) S-Class Coupé (217 platform) S-Class (222 platform) E-Class  Coupe/Convertible (238 platform) GLC (253 platform) and CLS (257 platform)  vehicles increased wear of the universal joint on the drive shaft might occur.",
  "remedy": "As a remedy Mercedes-Benz AG via its Mercedes-Benz service partners will  check the drive shaft on the affected vehicles and replace it if necessary.",
  "vehicle_numbers": "8",
  "manufacturer_ref": "SRPC2603 / 4190026",
  "model": "GLC",
  "vin_start": null,
  "vin_end": null,
  "build_start": "22/12/2017",
  "build_end": "20/03/2019",
  "launch_date_iso": "2026-09-21",
  "build_start_iso": "2017-12-22",
  "build_end_iso": "2019-03-20",
  "source": "Driver and Vehicle Standards Agency (DVSA) — vehicle safety recalls file, published on the GOV.UK 'Check if a vehicle, part or accessory has been recalled' service (https://www.check-vehicle-recalls.service.gov.uk/documents/RecallsFile.csv)",
  "licence": "Open Government Licence v3.0 — the service states: 'All content is available under the Open Government Licence v3.0, except where otherwise stated'.",
  "attribution": "Contains public sector information licensed under the Open Government Licence v3.0 (DVSA vehicle recalls); reformatted by NexGen Signal.",
  "observed_at": "2026-09-27T17:03:29Z"
}
```

### Pricing

| Apify plan | Price per record |
|---|---|
| Free | $0.05 |
| Bronze | $0.045 |
| Silver | $0.04 |
| Gold and above | $0.0335 |

You pay only for records delivered to your dataset. `maxRecords` caps what a run can cost: 500 records cost $25 on the Free plan. Filtering is free — the whole file is read on every run and you pay only for what matches.

### Input

| Field | What it does | Default |
|---|---|---|
| `lastDays` | Only recalls launched in the last N days | not set |
| `launchedFrom`, `launchedTo` | Only recalls launched between two days (YYYY-MM-DD) | not set |
| `makeContains` | Makes containing any of these texts, e.g. `FORD`, `MERCEDES` | all |
| `modelContains` | Model or model information containing this text, e.g. `TRANSIT` | none |
| `textContains` | Concern, defect or remedy containing this text, e.g. `AIRBAG`, `BRAKE` | none |
| `recallNumbers` | Look up DVSA recall numbers, e.g. `R/2026/148` | none |
| `sortBy` | `newest` or `oldest` launch date first, or `file` order | newest |
| `maxRecords` | Maximum records delivered and billed | 500 |

Example — this week's new UK recalls:

```json
{"lastDays": 7, "maxRecords": 500}
```

Example — every Ford recall launched in 2026:

```json
{"makeContains": ["FORD"], "launchedFrom": "2026-01-01", "maxRecords": 1000}
```

(On 27 September 2026 that returned 244 rows. Airbag recalls launched in the previous 12 months: 148 rows.)

### Output

| Field | Meaning |
|---|---|
| `record_id` | `DVSA:<recall number>:<row fingerprint>` — unique per row, stable while the row is unchanged |
| `recall_number` | DVSA recall number. Judging by the makes under each prefix: `R` vehicles, `RM` motorcycles, `RSPV` motorhomes and quad bikes, `RCOMP` components, `RTW` tyres, `RCT` and `RPT` trailers, `RPC` pedal cycles |
| `launch_date` | Launch date as published (DD/MM/YYYY) |
| `make`, `model`, `recalls_model_information` | As published |
| `concern`, `defect`, `remedy` | The DVSA's recall text, as published |
| `vehicle_numbers` | Number of vehicles affected, as published (text; blank in 221 rows) |
| `manufacturer_ref` | The manufacturer's campaign reference |
| `vin_start`, `vin_end` | As published — blank in every row of the current file |
| `build_start`, `build_end` | Build date range as published (DD/MM/YYYY) |
| `launch_date_iso`, `build_start_iso`, `build_end_iso` | The same dates as YYYY-MM-DD, for sorting and filtering |
| `source`, `licence`, `attribution`, `observed_at` | Provenance on every record |

Text is the DVSA's, trimmed of outer spaces. Nothing is re-worded, merged or estimated.

### Cost guidance

New recalls averaged about 20–30 rows a week in 2025–2026 (79 rows in the 30 days to 27 September 2026), so a weekly run is typically under $1 on Gold. A make's recalls for a year run from a handful to a few hundred rows (Ford: 244 rows so far in 2026, $8.17 on Gold). The whole file of about 17,700 rows is about $593 on Gold. Start with the ten-record Store example to see the fields, then schedule a weekly `lastDays: 7` run.

### Tips

- **Match a fleet:** filter by make and model, then compare each vehicle's build date with `build_start_iso` and `build_end_iso`; the recall applies only to vehicles built in that range.
- **Catch every spelling:** use short make texts (`MERCEDES`, `TOYOTA`) rather than full company names.
- **Weekly feed:** schedule `lastDays: 7` and keep the `record_id` values you have seen; a changed row gets a new `record_id`.
- **Defect themes:** `textContains` with `AIRBAG`, `BRAKE`, `FIRE` or `SOFTWARE` gives quick topic sets.

### How a run works

The actor checks robots.txt on the service's host (it serves none — HTTP 404 — which is recorded in the run receipt as "no policy", not as permission), downloads the DVSA's recalls file (about 7.7 MB), and reads it row by row. Matching records are pushed to your dataset first and charged only after they are delivered; if you set a maximum charge, the run stops cleanly when it is reached. Test runs took 5–10 seconds. Every run saves a receipt (`RUN_RECEIPT`) with the robots decision, the file size, rows read, rows withheld and recall numbers not found. If the service cannot be reached after several retries, the run ends with a clear message and nothing is charged.

### Honest limitations

- **No VIN or registration lookup.** The file lists makes, models and build date ranges; its VIN columns are blank. To check one vehicle, use the GOV.UK service itself.
- **Make names vary.** The DVSA spells some makes several ways (for example "MERCEDES-BENZ CARS UK LTD" and "MERCEDES BENZ UK LIMITED"); `makeContains` takes short texts so you can catch all of them.
- **Source dates can be wrong.** Some rows carry an impossible date; for example recall R/2026/030 (a Ford Kuga) is dated 03/02/2027 in the file. The actor keeps the DVSA's value, so with newest-first ordering that row sorts to the top, and it counts in date ranges that reach 2027 (it is among the 244 Ford rows above). `lastDays` stops at today, so the new-recall feed leaves it out.
- **Remedy status is not included.** The file says what the recall is, not how many vehicles have been fixed.
- **Five rows are withheld.** Rows whose text contains an email address (5 on 27 September 2026, covering 2 recall numbers that have no other rows) are left out whole, because an address can be a private person's. The run receipt counts them, and a lookup of a withheld recall number is reported as withheld, not as missing.
- **UK recalls only.** For the United States, see NHTSA-based actors.

### Licence and attribution

The GOV.UK service states: "All content is available under the Open Government Licence v3.0, except where otherwise stated". Every record carries the credit *Contains public sector information licensed under the Open Government Licence v3.0 (DVSA vehicle recalls); reformatted by NexGen Signal.* This actor is not affiliated with or endorsed by the DVSA.

### Differentiation

Vehicle-recall actors on the Store — such as neuton/nhtsa-vehicle-recalls-scraper, samwise.agency/nhtsa-vehicle-safety and benthepythondev/vehicle-recalls-intelligence — cover the US NHTSA database. UK actors such as spookyweb/uk-mot-history check MOT history, not recalls. This actor covers UK recalls from the DVSA's own file: every recall since 1992, with the DVSA's concern, defect and remedy text, build ranges and vehicle numbers, under the Open Government Licence.

### The NexGen Signal family

Part of NexGen Signal — official-source data products, no API keys, pay per record. Related actors:

- [UK Road Collision Records — DfT STATS19](https://apify.com/nexgensignal/uk-road-collision-records)
- [UK Road Traffic Flow Records — DfT AADF](https://apify.com/nexgensignal/uk-road-traffic-flow-records)
- [EU Vehicle CO2 Records — EEA New-Car Monitoring](https://apify.com/nexgensignal/eu-vehicle-co2-records)
- [NL Vehicle Registration Cohorts — by Make/Model](https://apify.com/nexgensignal/nl-vehicle-registration-cohort-records)
- [FDA Recall Risk Records — openFDA Enforcement](https://apify.com/nexgensignal/fda-recall-risk-records)

# Actor input Schema

## `lastDays` (type: `integer`):

Only recalls launched in the last N days — the new-recall feed.

## `launchedFrom` (type: `string`):

Optional. Only recalls launched on or after this day (YYYY-MM-DD). The file goes back to 1992.

## `launchedTo` (type: `string`):

Optional. Only recalls launched on or before this day (YYYY-MM-DD).

## `makeContains` (type: `array`):

Only makes containing any of these texts (not case-sensitive), e.g. FORD, MERCEDES, TOYOTA. DVSA spells some makes several ways (for example 'MERCEDES-BENZ CARS UK LTD' and 'MERCEDES BENZ UK LIMITED'), so a short text catches them all.

## `modelContains` (type: `string`):

Only recalls whose model or model information contains this text, e.g. TRANSIT.

## `textContains` (type: `string`):

Only recalls whose concern, defect or remedy text contains this, e.g. AIRBAG or BRAKE.

## `recallNumbers` (type: `array`):

Look up specific DVSA recall numbers, e.g. R/2026/123. Numbers not in the file are listed in the run receipt.

## `sortBy` (type: `string`):

Which recalls come first when more match than your maximum.

## `maxRecords` (type: `integer`):

Maximum records delivered and billed in this run. One record = one row of the DVSA file (one recall, one model line). The whole file is about 17,700 rows.

## Actor input object example

```json
{
  "makeContains": [],
  "recallNumbers": [],
  "sortBy": "newest",
  "maxRecords": 10
}
```

# Actor output Schema

## `results` (type: `string`):

The delivered records.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "maxRecords": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("nexgensignal/uk-vehicle-recall-records").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "maxRecords": 10 }

# Run the Actor and wait for it to finish
run = client.actor("nexgensignal/uk-vehicle-recall-records").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "maxRecords": 10
}' |
apify call nexgensignal/uk-vehicle-recall-records --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nexgensignal/uk-vehicle-recall-records"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/EZigxx77u0Fn6bHrK/builds/wbewngg0BjVzcOB2j/openapi.json
