# Vehicle risk record (`theusedcarindex/vehicle-risk-record`) Actor

Returns NHTSA complaints, recalls, investigations and manufacturer communications for a make, model and model year, plus complaints per 100k sold where available. Call it to check a model year.

- **URL**: https://apify.com/theusedcarindex/vehicle-risk-record.md
- **Developed by:** [The Used Car Index](https://apify.com/theusedcarindex) (community)
- **Categories:** Developer tools, Business, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $20.00 / 1,000 vehicle risk records

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 risk record

Get the NHTSA record for any make, model and model year from 2000 through 2027 as one JSON item: complaints with crash, fire, injury and death counts, recalls, investigations, manufacturer communications and, where a verified sales source exists, complaints per 100k sold. Complaints from NHTSA's API and its bulk file are merged and deduplicated by ODI number, so records the API alone misses are included. Built for vehicle research sites, dealer sourcing tools, insurance and fleet analysts, and AI agents that need recorded facts about a model year in one call.

### Input examples

One vehicle:

```json
{
  "make": "Toyota",
  "model": "RAV4",
  "year": 2018
}
```

Several vehicles in one run (1 to 100):

```json
{
  "vehicles": [
    { "make": "Toyota", "model": "RAV4", "year": 2018 },
    { "make": "Honda", "model": "CR-V", "year": 2018 }
  ]
}
```

### Sample output

Real output, fetched 2026-10-16 from the public Used Car Index API (the demo endpoint runs the same lookup as /v1/vehicle_risk) and shaped by this Actor's own code, so the block below is exactly one dataset item. It is the record for the first input, from the data build of 2026-10-07 (data.built_at). At a glance: 346 complaints (33 with a crash, 32 with a fire, 14 with an injury, 0 deaths), 3 recalls, 2 investigations (0 open), 186 manufacturer communications, and 81.0 complaints per 100k sold on 427,168 units sold in 2018 (source: goodcarbadcar.net).

```json
{
  "vehicle": {
    "make": "TOYOTA",
    "model": "RAV4",
    "year": 2018,
    "family_key": "RAV4",
    "matched_models": [{ "model": "RAV4", "complaints": 331 }, { "model": "RAV4 HYBRID", "complaints": 15 }],
    "other_names": [],
    "resolved_via": "vehicle_models"
  },
  "complaints": {
    "total": 346,
    "with_crash": 33,
    "with_fire": 32,
    "with_injury": 14,
    "injuries": 19,
    "deaths": 0,
    "by_source": { "both": 346, "bulk_only": 0, "api_only": 0 },
    "coverage_complete": true,
    "top_systems": [
      { "system": "ELECTRICAL SYSTEM", "count": 130, "share": 0.37572254335260113 },
      { "system": "UNKNOWN OR OTHER", "count": 74, "share": 0.2138728323699422 },
      { "system": "ENGINE", "count": 32, "share": 0.09248554913294797 },
      { "system": "SERVICE BRAKES", "count": 30, "share": 0.08670520231213873 },
      { "system": "POWER TRAIN", "count": 28, "share": 0.08092485549132948 },
      { "system": "EXTERIOR LIGHTING", "count": 23, "share": 0.06647398843930635 },
      { "system": "VEHICLE SPEED CONTROL", "count": 21, "share": 0.06069364161849711 },
      { "system": "VISIBILITY/WIPER", "count": 19, "share": 0.05491329479768786 },
      { "system": "AIR BAGS", "count": 17, "share": 0.049132947976878616 },
      { "system": "STRUCTURE", "count": 15, "share": 0.04335260115606936 }
    ],
    "top_subsystems": [
      { "system": "STRUCTURE", "subsystem": "BODY", "count": 11 },
      { "system": "FORWARD COLLISION AVOIDANCE", "subsystem": "WARNINGS", "count": 4 },
      { "system": "ELECTRICAL SYSTEM", "subsystem": "12V/24V/48V BATTERY", "count": 3 },
      { "system": "FORWARD COLLISION AVOIDANCE", "subsystem": "ADAPTIVE CRUISE CONTROL", "count": 3 },
      { "system": "VISIBILITY", "subsystem": "SUN/MOON ROOF ASSEMBLY", "count": 3 },
      { "system": "FORWARD COLLISION AVOIDANCE", "subsystem": "AUTOMATIC EMERGENCY BRAKING", "count": 2 },
      { "system": "LANE DEPARTURE", "subsystem": "BLIND SPOT DETECTION", "count": 2 },
      { "system": "BACK OVER PREVENTION", "subsystem": "SENSING SYSTEM", "count": 1 },
      { "system": "ELECTRICAL SYSTEM", "subsystem": "IGNITION", "count": 1 },
      { "system": "ENGINE AND ENGINE COOLING", "subsystem": "EXHAUST SYSTEM", "count": 1 }
    ]
  },
  "recalls": {
    "total": 3,
    "do_not_drive": 0,
    "park_outside": 0,
    "potential_units_max": 1853568,
    "by_system": [{ "system": "EQUIPMENT", "count": 2 }, { "system": "ELECTRICAL SYSTEM", "count": 1 }],
    "latest": [
      {
        "campaign_number": "23V734000",
        "received_date": "2023-11-01",
        "systems": ["ELECTRICAL SYSTEM"],
        "defect": "Toyota Motor Engineering & Manufacturing (Toyota) is recalling certain 2013-2018 RAV4 vehicles.  Certain replacement 12-volt batteries may not fit properly in the battery tray, allowing the battery to move and contact the hold-down bracket, possibly causing a short circuit.",
        "consequence": "A battery short circuit increases the risk of a fire.",
        "remedy": "Dealers will replace the battery clamp sub-assembly, battery tray, and positive terminal cover, free of charge.  Owner letters were mailed December 27, 2024, to 2013-2014 RAV4 owners.  Additional owner notification letters will be mailed in phases, phase 2 will begin on May 14, 2025, and phase 3 in late July 2025.  Owners may contact Toyota's customer service at 1-800-331-4331.  Toyota's numbers f",
        "do_not_drive": false,
        "park_outside": false,
        "truncated": true,
        "url": "https://www.nhtsa.gov/recalls?nhtsaId=23V734000"
      },
      {
        "campaign_number": "19V503000",
        "received_date": "2019-06-28",
        "systems": ["EQUIPMENT"],
        "defect": "Southeast Toyota Distributors, LLC (SET) is recalling certain 2017-2019 Toyota Camry, Corolla, Rav4, Sienna, and Yaris iA vehicles equipped with factory-installed floor mats.  The load carrying capacity modification label may be incorrect.  As such, these vehicles fail to comply with the requirements of Federal Motor Vehicle Safety Standard (FMVSS) number 110, \"Tire Selection and Rims.\"",
        "consequence": "An incorrect label may lead to unintentionally overloading the vehicle, increasing the risk of a crash.",
        "remedy": "SET will notify owners and provide a corrected label for placement over the inaccurate label, free of charge.  The recall began August 23, 2019.  Owners may contact Toyota customer service at 1-888-270-9371.  SET's number for this recall is SET19A.",
        "do_not_drive": false,
        "park_outside": false,
        "truncated": false,
        "url": "https://www.nhtsa.gov/recalls?nhtsaId=19V503000"
      },
      {
        "campaign_number": "17V831000",
        "received_date": "2017-12-20",
        "systems": ["EQUIPMENT"],
        "defect": "Toyota Motor Engineering & Manufacturing (Toyota) is recalling certain 2017-2018 Toyota 4Runner and Tundra, 2018 Toyota Highlander, RAV4 and Lexus GX460 and 2017 Toyota Sienna and Tacoma vehicles.  These vehicles may have incorrect load carrying capacity modification labels.  As such, these vehicles fail to comply with the requirements of Federal Motor Vehicle Safety Standard (FMVSS) number 110, \"",
        "consequence": "An incorrect load information label can result in the operator overloading the vehicle and increasing the risk of a crash.",
        "remedy": "Toyota will notify owners and provide them with corrected labels, free of charge.  The recall began on January 23, 2018.  Owners may contact Toyota customer service at 1-800-331-4331.  Toyota's numbers for this recall are H0Z for Toyota vehicles, and HLF for Lexus vehicles.",
        "do_not_drive": false,
        "park_outside": false,
        "truncated": true,
        "url": "https://www.nhtsa.gov/recalls?nhtsaId=17V831000"
      }
    ]
  },
  "investigations": {
    "total": 2,
    "open": 0,
    "items": [
      {
        "action_number": "DP22005",
        "opened_date": "2023-01-27",
        "closed_date": "2023-08-07",
        "campaign_numbers": ["22V063000"],
        "subject": "Pedestrian alert sounds",
        "summary": "NHTSA received a petition on or about July 18, 2022, requesting that Federal Motor Vehicle Safety Standard (FMVSS) 141 be applied to all electric and hybrid vehicles operating in the United States. The petition can be reviewed at NHTSA.gov under ODI Number 11486072. FMVSS 141 establishes performance requirements for pedestrian alert sounds for motor vehicles. The standard applies to hybrid and ele",
        "systems": ["ELECTRICAL SYSTEM"],
        "url": null
      },
      {
        "action_number": "PE21005",
        "opened_date": "2021-02-25",
        "closed_date": "2024-08-12",
        "campaign_numbers": ["23V734"],
        "subject": "Battery Hold Down Bracket Thermal Events",
        "summary": "The Office of Defects Investigation (ODI) opened a Preliminary Evaluation (PE) to understand the contributing factors and frequency of vehicle fires originating from the battery region of the engine compartment in Model Year (MY) 2013-2018 Toyota RAV4 vehicles on 25 February 2021. At the time of opening, ODI attributed eleven allegations and additional EWR events to this PE. PE21005 focused on rep",
        "systems": ["ELECTRICAL SYSTEM"],
        "url": null
      }
    ]
  },
  "manufacturer_communications": {
    "total": 186,
    "by_system": [
      { "system": "EQUIPMENT", "subsystem": "", "source_field": "nhtsa_component", "count": 75 },
      { "system": "ELECTRICAL SYSTEM", "subsystem": "", "source_field": "nhtsa_component", "count": 49 },
      { "system": "STRUCTURE", "subsystem": "", "source_field": "nhtsa_component", "count": 28 },
      { "system": "ENGINE", "subsystem": "", "source_field": "nhtsa_component", "count": 10 },
      { "system": "ENGINE AND ENGINE COOLING", "subsystem": "", "source_field": "nhtsa_component", "count": 8 },
      { "system": "EQUIPMENT ADAPTIVE/MOBILITY", "subsystem": "", "source_field": "nhtsa_component", "count": 6 },
      { "system": "LANE DEPARTURE", "subsystem": "", "source_field": "nhtsa_component", "count": 6 },
      { "system": "UNKNOWN OR OTHER", "subsystem": "", "source_field": "nhtsa_component", "count": 6 },
      { "system": "VISIBILITY", "subsystem": "", "source_field": "nhtsa_component", "count": 5 },
      { "system": "AIR BAGS", "subsystem": "", "source_field": "nhtsa_component", "count": 4 },
      { "system": "TIRES", "subsystem": "", "source_field": "nhtsa_component", "count": 4 },
      { "system": "BACK OVER PREVENTION", "subsystem": "", "source_field": "nhtsa_component", "count": 3 },
      { "system": "SEATS", "subsystem": "", "source_field": "nhtsa_component", "count": 3 },
      { "system": "SERVICE BRAKES", "subsystem": "", "source_field": "nhtsa_component", "count": 3 },
      { "system": "SERVICE BRAKES, HYDRAULIC", "subsystem": "", "source_field": "nhtsa_component", "count": 3 },
      { "system": "POWER TRAIN", "subsystem": "", "source_field": "nhtsa_component", "count": 2 },
      { "system": "STEERING", "subsystem": "", "source_field": "nhtsa_component", "count": 2 },
      { "system": "VEHICLE SPEED CONTROL", "subsystem": "", "source_field": "nhtsa_component", "count": 2 },
      { "system": "WHEELS", "subsystem": "", "source_field": "nhtsa_component", "count": 2 },
      { "system": "COMMUNICATION", "subsystem": "", "source_field": "nhtsa_component", "count": 1 },
      { "system": "EXTERIOR LIGHTING", "subsystem": "", "source_field": "nhtsa_component", "count": 1 },
      { "system": "FORWARD COLLISION AVOIDANCE", "subsystem": "", "source_field": "nhtsa_component", "count": 1 },
      { "system": "SUSPENSION", "subsystem": "", "source_field": "nhtsa_component", "count": 1 }
    ],
    "by_subsystem": [
      { "system": "EQUIPMENT", "subsystem": "OTHER", "source_field": "nhtsa_component", "count": 30 },
      { "system": "STRUCTURE", "subsystem": "BODY", "source_field": "nhtsa_component", "count": 24 },
      { "system": "EQUIPMENT", "subsystem": "ELECTRICAL", "source_field": "nhtsa_component", "count": 9 },
      { "system": "ELECTRICAL SYSTEM", "subsystem": "12V/24V/48V BATTERY", "source_field": "nhtsa_component", "count": 7 },
      { "system": "ENGINE AND ENGINE COOLING", "subsystem": "COOLING SYSTEM", "source_field": "nhtsa_component", "count": 5 },
      { "system": "ELECTRICAL SYSTEM", "subsystem": "SOFTWARE", "source_field": "nhtsa_component", "count": 4 },
      { "system": "EQUIPMENT", "subsystem": "APPLIANCE", "source_field": "nhtsa_component", "count": 4 },
      { "system": "ENGINE AND ENGINE COOLING", "subsystem": "ENGINE", "source_field": "nhtsa_component", "count": 2 },
      { "system": "LANE DEPARTURE", "subsystem": "BLIND SPOT DETECTION", "source_field": "nhtsa_component", "count": 2 },
      { "system": "COMMUNICATION", "subsystem": "MANUFACTURER TELEMATICS", "source_field": "nhtsa_component", "count": 1 },
      { "system": "ELECTRICAL SYSTEM", "subsystem": "PROPULSION SYSTEM", "source_field": "nhtsa_component", "count": 1 },
      { "system": "ELECTRICAL SYSTEM", "subsystem": "WIRING", "source_field": "nhtsa_component", "count": 1 },
      { "system": "EXTERIOR LIGHTING", "subsystem": "HEADLIGHTS", "source_field": "nhtsa_component", "count": 1 },
      { "system": "FORWARD COLLISION AVOIDANCE", "subsystem": "SENSING SYSTEM", "source_field": "nhtsa_component", "count": 1 },
      { "system": "SERVICE BRAKES, HYDRAULIC", "subsystem": "FOUNDATION COMPONENTS", "source_field": "nhtsa_component", "count": 1 },
      { "system": "SUSPENSION", "subsystem": "REAR", "source_field": "nhtsa_component", "count": 1 },
      { "system": "VEHICLE SPEED CONTROL", "subsystem": "CRUISE CONTROL", "source_field": "nhtsa_component", "count": 1 },
      { "system": "VISIBILITY", "subsystem": "DEFROSTER/DEFOGGER/HVAC SYSTEM", "source_field": "nhtsa_component", "count": 1 }
    ],
    "recent": [
      {
        "nhtsa_id": "11029892",
        "document_id": ["T-SB-0119-15 Rev2"],
        "communication_date": "2026-02-13",
        "communication_type": ["Service Bulletin/Repair Instructions"],
        "campaign_id": ["T-SB-0119-15 Rev2"],
        "systems": ["ENGINE"],
        "mfr_system": null,
        "mfr_subsystem": null,
        "summary": "OBSOLETE NOTICE February 13, 2026: This bulletin is now obsolete. Please see T-SB-0009-26."
      },
      {
        "nhtsa_id": "11029893",
        "document_id": ["T-SB-0009-26"],
        "communication_date": "2026-02-13",
        "communication_type": ["Service Bulletin/Repair Instructions"],
        "campaign_id": ["T-SB-0009-26"],
        "systems": ["ENGINE"],
        "mfr_system": null,
        "mfr_subsystem": null,
        "summary": "This bulletin includes basic procedures for performing a rescue charge on Ni-MH high voltage (HV) batteries. This bulletin should be used in conjunction with the applicable model and model year Repair Manual while performing a rescue charge. The GRX-5100 should be used wherever the Repair Manual ref"
      },
      {
        "nhtsa_id": "11028712",
        "document_id": ["T-SB-0055-24 Rev2"],
        "communication_date": "2026-01-07",
        "communication_type": ["Service Bulletin/Repair Instructions"],
        "campaign_id": ["T-SB-0055-24 Rev2"],
        "systems": ["UNKNOWN OR OTHER"],
        "mfr_system": null,
        "mfr_subsystem": null,
        "summary": "Some 2005 â   2026 Toyota vehicles that have undergone water intrusion may exhibit a condition in which a musty odor is present. Follow the procedures in this bulletin to remediate the odor and address this condition. The purpose of this Service Bulletin is to provide general guidelines and procedur"
      },
      {
        "nhtsa_id": "11020666",
        "document_id": ["21TG01"],
        "communication_date": "2025-06-18",
        "communication_type": ["Service Campaign"],
        "campaign_id": ["21TG01"],
        "systems": ["ELECTRICAL SYSTEM"],
        "mfr_system": null,
        "mfr_subsystem": null,
        "summary": "21TG01 Exprired - Replaced with Campaign 23TA13 During a recent investigation of reported battery fires in 2013-2018 RAV4 vehicles with gasoline engines (excluding hybrid models), Toyota discovered that many non-Toyota retailers and others who sell or install replacement batteries were recommending "
      },
      {
        "nhtsa_id": "11020667",
        "document_id": ["21TG01"],
        "communication_date": "2025-06-18",
        "communication_type": ["Service Bulletin/Repair Instructions"],
        "campaign_id": ["21TG01"],
        "systems": ["ELECTRICAL SYSTEM"],
        "mfr_system": null,
        "mfr_subsystem": null,
        "summary": "Campaign Expired - replaced with campaign  23TA13TECHNICAL INSTRUCTIONS FOR CONSUMER ADVISORY 21TG01 12-VOLT BATTERY SIZE AND INSTALLATION INSPECTION CERTAIN 2013 â   2018 RAV4"
      },
      {
        "nhtsa_id": "11020657",
        "document_id": ["T-SB-0058-23 Rev1"],
        "communication_date": "2025-06-13",
        "communication_type": ["Service Campaign"],
        "campaign_id": ["T-SB-0058-23 Rev1"],
        "systems": ["ELECTRICAL SYSTEM"],
        "mfr_system": null,
        "mfr_subsystem": null,
        "summary": "The air conditioning dye injection tool kit has been developed to aid in identifying the location of air conditioning refrigerant leaks. The procedures outlined in this Service Bulletin aid in locating, inspecting, and repairing refrigerant leaks."
      },
      {
        "nhtsa_id": "11012742",
        "document_id": ["T-SB-0035-24 Rev2"],
        "communication_date": "2024-12-06",
        "communication_type": ["Service Bulletin/Repair Instructions"],
        "campaign_id": ["T-SB-0035-24 Rev2"],
        "systems": ["STRUCTURE"],
        "mfr_system": null,
        "mfr_subsystem": null,
        "summary": "Acid rain results from rainwater or other airborne moisture that become acidic due to industrial chemical impurities in the atmosphere. If these acidic compounds settle on an exposed vehicle, especially the horizontal areas such as the hood, roof, and decklid, significant damage to the painted surfa"
      },
      {
        "nhtsa_id": "11012743",
        "document_id": ["T-SB-0038-24 Rev2"],
        "communication_date": "2024-12-06",
        "communication_type": ["Service Bulletin/Repair Instructions"],
        "campaign_id": ["T-SB-0038-24 Rev2"],
        "systems": ["STRUCTURE"],
        "mfr_system": null,
        "mfr_subsystem": null,
        "summary": "To prevent brake rotor rust from forming during transportation and storage, wheel film will be used instead of a cardboard type of anti-rust cover. The purpose of the wheel film is to shield the disc brake rotor from weather elements and initial rust before the vehicle is delivered to the customer. "
      },
      {
        "nhtsa_id": "11012744",
        "document_id": ["T-SB-0039-24 Rev2"],
        "communication_date": "2024-12-06",
        "communication_type": ["Service Bulletin/Repair Instructions"],
        "campaign_id": ["T-SB-0039-24 Rev2"],
        "systems": ["STRUCTURE"],
        "mfr_system": null,
        "mfr_subsystem": null,
        "summary": "The condition known as acid rain is caused by airborne chemicals or particles in the atmosphere, which mix with rainwater, nighttime dew, or high humidity to form acidic compounds. If these contaminants settle and remain on a painted vehicle surface, especially the horizonal areas of the hood, roof,"
      },
      {
        "nhtsa_id": "11012735",
        "document_id": ["T-SB-0061-23 Rev2"],
        "communication_date": "2024-12-05",
        "communication_type": ["Service Bulletin/Repair Instructions"],
        "campaign_id": ["T-SB-0061-23 Rev2"],
        "systems": ["STRUCTURE"],
        "mfr_system": null,
        "mfr_subsystem": null,
        "summary": "Toyota vehicles are currently protected with RapgardTM protective film designed to protect the  horizontal painted surfaces. This material protects from acid rain, environmental fallout, and rail contamination. Follow the Removal Procedure in this bulletin to remove the RapgardTM protective  film wi"
      }
    ]
  },
  "rate": {
    "complaints_per_100k_sold": 80.99857667240992,
    "units_sold": 427168,
    "sales_year": 2018,
    "basis": "calendar_year_us_sales_proxy_for_model_year",
    "source": "goodcarbadcar.net",
    "source_url": "https://www.goodcarbadcar.net/toyota-rav4-sales-figures/",
    "null_reason": null
  },
  "model_tags": {
    "model": "typesafe/jev-1.13-20260917",
    "schema_version": "tag-v1",
    "tagged_complaints": 346,
    "complaints_total": 346,
    "tagged_share": 1,
    "failure_modes": [
      {
        "label": "electrical_electronic",
        "count": 106,
        "share": 0.3063583815028902,
        "mean_confidence": 0.7714150943396229,
        "high_confidence_count": 55,
        "low_confidence_count": 17
      },
      {
        "label": "loss_of_control",
        "count": 59,
        "share": 0.17052023121387283,
        "mean_confidence": 0.8657627118644066,
        "high_confidence_count": 43,
        "low_confidence_count": 5
      },
      {
        "label": "mechanical_failure",
        "count": 46,
        "share": 0.1329479768786127,
        "mean_confidence": 0.7204347826086959,
        "high_confidence_count": 16,
        "low_confidence_count": 5
      },
      {
        "label": "fire_or_overheating",
        "count": 35,
        "share": 0.10115606936416185,
        "mean_confidence": 0.8614285714285715,
        "high_confidence_count": 23,
        "low_confidence_count": 0
      },
      {
        "label": "visibility_or_lighting",
        "count": 32,
        "share": 0.09248554913294797,
        "mean_confidence": 0.9443749999999999,
        "high_confidence_count": 28,
        "low_confidence_count": 0
      },
      {
        "label": "unclear",
        "count": 27,
        "share": 0.07803468208092486,
        "mean_confidence": 0.8307407407407406,
        "high_confidence_count": 18,
        "low_confidence_count": 4
      },
      {
        "label": "structural_or_corrosion",
        "count": 15,
        "share": 0.04335260115606936,
        "mean_confidence": 0.6340000000000001,
        "high_confidence_count": 3,
        "low_confidence_count": 2
      },
      {
        "label": "restraint_or_airbag",
        "count": 13,
        "share": 0.03757225433526012,
        "mean_confidence": 0.8607692307692308,
        "high_confidence_count": 9,
        "low_confidence_count": 1
      },
      {
        "label": "noise_or_comfort",
        "count": 8,
        "share": 0.023121387283236993,
        "mean_confidence": 0.63,
        "high_confidence_count": 2,
        "low_confidence_count": 3
      },
      {
        "label": "fluid_or_fuel_leak",
        "count": 5,
        "share": 0.014450867052023121,
        "mean_confidence": 0.602,
        "high_confidence_count": 1,
        "low_confidence_count": 2
      }
    ],
    "severities": [
      {
        "label": "moderate",
        "count": 165,
        "share": 0.476878612716763,
        "mean_confidence": 0.8358787878787874,
        "high_confidence_count": 113,
        "low_confidence_count": 13
      },
      {
        "label": "low",
        "count": 107,
        "share": 0.3092485549132948,
        "mean_confidence": 0.7178504672897195,
        "high_confidence_count": 54,
        "low_confidence_count": 20
      },
      {
        "label": "high",
        "count": 47,
        "share": 0.13583815028901733,
        "mean_confidence": 0.9025531914893618,
        "high_confidence_count": 37,
        "low_confidence_count": 2
      },
      {
        "label": "critical",
        "count": 17,
        "share": 0.049132947976878616,
        "mean_confidence": 0.7588235294117648,
        "high_confidence_count": 10,
        "low_confidence_count": 4
      },
      {
        "label": "none",
        "count": 10,
        "share": 0.028901734104046242,
        "mean_confidence": 0.8869999999999999,
        "high_confidence_count": 8,
        "low_confidence_count": 0
      }
    ],
    "confidence_note": "Confidence is the model's own probability for the label it chose (0 to 1), not accuracy.",
    "note": "Model-generated labels on tagged complaints only. Model years 2013 and newer are tagged in full; 2012 in part (see tagged_share); earlier model years have no tags. NHTSA's own flags remain separate in the complaints block."
  },
  "model_tags_null_reason": null,
  "data": {
    "built_at": "2026-10-07T21:35:09.694572+00:00",
    "sources": [
      { "name": "NHTSA complaints API", "url": "https://api.nhtsa.gov/complaints/complaintsByVehicle" },
      { "name": "NHTSA bulk complaints", "url": "https://static.nhtsa.gov/odi/ffdd/cmpl/FLAT_CMPL.zip" },
      { "name": "NHTSA recalls (2010 and later)", "url": "https://static.nhtsa.gov/odi/ffdd/rcl/FLAT_RCL_POST_2010.zip" },
      { "name": "NHTSA recalls (before 2010)", "url": "https://static.nhtsa.gov/odi/ffdd/rcl/FLAT_RCL_PRE_2010.zip" },
      { "name": "NHTSA investigations", "url": "https://static.nhtsa.gov/odi/ffdd/inv/FLAT_INV.zip" },
      {
        "name": "NHTSA manufacturer communications (yearly archives, newest shown)",
        "url": "https://static.nhtsa.gov/odi/ffdd/tsbs/TSBS_RECEIVED_2025-2026.zip"
      },
      { "name": "goodcarbadcar.net", "url": "https://www.goodcarbadcar.net/toyota-rav4-sales-figures/" }
    ],
    "notes": [
      "Complaints from the API and bulk file are merged and deduplicated by ODI number; the API alone misses records.",
      "System and subsystem counts are numbers of distinct complaints, recalls or communications that name them. One record can name several systems, so shares across systems can add to more than 100 percent; a single share never exceeds 100 percent.",
      "Recalls are counted once per campaign, investigations once per action and manufacturer communications once per NHTSA id, even when NHTSA lists several model names for the same record.",
      "A sales denominator is a calendar-year proxy, not the population of vehicles still in use. Rates are copied from verified pipeline output."
    ]
  }
}
```

### Price

| Event | USD per event | When it is charged |
| --- | ---: | --- |
| `vehicle-risk-record` | $0.02 | Charged once per requested vehicle whose API risk record is successfully pushed to the dataset. Unknown vehicles, input failures, API errors and failed dataset writes are not charged. |

- The first input above costs $0.02. The second costs 2 x $0.02 = $0.04. 100 vehicles cost $2.00.
- Repeating a vehicle in a run is a separate item and a separate charge.
- Apify adds its own Actor start event to every run ($0.00005 on this Actor's Pricing tab on 2026-10-16).
- Cap a run with maxTotalChargeUsd (example below). The run stops at the cap and keeps what it saved.

### How to run

In Apify Console, open the Actor, paste an input example and press Start. To run it from code or from an agent:

#### Call from the Apify API

Use your Apify token. The Used Car Index API key is held by the Actor as a secret and is never part of your request, your dataset or the logs. This example caps the run at $1.

```sh
curl -X POST 'https://api.apify.com/v2/acts/theusedcarindex~vehicle-risk-record/run-sync-get-dataset-items?maxTotalChargeUsd=1' \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H 'Content-Type: application/json' \
  --data '{"make":"Toyota","model":"RAV4","year":2018}'
```

#### Call from an MCP client

In an MCP client that supports remote Streamable HTTP, add this server URL with your Apify token as a bearer header:

```text
URL:    https://mcp.apify.com/?actors=theusedcarindex/vehicle-risk-record
Header: Authorization: Bearer <your Apify token>
```

Initialize the connection and call tools/list. The client then shows this Actor as a tool; call it with the first input example as its arguments. Tool names and wrapper fields come from tools/list, so read them there instead of assuming a name. If your client offers a generic Actor-run tool instead, select theusedcarindex/vehicle-risk-record and pass the same input. The run status and dataset come back with the tool result. This route needs access to the Actor from your Apify account.

### Related Actors and the direct API

| Actor | Use it for |
| --- | --- |
| [VIN to risk record](https://apify.com/theusedcarindex/vin-to-risk-record) | VINs in; the NHTSA vPIC decode, the same record as this Actor and, if you ask for it, each VIN's stored listing history out |
| [Chicagoland listing changes](https://apify.com/theusedcarindex/chicagoland-listing-changes) | Stored listing events (new, price drop, relisted, delisted) for the Chicagoland dealers the collector watches |

The same data is available without Apify from The Used Car Index at https://theusedcarindex.com: GET https://api.theusedcarindex.com/v1/vehicle_risk and /v1/listing_changes, the same records as web pages at https://theusedcarindex.com/vehicles, and an MCP endpoint at https://api.theusedcarindex.com/mcp that serves the API tools directly and does not run or charge these Actors. The MCP endpoint has a free tier that needs no key. As of 2026-10-16 it allows 20 requests per minute per IP and 2,000 per day shared, returns full vehicle risk records and returns up to 10 listing events per call with no paging. Plans with higher limits and cursor paging are at https://theusedcarindex.com/#pricing. The API and the MCP endpoint also serve recall_changes: new and updated NHTSA recalls, investigations and complaint-count changes recorded from a daily comparison of NHTSA's bulk files. Questions or a data issue: use the Issues tab on this Actor's page.

### What it returns

Input is a make, a model and a year, or a vehicles array of 1 to 100 such objects; the two forms cannot be mixed. Labels are trimmed and must have 1 to 64 characters, and years run from 2000 through 2027. Model spellings and aliases resolve to the stored vehicle.

One dataset item per requested vehicle:

| Item | When | Charged |
| --- | --- | --- |
| The complete vehicle risk record, with no wrapper | The vehicle was found | Yes |
| `found` false with `input` and `suggestions` (up to 10 close names) | No vehicle matches the make, model and year | No |
| `input` and `error`, with a stable `code` and the HTTP `status` when there is one | Any other lookup failure | No |

One failed lookup does not stop the others. A not-found item, real output for Toyota Corolla Cross Hybrid 2018 on 2026-10-16:

```json
{
  "found": false,
  "input": { "make": "Toyota", "model": "Corolla Cross Hybrid", "year": 2018 },
  "suggestions": [{ "make": "TOYOTA", "model": "COROLLA", "year": 2018, "family_key": "COROLLA" }]
}
```

The record has these blocks:

| Block | What it holds |
| --- | --- |
| `vehicle` | The make, model and year the lookup resolved to, its `family_key`, the NHTSA labels that carry complaints (`matched_models`), other labels (`other_names`) and how it resolved (`resolved_via`) |
| `complaints` | Distinct complaints, with counts of those that involve a crash, a fire or an injury and totals for injuries and deaths; `by_source` (both, bulk_only, api_only); `coverage_complete`; top systems with shares and top subsystems |
| `recalls` | Campaign count, do-not-drive and park-outside counts, the largest potential unit count, counts by system and the latest campaigns with defect, consequence and remedy text and NHTSA links |
| `investigations` | Action count, how many are open, and the actions with subject, summary and campaign numbers |
| `manufacturer_communications` | Count of communications (one per NHTSA id), counts by system and subsystem and the most recent with date, type and summary |
| `rate` | Complaints per 100k sold with units sold, sales year, basis and the named source; or null with a `null_reason` |
| `model_tags` | Model-generated labels (failure mode and severity) with counts, shares and confidence, kept apart from NHTSA's fields; or null with `model_tags_null_reason` |
| `data` | The build time (`built_at`), the sources with their URLs and plain-language notes |

Input is validated before any lookup or charge. Vehicles are looked up one at a time and charged as each record is saved. The run stops at your spending limit and keeps what it saved. A request that fails on the network, with HTTP 429 or with a 5xx status is tried up to three times in total; if the API still returns an error for a vehicle, that vehicle gets an error item and the run continues.

### Sources and facts boundary

Complaints, recalls, investigations and manufacturer communications come from NHTSA's published files and API; the record's `data.sources` lists each one with its URL. NHTSA complaints combine the complaints API and the bulk file, merged and deduplicated by ODI number. On the 2026-10-07 build, 231 of the 350 complaints for the 2018 Mazda CX-5 came from the bulk file only (`by_source.bulk_only`). Rates divide complaints by calendar-year US sales from a named public source, a proxy for the model year, and appear only where that source is verified for the vehicle; otherwise `rate` is null with a reason. Model tags are model-generated labels (the model is named in `model_tags.model`), are marked as such and never replace NHTSA's own fields.

Facts only. The stored listing events behind the sister Actors carry VIN, price, mileage, status, dates and a link back. Never photos or dealer-written text. A listing that is no longer observed is reported as delisted, and delisted is never labeled sold. NHTSA official record text in risk records is distinct from dealer-written text. Dataset items never contain added agent instructions.

### Known gaps

- A record describes a make, model and model year as NHTSA files them. It is not the history of an individual car.
- A record reflects the NHTSA data build in `data.built_at` (2026-10-07 on 2026-10-16); filings after the build appear after the next build. A zero count is confirmed only when `complaints.coverage_complete` is true.
- Rates use calendar-year sales as a proxy for the model year and exist only where a verified sales source matches the vehicle. Counts are not a reliability rating, prediction or repair recommendation.
- Model tags exist only for model years 2012 and newer (2012 in part), cover tagged complaints only, and their confidence is the model's own probability, not accuracy.
- Some manufacturer communication and investigation summaries show stray characters where the source text has punctuation such as a dash or an apostrophe.
- Dataset writes and charges are separate operations. If a run stops after a write, an item can be saved without its charge, and running the same input again repeats items and charges.
- A run through an MCP client has not been tested end to end.

Owner setup, done once by the publisher and not by callers: set the secret environment variable UCI_API_KEY in the Apify Console; it is never accepted in input, logged or returned. UCI_API_BASE optionally selects another API origin (HTTPS, default https://api.theusedcarindex.com). Configure the custom event from .actor/pay_per_event.json and turn automatic dataset-item pricing off; the Actor stops before any lookup if the pricing does not match.

# Actor input Schema

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

Make label, trimmed to 1 through 64 characters.

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

Model label, trimmed to 1 through 64 characters.

## `year` (type: `integer`):

Model year supported by the API: 2000 through 2027.

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

Alternative to all three single-vehicle fields. Supply 1 through 100 objects with make, model and year. Remove the single-vehicle fields when using this list.

## Actor input object example

```json
{
  "make": "Toyota",
  "model": "RAV4",
  "year": 2018,
  "vehicles": [
    {
      "make": "Toyota",
      "model": "RAV4",
      "year": 2018
    }
  ]
}
```

# Actor output Schema

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

Default dataset items, one per requested vehicle: a stored NHTSA risk record, a not-found item with name suggestions, or a coded error item. The dataset schema describes every field.

# 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": "Toyota",
    "model": "RAV4",
    "year": 2018
};

// Run the Actor and wait for it to finish
const run = await client.actor("theusedcarindex/vehicle-risk-record").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": "Toyota",
    "model": "RAV4",
    "year": 2018,
}

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

```

## MCP server setup

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

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/cdte7dnA3Bn8Lg5Gc/builds/kkdZ6ObYKqqibeAyC/openapi.json
