NHTSA VIN Decoder & Vehicle Recalls avatar

NHTSA VIN Decoder & Vehicle Recalls

Pricing

from $0.06 / 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.06 / 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

6 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.0001 per record. 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 27 rows).

Examples

Decode a batch of VINs - corpus=vin, vins=["1HGCM82633A004352","WBA3A5C55DF357074"].

A VIN and everything recalled on it - corpus=vin, vins=["1HGCM82633A004352"], includeRecalls=true.

Takata inflator campaigns - corpus=recalls, campaignNumber=19V182.

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 1,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.