Bulk VIN Decoder & Recall Checker icon

Lead generation

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.

Free Apify credit covers a first run. No credit card to try.

What this Actor 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.

Input

Paste this into the Apify Console, or send it as the run input over the API. Proxy settings are on by default; you rarely need to touch them.

FieldTypeRequiredWhat it does
vins array yes 17-character US Vehicle Identification Numbers to decode, 1-500 per run. Each one is validated locally (ISO-3779 check digit) before any NHTSA call — invalid VINs never touch the network and are never billed.
include_recalls boolean no Join NHTSA recall records for each decoded VIN's make/model/model-year. One lookup per unique combination, cached and reused across matching VINs — never per VIN.
include_safety_ratings boolean no Join NHTSA crash-safety ratings (overall, front, side, rollover) for each decoded VIN's make/model/model-year. Off by default — it's a two-step lookup per unique combination and slows the run.
{
  "vins": [
    "1HGCM82633A004352",
    "3VWD07AJ5EM388202",
    "1G1ZT53826F109149"
  ],
  "include_recalls": true,
  "include_safety_ratings": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}

Output

One row per result, schema-validated before it is written. Export JSON, CSV, Excel or XML from the run, or read it over the API.

vinis_validvalidation_errornhtsa_error_codenhtsa_error_textmakemodelmodel_yeartrimbody_classdrive_typeengine_cylindersengine_displacement_lengine_hpfuel_type_primarytransmission_style

{
  "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

EventPriceWhen
Actor start$0.20Once per run, covers warm-up and proxy session setup.
result-row$0.0025Per result written to the dataset.

You pay only for results that land. Cap any run with maxTotalChargeUsd. See pricing & billing for worked examples.

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.

Ready to run it?

Open the listing on Apify, paste the input above, and watch rows land. If it ever breaks, it is our problem before it is yours.

Related Actors

Teams that run this also run