Bulk VIN Decoder & Recall Checker avatar

Bulk VIN Decoder & Recall Checker

Pricing

Pay per event

Go to Apify Store
Bulk VIN Decoder & Recall Checker

Bulk VIN Decoder & Recall Checker

Bulk-decode US VINs via NHTSA's free vPIC REST API into make, model, year, trim, engine and plant data, enriched with recall and crash-safety ratings. Local ISO-3779 check-digit validation catches a typo'd VIN before you get billed for NHTSA's own uncorrected decode.

Pricing

Pay per event

Rating

0.0

(0)

Developer

DevilScrapes

DevilScrapes

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

15 hours ago

Last modified

Categories

Share


🎯 What this scrapes

NHTSA's free vPIC service decodes any 17-character string you throw at it, valid or not, and hands back roughly 150 mostly-empty-string fields with no warning that the VIN itself was garbage. This Actor validates the ISO-3779 check digit locally first, for free, before any network call or billed event, then batch-decodes the survivors and normalizes NHTSA's noisy payload into a clean flat row — optionally joined with recall and crash-safety-rating data for the same make/model/year.

🔥 What we handle for you

  • 🔍 Local check-digit validation, free — every VIN is validated against ISO-3779 before any network call, so a typo never costs you a billed row.
  • 🧹 NHTSA's noisy payload, cleaned — every empty-string field NHTSA returns becomes a proper null, not a string you have to filter yourself.
  • 🔁 Retries with exponential backoff on 408 / 429 / 5xx — up to 5 attempts, Retry-After honoured.
  • 🫠 One bad batch never fails the run — a failed decode chunk or enrichment lookup is logged and skipped; the rest of your VINs still ship.
  • 🧊 Clean, typed dataset rows — Pydantic-validated, stable fields, JSON / CSV / Excel export straight from the Apify Console.
  • 💰 Pay-Per-Event pricing — you only pay for VINs that actually decode. Invalid or no-match VINs are free.

💡 Use cases

  • Bulk-normalize a dealer inventory feed's raw VINs into make/model/year/trim before listing.
  • Screen an incoming used-car lead list against NHTSA recall data before appraisal.
  • Back a fleet manager's maintenance system with structured engine/plant/spec data.
  • Feed an insurer's underwriting model with decoded vehicle attributes plus crash-safety ratings.

⚙️ How to use it

  1. Click Try for free at the top of the page.
  2. Fill in the input form — most fields have sensible defaults.
  3. Click Start. Output streams into the run's dataset.
  4. Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.

📥 Input

FieldTypeRequiredDefaultNotes
vinsarrayyes['1HGCM82633A004352', '3VWD07AJ5EM388202', '1G1ZT53826F109149']17-character US Vehicle Identification Numbers to decode, 1-500 per run. Each one is validated locally (ISO-3779 check…
include_recallsbooleannoTrueJoin NHTSA recall records for each decoded VIN's make/model/model-year. One lookup per unique combination, cached and…
include_safety_ratingsbooleannoFalseJoin NHTSA crash-safety ratings (overall, front, side, rollover) for each decoded VIN's make/model/model-year. Off by…
proxyConfigurationobjectno{'useApifyProxy': False}NHTSA's vPIC and api.nhtsa.gov services are public, keyless US government APIs with no anti-bot surface and need no…

Example input

{
"vins": [
"1HGCM82633A004352",
"3VWD07AJ5EM388202",
"1G1ZT53826F109149"
],
"include_recalls": true,
"include_safety_ratings": false,
"proxyConfiguration": {
"useApifyProxy": false
}
}

📤 Output

Every row is one dataset item.

FieldTypeNotes
vinstringInput VIN, uppercased.
is_validbooleanLocal ISO-3779 check-digit validation result.
validation_errorstringReason the VIN failed local validation; null when valid.
nhtsa_error_codestringNHTSA's own ErrorCode from the decode response.
nhtsa_error_textstringNHTSA's own ErrorText from the decode response.
makestringDecoded vehicle make.
modelstringDecoded vehicle model.
model_yearstringDecoded model year.
trimstringDecoded trim level.
body_classstringDecoded body class (e.g. Sedan/Saloon).
drive_typestringDecoded drive type (e.g. FWD, AWD).
seriesstringDecoded series designation.
engine_cylindersstringDecoded engine cylinder count.
engine_displacement_lstringDecoded engine displacement, liters.
engine_hpstringDecoded engine horsepower.
fuel_type_primarystringDecoded primary fuel type.
transmission_stylestringDecoded transmission style.
plant_countrystringDecoded assembly plant country.
plant_citystringDecoded assembly plant city.
gvwr_classstringDecoded gross vehicle weight rating class.
doorsstringDecoded door count.
airbag_frontstringDecoded front airbag location.
airbag_sidestringDecoded side airbag location.
recall_countintegerNumber of recalls found for this make/model/model-year; null unless recall enrichment is enabled.
recallsarrayRecall summaries ({nhtsa_campaign_number, component, summary}) for this make/model/model-year; null unless recall…
safety_overall_ratingstringNHTSA overall crash-safety rating; null unless safety-rating enrichment is enabled.
safety_frontcrash_ratingstringNHTSA frontal-crash rating; null unless safety-rating enrichment is enabled.
safety_sidecrash_ratingstringNHTSA side-crash rating; null unless safety-rating enrichment is enabled.
safety_rollover_ratingstringNHTSA rollover rating; null unless safety-rating enrichment is enabled.
decoded_atstringISO-8601 timestamp when this row was decoded.

Example output

{
"vin": "1HGCM82633A004352",
"is_valid": true,
"validation_error": null,
"nhtsa_error_code": "0",
"nhtsa_error_text": "VIN decoded clean. Check Digit (9th position) is correct",
"make": "HONDA",
"model": "Accord",
"model_year": "2003",
"trim": "EX",
"body_class": "Sedan/Saloon",
"drive_type": "FWD",
"series": null,
"engine_cylinders": "6",
"engine_displacement_l": "3.0",
"engine_hp": "240",
"fuel_type_primary": "Gasoline",
"transmission_style": "Automatic",
"plant_country": "UNITED STATES (USA)",
"plant_city": "MARYSVILLE",
"gvwr_class": null,
"doors": "4",
"airbag_front": "1st Row (Driver and Passenger)",
"airbag_side": null,
"recall_count": 3,
"recalls": [
{
"nhtsa_campaign_number": "04V123000",
"component": "AIR BAGS",
"summary": "..."
}
],
"safety_overall_rating": null,
"safety_frontcrash_rating": null,
"safety_sidecrash_rating": null,
"safety_rollover_rating": null,
"decoded_at": "2026-09-03T00:00:00Z"
}

💰 Pricing

Pay-Per-Event — you pay only when these events fire:

EventUSDWhat it is
actor-start$0.20One-off warm-up charge per run
result-row$0.0025Per unique dataset item

Example: 1 000 results at the rates above ≈ $2.70. No subscription, no minimum, no card to start — Apify gives every new account $5 of free credit.

🚧 Limitations

  • Up to 500 VINs per run — chunked into batches of 50 per NHTSA's documented per-call ceiling.
  • Non-US-market VINs vPIC can't resolve are returned best-effort, often mostly null — NHTSA covers the US market.
  • Safety-rating enrichment resolves the first matching NHTSA VehicleId when a make/model/year has multiple trims or body styles — it isn't a per-VIN exact trim match.
  • Recall and safety data reflect NHTSA's own records at request time; this Actor doesn't backfill or correct upstream gaps.

❓ FAQ

Do I need an API key?

No. NHTSA's vPIC and api.nhtsa.gov services are keyless, public US government APIs — no auth, no login.

Why do some VINs come back with mostly null fields?

NHTSA decodes even VINs it can barely parse and returns empty strings for unknown fields — this Actor converts every empty string to null so you can filter cleanly instead of guessing what '' means.

Do I get charged for an invalid VIN?

No. This Actor validates the ISO-3779 check digit locally, for free, before any NHTSA call. A VIN that fails validation costs nothing and never leaves your run.

What's the difference between decode-only and enrichment?

Recall and safety-rating enrichment are joined on the decoded make/model/model-year and ride the same per-row charge — no extra billed event, just turn on the checkbox.

💬 Your feedback

Spotted a bug, hit a weird edge case, or need a new field? Open an issue on the Actor's Issues tab on Apify Console — we ship fixes weekly and we read every report.