# VIN Decoder + NHTSA Recalls & Complaints: One Call (`getascraper/nhtsa-vehicle-intelligence-monitor`) Actor

Decode any US VIN into full specs, then pull every open NHTSA recall and consumer complaint for that vehicle in one merged record. Skip juggling separate VIN, recall, and complaint tools. Accepts VIN or make/model/year. $0.0018 per vehicle.

- **URL**: https://apify.com/getascraper/nhtsa-vehicle-intelligence-monitor.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** Lead generation, Automation, Agents
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.32 / 1,000 vehicle 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## 🚘 VIN Decoder + NHTSA Recalls & Complaints: One Call

<table width="100%">
<tr>
<td style="padding:24px 28px;background:#F0F4F8;border:1px solid #C9D6E3;border-top:4px solid #1E3A5F;border-radius:12px">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">One VIN in. Full recall and complaint history out.</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Decode any US VIN, or search by make, model, and year, and get every open NHTSA recall and consumer complaint for that vehicle in one record.</span>
</td>
</tr>
</table>

<table width="100%">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #C9D6E3;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#1E3A5F">🔍 Know what you're buying</span><br>
<span style="font-size:12px;color:#57534E">Full spec decode from the VIN before you sign anything.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #C9D6E3;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#1E3A5F">⚠️ Catch every open recall</span><br>
<span style="font-size:12px;color:#57534E">See safety recalls the seller might not mention.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #C9D6E3;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#1E3A5F">📋 Read real owner reports</span><br>
<span style="font-size:12px;color:#57534E">Crash, fire, and injury flags from actual drivers.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #C9D6E3;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#1E3A5F">🧩 No VIN? No problem</span><br>
<span style="font-size:12px;color:#57534E">Search by make, model, and year instead.</span>
</td>
</tr>
</table>

Most VIN and recall tools on the Store only give you one piece at a time: a VIN decoder here, a recall checker there, a complaints database somewhere else. **NHTSA Vehicle Intelligence Monitor** merges all three into one call, using official US government safety data.

### 🔍 What does NHTSA Vehicle Intelligence Monitor do?

This Actor is a three-in-one vehicle safety lookup. Give it a VIN and it decodes the vehicle's specs using the same official database used by dealers and insurers, then automatically looks up every open safety recall and every consumer complaint filed against that make, model, and year.

The Apify Store's other NHTSA tools split this into single-purpose actors: a VIN decoder, a recall scraper, a complaints scraper, each priced and run separately. This Actor bundles all three into one API call and one merged output record, so you don't have to run three actors and stitch the results together yourself.

Run it manually, on a schedule to re-check a fleet for new recalls, or call it from your own app through the Apify API. No login, no paywall, and no proxy required: this data is publicly available from the US government and stays that way.

### 💡 Why use it?

- **Used-car buyers and dealers** can vet a VIN before purchase and see recall and complaint history alongside the decoded spec sheet.
- **Fleet operators and insurers** can screen vehicles for outstanding safety recalls before they become liability problems.
- **Marketplaces and listing sites** can enrich vehicle listings with verified specs and safety history instead of relying on seller-entered data.
- **Recall-monitoring teams** can re-run the Actor on a schedule and catch new recalls the moment NHTSA publishes them.

### 🚀 How to use NHTSA Vehicle Intelligence Monitor

<table width="100%">
<tr>
<td style="padding:16px 14px;width:33%;background:#F0F4F8;border:1px solid #C9D6E3;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#1E3A5F;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Add a VIN or vehicle</span><br>
<span style="font-size:12px;color:#57534E">Paste a VIN, or enter make, model, and year.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#F0F4F8;border:1px solid #C9D6E3;border-left:none;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#1E3A5F;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Run the lookup</span><br>
<span style="font-size:12px;color:#57534E">Decode, recalls, and complaints fetch together, automatically.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#F0F4F8;border:1px solid #C9D6E3;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#1E3A5F;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Export one clean record</span><br>
<span style="font-size:12px;color:#57534E">Download as JSON, CSV, or Excel, ready to use.</span>
</td>
</tr>
</table>

### ⚙️ Input

| Field | Type | Required | Description |
|---|---|---|---|
| `vins` | array of strings | no\* | One or more 17-character VINs to decode and look up. |
| `vehicles` | array of objects | no\* | Make/model/year combinations, e.g. `{ "make": "Honda", "model": "Accord", "year": 2003 }`, for lookups without a VIN. |
| `complaintSeverityFilter` | enum | no | Only attach complaints matching this severity: `all` (default), `crashOnly`, `fireOnly`, `crashOrFireOnly`, or `injuryOrDeathOnly`. Applied after fetching, since NHTSA's API has no server-side severity filter, so it narrows the output, not the fetch. |
| `complaintComponentFilter` | string | no | Only attach complaints whose component field contains this text (case-insensitive), e.g. `AIR BAGS` or `ENGINE`. Same client-side caveat as the severity filter. |
| `includeRecalls` | boolean | no | Fetch and attach recall data. Turn off to skip the recalls API call and cut runtime/cost. Default `true`. |
| `includeComplaints` | boolean | no | Fetch and attach complaint data. Turn off to skip the complaints API call and cut runtime/cost. Default `true`. |
| `maxComplaintsPerVehicle` | integer | no | Caps how many individual complaints are attached to each record. Popular models can have thousands on file; the true total is always reported separately. Default `50`. |
| `maxConcurrency` | integer | no | How many vehicles to process in parallel. Default `5`. |

\* At least one of `vins` or `vehicles` must be provided.

When `includeRecalls` or `includeComplaints` is turned off, the corresponding fields (`recalls`, `recallsCount`, or `complaints`, `complaintsTotalCount`, etc.) are omitted from the output entirely rather than set to empty placeholders.

### 📤 Output

Each dataset item is one merged vehicle record combining decode, recall, and complaint data.

```json
{
  "vin": "1HGCM82633A004352",
  "decodeStatus": "decoded",
  "make": "HONDA",
  "model": "Accord",
  "modelYear": "2003",
  "trim": "EX-V6",
  "bodyClass": "Coupe",
  "vehicleType": "PASSENGER CAR",
  "fuelTypePrimary": "Gasoline",
  "transmissionStyle": "Automatic",
  "manufacturer": "AMERICAN HONDA MOTOR CO., INC.",
  "plantCity": "MARYSVILLE",
  "plantState": "OHIO",
  "plantCountry": "UNITED STATES (USA)",
  "recallsCount": 24,
  "recalls": [
    {
      "campaignNumber": "19V182000",
      "component": "AIR BAGS:FRONTAL:DRIVER SIDE:INFLATOR MODULE",
      "summary": "Honda is recalling specific vehicles equipped with a replacement driver air bag inflator...",
      "consequence": "An explosion of the inflator may result in serious injury or death.",
      "remedy": "Honda will notify owners and replace the affected inflator free of charge.",
      "reportReceivedDate": "06/03/2019"
    }
  ],
  "complaintsTotalCount": 2013,
  "complaintsIncludedCount": 10,
  "complaints": [
    {
      "odiNumber": 11746949,
      "components": "AIR BAGS",
      "summary": "The vehicle was rear-ended. The front driver airbag did not deploy...",
      "crash": true,
      "numberOfInjuries": 1,
      "dateOfIncident": "06/18/2026"
    }
  ],
  "scrapedAt": "2026-08-20T04:11:29.512Z"
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

### 📊 Data table

| Field | Type | Description |
|---|---|---|
| `vin` | string | The VIN you supplied, if any. |
| `decodeStatus` | string | `decoded`, `partial`, `failed`, or `skipped` (no VIN was supplied). |
| `make` / `model` / `modelYear` | string | Resolved vehicle identity, from the VIN decode or your `vehicles` input. |
| `trim`, `bodyClass`, `vehicleType` | string | Vehicle body and trim details. |
| `fuelTypePrimary`, `transmissionStyle`, `driveType`, `doors` | string | Powertrain and configuration details. |
| `engineCylinders`, `engineHP`, `displacementL` | string | Engine specifications. |
| `manufacturer`, `plantCity`, `plantState`, `plantCountry` | string | Manufacturing origin. |
| `recallsCount` | integer | Total number of open safety recalls found. |
| `recalls` | array | Recall details: campaign number, component, summary, consequence, and remedy. |
| `complaintsTotalCount` | integer | Total complaints on file for this make/model/year, regardless of any filter or cap. |
| `complaintsMatchingFilterCount` | integer | How many complaints matched your `complaintSeverityFilter`/`complaintComponentFilter`, before the cap. Only present when a filter is active. |
| `complaintsIncludedCount` | integer | How many complaints are attached to this record. |
| `complaints` | array | Complaint details: components affected, summary, and crash/fire/injury flags. |
| `scrapedAt` | string | Timestamp of when the record was built. |

Any field the underlying government data does not report for a given vehicle is simply left out of that record, so you never see placeholder or made-up values.

### 💰 Pricing

This Actor runs on Apify's pay-per-event pricing: you only pay for vehicle records actually returned. An empty or failed run costs nothing beyond a few seconds of compute, and there is no subscription. One price covers the VIN decode, recalls, and complaints together instead of billing each separately. Check the Pricing tab for the current rate and any plan discounts.

### ⭐ Enjoying NHTSA Vehicle Intelligence Monitor?

<table width="100%">
<tr>
<td style="padding:20px 24px 14px;background:#F0F4F8;border:1px solid #C9D6E3;border-left:5px solid #1E3A5F;border-radius:10px 10px 0 0">
<span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#1C1917">This Actor just saved you from running three separate tools to vet one vehicle.</span><br>
<span style="font-size:14px;color:#57534E">A 5-star rating takes 10 seconds and helps other buyers, dealers, and fleet teams find it. Your feedback also tells us what to build next.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#1E3A5F;border:1px solid #C9D6E3;border-top:none;border-radius:0 0 10px 10px;text-align:center">
<a href="https://apify.com/getascraper/nhtsa-vehicle-intelligence-monitor/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

### 🛠️ Tips and advanced options

- Keep `maxComplaintsPerVehicle` low (10 to 25) when you only need a risk signal, and raise it when you need the full complaint text for a specific vehicle.
- Batch VINs in groups of a few hundred per run rather than thousands, so you can review results and adjust before scaling up.
- Combine `vins` and `vehicles` in the same run: decode the VINs you have, and look up recalls and complaints directly for models you're researching without a specific VIN yet.
- Schedule the Actor to re-run monthly against a fixed fleet list to catch new recalls as soon as they're published.

### ❓ FAQ

**Does this Actor need a VIN for every vehicle?**
No. You can supply a make, model, and year directly in `vehicles` and skip the VIN decode step entirely. Recalls and complaints will still be looked up.

**Where does this data come from?**
All three data sources (VIN decode, recalls, and complaints) come from official, publicly available US National Highway Traffic Safety Administration data. This Actor only covers vehicles sold in the US market.

**Why is `complaintsIncludedCount` lower than `complaintsTotalCount`?**
High-volume models can have thousands of complaints on file. To keep records a manageable size, only the first `maxComplaintsPerVehicle` are attached. The total count is always reported so you know how many exist.

**What if a VIN is invalid or can't be decoded?**
The record is still returned with `decodeStatus` set to `partial` or `failed` and whatever information could be resolved. Nothing is guessed or filled in with placeholder text.

**Why not just use a separate VIN decoder and recall checker?**
You can, but you'll pay for and run two or three separate actors, then merge their output yourself. This Actor does the VIN decode, recall lookup, and complaint lookup in one run and returns one record per vehicle, so there's nothing to stitch together after the run finishes.

Found a bug or want a feature added? Open an issue on the Actor's Issues tab, or reach out for a custom version of this Actor.

### 🔗 Other actors

- [Autohero Cars Scraper: All Europe Used Cars Catalog](https://apify.com/getascraper/autohero-cars-scraper) ↗ - Used-car listings across Autohero's European markets.
- [CarDekho Used Cars Scraper: Indian Car Listings, Prices & Dealer Data](https://apify.com/getascraper/cardekho-used-cars-scraper) ↗ - Indian used-car marketplace listings and dealer data.
- [OtoMoto Cars Scraper: Samochody używane](https://apify.com/getascraper/otomoto-cars-scraper) ↗ - Used-car listings from Poland's largest car marketplace.
- [YallaMotor Cars Scraper](https://apify.com/getascraper/yallamotor-cars-scraper) ↗ - New and used car listings from the Middle East's YallaMotor.
- [Collector Car Auction Monitor: Sold Prices & Outcomes](https://apify.com/getascraper/collector-car-auction-outcome-monitor) ↗ - Realized prices and outcomes from collector car auctions.

# Actor input Schema

## `vins` (type: `array`):

One or more 17-character Vehicle Identification Numbers. Each VIN is decoded, then matched to its make/model/year to pull recalls and complaints.

## `vehicles` (type: `array`):

Vehicles to look up without a VIN, e.g. { "make": "Honda", "model": "Accord", "year": 2003 }. Skips VIN decoding and goes straight to recalls and complaints.

## `complaintSeverityFilter` (type: `string`):

Only include complaints matching this severity. This is checked after complaints are pulled, so it doesn't speed up the run: it just narrows what's included in your data, not the true total count.

## `complaintComponentFilter` (type: `string`):

Only include complaints whose component field contains this text, e.g. "AIR BAGS" or "ENGINE" (not case-sensitive). Leave blank to include all components. Same as the severity filter above: this only narrows what's included, not how fast the run goes.

## `includeRecalls` (type: `boolean`):

Include NHTSA safety recall data for each vehicle. Turn off to skip it and cut runtime and cost if you only need complaints or a VIN decode.

## `includeComplaints` (type: `boolean`):

Include NHTSA consumer complaint data for each vehicle. Turn off to skip it and cut runtime and cost if you only need recalls or a VIN decode.

## `maxComplaintsPerVehicle` (type: `integer`):

Popular models can have thousands of complaints on file. Cap how many are attached to each record (the true total count is always included).

## `maxConcurrency` (type: `integer`):

How many vehicles to look up at the same time. Keep this modest since this data is free and open to everyone.

## Actor input object example

```json
{
  "vins": [
    "1HGCM82633A004352"
  ],
  "vehicles": [
    {
      "make": "Honda",
      "model": "Accord",
      "year": 2003
    }
  ],
  "complaintSeverityFilter": "all",
  "complaintComponentFilter": "",
  "includeRecalls": true,
  "includeComplaints": true,
  "maxComplaintsPerVehicle": 50,
  "maxConcurrency": 5
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

# 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 = {
    "vins": [
        "1HGCM82633A004352"
    ],
    "vehicles": [
        {
            "make": "Honda",
            "model": "Accord",
            "year": 2003
        }
    ],
    "complaintSeverityFilter": "all",
    "complaintComponentFilter": "",
    "includeRecalls": true,
    "includeComplaints": true,
    "maxComplaintsPerVehicle": 50,
    "maxConcurrency": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/nhtsa-vehicle-intelligence-monitor").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 = {
    "vins": ["1HGCM82633A004352"],
    "vehicles": [{
            "make": "Honda",
            "model": "Accord",
            "year": 2003,
        }],
    "complaintSeverityFilter": "all",
    "complaintComponentFilter": "",
    "includeRecalls": True,
    "includeComplaints": True,
    "maxComplaintsPerVehicle": 50,
    "maxConcurrency": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/nhtsa-vehicle-intelligence-monitor").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 '{
  "vins": [
    "1HGCM82633A004352"
  ],
  "vehicles": [
    {
      "make": "Honda",
      "model": "Accord",
      "year": 2003
    }
  ],
  "complaintSeverityFilter": "all",
  "complaintComponentFilter": "",
  "includeRecalls": true,
  "includeComplaints": true,
  "maxComplaintsPerVehicle": 50,
  "maxConcurrency": 5
}' |
apify call getascraper/nhtsa-vehicle-intelligence-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,getascraper/nhtsa-vehicle-intelligence-monitor"
        }
    }
}

```

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/v9MoGiNar0LgQJ75Y/builds/CuwghDwlfTeSRDJJZ/openapi.json
