Government and public records
Product Recalls API: FDA, NHTSA and CPSC in One Feed
Three federal agencies publish US recalls, each with its own API and field names. This Actor reads all three and writes each recall as one record with the same fields: agency, recall id, date, product, hazard, classification, firm, remedy and a link to the official notice.
Product Recall Feed — FDA, NHTSA & CPSC Recalls API. Pay per result; see the Store page for current pricing.
The source and its limits
| Source id | Agency feed | Official API | Freshness |
|---|---|---|---|
fda-drug | FDA drug enforcement reports | api.fda.gov/drug/enforcement.json (openFDA) | Weekly |
fda-device | FDA medical device enforcement reports | api.fda.gov/device/enforcement.json | Weekly |
fda-food | FDA food and cosmetics enforcement reports | api.fda.gov/food/enforcement.json | Weekly |
nhtsa | NHTSA recall campaigns: vehicles, equipment, tires, child seats | DOT open data datahub.transportation.gov, dataset 6axg-epim | Daily |
vehicles input | NHTSA recalls for one make, model and year | api.nhtsa.gov/recalls/recallsByVehicle | Daily |
cpsc | CPSC consumer product recalls | www.saferproducts.gov/RestWebServices/Recall | Daily |
Limits worth knowing
- openFDA allows 240 requests per minute and 1,000 per day per IP without a key. A free openFDA key (
fdaApiKey) raises those limits. - FDA lists a recall in its enforcement report after classifying it, which can be weeks after the firm's announcement. NHTSA and CPSC publish within days. Use a
daysBackof 30 or more for FDA. - CPSC has no server-side keyword or firm search, so the whole date window is downloaded and filtered locally.
- FDA enforcement reports have no remedy field, so
remedyis null for FDA recalls.
Fields you get
| Field | What it holds |
|---|---|
agency, source, recallId | FDA recall number, NHTSA campaign number or CPSC recall number |
date, title, product, productType, description | What was recalled and when |
hazard | FDA reason for recall, NHTSA consequence summary, or CPSC hazards |
classification, severity | FDA Class I/II/III; NHTSA "Do not drive" or "Park outside"; CPSC remedy options. Severity is high, medium or low where it can be derived |
firm, distribution, quantity, country, state | Recalling firm and distribution as published |
remedy, status | Corrective action (NHTSA, CPSC) and status where published |
url | openFDA record query, nhtsa.gov or cpsc.gov recall page |
isNew | In changes mode, for recalls not seen before |
Example output
One CPSC recall (from the Actor's README; long text shortened):
{
"agency": "CPSC",
"source": "cpsc",
"recallId": "27055",
"date": "2026-10-29",
"title": "Bodum USA Recalls 5.9 Million French Press Coffee Makers with Replaceable Glass Carafes Due to Risk of Serious Burn Injury",
"product": "Bodum French Press coffee makers with 8-cup and 12-cup replaceable glass carafes …",
"productType": "Unpowered Coffee Makers or Teapots",
"hazard": "The carafe can unexpectedly break during use if the glass carafe is damaged or cracked …, posing a risk of serious burn injuries.",
"classification": "Repair",
"severity": null,
"firm": "Bodum USA, Inc., of New York, New York",
"remedy": "Consumers should stop using metal spoons or utensils to stir coffee in the glass carafe immediately …",
"status": null,
"quantity": "5.9 million",
"state": null,
"country": "Portugal; Thailand",
"url": "https://cpsc.gov/Recalls/2027/Bodum-USA-Recalls-5-9-Million-French-Press-Coffee-Makers-with-Replaceable-Glass-Carafes-Due-to-Risk-of-Serious-Burn-Injury",
"fetchedAt": "2026-11-01T12:55:01.288Z"
}
Use cases
Daily Class I alert
Schedule fda-drug and fda-food with fdaClassifications: ["Class I"] and onlyNewSinceLastRun. The first run is a baseline; later runs post only new recalls to your webhook.
Recalls on a fleet's vehicles
List vehicles as make, model, year in vehicles. Each lookup returns every NHTSA recall on that vehicle, whatever the date window.
One hazard across agencies
Search a keyword such as lithium across cpsc, nhtsa and fda-device over a year to see related recalls side by side.
How to run it
You need an Apify account and its API token (Console → Settings → API & Integrations). Each run is billed per result to your account; set a maximum total charge for the run to cap spend.
With curl
The sync endpoint starts a run, waits up to 300 seconds and returns the dataset items. Class I food and drug recalls from the last 14 days, new ones only, posted to a webhook:
export APIFY_TOKEN=<your Apify API token>
curl -sS -X POST \
"https://api.apify.com/v2/acts/owlabee~product-recall-feed/run-sync-get-dataset-items" \
-H "Authorization: Bearer ${APIFY_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"agencies": [
"fda-drug",
"fda-food"
],
"daysBack": 14,
"fdaClassifications": [
"Class I"
],
"onlyNewSinceLastRun": true,
"webhookUrl": "https://example.com/hooks/recalls"
}'
From an AI agent (MCP)
Apify hosts an MCP server. This config exposes only this Actor to the agent:
{
"mcpServers": {
"owlabee-product-recall-feed": {
"url": "https://mcp.apify.com/?tools=owlabee/product-recall-feed",
"headers": {
"Authorization": "Bearer ${APIFY_TOKEN}"
}
}
}
}
Then ask, for example: List the Class I FDA drug and food recalls from the last two weeks with the firm, the reason and the distribution.
Python, Node.js and more examples
Runnable curl.sh, python.py, node.mjs and mcp.json files for this Actor are in examples/product-recall-feed on GitHub.
No code: Zapier, Make or n8n
Apify's official apps on these platforms can run this Actor and pass its results on. Step-by-step recipes: FDA, NHTSA and CPSC Product Recalls to Email with n8n.
FAQ
Do I need API keys?
No. All three agencies have public APIs. An openFDA key is optional and only raises openFDA's rate limits.
Why is a recall from the news missing?
FDA lists recalls in enforcement reports after classifying them, often weeks later. NHTSA and CPSC publish faster.
Why is severity null for CPSC?
CPSC publishes no recall class. FDA classes map to high, medium and low, and NHTSA recalls with a do-not-drive or park-outside advisory are high.
What happens if one agency API is down?
That feed yields one error item and the others continue.
Can I see the agency's original fields?
Yes. includeRaw attaches the agency record as a nested raw object.