# NHTSA Recall Monitor (`junipr/nhtsa-recall-monitor`) Actor

Monitor public vehicle recall data by make, model, year, component, and keyword.

- **URL**: https://apify.com/junipr/nhtsa-recall-monitor.md
- **Developed by:** [junipr](https://apify.com/junipr) (community)
- **Categories:** Automation, News
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $6.50 / 1,000 record checkeds

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## NHTSA Recall Monitor

### Store Positioning

**Store title:** NHTSA Recall Monitor

**Short description:** Monitor public vehicle recall data by make, model, year, component, and keyword.

**SEO title:** NHTSA Recall Monitor — official public data extraction and monitoring

**SEO description:** Monitor public vehicle recall data by make, model, year, component, and keyword. Use it to normalize official public data into clean Apify datasets with source-specific fields and report artifacts.

**Categories:** AUTOMATION, NEWS

**Keywords:** nhtsa, recall, monitor, data qa, public data, official/public-data actor

### Fixed-Inclusive PPE Pricing

This actor uses pay-per-event pricing. Event prices include Apify platform usage; users are not expected to pay a separate platform-usage pass-through charge for the configured pricing model.

- Tier: D1 — Official/public-data actor
- Primary event: `record-checked` at $0.00908 base
- Default max charge: $15.00
- Store discounts: FREE/BRONZE base, SILVER discounted, GOLD deepest approved discount

Event set:

- `actor-start`: base $0.02000, GOLD $0.01760. Nhtsa Recall Monitor: charged when actor start is completed. The price includes Apify platform usage; no separate usage pass-through is intended.
- `record-checked`: base $0.00908, GOLD $0.00799. Nhtsa Recall Monitor: charged when record checked is completed. The price includes Apify platform usage; no separate usage pass-through is intended.
- `event-detected`: base $0.01300, GOLD $0.01140. Nhtsa Recall Monitor: charged when event detected is completed. The price includes Apify platform usage; no separate usage pass-through is intended.
- `report-generated`: base $0.05000, GOLD $0.04400. Nhtsa Recall Monitor: charged when report generated is completed. The price includes Apify platform usage; no separate usage pass-through is intended.

### Public Task Concepts

- Check official NHTSA recalls for one vehicle
- Monitor one vehicle for NHTSA recall matches
- Build a fuel-pump recall digest from NHTSA
- Prioritize NHTSA recall campaigns by component
- Export normalized NHTSA campaign rows

Query and normalize official NHTSA vehicle recall campaigns for explicit make, model, and model-year watchlists.

### What This Actor Does

NHTSA Recall Monitor sends bounded `vehicleQueries` to the official NHTSA Recalls API. It normalizes campaign number, manufacturer, make, model, year, component, summary, consequence, remedy, report date, and affected-unit evidence. Returned rows are checked against the requested vehicle identity and optional watch terms.

An official empty response produces an explicit `no-recalls-found` evidence row instead of inventing a campaign. Supplied records remain available for deterministic fixtures or previously captured official data.

### What This Actor Does Not Do

- It does not query by VIN or determine whether one specific vehicle is affected.
- It does not provide safety, repair, legal, or compliance advice.
- It does not replace NHTSA's recall lookup or manufacturer instructions.
- It does not crawl third-party recall sites or bypass access controls.

### Best Use Cases

- monitor one or more explicit make-model-year combinations
- route campaigns by component or watch-term match
- normalize official recall evidence into Apify datasets
- retain honest no-result evidence for recurring checks
- prepare campaign and remedy exports for operations teams

### Input Fields

| Field | Type | Default | Notes |
| --- | --- | --- | --- |
| `vehicleQueries` | array | `[]` | Make, model, and model year queries sent to `api.nhtsa.gov`. |
| `records` | array | two built-in records | Supplied or previously captured recall evidence. |
| `watchTerms` | array | airbag/brake/fuel-pump terms | Matched against component, summary, consequence, and remedy. |
| `includeReport` | boolean | `true` | Writes JSON and Markdown report artifacts. |
| `maxItems` | integer | `2` | Caps total returned campaign rows; maximum 50. |
| `fetchTimeoutMs` | integer | `12000` | Per-request timeout, capped at 30 seconds. |

### Example Input

```json
{
  "vehicleQueries": [
    {"make": "Honda", "model": "Accord", "modelYear": 2020}
  ],
  "watchTerms": ["fuel pump", "air bag"],
  "maxItems": 1,
  "includeReport": true
}
```

### Output Evidence

Each row includes status, findings, recommendations, query identity, and `metadata.sourceSpecific.recallRows`. Recall evidence includes the campaign number, component, remedy, affected units, official query URL, query-match status, and matched watch terms. `eventDetected` is true only for a returned campaign that matches configured monitoring signals or is explicitly marked new or changed.

### Cost Control

- Start with one vehicle query and `maxItems: 1`.
- Use focused watch terms for routing.
- Disable report artifacts when only campaign rows are needed.
- Schedule small explicit watchlists instead of broad model sweeps.

### Public Task Examples

- check official recalls for one vehicle
- monitor one vehicle for component matches
- build a fuel-pump campaign digest
- prioritize campaigns by component and remedy
- export normalized NHTSA campaign rows

### FAQ

#### Does an empty result mean a vehicle is permanently recall-free?

No. It means the official query returned no rows at the checked time. Retain the timestamp and rerun future monitoring checks.

#### Can this confirm a VIN is affected?

No. Use the official NHTSA VIN lookup and manufacturer instructions for vehicle-specific decisions.

### Limitations

Results depend on the official API response and exact make, model, and year input. Recall applicability, repair availability, and owner notification can change. Always verify operational decisions with NHTSA or the manufacturer.

### Source And Safety Notes

Vehicle queries use the official NHTSA endpoint at `https://api.nhtsa.gov/recalls/recallsByVehicle`. Do not submit private owner information or credentials.

### Changelog

- 2026-07-10: Added official vehicle-query integration, campaign normalization, identity matching, honest empty-result evidence, watch-term routing, and expanded regression coverage.

# Actor input Schema

## `vehicleQueries` (type: `array`):

Bounded make, model, and model-year queries sent to the official NHTSA Recalls API.

## `records` (type: `array`):

Records, snapshots, or source observations to process. Defaults to a tiny deterministic fixture.

## `fetchTimeoutMs` (type: `integer`):

Timeout for each bounded HTTP request.

## `watchTerms` (type: `array`):

Keywords or topics used to flag relevant records.

## `includeReport` (type: `boolean`):

Write JSON and Markdown report artifacts to the key-value store.

## `maxItems` (type: `integer`):

Maximum records to process in one run.

## `maxTextBytes` (type: `integer`):

Maximum searchable text bytes per record.

## `dryRun` (type: `boolean`):

Validate input and write a dry-run summary without PPE charges or dataset output.

## `debug` (type: `boolean`):

Enable debug logging.

## Actor input object example

```json
{
  "vehicleQueries": [],
  "records": [
    {
      "sourceId": "nhtsa-honda-2020",
      "sourceUrl": "https://nhtsa.example/recalls/campaign/26V001000",
      "title": "Honda Accord 2020 fuel pump recall",
      "description": "NHTSA recall for 2020 Honda Accord fuel pump failure with remedy available.",
      "entityName": "Honda",
      "category": "vehicle recall",
      "date": "2026-06-20",
      "keywords": [
        "fuel pump"
      ],
      "metadata": {
        "campaignNumber": "26V001000",
        "make": "Honda",
        "model": "Accord",
        "modelYear": 2020,
        "component": "Fuel system",
        "remedy": "Dealer replacement",
        "affectedUnits": 44000
      }
    },
    {
      "sourceId": "nhtsa-thin",
      "sourceUrl": "https://nhtsa.example/recalls/campaign/pending",
      "title": "Vehicle equipment recall missing remedy",
      "description": "Vehicle recall record with missing campaign number and remedy.",
      "entityName": "Example Motors",
      "category": "vehicle recall",
      "date": "2026-06-19",
      "keywords": [
        "brake"
      ],
      "metadata": {
        "make": "Example",
        "model": "Sedan",
        "modelYear": 2021,
        "component": "Brakes"
      }
    }
  ],
  "fetchTimeoutMs": 12000,
  "watchTerms": [
    "airbag",
    "brake",
    "fuel pump"
  ],
  "includeReport": true,
  "maxItems": 2,
  "maxTextBytes": 500000,
  "dryRun": false,
  "debug": false
}
```

# Actor output Schema

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

Structured result rows in the default dataset.

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

Summary JSON in the key-value store when includeReport is enabled.

## `markdownReport` (type: `string`):

Markdown report in the key-value store when includeReport is enabled.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("junipr/nhtsa-recall-monitor").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("junipr/nhtsa-recall-monitor").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{}' |
apify call junipr/nhtsa-recall-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=junipr/nhtsa-recall-monitor",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/XU7DgRhwDZcbp0EiK/builds/nfPZAuejLAFEf6kUk/openapi.json
