# VIN Decoder in Bulk – Specs, Recalls & Safety Ratings (`gazidev/vin-decoder`) Actor

Decode VINs in bulk with official NHTSA data: make, model, year, trim, engine, body, plant, safety equipment, plus open recalls, owner complaints and NCAP crash ratings. 50 VINs per API call, invalid VINs free. $1 per 1,000 VINs.

- **URL**: https://apify.com/gazidev/vin-decoder.md
- **Developed by:** [Cemal Atakli](https://apify.com/gazidev) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 vin decodeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## VIN Decoder in Bulk – Specs, Recalls, Complaints & NCAP Safety Ratings

Decode **Vehicle Identification Numbers in bulk** with the **official NHTSA data** used by US dealers, insurers and fleets. For every VIN you get **year, make, model, trim, body, engine, fuel, drivetrain, transmission, assembly plant and safety equipment**, plus the vehicle's **open safety recalls**, an **owner-complaints summary** and **NHTSA 5-Star (NCAP) crash ratings**, in one row.

No API key, no login. **$1 per 1,000 decoded VINs.** Invalid or undecodable VINs are free.

### What it does

- **Bulk decoding** through NHTSA's vPIC batch API (50 VINs per call). Thousands of VINs per run.
- **Specs:** make, model, model year, trim, series, manufacturer, vehicle type, body class, cab type, doors, seats, drive type, cylinders, displacement, horsepower, engine model, fuel type (primary/secondary), electrification level, battery kWh, transmission, GVWR class and plant city/state/country.
- **Safety equipment:** ABS, ESC, adaptive cruise control, forward collision warning, lane departure warning, blind-spot monitoring, backup camera.
- **Recalls** for the make/model/year: campaign number, date, component, summary, consequence, remedy, and the **"park it" / "park outside"** and **over-the-air fix** flags.
- **Owner complaints summary:** total complaints, complaints with crash or fire, injuries, deaths, and the **top 5 complaint components**.
- **NCAP crash ratings:** overall, frontal, side and rollover stars for the best-matching variant (drive type, doors, cab), plus every rated variant of that model year.
- **Check-digit validation** (9th character) and NHTSA's decode notes, so you can spot typos.
- **All ~150 vPIC fields** on request (`includeAllFields`).
- Invalid VINs (wrong length, I/O/Q letters) and VINs NHTSA cannot decode get a **free error row**. Duplicates are decoded once.

### Use cases

- **Used-car marketplaces and dealers:** fill listing specs and show open recalls from a VIN.
- **Insurance and lending:** verify year, make, model and body before quoting.
- **Fleet managers:** check a whole fleet for open recalls and "park it" warnings.
- **Auto parts and repair shops:** identify engine, transmission and drivetrain.
- **Data enrichment** of CRM, auction or DMV exports.

### Input example

```json
{
  "vins": ["1HGCM82633A004352", "5YJ3E1EA7KF317000", "1FTFW1E50KFA12345"],
  "includeRecalls": true,
  "includeComplaints": true,
  "includeSafetyRatings": true
}
```

### Output example

```json
{
  "vin": "1FTFW1E50KFA12345", "decoded": true, "modelYear": 2019, "make": "FORD", "model": "F-150",
  "manufacturer": "FORD MOTOR COMPANY", "vehicleType": "TRUCK", "bodyClass": "Pickup", "cabType": "Crew/Super Crew/Crew Max",
  "driveType": "4WD/4-Wheel Drive/4x4", "engineCylinders": 8, "displacementL": 5, "engineHp": 395, "fuelTypePrimary": "Gasoline",
  "plantCity": "DEARBORN", "plantCountry": "UNITED STATES (USA)", "esc": "Standard", "backupCamera": "Standard",
  "checkDigitValid": true,
  "recallsCount": 9,
  "recalls": [{"campaignNumber": "20V097000", "reportDate": "2020-02-21", "component": "EXTERIOR LIGHTING:HEADLIGHTS",
               "remedy": "Ford will notify owners, and dealers will reprogram the body control module, free of charge…",
               "parkIt": false, "parkOutside": false, "overTheAirUpdate": false}],
  "complaintsCount": 61, "complaintsWithCrash": 0, "complaintsWithFire": 0,
  "ncapOverallRating": "5", "ncapFrontCrashRating": "5", "ncapSideCrashRating": "5", "ncapRolloverRating": "4",
  "ncapVehicleDescription": "2019 Ford F-150 Super Crew PU/CC 4x4"
}
```

### Pricing (pay per event)

| Event | Price |
|---|---|
| VIN decoded (specs + recalls + complaints + NCAP ratings) | **$0.001** |
| Actor start | $0.00005 |

Invalid and undecodable VINs are **free**. Set a *maximum cost per run* and the Actor stops cleanly at that limit.

| Actor | Price per VIN |
|---|---|
| **This Actor** | **$0.001** (all enrichments included) |
| s-r/vin-decoder | $0.0015 |

Competitor price from the Apify Store on 2026-10-18.

### FAQ

**Does it work for non-US vehicles?** NHTSA covers vehicles sold in the US and Canada. Many European or Asian-market VINs decode only the make and year; those rows are returned free with an explanation.

**Are recalls specific to my VIN?** Recalls are listed for the make, model and model year (that is what the public API provides). To confirm whether a specific car's recall was already repaired, check the manufacturer or nhtsa.gov/recalls with the VIN.

**Where does the data come from?** NHTSA's public vPIC, Recalls, Complaints and Safety Ratings APIs (US government data). This Actor is not affiliated with or endorsed by NHTSA.

### Use with AI agents (Apify MCP)

Works as a tool in the [Apify MCP server](https://mcp.apify.com): an agent can decode a VIN and answer "what engine does this car have and does it have open recalls?".

# Actor input Schema

## `vins` (type: `array`):

17-character Vehicle Identification Numbers. Spaces and dashes are removed. Duplicates are decoded once.

## `includeRecalls` (type: `boolean`):

NHTSA safety recalls for the VIN's make, model and model year (campaign number, component, summary, remedy, park-it / park-outside warnings).

## `includeRecallDetails` (type: `boolean`):

Turn off to get only the recall count (smaller rows).

## `includeComplaints` (type: `boolean`):

Count of NHTSA owner complaints for the model year, with crashes, fires, injuries, deaths and the top 5 components.

## `includeSafetyRatings` (type: `boolean`):

NHTSA 5-Star crash ratings (overall, frontal, side, rollover) for the best-matching variant, plus all variants.

## `includeAllFields` (type: `boolean`):

Adds every non-empty field from the NHTSA decoder (airbags, wheelbase, safety tech, plant details...) under 'allFields'.

## Actor input object example

```json
{
  "vins": [
    "1HGCM82633A004352",
    "5YJ3E1EA7KF317000"
  ],
  "includeRecalls": true,
  "includeRecallDetails": true,
  "includeComplaints": true,
  "includeSafetyRatings": true,
  "includeAllFields": false
}
```

# Actor output Schema

## `vehicles` (type: `string`):

No description

## `results` (type: `string`):

No description

## `summary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "vins": [
        "1HGCM82633A004352",
        "5YJ3E1EA7KF317000"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("gazidev/vin-decoder").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "vins": [
        "1HGCM82633A004352",
        "5YJ3E1EA7KF317000",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("gazidev/vin-decoder").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "vins": [
    "1HGCM82633A004352",
    "5YJ3E1EA7KF317000"
  ]
}' |
apify call gazidev/vin-decoder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,gazidev/vin-decoder"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/BMpNc1OWmqrLtQMFO/builds/Tq2cNe1WdBTzJ1wfl/openapi.json
