VIN Decoder API
Pricing
from $0.50 / 1,000 vin decodeds
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
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
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
- Open the Actor on Apify Console and click Try for free.
- Paste your VINs into the VIN codes field.
- (Optional) Pick Extended decode mode for ~30% more fields per VIN; turn on Include recalls and/or Include safety ratings for the enrichment data.
- 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.
- Open the Output tab to view, filter, and export decoded records as JSON, CSV, Excel, or HTML.
Input
| Field | Type | Required | Description |
|---|---|---|---|
vinCodes | array | yes | 17-character VINs. VINs are uppercased, trimmed, deduplicated; entries containing , or ; are split. |
decodeMode | string | no | basic (default, batched) or extended (per-VIN, more fields). |
includeRecalls | boolean | no | Fetch active NHTSA recalls per make/model/year. Default false. |
includeSafetyRatings | boolean | no | Fetch NCAP star ratings per make/model/year. Default false. |
maxVinsPerRun | integer | no | Hard cap on VINs processed. Default 1000, 0 for unlimited. |
maxRequestRetries | integer | no | Retry 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
| Field | Description |
|---|---|
vin | The 17-character VIN that was decoded (uppercased). |
valid | true if the VIN passed shape validation; false if it was flagged. Invalid records still appear in the output with empty category buckets. |
errors | Array of validation messages for invalid VINs. |
decodeMode | Echoes which decode endpoint produced this record. |
structure | WMI/VDS/VIS breakdown plus check-digit validity. |
identification | Make, model, year, manufacturer, trim, vehicle type. |
body | Body class, doors, weights, wheelbase, top speed, base price. |
engine | Displacement, cylinders, HP/kW, fuel type(s), turbo, valvetrain. |
drivetrain | Drive type, transmission style/speeds, axle config. |
electric | EV battery chemistry, capacity, voltage, charger level (only populated for hybrids/EVs). |
safety | ABS, ESC, traction control, TPMS, airbag locations, anti-theft. |
advancedDriverAssistance | ACC, blind-spot, lane-keep, AEB, park assist, etc. |
manufacturing | Plant city, country, state, company. |
diagnostics | NHTSA's own decode error/note fields. |
other | Anything NHTSA returns that isn't bucketed elsewhere. New NHTSA fields land here automatically. |
recalls | Active NHTSA recall campaigns (only when includeRecalls). |
safetyRatings | NCAP 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:
| Event | Fires when |
|---|---|
apify-actor-start | Run starts (synthetic, automatic). |
vin-decoded | A VIN was successfully decoded and written to the dataset. |
recalls-fetched | Recalls were fetched for a VIN (only when includeRecalls). |
safety-rating-fetched | NCAP ratings were fetched for a VIN (only when includeSafetyRatings). |
invalid-vin | A 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.Makeand 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 aninvalid-vinevent 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 understructure.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.