VIN Decoder API avatar

VIN Decoder API

Pricing

from $0.50 / 1,000 vin decodeds

Go to Apify Store
VIN Decoder API

VIN Decoder API

Decode VINs against the free NHTSA databases. Structured output (identification, engine, body, safety, ADAS, EV, manufacturing), optional active recalls and NCAP safety ratings, VIN structural breakdown with check-digit validation. Pay-per-event tiered pricing.

Pricing

from $0.50 / 1,000 vin decodeds

Rating

0.0

(0)

Developer

Arnas

Arnas

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Decode VINs at scale, structured into clean categories, with optional active recalls and NCAP safety ratings attached. Powered by the free NHTSA databases — no API key, no monthly fee. Pay only for what you ask for: tiered pay-per-event pricing.

What does VIN Decoder API do?

This actor takes one or many 17-character VINs and returns:

  • A structured decode — 70-130+ NHTSA fields bucketed into identification, body, engine, drivetrain, electric, safety, advancedDriverAssistance, manufacturing, diagnostics. No more digging through a flat blob.
  • A VIN structural breakdown — WMI / VDS / VIS / check digit / model year char / plant code, plus a check-digit validity flag (ISO 3779).
  • Optional active recalls — every NHTSA recall campaign for the decoded vehicle, including the consequence, remedy, and "Park Outside / Stop Driving" advisories.
  • Optional NCAP safety ratings — overall, frontal, side, and rollover star ratings for every NHTSA-rated trim of the vehicle, plus complaint and investigation counts.

Try it from the Input tab with the prefilled example VINs, or call it from any HTTP client via the Apify API. Apify gives you scheduling, webhooks, integrations, retries, monitoring, and per-run datasets out of the box.

Why use VIN Decoder API?

  • Car dealerships and marketplaces — enrich listings with structured attributes from a VIN scan, plus surface open recalls right at the point of sale.
  • Insurance and risk — confirm reported make/model/year against the manufacturer record and roll recall/safety data into underwriting.
  • Fleet management — bulk-decode tens of thousands of VINs and trigger remediation when a recall lands.
  • Vehicle history products — combine the decode with NCAP ratings, NHTSA recalls, and your own title/accident sources.
  • AI/ML pipelines — clean, categorized vehicle features for downstream models without writing a vPIC field-name dictionary.

How to use VIN Decoder API

  1. Open the Actor on Apify Console and click Try for free.
  2. Paste your VINs into the VIN codes field.
  3. (Optional) Pick Extended decode mode for ~30% more fields per VIN; turn on Include recalls and/or Include safety ratings for the enrichment data.
  4. Click Start. The actor batches up to 50 VINs per upstream decode call (basic mode), so a list of 1000 VINs finishes in roughly 30-60 seconds without enrichment.
  5. Open the Output tab to view, filter, and export decoded records as JSON, CSV, Excel, or HTML.

Input

FieldTypeRequiredDescription
vinCodesarrayyes17-character VINs. VINs are uppercased, trimmed, deduplicated; entries containing , or ; are split.
decodeModestringnobasic (default, batched) or extended (per-VIN, more fields).
includeRecallsbooleannoFetch active NHTSA recalls per make/model/year. Default false.
includeSafetyRatingsbooleannoFetch NCAP star ratings per make/model/year. Default false.
maxVinsPerRunintegernoHard cap on VINs processed. Default 1000, 0 for unlimited.
maxRequestRetriesintegernoRetry attempts per failed upstream call. Default 3.

Example input:

{
"vinCodes": ["4JGDA6EB8JB018467", "4JGDA6DB1GA739858"],
"decodeMode": "extended",
"includeRecalls": true,
"includeSafetyRatings": true
}

Output

One record per VIN lands in the run's default dataset. NHTSA fields keep their original PascalCase names within each category, so existing NHTSA tooling keeps working — you just don't have to filter through them.

{
"vin": "4JGDA6EB8JB018467",
"valid": true,
"errors": [],
"scrapedAt": "2026-04-29T14:23:11.482Z",
"decodeMode": "extended",
"structure": {
"wmi": "4JG",
"vds": "DA6EB8",
"vis": "JB018467",
"checkDigit": "8",
"modelYearChar": "J",
"plantCode": "B",
"sequentialNumber": "018467",
"checkDigitValid": true
},
"identification": {
"Make": "MERCEDES-BENZ",
"Model": "GLE-Class",
"ModelYear": "2018",
"ManufacturerName": "DAIMLER AG",
"VehicleType": "MULTIPURPOSE PASSENGER VEHICLE (MPV)",
"Trim": "AMG GLE 43"
},
"body": { "BodyClass": "SUV/MPV", "Doors": "4", "GVWR": "Class 1D" },
"engine": { "DisplacementL": "3.0", "EngineCylinders": "6", "FuelTypePrimary": "Gasoline", "Turbo": "Yes" },
"drivetrain": { "DriveType": "AWD", "TransmissionStyle": "Automatic" },
"safety": { "ABS": "Standard", "ESC": "Standard", "TPMS": "Direct" },
"advancedDriverAssistance": { "AdaptiveCruiseControl": "Optional", "BlindSpotMon": "Standard" },
"manufacturing": { "PlantCountry": "UNITED STATES (USA)", "PlantCity": "TUSCALOOSA" },
"recalls": [
{
"campaignNumber": "20V725000",
"component": "ELECTRICAL SYSTEM",
"summary": "Mercedes-Benz USA, LLC ...",
"consequence": "...",
"remedy": "...",
"parkIt": false,
"parkOutside": false,
"reportReceivedDate": "2020-11-19T00:00:00.000Z"
}
],
"safetyRatings": [
{
"vehicleId": 12345,
"vehicleDescription": "2018 Mercedes-Benz GLE 4 DR AWD",
"overallRating": "5",
"overallFrontCrashRating": "5",
"overallSideCrashRating": "5",
"rolloverRating": "4",
"complaintsCount": 12,
"recallsCount": 3,
"investigationCount": 0
}
]
}

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

Data table

FieldDescription
vinThe 17-character VIN that was decoded (uppercased).
validtrue if the VIN passed shape validation; false if it was flagged. Invalid records still appear in the output with empty category buckets.
errorsArray of validation messages for invalid VINs.
decodeModeEchoes which decode endpoint produced this record.
structureWMI/VDS/VIS breakdown plus check-digit validity.
identificationMake, model, year, manufacturer, trim, vehicle type.
bodyBody class, doors, weights, wheelbase, top speed, base price.
engineDisplacement, cylinders, HP/kW, fuel type(s), turbo, valvetrain.
drivetrainDrive type, transmission style/speeds, axle config.
electricEV battery chemistry, capacity, voltage, charger level (only populated for hybrids/EVs).
safetyABS, ESC, traction control, TPMS, airbag locations, anti-theft.
advancedDriverAssistanceACC, blind-spot, lane-keep, AEB, park assist, etc.
manufacturingPlant city, country, state, company.
diagnosticsNHTSA's own decode error/note fields.
otherAnything NHTSA returns that isn't bucketed elsewhere. New NHTSA fields land here automatically.
recallsActive NHTSA recall campaigns (only when includeRecalls).
safetyRatingsNCAP ratings per trim (only when includeSafetyRatings).

Pricing

This actor uses tiered pay-per-event pricing — there is no monthly subscription. You pay only for the events you trigger:

EventFires when
apify-actor-startRun starts (synthetic, automatic).
vin-decodedA VIN was successfully decoded and written to the dataset.
recalls-fetchedRecalls were fetched for a VIN (only when includeRecalls).
safety-rating-fetchedNCAP ratings were fetched for a VIN (only when includeSafetyRatings).
invalid-vinA VIN failed shape validation (length / forbidden chars). Recommended free tier — gives you observability without a billing cost.

Failures (network errors, retries exhausted, NHTSA outages) are never charged — events only fire after the corresponding work has been written to the dataset. Recalls and safety ratings are also deduplicated per make+model+year within a run, so 50 VINs of the same model trigger only one upstream call each (but each VIN still gets its own recalls-fetched charge — buyer-friendly predictability).

You can cap spend per run via Apify's standard "Max cost" run option. The actor honors eventChargeLimitReached and stops decoding once the cap is hit.

Tips and advanced options

  • Want every field NHTSA has? Set decodeMode: extended. Trade-off: extended decode is per-VIN (NHTSA does not expose a batch extended endpoint), so a 1000-VIN run takes ~5x longer than basic.
  • Recalls without ratings, or vice versa. The two enrichment toggles are independent — turn on only what you need.
  • Need only specific fields? Each category is a plain object. Read record.identification.Make and skip the rest. The dataset's flat-table view in the Apify Console flattens nested categories into individual columns.
  • Bad VINs in your input? Length and forbidden-character violations are flagged in errors[] and emit an invalid-vin event for visibility — the run does not fail. VINs whose check-digit math fails (common for non-North-American VINs) still get fully decoded; the math result is reported under structure.checkDigitValid.

FAQ

Do I need an API key? No. NHTSA's vPIC, recalls, and SafetyRatings APIs are free and public; the actor proxies them with batching, deduplication, retries, and structured output.

Will it work for non-US VINs? Many — NHTSA covers vehicles imported to the US and a meaningful share of global production. Coverage is best for 1981+ vehicles. Unknown VINs return empty category buckets but the structural breakdown still works.

Why does my non-US VIN show checkDigitValid: false? The check-digit algorithm is mandatory in North America but not enforced globally. A false here doesn't mean the VIN is fake — it just means the math doesn't match. The VIN is still decoded normally.

Is this legal? Yes. NHTSA APIs are US government public datasets. This actor only reads from them.

Where do I report issues or request a feature? Open an issue on the Issues tab of this Actor. Custom variants (extra fields, third-party VIN sources, post-processing) are also available — message the maintainer.