NHTSA VIN Decoder & Vehicle Recalls avatar

NHTSA VIN Decoder & Vehicle Recalls

Pricing

from $0.03 / 1,000 nhtsa vehicle records

Go to Apify Store
NHTSA VIN Decoder & Vehicle Recalls

NHTSA VIN Decoder & Vehicle Recalls

US NHTSA vehicle data (public open data, no key): decode a VIN into 69 structured fields - make, model, year, body, engine, plant, safety equipment - and pull the safety recalls for a vehicle or by campaign number, with the remedy and the recall date.

Pricing

from $0.03 / 1,000 nhtsa vehicle records

Rating

0.0

(0)

Developer

Wenhao Yang

Wenhao Yang

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 hours ago

Last modified

Categories

Share

NHTSA Vehicles - VIN Decode & Safety Recalls

Decode any VIN into its full factory specification, and pull NHTSA safety recalls for a vehicle or a campaign - from two free US government services, in one actor.

Low cost

From $0.00005 per record, down to $0.00003 at Gold Pay-per-event: you are charged per record delivered, and nothing for the query.

What you get

CorpusOne record isDepth
vinone decoded VIN69 flattened vehicle fields, plus the complete 140-variable decode
recallsone recall campaign for one vehiclecampaign number, component, summary, consequence, remedy, units affected, date

The two are different grains on purpose. A VIN decode is one row per VIN. A recall is one row per campaign - a vehicle has many, and a campaign that covers several models comes back as several rows sharing one campaign number.

VIN decode

NHTSA's decoder answers with 140 Variable/Value pairs for a single VIN. That is more than a flat row can hold usefully, so 69 are flattened onto the record - identity, plant, dimensions and weight, engine and electrification, transmission, seating and the safety-equipment block - and the complete 140-pair answer is kept verbatim in allVariablesJson. Nothing is lost to the curation.

A real decode, 1HGCM82633A004352:

vin 1HGCM82633A004352
vehicleDescriptor 1HGCM826*3A
make HONDA
manufacturerName AMERICAN HONDA MOTOR CO., INC.
model Accord
modelYear 2003
trim EX-V6
vehicleType PASSENGER CAR
bodyClass Coupe
doors 2
plantCity MARYSVILLE
plantState OHIO
plantCountry UNITED STATES (USA)
engineCylinders 6
displacementL 2.998832712
engineModel J30A4
engineConfiguration V-Shaped
engineBrakeHpFrom 240
fuelTypePrimary Gasoline
valveTrainDesign Single Overhead Cam (SOHC)
transmissionStyle Automatic
transmissionSpeeds 5
gvwrFrom Class 1C: 4,001 - 5,000 lb (1,814 - 2,268 kg)
seatBeltType Manual
frontAirBagLocations 1st Row (Driver and Passenger)
curtainAirBagLocations 1st and 2nd Rows
decodeErrorCode 0 # 0 = VIN decoded clean

Values arrive as strings even when numeric (2.998832712, 240, 5), and a variable NHTSA holds no data for is '' - which is not the same as "the vehicle lacks it", and is not claimed to be.

Safety recalls

  • By vehicle - give make, model and modelYear (all three; the source rejects any subset). honda / accord / 2003 returns 24 recalls.
  • By campaign - give a campaign number. 19V182 and 19V182000 both resolve to campaign 19V182000, which covers 93 vehicle rows (Acura CL, MDX, TL and more), each carrying the same campaign number and its own model.
campaignNumber 19V182000
manufacturer Honda (American Honda Motor Co.)
reportReceivedDate 2019-03-06
component AIR BAGS:FRONTAL:DRIVER SIDE:INFLATOR MODULE
summary Honda (American Honda Motor Co.) is recalling specific 2003 Acura 3.2CL, ...
consequence ...in the event of a crash necessitating deployment of the driver's frontal air bag...
remedy ...dealers will replace the driver's frontal air bag inflator...
potentialUnitsAffected 1101534
recallModelYear 2003
recallMake ACURA

Decode -> recalls in one run. Set includeRecalls=true with corpus=vin and each VIN's decoded make/model/year is used to fetch its recalls, emitted next to the decode record. One caveat, stated on every record as recallScope: "make-model-year": NHTSA publishes recalls by make/model/year, not by VIN. Some campaigns cover a model-year range, so a VIN's recall set is its make/model/year's recalls - a superset of that exact VIN's campaigns. It is honest about what it is, not silently presented as VIN-exact.

Modes

  • rows (default) - one record per VIN, or per recall campaign.
  • aggregate - corpus=recalls only: one count row per group, by component, manufacturer, modelYear or recallMake. Counted over the recall set NHTSA returned for the query (a make/model/year's recall set is small - the largest measured was 24 rows).

Example inputs

Decode several VINs in one run - corpus=vin; each VIN is one request, and maxVins caps the batch.

{ "corpus": "vin", "vins": ["1HGCM82633A004352", "WBA3A5C55DF357074"] }

One VIN plus its recalls - includeRecalls=true emits the recalls next to the decode record.

{ "corpus": "vin", "vins": ["1HGCM82633A004352"], "includeRecalls": true }

One recall campaign - campaignNumber takes precedence over make/model/modelYear.

{ "corpus": "recalls", "campaignNumber": "19V182" }

A 2003 Accord's recall mix - mode=aggregate counts the fetched recall set by component.

{
"corpus": "recalls",
"make": "honda",
"model": "accord",
"modelYear": "2003",
"mode": "aggregate",
"groupBy": "component"
}

Example output

One decoded VIN - corpus=vin, vins=["1HGCM82633A004352"]; the 140-variable decode is carried verbatim in allVariablesJson:

{
"platform": "nhtsa-vehicles",
"source": "nhtsa-vin",
"corpus": "vin",
"recordKind": "vin-decode",
"mode": "rows",
"truncated": false,
"groupKey": "",
"groupCount": "",
"groupBy": "",
"error": "",
"vin": "1HGCM82633A004352",
"recallScope": "",
"allVariablesJson": "{\"Suggested VIN\": \"\", \"Error Code\": \"0\", \"Possible Values\": \"\", \"Additional Error Text\": \"\", \"Error Text\": \"0 - VIN decoded clean. Check Digit (9th position) is correct\", \"Vehicle Descriptor\": \"1HGCM826*3A\", \"Destination Market\": \"\", \"Make\": \"HONDA\", \"Manufacturer Name\": \"AMERICAN HONDA MOTOR CO., INC.\", \"Model\": \"Accord\", \"Model Year\": \"2003\", \"Plant City\": \"MARYSVILLE\", \"Series\": \"\", \"Trim\": \"EX-V6\", \"Vehicle Type\": \"PASSENGER CAR\", \"Plant Country\": \"UNITED STATES (USA)\", \"Plant Company Name\": \"\", \"Plant State\": \"OHIO\", \"Trim2\": \"\", \"Series2\": \"\", \"Note\": \"\", \"Base Price ($)\": \"\", \"Non-Land Use\": \"\", \"Entertainment System\": \"\", \"Steering Location\": \"\", \"Engine Number of Cylinders\": \"6\", \"Displacement (CC)\": \"2998.832712\", \"Displacement (CI)\": \"183\", \"Displacement (L)\": \"2.998832712\", \"Engine Stroke Cycles\": \"\", \"Engine Model\": \"J30A4\", \"Engine Power (kW)\": \"\", \"Fuel Type - Primary\": \"Gasoline\", \"Valve Train Design\": \"Single Overhead Cam (SOHC)\", \"Engine Configuration\": \"V-Shaped\", \"Fuel Type - Secondary\": \"\", \"Fuel Delivery/Fuel Injection Type\": \"\", \"Engine Brake (hp) From\": \"240\", \"Cooling Type\": \"\", \"Engine Brake (hp) To\": \"\", \"Electrification Level\": \"\", \"Other Engine Info\": \"\", \"Turbo\": \"\", \"Top Speed (mph)\": \"\", \"Engine Manufacturer\": \"\", \"Pretensioner\": \"\", \"Seat Belt Type\": \"Manual\", \"Other Restraint System Info\": \"Seat Belt (Rr center position)\", \"Antilock Braking System (ABS)\": \"\", \"Electronic Stability Control (ESC)\": \"\", \"Traction Control\": \"\", \"Tire Pressure Monitoring System (TPMS) Type\": \"\", \"Active Safety System Note\": \"\", \"Auto-Reverse System for Windows and Sunroofs\": \"\", \"Automatic Pedestrian Alerting Sound (for Hybrid and EV only)\": \"\", \"Event Data Recorder (EDR)\": \"\", \"Keyless Ignition\": \"\", \"SAE Automation Level From\": \"\", \"SAE Automation Level To\": \"\", \"Other Battery Info\": \"\", \"Battery Type\": \"\", \"Bed Type\": \"Not Applicable\", \"Cab Type\": \"Not Applicable\", \"Body Class\": \"Coupe\", \"Doors\": \"2\", \"Drive Type\": \"\", \"Gross Vehicle Weight Rating From\": \"Class 1C: 4,001 - 5,000 lb (1,814 - 2,268 kg)\", \"Number of Seats\": \"\", \"Transmission Style\": \"Automatic\", \"Windows\": \"\", \"Axles\": \"\", \"Brake System Type\": \"\", \"Number of Battery Cells per Module\": \"\", \"Bed Length (inches)\": \"\", \"Brake System Description\": \"\", \"Curb Weight (pounds)\": \"\", \"Curtain Air Bag Locations\": \"1st and 2nd Rows\", \"Seat Cushion Air Bag Locations\": \"\", \"Battery Current (Amps) From\": \"\", \"Battery Voltage (Volts) From\": \"\", \"Battery Energy (kWh) From\": \"\", \"Wheelbase Type\": \"\", \"Number of Seat Rows\": \"\", \"Transmission Speeds\": \"5\", \"Front Air Bag Locations\": \"1st Row (Driver and Passenger)\", \"Knee Air Bag Locations\": \"\", \"EV Drive Unit\": \"\", \"Adaptive Cruise Control (ACC)\": \"\", \"Crash Imminent Braking (CIB)\": \"\", \"Blind Spot Warning (BSW)\": \"\", \"Forward Collision Warning (FCW)\": \"\", \"Lane Departure Warning (LDW)\": \"\", \"Lane Keeping Assistance (LKA)\": \"\", \"Backup Camera\": \"\", \"Parking Assist\": \"\", \"Side Air Bag Locations\": \"1st Row (Driver and Passenger)\", \"Wheelbase (inches) From\": \"\", \"Wheelbase (inches) To\": \"\", \"Number of Wheels\": \"\", \"Trailer Type Connection\": \"Not Applicable\", \"Trailer Body Type\": \"Not Applicable\", \"Trailer Length (feet)\": \"\", \"Wheel Size Front (inches)\": \"\", \"Wheel Size Rear (inches)\": \"\", \"Charger Level\": \"\", \"Charger Power (kW)\": \"\", \"Battery Current (Amps) To\": \"\", \"Battery Voltage (Volts) To\": \"\", \"Battery Energy (kWh) To\": \"\", \"Number of Battery Modules per Pack\": \"\", \"Number of Battery Packs per Vehicle\": \"\", \"Axle Configuration\": \"\", \"Bus Length (feet)\": \"\", \"Bus Floor Configuration Type\": \"Not Applicable\", \"Bus Type\": \"Not Applicable\", \"Other Bus Info\": \"\", \"Custom Motorcycle Type\": \"Not Applicable\", \"Motorcycle Suspension Type\": \"Not Applicable\", \"Motorcycle Chassis Type\": \"Not Applicable\", \"Other Motorcycle Info\": \"\", \"Other Trailer Info\": \"\", \"Track Width (inches)\": \"\", \"Dynamic Brake Support (DBS)\": \"\", \"Pedestrian Automatic Emergency Braking (PAEB)\": \"\", \"Automatic Crash Notification (ACN)/Advanced Automatic Crash Notification (AACN)\": \"\", \"Daytime Running Light (DRL)\": \"\", \"Headlamp Light Source\": \"\", \"Semiautomatic Headlamp Beam Switching\": \"\", \"Adaptive Driving Beam (ADB)\": \"\", \"Rear Cross Traffic Alert\": \"\", \"Gross Combination Weight Rating From\": \"\", \"Gross Combination Weight Rating To\": \"\", \"Gross Vehicle Weight Rating To\": \"Class 1: 6,000 lb or less (2,722 kg or less)\", \"Rear Automatic Emergency Braking\": \"\", \"Blind Spot Intervention (BSI)\": \"\", \"Lane Centering Assistance\": \"\", \"Fuel-Tank Type\": \"\", \"Fuel-Tank Material\": \"\", \"Combined Braking System (CBS)\": \"\", \"Wheelie Mitigation\": \"\"}",
"suggestedVin": "",
"decodeErrorCode": "0",
"decodeErrorText": "0 - VIN decoded clean. Check Digit (9th position) is correct",
"vehicleDescriptor": "1HGCM826*3A",
"make": "HONDA",
"manufacturerName": "AMERICAN HONDA MOTOR CO., INC.",
"model": "Accord",
"modelYear": "2003",
"series": "",
"trim": "EX-V6",
"vehicleType": "PASSENGER CAR",
"bodyClass": "Coupe",
"destinationMarket": "",
"plantCity": "MARYSVILLE",
"plantState": "OHIO",
"plantCountry": "UNITED STATES (USA)",
"plantCompanyName": "",
"doors": "2",
"driveType": "",
"axles": "",
"wheelbaseFrom": "",
"wheelbaseTo": "",
"numberOfWheels": "",
"curbWeightPounds": "",
"gvwrFrom": "Class 1C: 4,001 - 5,000 lb (1,814 - 2,268 kg)",
"gvwrTo": "Class 1: 6,000 lb or less (2,722 kg or less)",
"gcwrFrom": "",
"engineCylinders": "6",
"displacementCc": "2998.832712",
"displacementL": "2.998832712",
"engineModel": "J30A4",
"engineConfiguration": "V-Shaped",
"engineStrokeCycles": "",
"enginePowerKw": "",
"engineBrakeHpFrom": "240",
"engineManufacturer": "",
"fuelTypePrimary": "Gasoline",
"fuelTypeSecondary": "",
"fuelDeliveryType": "",
"valveTrainDesign": "Single Overhead Cam (SOHC)",
"turbo": "",
"electrificationLevel": "",
"batteryType": "",
"batteryEnergyKwhFrom": "",
"chargerLevel": "",
"transmissionStyle": "Automatic",
"transmissionSpeeds": "5",
"numberOfSeats": "",
"numberOfSeatRows": "",
"seatBeltType": "Manual",
"otherRestraintInfo": "Seat Belt (Rr center position)",
"abs": "",
"esc": "",
"tractionControl": "",
"tpmsType": "",
"frontAirBagLocations": "1st Row (Driver and Passenger)",
"sideAirBagLocations": "1st Row (Driver and Passenger)",
"curtainAirBagLocations": "1st and 2nd Rows",
"kneeAirBagLocations": "",
"forwardCollisionWarning": "",
"laneDepartureWarning": "",
"laneKeepingAssistance": "",
"blindSpotWarning": "",
"adaptiveCruiseControl": "",
"backupCamera": "",
"parkingAssist": "",
"daytimeRunningLight": "",
"keylessIgnition": "",
"eventDataRecorder": "",
"campaignNumber": "",
"manufacturer": "",
"reportReceivedDate": "",
"component": "",
"summary": "",
"consequence": "",
"remedy": "",
"notes": "",
"nhtsaActionNumber": "",
"potentialUnitsAffected": "",
"recallModelYear": "",
"recallMake": "",
"recallModel": "",
"parkIt": "",
"parkOutside": "",
"overTheAirUpdate": ""
}

corpus=recalls, mode=aggregate, groupBy=component for honda / accord / 2003 - one count row per component:

EXTERIOR LIGHTING:HEADLIGHTS 6
AIR BAGS:FRONTAL:PASSENGER SIDE:INFLATOR MODULE 4
EXTERIOR LIGHTING 4
AIR BAGS:FRONTAL:DRIVER SIDE:INFLATOR MODULE 3
AIR BAGS 2

What gets recalled on a 2003 Accord - corpus=recalls, make=honda, model=accord, modelYear=2003, mode=aggregate, groupBy=component:

EXTERIOR LIGHTING:HEADLIGHTS 6
AIR BAGS:FRONTAL:PASSENGER SIDE:INFLATOR MODULE 4
EXTERIOR LIGHTING 4
AIR BAGS:FRONTAL:DRIVER SIDE:INFLATOR MODULE 3
AIR BAGS 2
VEHICLE SPEED CONTROL:ACCELERATOR PEDAL 1
STEERING:HYDRAULIC POWER ASSIST:HOSE, PIPING, AND CONNECTIONS 1
ELECTRICAL SYSTEM:IGNITION 1
VISIBILITY:WINDSHIELD WIPER/WASHER:MOTOR 1
POWER TRAIN:AUTOMATIC TRANSMISSION 1

Notes on the source

  • ReportReceivedDate is DD/MM/YYYY, not MM/DD/YYYY. Measured across two endpoints: 35 values with the first component greater than 12, and none with the second greater than 12 - 27/06/2019, 30/03/2017. Read as US dates it would mis-date every recall, and 06/03/2019 is unreadable without the rule. It is normalised to ISO YYYY-MM-DD on output.
  • Error Code is a comma-joined set, not one number - a clean VIN is 0, a malformed one is 6,7,11,400, spelled out in decodeErrorText. An invalid VIN is not an error from the API: NHTSA answers HTTP 200 with an error code, so a bad VIN is a decoded record that says so.
  • A 400 from the recalls feed means "not in NHTSA's vehicle table", not "this car has no recalls". Those are different statements, so a bad combination is reported back naming the make/model/year rather than served as silence. A vehicle with genuinely no recalls returns 200 with Count: 0.
  • Manufacturer casing is inconsistent in the source - the same company appears as both Honda (American Honda Motor Co.) and HONDA (AMERICAN HONDA MOTOR CO.) across records. Group by it and both appear; that is the source, not a normalisation this actor applies.
  • Recall counts are verified complete. The feed has no pagination, and every response is checked so that Count equals the rows returned - if NHTSA ever starts truncating, the run says so instead of serving a short recall history as a whole one.

Source

NHTSA (US National Highway Traffic Safety Administration), two public services: the vPIC VIN decoder at vpic.nhtsa.dot.gov and the recalls API at api.nhtsa.gov. Public US government data, no login, no key.

Both are lookup services, not bulk files: one VIN decode is one request, and there is no endpoint that enumerates vehicles. So the request count is bounded by design - a hard ceiling of 500 VINs per run, an 8-wide worker pool, pacing jitter, and retry with backoff on 429/5xx. Measured from the build box on 2026-09-13: no throttling was observed at 50 concurrent decodes (13 req/s), and none in 100 sequential calls - the ceiling reached was our own concurrency, not NHTSA's. That is not read as "no limit exists": the bounds stay in place because an actor where request count equals user input length is one that can be aimed at the API with a 100,000-VIN list.

A VIN that cannot be fetched after retries is not dropped and not emitted blank - it comes back as a record with decodeErrorCode: FETCH_FAILED and the reason in error, so a short answer is visible as short. If failures look systemic (half of a batch), the run fails instead, because that is the source being down and not a bad VIN.

Output

Every record carries the same key set - all 98 keys - whichever corpus or mode produced it, with '' for absent values, so a dataset column never shifts row to row. The envelope (platform, source, corpus, recordKind, mode, truncated, error, vin, recallScope, groupKey, groupCount, groupBy) is identical across corpora; groupKey/groupCount/groupBy are '' outside aggregate mode.

  • FMCSA Carrier Safety - the federal motor-carrier register: inspections, violations, operating authority and out-of-service orders for the carriers these vehicles run under.