NHTSA Recall and Complaint Monitor avatar

NHTSA Recall and Complaint Monitor

Pricing

Pay per usage

Go to Apify Store
NHTSA Recall and Complaint Monitor

NHTSA Recall and Complaint Monitor

Look up NHTSA vehicle recalls, owner complaints, and VIN decoded recall reports over native JSON APIs.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

George Kioko

George Kioko

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

2 days ago

Last modified

Categories

Share

Pulls vehicle safety recalls and owner complaints straight from NHTSA, plus a VIN decoder that chains into the recalls for that vehicle. No API key, no scraping, no browser. Just native JSON calls to the public NHTSA endpoints.

Runs as an Apify Standby API (instant HTTP responses) or as a one-off batch run.

API key mode pricing source

flowchart LR
A["Request<br/>VIN or make / model / year"] --> B{mode}
B -->|vin| C["Decode VIN<br/>vPIC"]
C --> D["Recalls for<br/>decoded vehicle"]
B -->|recalls| E["NHTSA recalls API"]
B -->|complaints| F["NHTSA complaints API"]
D --> G["Normalize rows<br/>dates to YYYY-MM-DD"]
E --> G
F --> G
G --> H[("Dataset<br/>clean JSON rows")]

What it does

  • Recalls by make, model, year. Normalized rows with campaign number, component, summary, consequence, remedy.
  • Owner complaints by make, model, year. Crash, fire, injury, and death flags included.
  • VIN decode. Give it a 17 character VIN, get back make, model, year, body class, engine, and the recalls that apply.

Data comes from api.nhtsa.gov (recalls + complaints) and vpic.nhtsa.dot.gov (VIN decode). Both are free government endpoints.

Endpoints (Standby mode)

MethodPathQueryReturns
GET/recallsmake, model, year, limitnormalized recall rows
GET/complaintsmake, model, year, limitnormalized complaint rows
GET/vinvindecoded vehicle plus its recalls
GET/ or /healthnoneservice info

Pricing (pay per event)

EventPriceWhen
actor-start$0.25once per paid Standby request or batch run
recall-record$0.02per recall row returned
complaint-record$0.01per complaint row returned
vin-report$0.05per VIN decode plus recall report

Health probe values like test, ping, or example return mock data and never charge.

Example curl

# recalls for a 2021 Honda Accord
curl "https://<your-standby-url>/recalls?make=honda&model=accord&year=2021&limit=10"
# owner complaints for the same vehicle
curl "https://<your-standby-url>/complaints?make=honda&model=accord&year=2021&limit=10"
# decode a VIN and get its recalls
curl "https://<your-standby-url>/vin?vin=5J6RW2H87KL000000"

Batch mode (regular actor run) takes the same fields as input:

{ "mode": "recalls", "make": "honda", "model": "accord", "year": 2021, "limit": 25 }

Output schema

Recall row:

{
"campaign_number": "21V900000",
"manufacturer": "Honda (American Honda Motor Co.)",
"make": "HONDA",
"model": "ACCORD",
"model_year": "2021",
"component": "SEAT BELTS:REAR/OTHER:RETRACTOR",
"summary": "Honda is recalling certain 2021 Accord ...",
"consequence": "An unsecured child restraint increases the risk of injury.",
"remedy": "Dealers will replace the seat belt assembly, free of charge.",
"report_date": "2021-11-18",
"fetched_at": "2026-06-10T00:00:00.000Z"
}

Complaint row:

{
"odi_number": 11741975,
"make": "HONDA",
"model": "ACCORD",
"model_year": "2021",
"components": "ENGINE",
"summary": "Premature head gasket failure ...",
"crash": false,
"fire": false,
"injuries": 0,
"deaths": 0,
"incident_date": "2026-05-28",
"filed_date": "2026-06-04",
"fetched_at": "2026-06-10T00:00:00.000Z"
}

VIN report:

{
"vin": "5J6RW2H87KL000000",
"make": "HONDA",
"model": "CR-V",
"model_year": "2019",
"body_class": "Sport Utility Vehicle (SUV)/Multi-Purpose Vehicle (MPV)",
"engine": "In-Line 4 cyl 1.5L",
"recalls": [ ...recall rows... ],
"fetched_at": "2026-06-10T00:00:00.000Z"
}

Flow

flowchart TD
A[Request] --> B{Path}
B -->|/recalls| C[recallsByVehicle API]
B -->|/complaints| D[complaintsByVehicle API]
B -->|/vin| E[decodevin API]
E --> F[extract make/model/year]
F --> C
C --> G[normalize rows]
D --> G
G --> H[push to dataset + charge per record]
H --> I[JSON response]

Notes

  • Make and model matching is whatever NHTSA accepts. Lowercase works fine.
  • Recall dates from NHTSA come as DD/MM/YYYY and get flipped to YYYY-MM-DD. Complaint dates come as MM/DD/YYYY and also get normalized.
  • A VIN that NHTSA cannot resolve to make/model/year returns the decoded vehicle with an empty recalls array.