US Product Recalls API: CPSC, FDA, NHTSA and USDA in One Schema avatar

US Product Recalls API: CPSC, FDA, NHTSA and USDA in One Schema

Pricing

$5.00 / 1,000 recall records

Go to Apify Store
US Product Recalls API: CPSC, FDA, NHTSA and USDA in One Schema

US Product Recalls API: CPSC, FDA, NHTSA and USDA in One Schema

Product recall API that returns FDA recall, CPSC recall, NHTSA recall and USDA recall records from the four official US sources in one clean JSON schema, filterable by date, keyword, UPC, firm and class.

Pricing

$5.00 / 1,000 recall records

Rating

0.0

(0)

Developer

Landon Brewington

Landon Brewington

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

One call, four official US recall authorities, one clean JSON schema. This Actor is a product recall API that pulls CPSC recalls (consumer products), FDA enforcement reports (food, drug and medical device recalls from openFDA), NHTSA vehicle recalls and USDA FSIS meat, poultry and egg recalls, normalizes every record into the same fields, and lets you filter by date, keyword, UPC, firm and FDA class. Built for recall monitoring by people and by AI agents.

What it does

  • Queries the official government feeds directly: saferproducts.gov (CPSC), api.fda.gov (openFDA enforcement), api.nhtsa.gov (NHTSA) and fsis.usda.gov (USDA FSIS). No scraping of HTML, no login, no third-party data.
  • Returns one record per recall with the same 20 fields no matter which agency published it: id, source, recallNumber, title, productDescription, firm, hazard, classification, remedy, status, recallDate, reportDate, distribution, statesAffected, upcs, units, injuries, imageUrls, url, plus raw with the untouched agency record.
  • Date window (since, until or sinceDays), keyword search, UPC lookup, firm or brand filter, FDA Class I / II / III filter, and NHTSA lookup by vehicle make, model and year.
  • Newest first, deduplicated, capped at maxItems. A run with no input returns the last 7 days from every source, at most 100 records.
  • A failing or blocked source never fails the run: it is reported in the run summary (SUMMARY record in the key-value store) and the other sources still return data.

Who it is for

  • E-commerce and marketplace compliance teams that must pull recalled listings fast.
  • Retail and supply-chain QA that check incoming goods against recall lists by UPC or supplier.
  • Product liability, insurance and consumer-safety analysts who track recalls by hazard or class.
  • Food safety and healthcare teams monitoring FDA and USDA Class I recalls.
  • AI agents that need structured recall data as a tool call (see the MCP section).

Quick start

  1. Open the Actor in Apify Console and press Start. The default input returns the last 7 days from all sources.
  2. For a daily monitor, schedule the Actor with {"sinceDays": 1}.
  3. To check one product, pass {"upc": "094922980045"} or {"query": "infant formula", "sinceDays": 365}.
  4. For a vehicle, pass {"sources": ["nhtsa"], "vehicleMake": "Ford", "vehicleModel": "F-150", "vehicleYear": "2024"}.
  5. Read results from the default dataset (JSON, CSV or Excel) or the API: https://api.apify.com/v2/datasets/<datasetId>/items.

Input example

{
"sources": ["cpsc", "fda_food", "fda_drug", "fda_device", "nhtsa", "usda_fsis"],
"sinceDays": 30,
"query": "listeria",
"fdaClassification": "I",
"maxItems": 200
}

All fields are optional.

FieldTypeDefaultMeaning
sourcesarray of stringsall sixAny of cpsc, fda_food, fda_drug, fda_device, nhtsa, usda_fsis
sinceDaysinteger 1 to 3657Look-back window when since is empty
sinceISO dateemptyInclusive start date, overrides sinceDays
untilISO datetodayInclusive end date
querystringemptyCase-insensitive keyword over title, product, firm and hazard
upcstringemptyUPC / GTIN digits that must appear in the record
firmstringemptyCompany name fragment
fdaClassificationany, I, II, IIIanyApplies to the three FDA sources
vehicleMake, vehicleModel, vehicleYearstringsemptyAll three are required for NHTSA results
maxItemsinteger 1 to 5000100Cap on records across all sources
useProxyForUsdabooleanfalseRetry USDA through Apify residential proxy if the feed refuses the request

Output example

A real record from a run (the raw object is shortened here):

{
"id": "usda_fsis:026-2026",
"source": "usda_fsis",
"recallNumber": "026-2026",
"title": "Kayem Foods Inc. Recalls Meat and Poultry Products Due to Possible Temperature Abuse",
"productDescription": "Full product list available in PDF format - Various RTE meat and poultry products bearing EST. M/P 7839, EST. P 20935A and EST. M 9520 inside the USDA mark of inspection.",
"firm": "Kayem Foods Inc.",
"hazard": "Processing Defect",
"classification": "I",
"remedy": "Consumers should not consume the product and should throw it away or return it to the place of purchase.",
"status": "Active",
"recallDate": "2026-10-17",
"reportDate": "2026-10-17",
"distribution": "Nationwide",
"statesAffected": ["Nationwide"],
"upcs": [],
"units": 1584361,
"injuries": "There have been no confirmed reports of illness due to consumption of these products.",
"imageUrls": [],
"url": "https://www.fsis.usda.gov/recalls-alerts/kayem-foods-inc--recalls-meat-and-poultry-products-due-possible-temperature-abuse",
"raw": {
"field_recall_number": "026-2026",
"field_recall_type": "Active Recall",
"field_risk_level": "High - Class I",
"field_states": ["Nationwide"],
"field_establishment": ["Kayem Foods Inc."],
"field_recall_reason": ["Processing Defect"],
"field_last_modified_date": "2026-10-17"
}
}

Field notes:

  • id is <source>:<recallNumber> and is stable across runs, so you can deduplicate against your own store.
  • classification is "I", "II" or "III" for FDA and USDA records and null for CPSC and NHTSA, which do not classify.
  • recallDate is the agency's announcement or initiation date; reportDate is when the agency published or last updated the record. FDA records are selected by reportDate, the others by recallDate.
  • statesAffected is parsed from free text. ["Nationwide"] means the agency said nationwide. An empty array means the agency did not say.
  • upcs holds codes the agency printed in the notice. Many recalls list none; search productDescription and raw for lot codes.
  • raw is the full agency record, so nothing is lost by normalization.

Pricing in plain words

This Actor uses pay-per-event pricing: $0.005 per recall record written to the dataset (the result-item event), plus Apify's standard tiny Actor start fee. There is no subscription. A default run (up to 100 records) costs at most 50 cents. Ten records cost 5 cents. You set the maximum you are willing to spend on each run; when the limit is reached the Actor stops writing records and still finishes successfully. Platform compute is included in the price.

Limits and freshness per source

SourceCoverageFreshnessLimits
cpscAll CPSC consumer product recalls, with product photos, retailers, units, hazards and remediesSame day as the CPSC press releaseDate filter is on the recall date. CPSC lists UPCs only for some recalls.
fda_food, fda_drug, fda_deviceFDA enforcement reports (recalls classified by FDA)openFDA updates weekly, usually on Wednesdays; reportDate is the weekly enforcement report date, so a recall can appear 1 to 6 weeks after the firm started itWithout a key openFDA allows 1,000 requests per day per IP; one run uses 1 request per 1,000 records per source. Set the OPENFDA_API_KEY environment variable on the Actor for 120,000 per day.
nhtsaNHTSA vehicle safety recalls for one make, model and model yearLive NHTSA APIThe public API has no "recalls since date" search, so this source returns results only when vehicleMake, vehicleModel and vehicleYear are all set, and the date window does not apply to it.
usda_fsisUSDA FSIS meat, poultry and egg product recalls and public health alerts since 2014Live feed; the full feed (about 1.7 MB) is downloaded once per run in under a second and cached in the run's key-value storeThe feed sits behind a bot filter that sometimes refuses data-center requests. If that happens the run reports a warning for this source; turn on useProxyForUsda to retry through Apify residential proxy (billed to your account, about 2 MB per fetch).

Other limits: records are capped at maxItems (max 5,000) after sorting newest first, so with a wide window and a low cap the newest source wins. Each run is independent; for a change feed, run daily with sinceDays: 1 or 2 and deduplicate on id.

Use it from an AI agent (Apify MCP server)

Connect your agent to https://mcp.apify.com (see the Apify MCP docs for Claude, Cursor, VS Code and others). Then:

  1. Search for the tool: search-actors with the query "product recalls".
  2. Read the schema: fetch-actor-details for this Actor returns the input fields above and the dataset schema.
  3. Call it: call-actor with input {"sinceDays": 3} for a three-day recall digest, or {"upc": "094922980045", "sinceDays": 365} to check one product, or {"sources": ["nhtsa"], "vehicleMake": "Toyota", "vehicleModel": "Camry", "vehicleYear": "2023"} for a vehicle.
  4. Read results with get-dataset-items. Every record has the same fields, so one parser handles all four agencies.

The Actor runs with limited permissions and charges only pay-per-event events, so it works with Apify's agentic payments.

Data sources and attribution

This Actor is not affiliated with any of these agencies. Always confirm details on the official notice linked in url before acting on a recall.

FAQ

Why does a default run return only a handful of records? The default window is the last 7 days. CPSC and USDA publish continuously, but openFDA publishes enforcement reports weekly, so a 7-day window can contain zero FDA rows. Use sinceDays: 30 for a fuller picture.

Can I look up one product? Yes. Pass upc for a barcode match or query for a keyword match against title, product description, firm and hazard. Combine with sinceDays: 365 to search a year.

Why is NHTSA empty unless I give a vehicle? NHTSA's public API has no date search, so vehicle recalls are returned only when vehicleMake, vehicleModel and vehicleYear are all set.

Is the data official? Every record comes straight from the agency's own API (saferproducts.gov, api.fda.gov, api.nhtsa.gov, fsis.usda.gov) and the untouched source record is kept in raw.

What does it cost? $0.005 per recall record plus Apify's tiny start fee. A default run never costs more than 50 cents. Failed sources are reported, not charged.

How do I monitor recalls daily? Schedule the Actor in Apify Console with {"sinceDays": 1} and connect a webhook or the Apify integration for Slack, email or Google Sheets.

Support

Open an issue on the Actor's Issues tab in Apify Console. Include the run id and the input you used.