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.

Open the Actor on Apify Store

Product Recall Feed — FDA, NHTSA & CPSC Recalls API. Pay per result; see the Store page for current pricing.

The source and its limits

Source idAgency feedOfficial APIFreshness
fda-drugFDA drug enforcement reportsapi.fda.gov/drug/enforcement.json (openFDA)Weekly
fda-deviceFDA medical device enforcement reportsapi.fda.gov/device/enforcement.jsonWeekly
fda-foodFDA food and cosmetics enforcement reportsapi.fda.gov/food/enforcement.jsonWeekly
nhtsaNHTSA recall campaigns: vehicles, equipment, tires, child seatsDOT open data datahub.transportation.gov, dataset 6axg-epimDaily
vehicles inputNHTSA recalls for one make, model and yearapi.nhtsa.gov/recalls/recallsByVehicleDaily
cpscCPSC consumer product recallswww.saferproducts.gov/RestWebServices/RecallDaily

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 daysBack of 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 remedy is null for FDA recalls.

Fields you get

FieldWhat it holds
agency, source, recallIdFDA recall number, NHTSA campaign number or CPSC recall number
date, title, product, productType, descriptionWhat was recalled and when
hazardFDA reason for recall, NHTSA consequence summary, or CPSC hazards
classification, severityFDA 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, stateRecalling firm and distribution as published
remedy, statusCorrective action (NHTSA, CPSC) and status where published
urlopenFDA record query, nhtsa.gov or cpsc.gov recall page
isNewIn 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.