NHTSA Vehicle Recalls & Complaints Scraper
Pricing
from $4.00 / 1,000 recall results
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
Maintained by CommunityActor 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:
recallscomplaints
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
| Field | Type | Default | Description |
|---|---|---|---|
vehicles | array | required | 1–200 {make, model, modelYear} objects. Case-insensitive duplicates are skipped. Invalid entries become controlled INVALID_VEHICLE results in STATS.vehicleSummary. |
include | array | ["recalls"] | Select recalls, complaints, or both. |
maxComplaintsPerVehicle | int 1–2000 | 100 | Maximum complaint records written per vehicle, newest first. Discarded records are not billed as dataset results. |
complaintsFiledDaysBack | int 1–3650 | — | Optional filter: only complaints filed within the last N days based on dateComplaintFiled. |
maxResults | int 1–10000 | 1000 | Hard 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 group | Fields | Notes |
|---|---|---|
| Correlation | recordType, vehicleIndex, inputMake, inputModel, inputModelYear | Connects every record back to the original input vehicle. |
| Vehicle identity | make, model, modelYear, manufacturer | Values returned by NHTSA. |
| Recall | campaignNumber, actionNumber, component, summary, consequence, remedy, notes, reportReceivedDate, reportReceivedDateRaw, parkIt, parkOutside, overTheAirUpdate | Recall-campaign data. |
| Complaint | odiNumber, crash, fire, numberOfInjuries, numberOfDeaths, dateOfIncident, dateOfIncidentRaw, dateComplaintFiled, dateComplaintFiledRaw, vin, components, componentsList[], products[], summary | Owner complaint data. |
| Meta | scrapedAt, vinTruncatedBySource, vinMaskedByActor | Extraction and VIN-handling metadata. |
Built-in data quality checks
The Actor monitors core fields for both record types.
Recall core fields
campaignNumbercomponentsummaryreportReceivedDate
Complaint core fields
odiNumberdateComplaintFiledcomponents
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:
reportReceivedDatereportReceivedDateRawdateComplaintFileddateComplaintFiledRawdateOfIncidentdateOfIncidentRaw
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:
OKNO_RESULTSINVALID_VEHICLEFAILEDDUPLICATE_SKIPPEDSKIPPED_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_INPUTINVALID_VEHICLEHTTP_UNAVAILABLEHTTP_TIMEOUTHTTP_RATE_LIMITEDAPI_CONTRACT_CHANGEDDEAD_FIELDSALL_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
429and5xxresponses; - 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:
includemaxComplaintsPerVehiclecomplaintsFiledDaysBackmaxResults
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
- Save your vehicle list as an Apify Task.
- Go to Console → Schedules → Create schedule.
- Add the Task.
- Choose the recurring schedule.
- 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:
-
CPSC Product Recalls Monitor — US Consumer Product Safety — Monitor public US consumer-product recall data including hazards, remedies, retailers, images, and UPCs.
-
FDA Recalls: Food, Drug & Device Scraper — Search and normalize FDA food, drug, and medical-device recall data with filters, watchlists, and operational priority scoring.
-
Google Maps Business Leads Scraper — Extract public Google Maps business data including names, addresses, phones, websites, ratings, coordinates, and result rank.
Support
Report issues in the Issues tab of this actor — I respond within 24h. Feature requests welcome.