US Product Recalls Monitor — CPSC & FDA Food, Drug, Device avatar

US Product Recalls Monitor — CPSC & FDA Food, Drug, Device

Pricing

$2.50 / 1,000 results

Go to Apify Store
US Product Recalls Monitor — CPSC & FDA Food, Drug, Device

US Product Recalls Monitor — CPSC & FDA Food, Drug, Device

Scheduled change feed of newly published US product recalls from CPSC and openFDA.

Pricing

$2.50 / 1,000 results

Rating

0.0

(0)

Developer

Nick

Nick

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Get newly published US product recalls since your last run from the Consumer Product Safety Commission and openFDA's food, drug and device enforcement reports. Four official sources, one stable JSON schema, built for scheduled alerts and agent workflows.

What does this Actor do?

It reads four separate official recall feeds and merges them into a single record shape. That merge is the work: the CPSC and the FDA describe recalls in genuinely different vocabularies. The CPSC publishes structured hazards and lists manufacturers, importers and distributors separately, but no recall classification. openFDA publishes a Class I/II/III classification and a status, a single recalling firm, and a free-text reason — but no link back to a recall page.

Rather than pretend those are the same thing, this Actor maps both onto one schema and leaves the fields a given source genuinely does not publish as null. The complete original record is always preserved in raw, so nothing is lost.

Records are de-duplicated across sources on source and recall ID, and keyword matching runs across the title, description, reason and firm name together — so searching listeria catches it whether the word appears in the product description or in the reason for the recall.

Who is it for?

  • Retailers and e-commerce operators who must pull affected products from shelves and listings quickly.
  • Quality and compliance teams at manufacturers, importers and distributors tracking their own and their suppliers' recalls.
  • Food-safety and clinical teams watching Class I events in their category.
  • Insurers and risk analysts monitoring recall activity by firm or product type.
  • AI agent builders who want a product-safety tool with a stable output schema.

Use cases

  • Alert the moment a recall names one of your suppliers, by watching their firm name as a keyword.
  • Monitor a hazard type — listeria, battery, laceration — across every source at once.
  • Track Class I drug and device enforcement reports as a regulatory-risk feed.
  • Cross-check a product catalogue against new recalls on a daily schedule.
  • Give an agent a tool that answers "has anything in this category been recalled recently?"

What you get

One row per recall. Any value a source does not publish is null — the field is always present, and the untouched source record stays in raw.

FieldTypeDescription
sourcestringcpsc, fda-food, fda-drug or fda-device
recallIdstringThe source's own recall identifier
recallNumberstringThe source's recall number
titlestringCPSC recall title; for openFDA sources, the first 200 characters of the product description
descriptionstringProduct description
reasonstringCPSC hazards joined together, or openFDA's reason for the recall
firmstringCPSC: the first named manufacturer, importer or distributor. openFDA: the recalling firm
classificationstringRecall class (Class I, Class II, Class III). openFDA sources only
statusstringRecall status. openFDA sources only
actionobjectSource-specific remedy and stock-action details; its shape differs between CPSC and openFDA records (below)
recallDatestringCPSC recall date, or openFDA's report date
urlstringLink to the CPSC recall page. CPSC only — openFDA publishes no per-record URL
rawobjectThe complete original record from the source, unmodified
newSinceLastRunbooleanWhether this recall is newer than the saved watermark
retrievedAtstringISO 8601 timestamp of when this row was fetched

action shapes

action intentionally retains each source's distinct action vocabulary. All fields are nullable.

  • CPSC: { "remedy", "consumerContact", "unitsAffected", "soldAt" } — remedy names joined from Remedies, the consumer contact, the first non-empty Products[].NumberOfUnits, and SoldAtLabel.
  • openFDA: { "status", "voluntaryMandated", "distributionPattern", "quantity", "codeInfo" } — the enforcement status, whether it was voluntary or mandated, distribution pattern, product quantity, and code_info (limited to 300 characters).

Sample output record

An openFDA food enforcement record:

{
"source": "fda-food",
"recallId": "F-1892-2026",
"recallNumber": "F-1892-2026",
"title": "Ready-to-eat chicken salad, 12 oz plastic containers, lot codes 226…",
"description": "Ready-to-eat chicken salad, 12 oz plastic containers, lot codes 226 through 238.",
"reason": "Product may be contaminated with Listeria monocytogenes.",
"firm": "Example Foods Inc.",
"classification": "Class I",
"status": "Ongoing",
"recallDate": "2026-08-18",
"url": null,
"raw": { "recall_number": "F-1892-2026", "…": "…" },
"newSinceLastRun": true,
"retrievedAt": "2026-08-23T09:20:03.551Z"
}

How to use it

Watch a hazard across every source

{
"sources": ["cpsc", "fda-food", "fda-drug", "fda-device"],
"keywords": ["listeria", "battery"],
"maxResults": 100
}

Consumer products only

{
"sources": ["cpsc"],
"maxResults": 50
}

Backfill from an explicit date

{
"sources": ["fda-device"],
"sinceDate": "2026-07-01",
"maxResults": 500
}

Input parameters

InputTypeDescription
sourcesarraySources to monitor: cpsc, fda-food, fda-drug, fda-device. Default: all four
keywordsarrayOptional, case-insensitive. A recall matches if any keyword appears in its title, description, reason or firm name
sinceDatestringOptional ISO 8601 date or timestamp that overrides the saved watermark as the window start
maxResultsintegerMaximum total records across all sources (1–1000). Default: 100

How monitoring works (first run and scheduling)

The first run reads the prior 30 days and saves a watermark once records have been emitted successfully. To get only-new records on every subsequent run, schedule this Actor as a saved Task so runs share the same storage — the watermark lives in the task's key-value store. A fresh unsaved run starts a fresh baseline.

A failed source does not emit partial results and does not advance the watermark, so a transient outage cannot silently skip a window.

Agent-friendly use

Schedule the Actor, read its default dataset, and alert only when newSinceLastRun is true. Filter by source, classification, firm or keywords for a focused workflow.

Honest limitations

  • classification and status are openFDA-only. The CPSC does not publish a recall classification, so those fields are null on every cpsc record. Filtering on "Class I" therefore filters out all consumer-product recalls.
  • url is CPSC-only. openFDA enforcement records carry no per-record web page, so url is null for the three FDA sources. Use recallNumber to look one up.
  • firm is one name, not the full chain. The CPSC often lists several manufacturers, importers and distributors; the normalized field takes the first available. The complete list is in raw.
  • No vehicle recalls. NHTSA is a separate agency with a separate feed and is not a source here.
  • maxResults is a total across sources, consumed in the order sources are listed. If you cap at 100 and the first source has 100 new recalls, later sources contribute nothing that run.
  • Reporting lag is the agencies'. A recall announced today may enter the enforcement report several days later, especially for openFDA.

Reliability

Per-source diagnostics are written to the RUN_SUMMARY key-value record — never into your dataset. Failures carry structured reason codes and prevent the watermark from advancing.

Every record carries retrievedAt and keeps the untouched source record in raw, so you can check any row against the agency yourself.

Maintained against the upstream APIs. If a source changes its schema or an endpoint moves, report it through the Issues tab and it gets fixed.

Integrations

Connect this Actor to Make, Zapier, n8n, Slack, Google Sheets, Airtable or any HTTP endpoint through Apify integrations. A daily Task can post new Class I recalls into a compliance channel, or fire a webhook so a catalogue check starts the moment a recall lands. Datasets export as JSON, CSV, Excel, XML, RSS or HTML.

API usage

curl -X POST "https://api.apify.com/v2/acts/oneshotventure~recalls-monitor/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"sources": ["cpsc", "fda-food"], "keywords": ["listeria"], "maxResults": 100}'

Python, JavaScript, PHP and CLI clients are documented under Apify API clients.

Use with AI agents (MCP)

This Actor is callable from any MCP-compatible client — Claude, Cursor, VS Code or your own agent — through the Apify MCP server. The input schema is fully described and every record uses one stable, flat JSON shape, so an agent can call it and read the result without a parsing step. Because it reads official government APIs rather than a rendered page, the answer an agent gets is the same one the source publishes.

Frequently asked questions

Is there a free FDA recall API?

Yes — openFDA publishes food, drug and device enforcement reports as an open API, and the CPSC publishes its own recall API. This Actor is the merging, filtering and change-feed layer over all four.

How do I get alerts for new product recalls?

Set your sources and keywords, save the Actor as a Task, schedule it daily, and connect the Task to Slack, email or a webhook through Apify integrations.

What is the difference between a Class I, II and III recall?

The FDA classifies by risk: Class I means a reasonable probability of serious harm or death, Class II means temporary or reversible harm, Class III means unlikely to cause harm. The classification is published by openFDA only — CPSC records have no equivalent field.

Does this cover vehicle recalls?

No. Vehicle and tyre recalls are published by NHTSA, which is not one of this Actor's sources.

Can I monitor recalls for a specific company?

Yes — put the firm name in keywords. Keyword matching runs across the firm name as well as the title, description and reason.

Why is url empty on my FDA records?

Because openFDA enforcement reports do not include a per-record web page. CPSC records do, and carry it in url. For FDA records, the recallNumber is the identifier to search on.

How fresh is the data?

Each run reads the agency APIs live. The lag that matters is the agencies' own: a recall announced publicly can take days to appear in the enforcement report dataset.

Disclaimer

Unofficial independent tool. Not affiliated with or endorsed by the CPSC or FDA. Data is public government data retrieved from their official public APIs.