# Vehicle Problems Feed — NHTSA Complaints, Recalls & Mileage (`signalloom/vehicle-problems-feed`) Actor

Known problems for any car make, model and year from official NHTSA data: complaints ranked by component, mileage at failure, recurring symptoms, crash/fire counts, recalls, investigations and service bulletins. VIN input and new-complaint alerts.

- **URL**: https://apify.com/signalloom/vehicle-problems-feed.md
- **Developed by:** [Signalloom](https://apify.com/signalloom) (community)
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 vehicle summaries

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## Vehicle Problems Feed: NHTSA complaints, recalls and mileage at failure

**What goes wrong with this car, and when?** Give a model year, make and model (or a VIN). You get one clean record per vehicle built from official US government data (NHTSA):

- **complaints ranked by component**, with each component's share
- **mileage at failure**: median, quartiles and a histogram, from NHTSA's own mileage field
- **recurring symptoms**: the short phrases owners repeat most, per component
- **crash, fire, injury and death counts** from the complaints
- **complaints by year filed**, to show the trend
- **recalls** with remedy, **defect investigations**, and **manufacturer communications** (technical service bulletins and similar notices) with titles
- a **problemScore** comparing this model year with the same model's nearby years

Monitor mode alerts you to **new complaints and recalls** since the last run. Optional detail records give individual complaints, with personal details removed.

> **No repair-cost estimates.** This tool reports what owners told NHTSA and what NHTSA and manufacturers published. **Complaints are owner-reported and not verified by NHTSA.** Counts are reports, not failure rates, and popular models naturally get more complaints.

### Use this when…

- **Used-car dealers and buyers** want to check a model's known issues before buying, stocking or pricing a car.
- **Extended-warranty and insurance analysts** compare model years and see at what mileage problems show up.
- **Repair shops and parts sellers** want content and marketing about common problems ("2019 Cherokee power transfer unit failures") based on real data.
- **Auto journalists and lemon-law researchers** need complaint counts, trends, recalls and investigations for a model, with source links.
- **Apps and websites** show a "common problems" panel for a car from a VIN or a year, make and model.

### Price

**Price: $0.01 per vehicle summary** and **$0.001 per individual complaint record** (complaint records are off by default). A run over the three example vehicles would cost $0.03.

### Input

| Field | What it does |
|---|---|
| `vehicles` | One per line: `2019 Jeep Cherokee`. Year ranges give one record per year: `2017-2019 Honda CR-V`. `CRV` = `CR-V`, `F150` = `F-150`. |
| `vins` | 17-character VINs, decoded with NHTSA's free vPIC decoder into year, make and model. |
| `components` | Optional filter, e.g. `POWER TRAIN`, `ENGINE`, `ELECTRICAL SYSTEM`, `SERVICE BRAKES`, `AIR BAGS`. Partial names work. It applies to complaints, recalls and service bulletins. |
| `maxComponents` | Components listed per vehicle (default 10). The rest are summed in `otherComponents`. |
| `compareYears`, `compareWindow` | problemScore against up to 3 model years before and after (default on). |
| `includeInvestigationsAndCommunications`, `maxCommunications` | Investigations and manufacturer communications (default on; the newest 15 are listed by title, and all are counted). |
| `complaintDetails`, `maxComplaintDetails` | Also output individual complaints, newest first (default off, 25 per vehicle). |
| `onlyNew`, `monitorId` | Monitor mode: output a vehicle only when NHTSA has new complaints or recalls since the last run with the same monitor name. The first run sets the baseline. |
| `maxVehicles` | Safety cap per run (default 30). |

With an empty input, the tool runs three example vehicles (2019 Jeep Cherokee, 2017 Honda CR-V, 2020 Ford Explorer) in about 30 seconds.

### Output

#### Vehicle summary (real record, run of 2026-11-12, shortened: 1 of 10 components, 1 of 11 recalls, 1 of 15 bulletins)

```json
{
  "recordType": "vehicle-summary",
  "vehicle": "2019 JEEP CHEROKEE",
  "modelYear": "2019",
  "make": "JEEP",
  "model": "CHEROKEE",
  "input": "2019 Jeep Cherokee",
  "headline": "POWER TRAIN: 839 of 1682 complaints (50%), often \"warning light\", \"power transfer unit\", \"service 4wd\", median 50,500 miles",
  "totalComplaints": 1682,
  "problemScore": {
    "score": 2.06,
    "label": "much higher than this model's other years",
    "thisYearComplaints": 1682,
    "averageComplaints": 815,
    "rankMostComplaints": "1 of 7",
    "complaintsByModelYear": { "2016": 1415, "2017": 1342, "2018": 692, "2019": 1682, "2020": 337, "2021": 183, "2022": 52 }
  },
  "safety": { "complaintsWithCrash": 40, "complaintsWithFire": 19, "injuries": 37, "deaths": 0, "complaintsWithInjuryOrDeath": 22 },
  "components": [
    {
      "component": "POWER TRAIN",
      "complaints": 839,
      "share": 0.499,
      "complaintsWithCrash": 8,
      "complaintsWithFire": 1,
      "injuries": 3,
      "deaths": 0,
      "mileageAtFailure": {
        "complaintsWithMileage": 316,
        "median": 50500,
        "p25": 12300,
        "p75": 89800,
        "histogram": { "0-10k": 74, "10k-25k": 29, "25k-50k": 52, "50k-75k": 55, "75k-100k": 44, "100k-125k": 33, "125k-150k": 23, "150k-200k": 6, "200k+": 0 }
      },
      "topPhrases": [
        { "phrase": "warning light", "complaints": 191 },
        { "phrase": "power transfer unit", "complaints": 138 },
        { "phrase": "service 4wd", "complaints": 87 },
        { "phrase": "recall repair", "complaints": 71 },
        { "phrase": "rear differential", "complaints": 58 },
        { "phrase": "loss of power", "complaints": 35 }
      ],
      "recalls": 4,
      "firstFiled": "2018-08-24",
      "lastFiled": "2026-11-09"
    }
  ],
  "mileageAtFailure": { "complaintsWithMileage": 758, "median": 21600, "p25": 4200, "p75": 60000 },
  "complaintsByYearFiled": { "2018": 103, "2019": 237, "2020": 163, "2021": 111, "2022": 94, "2023": 137, "2024": 126, "2025": 425, "2026": 286 },
  "recallCount": 11,
  "recalls": [
    {
      "campaignNumber": "26V290000",
      "reportDate": "2026-05-07",
      "component": "POWER TRAIN",
      "summary": "Chrysler (FCA US LLC) is recalling certain 2019-2023 Jeep Cherokee vehicles. The power transfer unit (PTU) may fail.",
      "consequence": "A failed PTU may result in a loss of drive power or vehicle rollaway, increasing the risk of a crash or injury.",
      "remedy": "Dealers will update the Drivetrain Control Drivetrain Control Module, PTU, and Electronic Park Brake software, and replace the PTU, as necessary, free of charge. …",
      "url": "https://www.nhtsa.gov/recalls?nhtsaId=26V290000"
    }
  ],
  "investigationCount": 0,
  "manufacturerCommunicationCount": 407,
  "latestManufacturerCommunications": [
    {
      "number": "03-001-26",
      "date": "2026-07-09",
      "components": ["POWER TRAIN"],
      "title": "Unable to Complete 01C Recall Drive Cycle C14A7-97 Active",
      "documentsUrl": "https://api.nhtsa.gov/safetyIssues/byNhtsaId?nhtsaId=11035038&filter=issueType&filterValue=manufacturerCommunications"
    }
  ],
  "mileageDataAsOf": "2026-11-12"
}
```

Each record also has `otherComponents`, `investigations`, `manufacturerCommunicationsByComponent`, `latestComplaintFiled`, `newSinceLastRun` (monitor mode), `sourceLinks`, `notes` and `checkedAt`.

The other two example vehicles in the same run:

| Vehicle | Complaints | Top component (share, median miles) | Top phrases | problemScore | Recalls / investigations / bulletins |
|---|---|---|---|---|---|
| 2017 HONDA CR-V | 1,782 | ENGINE (30%, 15,000) | oil level, oil change, engine oil | 1.76 (2 of 7 years) | 7 / 2 (both "Inadvertent Automatic Emergency Braking") / 291 |
| 2020 FORD EXPLORER | 1,252 | POWER TRAIN (40%, 43,000) | warning light, transmission needed, recall repair | 1.81 (2 of 7 years) | 33 / 3 / 365 |

#### Complaint detail (optional; real record from a run of 2026-11-12)

```json
{
  "recordType": "complaint",
  "vehicle": "2018 HONDA CR-V",
  "odiNumber": 11717035,
  "dateFiled": "2026-02-10",
  "dateOfIncident": "2026-02-08",
  "components": ["ENGINE AND ENGINE COOLING"],
  "crash": false,
  "fire": false,
  "injuries": 0,
  "deaths": 0,
  "mileageAtFailure": 70000,
  "summary": "The contact owns a 2018 Honda CR-V. The contact stated that while driving at 70 MPH, several unknown warning lights illuminated. The contact pulled into a gas station. The vehicle was towed to the dealer, where it was diagnosed and determined that the turbocharger had failed and needed to be replaced. The vehicle was not yet repaired. The manufacturer was not contacted. The failure mileage was approximately 70,000.",
  "source": "https://api.nhtsa.gov/complaints/complaintsByVehicle?make=HONDA&model=CR-V&modelYear=2018"
}
```

### How it works

- **Complaints and recalls** come live from NHTSA's public APIs on every run.
- **Mileage at failure** is NHTSA's own "vehicle mileage at failure" field. The live API doesn't include it, so the tool carries a compact table (complaint number to miles, 835,443 complaints) built from NHTSA's bulk complaint files. `mileageDataAsOf` gives its date. Complaints filed after that date, or filed without mileage, are left out of the mileage figures; for the 2019 Cherokee, 758 of 1,682 complaints have mileage.
- **Recurring phrases** come from fixed rules, not AI: 2–3 word phrases that many complaints for the component share, ignoring filler words and NHTSA's standard call-centre wording. Each phrase is counted once per complaint. No long complaint text appears in the summaries.
- **problemScore** is this model year's complaint count divided by the average of the same model's years within ±3 (only years NHTSA has data for). 2.0 means twice the average. Older years have had more time to collect complaints, and newer ones less.
- **Investigations and manufacturer communications** come from the NHTSA endpoint behind nhtsa.gov's own vehicle pages. NHTSA doesn't list it in its API documentation. If it fails, the record still has complaints and recalls, and `notes` says what is missing.

### Limitations

- **No repair costs**, labour times or prices.
- Complaints are **unverified owner reports**. A high count can reflect a popular model, media attention or a recall campaign that prompted filings.
- NHTSA files a complaint under the components the owner or NHTSA picked. "UNKNOWN OR OTHER" is common.
- One complaint can name several components, so shares add up to more than 100%.
- Phrases are word patterns, not diagnoses. "warning light" says owners saw one, not why.
- US vehicles only. Make and model names follow NHTSA's naming. Very new or rare models may have no data.
- Manufacturer communications are listed by title and number. The PDFs are behind each `documentsUrl` (an NHTSA API listing).

### Legitimacy and data use

- **Sources:** official NHTSA data only: api.nhtsa.gov (complaints, recalls, product lists, vehicle issues), vpic.nhtsa.dot.gov (VIN decoding and model lists), and static.nhtsa.gov bulk complaint files (mileage table, built offline). These are US government works, published as open data; no login, key or account.
- **Robots and terms:** api.nhtsa.gov and static.nhtsa.gov serve no robots.txt (both return an error page for it), and vpic.nhtsa.dot.gov returns 404. These are data APIs and download files meant for programs. The tool never visits www.nhtsa.gov pages, which block automated clients; it only links to them.
- **Politeness:** at least 350 ms between requests to api.nhtsa.gov and 500 ms to vPIC, two vehicles at a time, retries with backoff on errors. A typical vehicle needs about 15 requests (45 for the three example vehicles).
- **Personal data:** NHTSA redacts complaint narratives before publishing them. This tool never outputs the partial VIN NHTSA publishes with each complaint, or any location. The mileage table holds only complaint numbers and miles. Detail records also remove e-mails, phone numbers, VINs, links and obvious names ("my name is…", "Mr. …", sign-offs) from the text.
- **No actions:** read-only. It files nothing and contacts no one.

# Actor input Schema

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

One vehicle per line: model year, make and model, e.g. "2019 Jeep Cherokee". Year ranges work too: "2017-2019 Honda CR-V" gives one summary per year. Spaces and dashes in model names don't matter ("CRV" = "CR-V"). Leave empty (and no VINs) to run the three example vehicles.

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

Optional 17-character VINs. Each is decoded with NHTSA's free vPIC decoder into model year, make and model, then summarized like the vehicles above.

## `components` (type: `array`):

Optional. Limit complaints, recalls and service bulletins to these NHTSA component groups, e.g. "POWER TRAIN", "ENGINE", "ELECTRICAL SYSTEM", "SERVICE BRAKES", "AIR BAGS", "STEERING". Partial names work ("brakes"). Leave empty for all.

## `maxComponents` (type: `integer`):

How many components to list per vehicle, ranked by number of complaints. The rest are summed in otherComponents.

## `compareYears` (type: `boolean`):

Compare this year's complaint count with the same model's nearby model years. Adds a few small requests per vehicle.

## `compareWindow` (type: `integer`):

problemScore compares with up to this many model years before and after (3 = up to 7 years in total). Years NHTSA has no complaints for are skipped.

## `includeInvestigationsAndCommunications` (type: `boolean`):

Add NHTSA defect investigations and manufacturer communications (technical service bulletins and similar notices) for each vehicle.

## `maxCommunications` (type: `integer`):

How many of the newest manufacturer communications to list with their titles. All of them are always counted.

## `complaintDetails` (type: `boolean`):

Add one extra record per complaint (newest first; only the selected components if you set a filter) with dates, components, mileage and the complaint text. E-mails, phone numbers, VINs and obvious names are removed from the text. Charged per complaint record.

## `maxComplaintDetails` (type: `integer`):

Maximum individual complaint records per vehicle when "Also output individual complaints" is on.

## `onlyNew` (type: `boolean`):

Output a vehicle only when NHTSA has new complaints or recalls for it since the last run with the same monitor name. The first run outputs every vehicle and remembers the current state. Use with a schedule.

## `monitorId` (type: `string`):

Keeps separate memories for different watch lists, e.g. "fleet" or "client-a". Letters, digits, - and \_.

## `maxVehicles` (type: `integer`):

Safety cap on the number of make/model/year combinations per run (after expanding year ranges and VINs).

## Actor input object example

```json
{
  "vehicles": [
    "2019 Jeep Cherokee",
    "2017 Honda CR-V",
    "2020 Ford Explorer"
  ],
  "maxComponents": 10,
  "compareYears": true,
  "compareWindow": 3,
  "includeInvestigationsAndCommunications": true,
  "maxCommunications": 15,
  "complaintDetails": false,
  "maxComplaintDetails": 25,
  "onlyNew": false,
  "monitorId": "default",
  "maxVehicles": 30
}
```

# Actor output Schema

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

No description

## `runSummary` (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 = {
    "vehicles": [
        "2019 Jeep Cherokee",
        "2017 Honda CR-V",
        "2020 Ford Explorer"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("signalloom/vehicle-problems-feed").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 = { "vehicles": [
        "2019 Jeep Cherokee",
        "2017 Honda CR-V",
        "2020 Ford Explorer",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("signalloom/vehicle-problems-feed").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 '{
  "vehicles": [
    "2019 Jeep Cherokee",
    "2017 Honda CR-V",
    "2020 Ford Explorer"
  ]
}' |
apify call signalloom/vehicle-problems-feed --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,signalloom/vehicle-problems-feed"
        }
    }
}
```

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/090STYwZmrWU8UvqF/builds/eNYqlHlPgCy4cXJrz/openapi.json
