# VIN Decoder Bulk: Specs, Recalls, MPG & Fuel Cost per Mile (`infocomp/bulk-vin-decoder-recalls-mpg`) Actor

Decode VINs in bulk with official NHTSA vPIC data: year, make, model, trim, engine. Adds NHTSA recall campaigns, EPA MPG and fuel cost per mile from EIA weekly gas prices, next to the IRS mileage rate. No API key.

- **URL**: https://apify.com/infocomp/bulk-vin-decoder-recalls-mpg.md
- **Developed by:** [InfoComp Data](https://apify.com/infocomp) (community)
- **Categories:** Automation, Lead generation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$2.00 / 1,000 vins

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 Bulk: Specs, Recalls, MPG & Fuel Cost per Mile

**Paste a list of VINs and get one clean row per vehicle**: year, make, model, trim, engine, drive type and body from **NHTSA vPIC**, every **NHTSA safety recall campaign** for that model, **EPA city/highway/combined MPG**, and **fuel cost per mile** from this week's **EIA gas price** for your state, right next to the **IRS business mileage rate**.

- 🚗 **Built for fleets, gig drivers and used-car buyers:** rideshare and delivery fleets, dealers, flippers, insurers, lenders and app developers.
- 🏛️ **Official US government data only:** NHTSA, EPA and EIA open data. No scraping, no proxies, no API key.
- ⛽ **Real running costs:** MPG × the latest weekly EIA retail price = $/mile, $/100 miles and annual fuel cost for your mileage.
- 💲 **$2.00 per 1,000 VINs** ($0.002 per VIN). No start fee and no monthly rental. Apify compute is included.

### What does this VIN decoder do?

For each VIN it:

1. **Decodes the VIN** with NHTSA's vPIC batch API (50 VINs per call): model year, make, model, trim, series, body class, vehicle type, drive type, doors, cylinders, displacement, horsepower, fuel type, hybrid/EV level, transmission, GVWR, manufacturer and assembly plant. It also checks the VIN's check digit.
2. **Lists NHTSA recall campaigns** for that model year, make and model from NHTSA's official bulk recall file: campaign number, components, defect summary, consequence, remedy, dates, units affected, and **Do Not Drive** / **Park Outside** advisories, with a link to the recall on nhtsa.gov.
3. **Matches the vehicle to EPA fuel-economy data** (fueleconomy.gov) using engine size, cylinders, drive and hybrid/EV type: city, highway and combined MPG (or kWh/100 mi for EVs), EPA annual fuel cost and CO₂ per mile. When several EPA versions fit, it tells you so (`epaMatchQuality`, `mpgCombinedRange`).
4. **Prices the fuel** with the latest weekly EIA retail price for the vehicle's grade (regular, midgrade, premium or diesel) in your state or region, and returns fuel cost per mile, per 100 miles and per year.
5. **Adds the IRS business standard mileage rate** (76¢/mile for July 1 to Dec 31, 2026) and the difference between that rate and your fuel cost per mile.

In a local test on Oct 27, 2026, 4 VINs were decoded, matched to 18 recall campaigns and EPA data, and priced in about 6 seconds.

### ⚠️ Important: recalls are by model, not by VIN

**This Actor cannot confirm whether a recall applies to a specific car or is still open (unrepaired).** NHTSA's public data lists recalls by model year, make and model; only the manufacturer knows which VINs are affected and which were repaired. Every row includes this note. To check open recalls on one car, enter the VIN at [nhtsa.gov/recalls](https://www.nhtsa.gov/recalls) or ask a dealer. (We deliberately do not use api.nhtsa.gov, which says it is not meant for bulk VIN lookups.)

### Use cases

- **Rideshare and delivery fleets:** screen every vehicle for recall campaigns with Do Not Drive warnings, and compare real fuel cost per mile across the fleet.
- **Gig drivers:** see what a car really costs per mile in fuel versus the 76¢ IRS mileage deduction.
- **Used-car dealers and flippers:** decode auction lists in bulk, flag models with serious recalls, and add MPG to listings.
- **Insurance, lending and leasing:** standardize year/make/model/trim from VINs and enrich applications.
- **App and spreadsheet builders:** call it from the Apify API, Zapier, Make, n8n, Google Sheets or AI agents.

### How to use it

1. Click **Try for free**.
2. Paste your **VINs**, one per line.
3. Set your **state** (for the gas price) and **miles driven per year**.
4. Click **Start**, then download the results as JSON, CSV or Excel, or get them through the API.

#### Input example

```json
{
  "vins": ["4T1B11HK8JU080221", "1FTFW1ET9DFC10312", "3GNAXUEV9KL221234", "JTDKARFU4K3082224"],
  "state": "TX",
  "annualMiles": 30000,
  "includeRecalls": true,
  "includeFuelEconomy": true
}
```

(These are sample VINs with valid check digits, used only for testing.)

### Output example

A real row from a test run on Oct 27, 2026 (recall list and texts shortened here):

```json
{
  "vin": "4T1B11HK8JU080221",
  "checkDigitValid": true,
  "decodedOk": true,
  "modelYear": 2018,
  "make": "TOYOTA",
  "model": "Camry",
  "trim": "L/LE/SE/XLE",
  "bodyClass": "Sedan/Saloon",
  "driveType": "4x2",
  "engineCylinders": "4",
  "displacementL": "2.5",
  "engineHP": "203",
  "fuelTypePrimary": "Gasoline",
  "transmissionStyle": "Automatic",
  "plantCity": "GEORGETOWN",
  "plantState": "KENTUCKY",
  "recallCount": 8,
  "hasDoNotDriveRecall": false,
  "hasParkOutsideRecall": false,
  "recalls": [
    {
      "campaignNumber": "25V028000",
      "components": ["FUEL SYSTEM, GASOLINE:DELIVERY:FUEL PUMP"],
      "summary": "Toyota ... is recalling certain 2018 Camry ... The low-pressure fuel pump ...",
      "consequence": "Fuel pump failure can cause an engine stall, increasing the risk of a crash.",
      "remedy": "Dealers will replace the fuel pump assembly, free of charge. ...",
      "reportReceivedDate": "2025-01-22",
      "potentiallyAffected": 858,
      "doNotDrive": false,
      "parkOutside": false,
      "nhtsaUrl": "https://www.nhtsa.gov/recalls?nhtsaId=25V028000"
    }
  ],
  "recallNote": "Recalls are matched by model year, make and model ... This does NOT confirm whether a recall applies to this specific VIN or is still open ...",
  "epaMatchQuality": "exact",
  "epaModel": "Camry LE/SE",
  "mpgCity": 28,
  "mpgHighway": 39,
  "mpgCombined": 32,
  "epaAnnualFuelCost": 2100,
  "co2GramsPerMile": 277,
  "fuelGrade": "regular",
  "fuelPricePerGallon": 4.269,
  "fuelPriceArea": "U.S.",
  "fuelPriceWeek": "2026-10-26",
  "fuelCostPerMile": 0.1334,
  "fuelCostPer100Miles": 13.34,
  "annualFuelCostAtCurrentPrice": 2001.09,
  "irsMileageRateCents": 76,
  "irsRatePeriod": "2026-07-01 to 2026-12-31",
  "irsRateMinusFuelCostPerMile": 0.6266
}
```

Turn on **Include the full vPIC decode** to add all ~150 NHTSA fields (airbags, driver-assist systems, wheelbase, battery and more) as a nested `vpic` object.

### Pricing

**$0.002 per VIN, or $2.00 per 1,000 VINs.** No start fee and no monthly rental, and Apify compute is included. You are charged only for VINs that NHTSA vPIC actually decodes (a make and model come back with no fatal error). VINs that vPIC cannot decode are still saved, with `charged: false` and an `error` explaining why, at no cost. Malformed entries (not 17 characters, or containing I, O or Q) are skipped and not charged. Set **Maximum cost per run** in Apify and the Actor stops exactly at your limit.

| VINs | Cost |
|---|---|
| 100 | $0.20 |
| 1,000 | $2.00 |
| 10,000 | $20.00 |

### Data sources and credits

- **NHTSA vPIC** (Product Information Catalog and Vehicle Listing), `DecodeVINValuesBatch`. Free public service; NHTSA information may be distributed or copied.
- **NHTSA recalls flat file** (`FLAT_RCL_POST_2010`), which NHTSA updates daily.
- **EPA / DOE fueleconomy.gov** vehicle data (`vehicles.csv`). Public domain.
- **Source: U.S. Energy Information Administration**, Weekly Retail Gasoline and Diesel Prices. EIA publishes state prices for CA, CO, FL, MA, MN, NY, OH, TX and WA; every other state gets its PADD region price, and the area used is shown in `fuelPriceArea`.
- **IRS** standard mileage rates (Notice 2026-10 and Announcement 2026-11).

This Actor is independent and is not endorsed by NHTSA, EPA, DOE, EIA or the IRS.

### FAQ

**Can it tell me if a recall on my car was fixed?** No. Public NHTSA data is by model, not by VIN. Check one VIN at nhtsa.gov/recalls or with a dealer.

**Why do some rows say `epaMatchQuality: approximate`?** A VIN doesn't always pin down one EPA version (for example 2WD vs AWD, or two engines). We pick the closest match by engine, cylinders, drive and powertrain and give the MPG range in `mpgCombinedRange`.

**Does it work for trucks, motorcycles and older cars?** vPIC decodes VINs from 1981 on, including trucks, buses, trailers and motorcycles. EPA MPG covers light-duty cars and trucks from 1984 on. Heavy trucks and motorcycles get specs and recalls but no MPG.

**Electric vehicles?** EVs get kWh/100 miles. Enter your electricity price ($/kWh) to get cost per mile; otherwise we use EPA's annual cost estimate.

**How fast is it?** Thousands of VINs per run. vPIC is called in batches of 50, and the recall, EPA and EIA files are downloaded once per run.

**Is this legal to use?** Yes. All the sources are US government open data that may be redistributed. We don't scrape any website or use the NHTSA endpoint that isn't meant for bulk lookups.

**Need another field or found a mismatch?** Open an issue on the Actor's Issues tab.

# Actor input Schema

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

One 17-character Vehicle Identification Number per line (cars, trucks, SUVs, vans, motorcycles; 1981 and newer). Spaces and dashes are removed; duplicates are decoded once. Paste hundreds or thousands at a time.

## `state` (type: `string`):

Two-letter US state (e.g. TX, CA, NY) used to pick the EIA weekly fuel price. EIA publishes state prices for CA, CO, FL, MA, MN, NY, OH, TX and WA; other states use their regional (PADD) price, and US uses the national average. The area used is shown in each row.

## `annualMiles` (type: `integer`):

Used for annualFuelCostAtCurrentPrice. A full-time rideshare or delivery driver often drives 25,000-40,000 miles a year.

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

All NHTSA safety recall campaigns for the decoded model year, make and model, with Do Not Drive and Park Outside flags. Note: this cannot confirm whether a recall is still open on a specific VIN.

## `includeModelVariantRecalls` (type: `boolean`):

Off: recalls filed under the exact model name (plus the HYBRID name for hybrids). On: also recalls filed under names that start with the model, e.g. CAMRY SOLARA for Camry. More complete, but may include variants that are not this vehicle.

## `includeFuelEconomy` (type: `boolean`):

Matches each vehicle to EPA fuel economy data (city, highway, combined MPG, annual fuel cost) and computes fuel cost per mile from the latest EIA weekly fuel price, next to the IRS business mileage rate.

## `electricityPricePerKwh` (type: `string`):

For battery-electric vehicles, e.g. 0.17. Leave empty to use EPA's own annual cost estimate for EVs.

## `includeFullDecode` (type: `boolean`):

Adds every non-empty field NHTSA vPIC returns (about 150 possible: airbags, safety systems, wheelbase, battery, etc.) as a nested 'vpic' object.

## `maxResults` (type: `integer`):

Stop after this many VINs. Leave empty for no limit (your max cost per run still applies).

## Actor input object example

```json
{
  "vins": [
    "4T1B11HK8JU080221",
    "1FTFW1ET9DFC10312",
    "3GNAXUEV9KL221234",
    "JTDKARFU4K3082224"
  ],
  "state": "TX",
  "annualMiles": 15000,
  "includeRecalls": true,
  "includeModelVariantRecalls": false,
  "includeFuelEconomy": true,
  "includeFullDecode": false
}
```

# Actor output Schema

## `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": [
        "4T1B11HK8JU080221",
        "1FTFW1ET9DFC10312",
        "3GNAXUEV9KL221234",
        "JTDKARFU4K3082224"
    ],
    "state": "TX"
};

// Run the Actor and wait for it to finish
const run = await client.actor("infocomp/bulk-vin-decoder-recalls-mpg").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": [
        "4T1B11HK8JU080221",
        "1FTFW1ET9DFC10312",
        "3GNAXUEV9KL221234",
        "JTDKARFU4K3082224",
    ],
    "state": "TX",
}

# Run the Actor and wait for it to finish
run = client.actor("infocomp/bulk-vin-decoder-recalls-mpg").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": [
    "4T1B11HK8JU080221",
    "1FTFW1ET9DFC10312",
    "3GNAXUEV9KL221234",
    "JTDKARFU4K3082224"
  ],
  "state": "TX"
}' |
apify call infocomp/bulk-vin-decoder-recalls-mpg --silent --output-dataset

```

## MCP server setup

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

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/JAGn2WDfpTPW9U875/builds/8mOa5Ud3X2UUdbg5W/openapi.json
