# NHTSA Recalls Scraper - Recalls & Complaints API

NHTSA recalls scraper: pull vehicle recalls AND owner complaints by make, model, and year - or auto-enumerate a whole make. Export clean JSON/CSV. No API key.

Canonical product page: https://mayd-it.com/data-tools/actors/us-vehicle-recalls-scraper/
Public Actor: https://apify.com/maydit/us-vehicle-recalls-scraper

## Example input

```json
{
  "dataType": "both",
  "make": "Ford",
  "model": "Explorer",
  "modelYears": [
    "2021"
  ],
  "maxResults": 10
}
```

## Full guide

![Vehicle recalls and complaints — illustrative workflow](https://api.apify.com/v2/key-value-stores/YGxD9JRpduom8Q5Zd/records/us-vehicle-recalls-scraper-387dd090f2ac.png?signature=L6SgEEUsIa8MWLsAVwB)

## Vehicle recalls and complaints

For fleet researchers and automotive analysts, collect published NHTSA recalls and owner complaints with their distinct record types.

**Coverage:** Vehicle lines and campaigns recorded by NHTSA. Choose recalls, complaints or both; this is not a VIN-specific repair-status check.

[Open this Actor in Console](https://console.apify.com/actors/6ky7V2BBZwTeSmA5g/input) · [First run](#try-this-actor) · [Results](#result-preview) · [Cost](#usage-and-pricing) · [Full guide](#full-guide)

## Try this Actor

1. Start with the Honda 2022 model-year example below and review the form's result cap before running. The guide also includes narrower model and single-campaign queries.
2. Open the run's dataset and keep `type` with `id`. Check `SUMMARY` for time or spending stops before broadening the query.

**Read the results correctly:** Owner complaints are reported claims, not verified defects. Preserve make, model and year when deduplicating because one recall campaign can cover several vehicles.

**Copyable input** — use the JSON editor in Console.

```json
{
  "make": "Honda",
  "modelYears": ["2022"]
}
```

## Result preview

The dataset view highlights these columns:

- **Record category** · `type`
- **Make** · `make`
- **Model** · `model`
- **Model year** · `modelYear`
- **Affected component** · `component`
- **Summary** · `summary`

Use the original source links and the field definitions below when interpreting the results. CSV works well for flat columns; JSON preserves nested values.

## Usage and pricing

Base result rate on the FREE tier: **$4 per 1,000 results**. The [Pricing tab](https://apify.com/maydit/us-vehicle-recalls-scraper/pricing) shows your plan's result rate and any Actor Start charge. Set a small result limit for the first run; the requested limit is not a guarantee of that many results.

---

## Full guide

> Pull official U.S. vehicle safety recalls and owner complaints by make, model, and year - or auto-enumerate an entire make - in one run. No API key.

### What it does

This NHTSA recalls scraper turns the official NHTSA data into clean, normalized records you can actually use. Query **car recall data by make, model, and year**, look up a single **NHTSA campaign number**, or run a **whole make** to auto-enumerate every model for that make. It returns both **official safety recalls** and **owner complaints** (ODI) - including crash, fire, injury, and death flags - so you get complete safety coverage without stitching two tools together. Export results as a **vehicle safety recall dataset** in JSON or CSV. No API key, no scraping headaches.

Most NHTSA tools do one thing: recalls *or* complaints, one model at a time. This one does both, and can sweep an entire make automatically.

### Who it's for

- **Car dealers & used-car marketplaces** - flag open recalls across inventory before resale
- **Fleet managers** - track recalls across every make/model you operate
- **Lemon-law attorneys** - pull owner complaint history and injury/crash data for a vehicle line
- **Auto insurers** - factor recall and defect exposure into risk models
- **Automotive researchers & journalists** - build defect and safety datasets
- **Developers** - a clean recalls + complaints data feed without maintaining an NHTSA integration

### What you get / Output

Each record is one recall or one complaint, normalized to a flat schema. Fields returned:

| Field | Description |
|---|---|
| `type` | `recall` or `complaint` |
| `id` | NHTSA campaign number for a recall, or ODI number for a complaint; use with `type` |
| `make` | Vehicle make |
| `model` | Vehicle model |
| `modelYear` | Model year |
| `manufacturer` | Manufacturer named in the record |
| `component` | Affected component/system |
| `summary` | Description of the recall or complaint |
| `consequence` | Safety consequence of the defect |
| `remedy` | Recall remedy / fix (recalls) |
| `reportDate` | Recall report date; null for complaints |
| `filedDate` | Complaint filing date; null for recalls |
| `doNotDrive` | Flag: do-not-drive advisory (recalls) |
| `parkOutside` | Flag: park-outside fire-risk advisory (recalls) |
| `crash` | Complaint involved a crash |
| `fire` | Complaint involved a fire |
| `injuries` | Number of injuries reported |
| `deaths` | Number of deaths reported |
| `incidentDate` | Date of the reported incident (complaints) |
| `url` | Source URL for the record |

### Input / How to query

Three modes cover how you can pull data:

- **Specific vehicle** - set a make, model, and model year to pull recalls and complaints for one exact vehicle line. Model must match the NHTSA model name (e.g. `Civic`, `F-150`).
- **Whole make** - set a make and model year without a specific model. The Actor auto-discovers and enumerates every model for that make and year, so you don't need to know each model name up front.
- **Campaign lookup** - provide an NHTSA campaign number (e.g. `23V769000`) to pull one specific recall across every vehicle it covers.

Example - a whole-make sweep for a 2022 make:

Use the [copyable first-run input](#try-this-actor) above.

Example - a single campaign number:

```json
{
  "campaignNumber": "23V769000"
}
```

Every mode honours **Max run seconds** (default 240): when the budget is reached the Actor stops cleanly and finishes successfully with the records it already has, and records `stoppedEarlyOnTimeLimit: true` in the run's `SUMMARY`. A whole-make sweep across several model years is the case that needs it raised (together with the run timeout).

### Example use cases

- **Used-car dealer recall sweep** - run whole-make mode across the makes on your lot to surface open recalls and do-not-drive (`doNotDrive`) advisories on inventory before it sells.
- **Lemon-law case build** - pull every complaint for a make/model/year and filter on `crash`, `fire`, `injuries`, and `deaths` to document a defect pattern.
- **Fleet safety monitoring** - schedule runs for each vehicle line you operate and watch for new `campaignNumber` entries.
- **Insurance risk enrichment** - join recall and complaint counts per make/model/year into underwriting models.
- **Research dataset** - export a vehicle recall and complaint dataset to CSV for analysis.

### Recurring use / scheduling

Set the Actor on a **schedule** (daily or weekly) from the Apify console to monitor recalls automatically - ideal for dealers and fleet managers who need to catch new campaigns as they post. Each run outputs to a dataset you can pull via API, webhook, or direct CSV/JSON export.

To dedupe across runs, use `type` + `id` + `make` + `model` + `modelYear`. A recall campaign can cover multiple vehicles, so using its ID alone would merge distinct vehicle records. The `campaignNumber` input selects a campaign; the output identifier is `id`.

### FAQ

#### How do I get NHTSA recall data in bulk?

Use whole-make mode: set a make and model year without a specific model, and the Actor enumerates every model automatically, returning recalls and complaints together. Then export the dataset as CSV or JSON.

#### How to export vehicle recalls by make and model to CSV?

Run the Actor with your make, model, and model year, then export the run dataset directly to CSV or JSON from the Apify console or the dataset API.

#### Is there an API for car recalls and owner complaints?

Yes - this Actor is a recalls + complaints API on top of the official NHTSA data. Call it via the Apify API, get structured JSON back, and skip building and maintaining your own NHTSA integration. No NHTSA API key is required.

#### How can a dealership monitor recalls across its used car inventory?

Schedule whole-make runs for the makes on your lot, dedupe by the composite key above, and watch `doNotDrive` and `parkOutside` for published safety advisories.

#### How do I pull all recalls for a whole vehicle make?

Set the make and model year and leave the model unset. The Actor discovers the exact NHTSA model names and fetches recalls and complaints for all of them.

#### Where can lemon law attorneys download NHTSA complaint data?

Query the make, model, and model year and export. Each complaint includes `crash`, `fire`, `injuries`, `deaths`, `summary`, `consequence`, and `incidentDate` for case documentation.

#### How to look up a recall by NHTSA campaign number?

Use campaign lookup mode: provide the `campaignNumber` (e.g. `23V769000`). The Actor returns that recall across every vehicle it covers.

#### What is the best way to scrape NHTSA recalls and complaints without an API key?

This Actor reads the official NHTSA API directly - no key, no auth setup. Provide your query inputs and it returns clean, normalized records for both recalls and complaints.

#### How do fleet managers track vehicle recalls automatically?

Put the Actor on a daily or weekly schedule for each make/model you run, dedupe on `campaignNumber`, and pipe new records to a webhook, sheet, or alert.

#### Can I get injury, crash, and fire counts from NHTSA complaint data?

Yes. Complaint records include `crash`, `fire`, `injuries`, and `deaths` fields drawn from NHTSA owner-submitted complaint (ODI) data.

### Data source & notes

- **Source:** the official **NHTSA API** (National Highway Traffic Safety Administration), covering safety recalls and owner-submitted complaints (ODI). This is public U.S. government safety data - no API key required.
- **Coverage:** U.S. vehicles as recorded by NHTSA. Model names must match NHTSA's exact spelling in specific-vehicle mode; whole-make mode resolves them for you.
- **Complaints vs. recalls:** recalls are official manufacturer/NHTSA campaigns; complaints are owner-submitted reports and reflect individual claims, not verified defects.
- **Field availability:** some fields are specific to one record type - e.g. `remedy`, `doNotDrive`, and `parkOutside` apply to recalls; `crash`, `fire`, `injuries`, `deaths`, `incidentDate`, and `filedDate` apply to complaints. The shared `id` field carries the campaign or ODI number according to `type`.
- **Freshness:** data reflects what NHTSA has published at run time; schedule the Actor to keep a current feed.

### Related actors

Part of a set of US public-records tools that work well together:

- [CPSC Product Recalls Scraper](https://apify.com/maydit/us-product-recalls-scraper) - consumer product recalls
- [FDA Recalls Scraper](https://apify.com/maydit/us-fda-recalls-scraper) - drug, device and food recalls

> Running all three recall sources together (FDA, CPSC and NHTSA) gives near-complete US recall coverage across regulated products.

See the full collection at [apify.com/maydit](https://apify.com/maydit).

### Found this useful?

If this actor saved you time, a short review on the Apify Store genuinely helps. Reviews are how the next person decides whether a tool is worth trying.

Something broken, missing a field, or a source you want covered? Open an issue on the **Issues** tab and it will get looked at - that is the fastest route to getting it changed.

#### Run spending limits

The run stops at its spending limit. `SUMMARY.datasetItemsSaved` reports the number of rows actually saved, and `SUMMARY.stoppedOnChargeLimit` identifies this stop. A final batch may be saved only in part; increase the spending limit to collect more results.

## Help with your run

Open the **Issues** tab on this Actor with the run URL, the input field that caused trouble and what you expected to receive. Remove API keys and private information before posting.

[Explore more Mayd-It Actors](https://apify.com/maydit)

## Understand your run

Open **Run report** in the run’s Output tab for saved-record counts, reported source issues and limits, and suggested next steps. Use **CSV export** to take the saved results into a spreadsheet. The existing JSON results and detailed machine-readable summary remain available.

The report reflects this run’s recorded coverage. A successful run or a saved result does not establish that every possible source record was collected.
