NHTSA Vehicle Recalls & Complaints Scraper avatar

NHTSA Vehicle Recalls & Complaints Scraper

Pricing

from $4.00 / 1,000 recall results

Go to Apify Store
NHTSA Vehicle Recalls & Complaints Scraper

NHTSA Vehicle Recalls & Complaints Scraper

Look up NHTSA vehicle recall campaigns and owner complaints by make, model, and year for up to 200 vehicles per run. Export campaign details, remedies, crash/fire flags, injuries, deaths, dates, and normalized safety data from official NHTSA public APIs.

Pricing

from $4.00 / 1,000 recall results

Rating

0.0

(0)

Developer

Johnn Mottin

Johnn Mottin

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

13 days ago

Last modified

Categories

Share

Batch-check US vehicle recall campaigns and owner complaints

Look up NHTSA vehicle recall campaigns and owner complaints by make, model, and model year for up to 200 vehicles per run.

The Actor queries the official public NHTSA APIs and returns normalized safety data for fleet audits, vehicle research, insurance and warranty analysis, automotive marketplaces, dealer inventory research, and recurring monitoring.

Recall records can include campaign numbers, affected components, summaries, consequences, remedies, and park-it / park-outside flags.

Complaint records can include ODI numbers, crash and fire flags, injuries, deaths, affected components, incident dates, and complaint filing dates.

No NHTSA account. No API key. No browser automation.

Key features

  • Batch lookup for up to 200 vehicles per run
  • Search by make + model + model year
  • NHTSA recall campaign data
  • NHTSA owner complaint data
  • Recall consequence and remedy details
  • Park-it and park-outside flags
  • Crash and fire complaint signals
  • Injury and death counts
  • Complaint date filtering
  • Per-vehicle complaint caps
  • Normalized records across recalls and complaints
  • Per-vehicle run status and diagnostics
  • Built-in field-completeness health checks
  • Schedule-ready for fleet and portfolio monitoring
  • Pay only for records actually written

Unofficial community Actor. Not affiliated with, sponsored by, or endorsed by the National Highway Traffic Safety Administration (NHTSA) or the U.S. Department of Transportation. Data comes from official public NHTSA APIs and remains subject to the source's applicable terms and policies.


Important: model-level recalls vs. VIN-level open recalls

This Actor searches NHTSA by:

make + model + model year

That returns general recall campaigns associated with that vehicle configuration.

It does not determine whether a specific individual vehicle currently has an unrepaired/open recall.

A specific vehicle's open-recall status requires a VIN- or license-plate-level lookup. VIN lookup is outside the scope of this Actor version.

Use this Actor for:

  • recall campaign research;
  • model-level safety screening;
  • fleet model audits;
  • recurring recall monitoring by make/model/year;
  • complaint analysis;
  • automotive risk and market research.

Do not represent model-level recall results as proof that a particular VIN has an unrepaired recall.


Who it's for

Fleet managers

Batch-check the makes, models, and model years used in a fleet and schedule recurring recall audits.

Example:

Which recall campaigns are associated with the vehicle models in our fleet?

Run the same saved vehicle list weekly or monthly through Apify Schedules.

Automotive dealers and marketplaces

Research recall campaigns and complaint history associated with vehicle models before listing, sourcing, pricing, or reviewing inventory.

For a specific vehicle's unrepaired recall status, use an authoritative VIN-level lookup separately.

Insurance, warranty, and risk teams

Export structured safety signals such as:

  • recall components;
  • recall consequences;
  • recall remedies;
  • crash flags;
  • fire flags;
  • injury counts;
  • death counts;
  • complaint volume;
  • complaint filing dates.

These records can support analysis and triage, but they are source data — not a standalone risk score or legal conclusion.

Automotive researchers and analysts

Compare NHTSA recall and complaint data across:

  • manufacturers;
  • makes;
  • models;
  • model years;
  • time periods.

Vehicle-data applications

Use the Apify API to integrate normalized NHTSA safety records into internal applications, dashboards, research systems, or monitoring pipelines.


Two data modes

The Actor supports:

recalls
complaints

or both in the same run.

Recalls

Recalls are enabled by default.

For each vehicle, recall records can include:

  • NHTSA campaign number;
  • action number;
  • manufacturer;
  • affected component;
  • recall summary;
  • consequence;
  • remedy;
  • notes;
  • report received date;
  • park-it flag;
  • park-outside flag;
  • over-the-air update flag.

Complaints

Complaints are opt-in because popular vehicle models can have large complaint histories.

Complaint records can include:

  • ODI number;
  • crash flag;
  • fire flag;
  • number of injuries;
  • number of deaths;
  • incident date;
  • complaint filing date;
  • source-provided VIN value;
  • affected components;
  • complaint summary.

Use:

maxComplaintsPerVehicle

and:

complaintsFiledDaysBack

to keep complaint runs focused and predictable.


How it works

You provide a list of vehicles.

Example:

{
"vehicles": [
{
"make": "honda",
"model": "civic",
"modelYear": 2024
},
{
"make": "toyota",
"model": "corolla",
"modelYear": 2023
}
],
"include": ["recalls", "complaints"],
"maxComplaintsPerVehicle": 50,
"complaintsFiledDaysBack": 365,
"maxResults": 1000
}

The Actor queries the appropriate NHTSA endpoint once per vehicle per selected mode.

One invalid vehicle or source failure does not automatically stop the full batch.

Per-vehicle results are recorded in:

STATS.vehicleSummary

while other valid vehicles continue processing.


Input

FieldTypeDefaultDescription
vehiclesarrayrequired1–200 {make, model, modelYear} objects. Case-insensitive duplicates are skipped. Invalid entries become controlled INVALID_VEHICLE results in STATS.vehicleSummary.
includearray["recalls"]Select recalls, complaints, or both.
maxComplaintsPerVehicleint 1–2000100Maximum complaint records written per vehicle, newest first. Discarded records are not billed as dataset results.
complaintsFiledDaysBackint 1–3650Optional filter: only complaints filed within the last N days based on dateComplaintFiled.
maxResultsint 1–100001000Hard run-wide cap on written dataset records.

Example: recall campaign lookup

{
"vehicles": [
{
"make": "honda",
"model": "civic",
"modelYear": 2024
}
],
"include": ["recalls"]
}

Use this mode when you primarily need:

  • recall campaign history;
  • affected components;
  • recall summaries;
  • consequences;
  • remedies;
  • park-it / park-outside indicators.

Example: recalls + complaints

{
"vehicles": [
{
"make": "honda",
"model": "civic",
"modelYear": 2024
},
{
"make": "toyota",
"model": "corolla",
"modelYear": 2023
}
],
"include": ["recalls", "complaints"],
"maxComplaintsPerVehicle": 50,
"maxResults": 1000
}

Example: recent complaint signals

{
"vehicles": [
{
"make": "tesla",
"model": "model 3",
"modelYear": 2023
}
],
"include": ["complaints"],
"complaintsFiledDaysBack": 90,
"maxComplaintsPerVehicle": 200
}

This is useful when you want to focus on recently filed complaints instead of exporting the full historical complaint set.


Output

Every dataset record uses a single normalized contract.

Fields that do not apply to a particular record type are returned as:

null

or:

[]

where appropriate.

The Actor does not invent missing values.


Recall output example

Real NHTSA public recall record structure:

{
"recordType": "RECALL",
"vehicleIndex": 0,
"inputMake": "honda",
"inputModel": "civic",
"inputModelYear": 2024,
"make": "HONDA",
"model": "CIVIC",
"modelYear": "2024",
"manufacturer": "Honda (American Honda Motor Co.)",
"campaignNumber": "23V704000",
"component": "STEERING:RACK AND PINION",
"summary": "Honda (American Honda Motor Co.) is recalling certain 2022-2024 Civic...",
"consequence": "A damaged tire can fail and increase the risk of a crash or injury.",
"remedy": "Dealers will inspect and replace the electric power steering rack...",
"reportReceivedDate": "2023-10-19",
"reportReceivedDateRaw": "19/10/2023",
"parkIt": false,
"parkOutside": false,
"overTheAirUpdate": false,
"scrapedAt": "2026-07-30T12:00:00.000Z"
}

Output fields

Field groupFieldsNotes
CorrelationrecordType, vehicleIndex, inputMake, inputModel, inputModelYearConnects every record back to the original input vehicle.
Vehicle identitymake, model, modelYear, manufacturerValues returned by NHTSA.
RecallcampaignNumber, actionNumber, component, summary, consequence, remedy, notes, reportReceivedDate, reportReceivedDateRaw, parkIt, parkOutside, overTheAirUpdateRecall-campaign data.
ComplaintodiNumber, crash, fire, numberOfInjuries, numberOfDeaths, dateOfIncident, dateOfIncidentRaw, dateComplaintFiled, dateComplaintFiledRaw, vin, components, componentsList[], products[], summaryOwner complaint data.
MetascrapedAt, vinTruncatedBySource, vinMaskedByActorExtraction and VIN-handling metadata.

Built-in data quality checks

The Actor monitors core fields for both record types.

Recall core fields

campaignNumber
component
summary
reportReceivedDate

Complaint core fields

odiNumber
dateComplaintFiled
components

If more than 50% of a record type comes back missing a monitored core field, the run fails explicitly with:

DEAD_FIELDS

and identifies the affected record type and field.

This helps detect upstream API contract problems instead of silently passing incomplete data into downstream systems.


Dates and source formats

The NHTSA recall and complaint endpoints use different source date formats.

The Actor normalizes parsed dates into ISO format while preserving the original source string in a matching:

*Raw

field.

Examples include:

reportReceivedDate
reportReceivedDateRaw
dateComplaintFiled
dateComplaintFiledRaw
dateOfIncident
dateOfIncidentRaw

If a source date cannot be parsed reliably, the normalized value is returned as:

null

instead of being guessed.


VIN privacy in complaint records

NHTSA complaint records can include a source-provided VIN value.

The Actor records whether the VIN arrived truncated from the source through:

vinTruncatedBySource

As a defensive privacy measure, if a longer value is ever returned, the Actor masks everything beyond the 11-character descriptive prefix and sets:

vinMaskedByActor

The Actor does not reconstruct or guess missing VIN serial characters.

This complaint-record VIN handling does not turn the Actor into a VIN recall lookup.

Recall queries in this Actor remain based on:

make + model + model year

Run health and diagnostics

The default key-value store includes:

STATS

with per-vehicle outcomes and operational metrics.

Possible vehicle outcomes include:

OK
NO_RESULTS
INVALID_VEHICLE
FAILED
DUPLICATE_SKIPPED
SKIPPED_MAX_RESULTS

STATS also records information such as:

  • HTTP counters;
  • retries;
  • discarded-record counters;
  • VIN truncation rate;
  • per-record-type field completeness.

Failures are recorded in:

ERRORS

with stable codes such as:

INVALID_INPUT
INVALID_VEHICLE
HTTP_UNAVAILABLE
HTTP_TIMEOUT
HTTP_RATE_LIMITED
API_CONTRACT_CHANGED
DEAD_FIELDS
ALL_VEHICLES_FAILED

Legitimate no-result handling

A vehicle returning no recall or complaint records is not automatically treated as a technical failure.

It can become:

NO_RESULTS

and be tracked through:

STATS.legitimateNoResults

If no vehicle in the complete batch finishes successfully, the Actor fails explicitly with:

ALL_VEHICLES_FAILED

An invalid vehicle or model-year combination can become:

INVALID_VEHICLE

for that vehicle without stopping the rest of the batch.


Request pacing

The Actor intentionally uses conservative request behavior against the public NHTSA APIs.

The current implementation uses:

  • up to 2 concurrent requests;
  • request pacing;
  • exponential backoff for 429 and 5xx responses;
  • one API request per vehicle per selected mode.

Vehicle batches are capped at:

200 vehicles

per run.

For larger portfolios, divide the vehicle list into multiple runs or scheduled tasks.


Pay only for written records

This Actor uses Pay Per Event pricing.

You are billed for records actually written to the dataset.

Records removed by:

  • complaint date filters;
  • per-vehicle complaint caps;
  • run-wide result caps

are not billed as dataset result events.

The Pricing tab on the Actor page is always the authoritative source for current rates and any per-run fee.

Cost controls

Use:

include
maxComplaintsPerVehicle
complaintsFiledDaysBack
maxResults

to control the size and cost of each run.

Because complaint volume can vary significantly between vehicle models, complaint caps are especially useful for predictable runs.


Fleet recall audit

Example saved input:

{
"vehicles": [
{
"make": "ford",
"model": "transit",
"modelYear": 2022
},
{
"make": "ram",
"model": "promaster",
"modelYear": 2023
}
],
"include": ["recalls"]
}

Save it as an Apify Task and run it on a recurring schedule.

This gives you a repeatable model-level recall campaign audit for the vehicles represented in the saved list.


Schedule recurring monitoring

This Actor is well suited to Apify Schedules.

Example weekly setup

  1. Save your vehicle list as an Apify Task.
  2. Go to Console → Schedules → Create schedule.
  3. Add the Task.
  4. Choose the recurring schedule.
  5. Send the resulting dataset into your downstream workflow.

Example Monday 6:00 AM cron:

0 6 * * 1

Possible destinations include:

  • Slack;
  • Google Sheets;
  • CRM systems;
  • databases;
  • webhooks;
  • internal dashboards;
  • automated reporting pipelines.

Your local computer does not need to remain on because the run executes in Apify's cloud.


API usage

Run the Actor and retrieve dataset items in one request:

curl -s "https://api.apify.com/v2/acts/<YOUR_USERNAME>~nhtsa-vehicle-recalls-complaints/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
-X POST \
-H "Content-Type: application/json" \
-d '{"vehicles":[{"make":"honda","model":"civic","modelYear":2024}],"include":["recalls"]}'

This makes the Actor suitable for integration into:

  • fleet-management systems;
  • automotive marketplaces;
  • dealer tools;
  • insurance workflows;
  • warranty analysis;
  • research platforms;
  • safety dashboards;
  • scheduled data pipelines.

Honest limits

Not a VIN-level open recall checker

This Actor searches by:

make + model + model year

It returns recall campaigns associated with that configuration.

It cannot tell you whether a specific physical vehicle has already received a recall repair or currently has an unrepaired recall.

Use an authoritative VIN-level NHTSA recall lookup when that vehicle-specific answer is required.

Complaints are reports, not verified defects

NHTSA owner complaints reflect information submitted to the agency.

A complaint record should not automatically be treated as proof of a defect, causation, or manufacturer liability.

Complaint volume varies

Some vehicle configurations may have few or no complaints, while popular models can have large histories.

Use:

maxComplaintsPerVehicle

to limit output.

Data availability follows NHTSA

The Actor returns data made available by the official NHTSA public APIs.

Source records and availability can change over time.

No numeric NHTSA rate limit is assumed

The Actor uses deliberately conservative pacing and backoff behavior.

Maximum 200 vehicles per run

Larger vehicle portfolios should be divided into multiple tasks or runs.


FAQ

Do I need an NHTSA account?

No.

The Actor uses official public NHTSA APIs without logging in.

Do I need an NHTSA API key?

No.

Does the Actor use browser automation?

No.

It queries public NHTSA API endpoints directly.

Can I check multiple vehicles in one run?

Yes.

The Actor accepts up to:

200

vehicle objects per run.

Can I get both recalls and complaints?

Yes.

Use:

{
"include": ["recalls", "complaints"]
}

Are complaints enabled by default?

No.

The default is:

{
"include": ["recalls"]
}

Complaints are opt-in because complaint histories can be large.

Can I return only recent complaints?

Yes.

Example:

{
"complaintsFiledDaysBack": 90
}

Can I limit complaints per vehicle?

Yes.

Example:

{
"maxComplaintsPerVehicle": 100
}

Does this Actor check whether a specific VIN has an open recall?

No.

This version looks up recall campaigns by make, model, and model year.

Vehicle-specific unrepaired/open recall status requires a VIN- or license-plate-level lookup.

Why can a VIN appear in complaint output if this is not a VIN lookup?

The complaint endpoint can return a source-provided VIN value as part of an individual complaint record.

That is different from using a VIN as the input for vehicle-specific recall status.

Does the Actor reconstruct a truncated VIN?

No.

It never reconstructs or guesses missing serial characters.

What happens if one vehicle is invalid?

That vehicle can receive:

INVALID_VEHICLE

while valid entries in the same batch continue.

What happens when there are no recalls or complaints?

A legitimate empty result can be recorded as:

NO_RESULTS

rather than being treated as a fake technical failure.

What am I charged for?

Records actually written to the dataset.

Records discarded by configured filters or caps are not billed as result events.

Always check the Actor's Pricing tab for current rates and run fees.

Can I schedule it?

Yes.

Recurring fleet or vehicle-model monitoring is one of the intended use cases.

Is this affiliated with NHTSA or the U.S. Department of Transportation?

No.

This is an unofficial community Actor using public NHTSA data.


Data source

The Actor uses official public National Highway Traffic Safety Administration data and API endpoints for:

  • vehicle recalls;
  • vehicle complaints.

Recall and complaint lookups in this Actor are based on:

model year + make + model

The Actor normalizes the source responses into a consistent dataset contract for downstream use.


Part of the JM Forge suite

Also from the same developer:

Support

Report issues in the Issues tab of this actor — I respond within 24h. Feature requests welcome.