# Best & Worst Car Years: NHTSA Recalls & Complaints (`jyaussie/vehicle-year-risk-comparator`) Actor

NHTSA recalls, owner complaints and NCAP crash ratings for every model year of a car. Car recalls compared year by year with a 0-100 risk score, best-to-worst ranking and best pick / avoid verdict. Official US government data, no personal data.

- **URL**: https://apify.com/jyaussie/vehicle-year-risk-comparator.md
- **Developed by:** [Car Helper Tools](https://apify.com/jyaussie) (community)
- **Categories:** Business, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$10.00 / 1,000 model year analyzeds

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 Model-Year Risk Comparator: best & worst years to buy (NHTSA recalls, complaints, crash ratings)

**Which year of this car should I buy, and which should I avoid?** Enter a make, model and a range of years. The Actor pulls official US government (NHTSA) recall, owner-complaint and NCAP crash-test data for every year, scores each year **0–100 (higher = more risk)**, ranks them best to worst, and labels each one **best pick / average / avoid**.

There are many plain recall-lookup tools. This one **compares the years of one model against each other**, which is the question used-car buyers actually ask.

### What you get for each model year

- Recall count, "park it / park outside" recalls, NHTSA campaign numbers and recalled components
- Owner complaint count, complaints about serious systems (airbags, brakes, steering, fuel, powertrain, engine, electrical, speed control)
- Crash and fire complaints, reported injuries and deaths
- Top 5 complaint components
- Average NCAP overall star rating (1–5)
- `riskScore` (0–100, relative to the other years), `rankBestToWorst`, `verdict`

### Who it's for

Used-car buyers, dealers, car-content and review sites ("best/worst years" articles), insurers, fleet buyers, and mechanics.

### Input

| Field | Example | Notes |
|---|---|---|
| `make` | `Toyota` | |
| `model` | `Camry` | Use the NHTSA name, e.g. `Silverado 1500`, not `Silverado`. If no data is found, the Actor suggests names it knows. |
| `modelYears` | `2016-2019` or `2014,2016` | 1–30 years |
| `vehicles` | `[{"make":"Honda","model":"Civic","modelYears":"2016-2018"}]` | Compare several models in one run (overrides the fields above) |
| `includeSafetyRatings` | `true` | Adds NCAP stars |
| `maxVehicles` | `10` | Safety cap |

```json
{
  "vehicles": [
    {"make": "Toyota", "model": "Camry", "modelYears": "2016-2019"},
    {"make": "Hyundai", "model": "Sonata", "modelYears": "2011-2013"}
  ]
}
```

### Example output

Toyota Camry 2016–2019, real data from an October 2026 run:

| Year | Recalls | Complaints | NCAP | Risk score | Verdict |
|---|---|---|---|---|---|
| 2016 | 2 | 189 | 5.0 | 23.9 | best pick |
| 2017 | 3 | 148 | 5.0 | 32.3 | average |
| 2018 | 8 | 748 | 5.0 | 87.0 | avoid |
| 2019 | 6 | 398 | 5.0 | 46.3 | average |

One dataset row (shortened):

```json
{
  "make": "TOYOTA", "model": "CAMRY", "modelYear": 2018,
  "recallCount": 8, "parkItOrOutsideRecalls": 0,
  "recallCampaigns": ["..."], "recallComponents": ["..."],
  "complaintCount": 748, "seriousSystemComplaints": 0,
  "crashComplaints": 0, "fireComplaints": 0, "injuries": 0, "deaths": 0,
  "topComplaintComponents": [{"component": "...", "count": 0}],
  "ncapOverallRating": 5.0, "dataFound": true,
  "riskScore": 87.0, "rankBestToWorst": 4, "verdict": "avoid"
}
```

If NHTSA has no data for a vehicle, you get one row with an `error` and `suggestedModels`, and **you are not charged** for it.

### Use with AI agents (MCP)

Connect this Actor to Claude, ChatGPT, Cursor or any MCP client with Apify's hosted MCP server:

`https://mcp.apify.com/?tools=jyaussie/vehicle-year-risk-comparator`

Example prompts:

- "Which Ford Focus model years have the most NHTSA recalls and complaints?"
- "Best and worst years to buy a Honda CR-V?"
- "Compare NHTSA car recalls for Toyota Camry 2012-2018."

### Pricing

Pay per event: **$0.01 per model year analysed**. A 7-year comparison costs $0.07. No platform usage fees.

### Data source & disclaimer

- Data comes only from the free, official **NHTSA public APIs** (api.nhtsa.gov, US government open data). This Actor is not affiliated with or endorsed by NHTSA.
- **US-market vehicles only.** Models sold in Europe or elsewhere under the same name may differ, and non-US recalls are not included.
- Complaints are unverified owner reports, and counts depend on how many cars were sold. The risk score only compares years **of the same model with each other**. It is not an absolute safety rating, not a vehicle history report, and not professional advice. Always check a specific car by VIN at nhtsa.gov/recalls and have it inspected.
- Output holds only aggregate counts: no complaint narratives, VINs or other personal data.

# Actor input Schema

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

Vehicle make, e.g. Ford

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

Vehicle model, e.g. Focus

## `modelYears` (type: `string`):

Range or list, e.g. 2012-2018 or 2014,2016 (max 30) (Alias accepted: years.)

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

List of {make, model, modelYears}. Overrides the fields above.

## `includeSafetyRatings` (type: `boolean`):

Adds the government crash-test rating to each year

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

Maximum vehicles per run (limits cost).

## Actor input object example

```json
{
  "make": "Ford",
  "model": "Focus",
  "modelYears": "2012-2018",
  "includeSafetyRatings": true,
  "maxVehicles": 10
}
```

# Actor output Schema

## `overview` (type: `string`):

All analysed model years (default dataset), overview view.

# 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": "Ford",
    "model": "Focus",
    "modelYears": "2012-2018"
};

// Run the Actor and wait for it to finish
const run = await client.actor("jyaussie/vehicle-year-risk-comparator").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": "Ford",
    "model": "Focus",
    "modelYears": "2012-2018",
}

# Run the Actor and wait for it to finish
run = client.actor("jyaussie/vehicle-year-risk-comparator").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": "Ford",
  "model": "Focus",
  "modelYears": "2012-2018"
}' |
apify call jyaussie/vehicle-year-risk-comparator --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jyaussie/vehicle-year-risk-comparator"
        }
    }
}
```

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/oJ2kNFcH1dgiaRetO/builds/mivB5gWbYoGXeVyrH/openapi.json
