# NHTSA Vehicle Complaints & Safety Ratings Scraper (`scrapers_lat/nhtsa-vehicle-complaints-scraper`) Actor

Scrape US vehicle safety complaints from NHTSA by make, model and year: crash, fire, injury and death flags, affected components, consumer defect narratives, plus optional NCAP 5-star ratings. Export to JSON, CSV or Excel.

- **URL**: https://apify.com/scrapers\_lat/nhtsa-vehicle-complaints-scraper.md
- **Developed by:** [Scrapers Lat](https://apify.com/scrapers_lat) (community)
- **Categories:** Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $7.56 / 1,000 results

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?

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

[![NHTSA Vehicle Complaints & Safety Ratings Scraper](https://scrapers.lat/banners/nhtsa-vehicle-complaints-scraper.png)](https://console.apify.com/actors/au2g5kCRya3NRTD0u/input)

## NHTSA Vehicle Complaints & Safety Ratings Scraper

Here is one real result, with every field the actor returns:

```json
{
  "mode": "complaints",
  "odiNumber": "11757413",
  "make": "HONDA",
  "model": "ACCORD",
  "modelYear": "2020",
  "component": "FUEL/PROPULSION SYSTEM",
  "crash": false,
  "fire": false,
  "numberOfInjuries": 0,
  "numberOfDeaths": 0,
  "dateOfIncident": "2026-07-11",
  "dateComplaintFiled": "2026-08-17",
  "vin": "1HGCV1F33LA",
  "manufacturer": "Honda (American Honda Motor Co.)",
  "summary": "The fueling system is/has failed. The car randomly stops accelerating while on the highway. The car has stopped accelerating while I was on I95, causing others to have slammed on brakes and swerved to avoid hitting me.",
  "vehicleCount": 1,
  "ncapOverallRating": null,
  "ncapFrontCrashRating": null,
  "ncapSideCrashRating": null,
  "ncapRolloverRating": null,
  "ncapFrontDriverRating": null,
  "ncapFrontPassengerRating": null,
  "ncapSideDriverRating": null,
  "ncapSidePassengerRating": null,
  "ncapRolloverPossibility": null,
  "ncapVehicleDescription": null,
  "ncapVariantCount": null,
  "aiTopIssues": null,
  "aiSeverity": null,
  "aiRecurringDefect": null,
  "aiBuyerAdvice": null,
  "source": "NHTSA",
  "observedAt": "2026-08-20T23:24:41.554Z",
  "error": null
}
```

The most complete NHTSA vehicle-complaints scraper available. It returns every field the official complaints database exposes for a make, model and year, including the full consumer defect narrative, crash, fire, injury and death flags, and the affected component. It adds two optional enrichments: government NCAP 5-star crash-test ratings for the same vehicle, and an AI defect analysis over the whole complaint set. Six filters and a summary mode let you target exactly the vehicles and defects you need.

**[Input](https://apify.com/scrapers_lat/nhtsa-vehicle-complaints-scraper/input-schema) . [Output](https://apify.com/scrapers_lat/nhtsa-vehicle-complaints-scraper/output-schema) . [Pricing](https://apify.com/scrapers_lat/nhtsa-vehicle-complaints-scraper/pricing) . [Examples](https://apify.com/scrapers_lat/nhtsa-vehicle-complaints-scraper/examples)**

![Platform](https://img.shields.io/badge/platform-Apify-1a1a1a) ![Coverage](https://img.shields.io/badge/coverage-US%20vehicles-blue) ![Output](https://img.shields.io/badge/output-JSON%20%7C%20CSV%20%7C%20Excel-green) ![Billing](https://img.shields.io/badge/billing-pay%20per%20result-orange)

### Table of contents

- [What it does](#what-it-does)
- [Quickstart](#quickstart)
- [Input reference](#input-reference)
- [Output reference](#output-reference)
- [Example output record](#example-output-record)
- [Run via API and CLI](#run-via-api-and-cli)
- [Fetch results](#fetch-results)
- [Billing and limits](#billing-and-limits)
- [FAQ and troubleshooting](#faq-and-troubleshooting)
- [More scrapers at scrapers.lat](#more-scrapers-at-scraperslat)

### What it does

Search US vehicle safety complaints by make, model and model year and get one clean row per complaint, or one aggregate row per vehicle.

- **Complaints mode** returns one record per consumer complaint: the ODI number, affected component, crash and fire flags, injury and death counts, incident and filing dates, partial VIN, manufacturer and the full consumer defect narrative.
- **Summary mode** returns one aggregate row per make/model/year: total complaints, crash and fire counts, total injuries and deaths, the most-complained components with counts, the earliest and latest complaint dates, and a few recent narratives.
- **NCAP safety ratings** (opt-in add-on) attach the government 5-star crash-test ratings for the same vehicle: overall, front, side and rollover ratings plus driver and passenger scores.
- **AI defect analysis** (opt-in add-on) reads the complaint set and returns the top recurring issues, an overall severity, whether a recurring defect is present, and practical advice for a used-car buyer.

Filters: component contains, crashes only, fires only, single year or a year range.

### Quickstart

```json
{
  "mode": "complaints",
  "make": "Honda",
  "model": "Accord",
  "modelYear": 2020,
  "maxResults": 10
}
```

Scan a range of model years and keep only airbag complaints that involved a crash:

```json
{
  "mode": "complaints",
  "make": "Toyota",
  "model": "Camry",
  "yearFrom": 2018,
  "yearTo": 2021,
  "component": "AIR BAGS",
  "crashOnly": true,
  "maxResults": 200
}
```

### Input reference

| Name | Type | Required | Description | Example |
| --- | --- | --- | --- | --- |
| `mode` | string | no | `complaints` (one row per complaint) or `summary` (one aggregate row per vehicle). Default `complaints`. | `summary` |
| `make` | string | yes | Vehicle make, case-insensitive. | `Honda` |
| `model` | string | yes | Vehicle model, case-insensitive. | `Accord` |
| `modelYear` | integer | yes\* | Single four-digit model year. | `2020` |
| `yearFrom` | integer | no | Start of a model-year range (inclusive). | `2018` |
| `yearTo` | integer | no | End of a model-year range (inclusive). | `2021` |
| `component` | string | no | Keep only complaints whose component contains this text. | `BRAKES` |
| `crashOnly` | boolean | no | Keep only complaints that reported a crash. | `true` |
| `fireOnly` | boolean | no | Keep only complaints that reported a fire. | `true` |
| `safetyRatings` | boolean | no | Add-on: attach NCAP 5-star ratings for the vehicle. Paid plans only. | `true` |
| `aiDefectAnalysis` | boolean | no | Add-on: AI analysis of the complaint set. Paid plans only. | `true` |
| `maxResults` | integer | no | Maximum result records for the run. Free plans capped at 10. | `200` |

\*Provide either `modelYear` or a `yearFrom` / `yearTo` range. Make, model and at least one year are required.

### Output reference

| Name | Type | Description |
| --- | --- | --- |
| `mode` | string | `complaints` or `summary`. |
| `odiNumber` | string | NHTSA ODI complaint identifier (complaints mode). |
| `make` | string | Vehicle make. |
| `model` | string | Vehicle model. |
| `modelYear` | string | Model year. |
| `component` | string | Affected component(s), semicolon separated (complaints mode). |
| `crash` | boolean | Complaint reported a crash. |
| `fire` | boolean | Complaint reported a fire. |
| `numberOfInjuries` | number | Injuries reported. |
| `numberOfDeaths` | number | Deaths reported. |
| `dateOfIncident` | string | Incident date (YYYY-MM-DD). |
| `dateComplaintFiled` | string | Filing date (YYYY-MM-DD). |
| `vin` | string | Partial VIN supplied by the complainant. |
| `manufacturer` | string | Manufacturer named in the complaint. |
| `summary` | string | Consumer defect narrative. |
| `vehicleCount` | number | Number of vehicles on the complaint. |
| `totalComplaints` | number | Total complaints for the vehicle (summary mode). |
| `crashCount` | number | Complaints reporting a crash (summary mode). |
| `fireCount` | number | Complaints reporting a fire (summary mode). |
| `totalInjuries` | number | Total injuries across complaints (summary mode). |
| `totalDeaths` | number | Total deaths across complaints (summary mode). |
| `topComponent` | string | Most-complained component (summary mode). |
| `topComponentCount` | number | Count for the top component (summary mode). |
| `topComponents` | array | Top components with counts (summary mode). |
| `latestComplaintDate` | string | Most recent complaint date (summary mode). |
| `earliestComplaintDate` | string | Earliest complaint date (summary mode). |
| `recentSummaries` | array | A few recent complaint narratives (summary mode). |
| `ncapOverallRating` | string | NCAP overall 5-star rating (safety add-on). |
| `ncapFrontCrashRating` | string | NCAP overall front crash rating (safety add-on). |
| `ncapSideCrashRating` | string | NCAP overall side crash rating (safety add-on). |
| `ncapRolloverRating` | string | NCAP rollover rating (safety add-on). |
| `ncapFrontDriverRating` | string | NCAP front driver-side rating (safety add-on). |
| `ncapFrontPassengerRating` | string | NCAP front passenger-side rating (safety add-on). |
| `ncapSideDriverRating` | string | NCAP side driver-side rating (safety add-on). |
| `ncapSidePassengerRating` | string | NCAP side passenger-side rating (safety add-on). |
| `ncapRolloverPossibility` | number | NCAP rollover probability (safety add-on). |
| `ncapVehicleDescription` | string | NCAP tested vehicle description (safety add-on). |
| `ncapVariantCount` | number | Number of tested variants found (safety add-on). |
| `aiTopIssues` | array | Top recurring defect themes (AI add-on). |
| `aiSeverity` | string | Overall severity (AI add-on). |
| `aiRecurringDefect` | boolean | Whether a recurring defect is present (AI add-on). |
| `aiBuyerAdvice` | string | Used-car buyer advice (AI add-on). |
| `source` | string | Data source. |
| `observedAt` | string | When the record was scraped (ISO 8601). |
| `error` | string | Error message for a failed query, if any. |

### Example output record

A summary-mode record with both add-ons enabled, from a real run:

```json
{
  "mode": "summary",
  "make": "HONDA",
  "model": "ACCORD",
  "modelYear": "2020",
  "totalComplaints": 348,
  "crashCount": 13,
  "fireCount": 2,
  "totalInjuries": 10,
  "totalDeaths": 1,
  "topComponent": "FORWARD COLLISION AVOIDANCE",
  "topComponentCount": 54,
  "topComponents": [
    "FORWARD COLLISION AVOIDANCE (54)",
    "ENGINE (32)",
    "AIR BAGS (26)",
    "FUEL/PROPULSION SYSTEM (18)",
    "SERVICE BRAKES (17)"
  ],
  "latestComplaintDate": "2026-08-18",
  "earliestComplaintDate": "2019-09-30",
  "ncapOverallRating": "5",
  "ncapFrontCrashRating": "5",
  "ncapSideCrashRating": "5",
  "ncapRolloverRating": "5",
  "ncapVehicleDescription": "2020 Honda ACCORD 4 DR FWD",
  "ncapVariantCount": 1,
  "aiSeverity": "high",
  "aiRecurringDefect": true,
  "aiTopIssues": [
    "Airbag deployment issues",
    "Fuel system failures",
    "Engine head gasket failures",
    "Electrical system malfunctions",
    "Forward collision avoidance system errors"
  ],
  "aiBuyerAdvice": "If considering a used 2020 Honda Accord, be cautious of potential airbag and engine issues. Ensure a thorough inspection and check for any recalls.",
  "source": "NHTSA",
  "observedAt": "2026-08-20T23:30:00.000Z"
}
```

### Run via API and CLI

Start a run with the API:

```bash
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~nhtsa-vehicle-complaints-scraper/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"mode":"complaints","make":"Honda","model":"Accord","modelYear":2020,"maxResults":50}'
```

Run with the Apify CLI:

```bash
apify call scrapers_lat/nhtsa-vehicle-complaints-scraper \
  --input '{"mode":"summary","make":"Toyota","model":"Camry","yearFrom":2018,"yearTo":2021,"safetyRatings":true}'
```

### Fetch results

Read the dataset items once the run finishes:

```bash
curl "https://api.apify.com/v2/actor-runs/RUN_ID/dataset/items?token=YOUR_TOKEN&format=json"
```

Add `&format=csv` or `&format=xlsx` to export to CSV or Excel.

### Billing and limits

- **Pay per result.** You are charged per returned record, plus a one-time actor-start fee per run. Empty or failed queries return no billable records.
- **Add-ons are opt-in and charged only on success.** NCAP safety ratings are charged once per vehicle only when real ratings are returned. AI defect analysis is charged once per vehicle only when a usable analysis is produced. Both are available on paid Apify plans.
- **Free Apify plans are capped at 10 results per run** and cannot use the paid add-ons.
- **Spend cap respected.** Set a maximum total charge on the run and the actor stops emitting billable records once it is reached, so you never receive data beyond what you pay for.

### FAQ and troubleshooting

**No results came back.** Check the make and model spelling against how the vehicle is listed by the regulator (for example `F-150`, `Accord`). Complaints exist only for vehicles sold in the US, and only for model years that were actually produced.

**The NCAP ratings are null.** Not every make/model/year has been crash-tested. When no test exists the ratings stay null and the add-on is not charged.

**Some fields are null.** Complainants do not always supply a VIN or incident date, and summary-only fields are null in complaints mode (and the reverse). Null means the source did not provide that value.

**How current is the data?** Complaints reflect the live regulator database at the time of the run, including recently filed complaints.

### More scrapers at scrapers.lat

- NHTSA Vehicle Recalls Scraper: official safety recall campaigns by make, model and year.
- NHTSA VIN Decoder: decode any US VIN into make, model, trim, engine and plant.
- CPSC Recalls Scraper: consumer-product safety recalls.

Browse the full catalog at [scrapers.lat](https://scrapers.lat).

This actor is an independent tool and is not affiliated with, endorsed by, or sponsored by NHTSA or any government agency. It reads only public information.

# Actor input Schema

## `mode` (type: `string`):

Choose the output. Complaints returns one row per consumer complaint with the full defect narrative. Summary returns one aggregate row per make/model/year with totals and the top affected components.

## `make` (type: `string`):

Vehicle make, for example Honda, Toyota, Ford. Case-insensitive. Required.

## `model` (type: `string`):

Vehicle model, for example Accord, Camry, F-150. Case-insensitive. Required.

## `modelYear` (type: `integer`):

Single four-digit model year to query. Use this or the yearFrom / yearTo range below.

## `yearFrom` (type: `integer`):

Start of a model-year range (inclusive). Use together with Year To to scan several years in one run.

## `yearTo` (type: `integer`):

End of a model-year range (inclusive).

## `component` (type: `string`):

Optional. Keep only complaints whose affected component contains this text, for example AIR BAGS, ENGINE, BRAKES, ELECTRICAL SYSTEM. Case-insensitive.

## `crashOnly` (type: `boolean`):

Return only complaints that reported a crash.

## `fireOnly` (type: `boolean`):

Return only complaints that reported a fire.

## `safetyRatings` (type: `boolean`):

Opt-in paid add-on (paid Apify plans only). Fetches the government NCAP 5-star crash-test ratings for the queried make/model/year (overall, front, side, rollover, driver and passenger) and attaches them to the results. Charged only when real ratings are returned.

## `aiDefectAnalysis` (type: `boolean`):

Opt-in paid add-on (paid Apify plans only). Uses AI to read the complaint set and return the top recurring issues, an overall severity, whether a recurring defect is present and practical used-car buyer advice. Charged only when a usable analysis is produced.

## `maxResults` (type: `integer`):

Maximum number of result records to return across the run. Free Apify plans are capped at 10 per run.

## Actor input object example

```json
{
  "mode": "complaints",
  "make": "Honda",
  "model": "Accord",
  "modelYear": 2020,
  "crashOnly": false,
  "fireOnly": false,
  "safetyRatings": false,
  "aiDefectAnalysis": false,
  "maxResults": 10
}
```

# Actor output Schema

## `results` (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 = {
    "make": "Honda",
    "model": "Accord",
    "modelYear": 2020,
    "maxResults": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapers_lat/nhtsa-vehicle-complaints-scraper").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 = {
    "make": "Honda",
    "model": "Accord",
    "modelYear": 2020,
    "maxResults": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("scrapers_lat/nhtsa-vehicle-complaints-scraper").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 '{
  "make": "Honda",
  "model": "Accord",
  "modelYear": 2020,
  "maxResults": 10
}' |
apify call scrapers_lat/nhtsa-vehicle-complaints-scraper --silent --output-dataset

```

## MCP server setup

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

```

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/au2g5kCRya3NRTD0u/builds/3MVWr3VuvteXQzWWv/openapi.json
