CPSC Product Recalls Monitor — US Consumer Product Safety avatar

CPSC Product Recalls Monitor — US Consumer Product Safety

Pricing

from $4.00 / 1,000 recall results

Go to Apify Store
CPSC Product Recalls Monitor — US Consumer Product Safety

CPSC Product Recalls Monitor — US Consumer Product Safety

US consumer product recalls from the official CPSC Recall Database API: hazards, remedies, retailers, images and UPCs (when available). Date-window queries with relative windows for daily monitoring. No login. Not affiliated with the CPSC.

Pricing

from $4.00 / 1,000 recall results

Rating

0.0

(0)

Developer

Johnn Mottin

Johnn Mottin

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Selling a recalled product in the US is illegal — and you find out from a customer, a marketplace suspension, or this Actor. Monitor US consumer product recalls straight from the official CPSC Recall Database API — hazards, remedies, injuries, retailers, product images, and UPCs (when reported). No login, no browser.

Not affiliated with, sponsored by, or endorsed by the U.S. Consumer Product Safety Commission (CPSC). All data comes from the official public CPSC Recall Database API and remains subject to CPSC's terms.

Who it's for:

  • E-commerce sellers & marketplaces (Amazon/FBA, Walmart, Shopify): know within your monitoring window when a product you list or resell is recalled — selling recalled products is illegal in the US.
  • Compliance & safety teams: automated recall feed filtered by product type, manufacturer, or retailer.
  • Insurers and product-liability analysts: structured hazard/injury/remedy data for risk models.

How it works

One query per run against the official API, by recall-date window:

  • Relative window (daysBack, default 30) — recommended for scheduled monitoring: the window is computed at run time, so a saved task never needs maintenance.
  • Absolute window (recallDateStart/recallDateEnd, YYYY-MM-DD).

Server-side filters (applied by the CPSC API itself): productName, manufacturer. Client-side filters (applied after fetching): retailer substring and keywords over title/description/products/hazards — you are only charged for records actually written to the dataset; discarded records cost you nothing.

Input

Daily-monitor example (copy-paste ready):

{
"daysBack": 30,
"retailer": "Amazon",
"keywords": ["battery", "fire", "burn"],
"maxResults": 100
}
FieldTypeDefaultDescription
daysBackint 1–36530Relative window when dates are empty. CPSC publishes ~40 recalls/month (measured Jun–Jul 2026), so 30 days is practically never empty
recallDateStart / recallDateEndYYYY-MM-DDAbsolute window (both together); takes precedence
productNamestringServer-side filter (e.g. stroller)
manufacturerstringServer-side filter (e.g. Peony)
retailerstringClient-side substring over the retailers list (e.g. Amazon)
keywordsstring[][]Client-side; any keyword may match title, description, product names or hazard text
maxResultsint100Cap of written records (limit 5,000)

Output (missing = null / [], never invented)

Real record (recall published 2026-07-23 — official public data):

{
"recallId": 10876,
"recallNumber": "26635",
"recallDate": "2026-07-23T00:00:00",
"title": "Aojieni Silicone Recalls Sili Factory Pull String Teething Toys Due to Risk of Serious Injury or Death from Choking...",
"url": "https://www.cpsc.gov/Recalls/2026/Aojieni-Silicone-Recalls-Sili-Factory-Pull-String-Teething-Toys...",
"productNames": ["Sili Factory Pull String Teething Toys"],
"hazards": ["The recalled teething toys... posing a risk of serious injury or death from choking..."],
"injuries": ["None reported"],
"remedyOptions": ["Refund"],
"retailers": ["Online at Amazon.com from January 2025 through April 2026 for about $10."],
"manufacturerCountries": ["China"],
"imageUrls": ["https://www.cpsc.gov/s3fs-public/..."],
"upcs": []
}
FieldTypePresence (measured on 84 real recalls)Notes
recallId, recallNumber, recallDate, title, urlscalar100% — core fields¹
lastPublishDate, description, consumerContactstring~100%
productNames / products[]array100%products[] keeps name/model/type/units per product
hazards[], injuries[], remedies[], remedyOptions[]array100%hazard text is free-form paragraphs (that's why hazard filtering is keyword-based)
retailers[]array100%free-text, includes where/when/price sold — the practical bridge to match recalls against your Amazon/e-commerce catalog
manufacturers[], manufacturerCountries[]array100%
imageUrls[], imageCaptions[]array100%official CPSC product photos
upcs[]array~4% (3/84 in the measured sample)best-effort: CPSC rarely publishes UPCs; when present, join directly with Amazon catalog actors
soldAtLabel, inconjunctionUrls[]scalar/arrayrarebest-effort

¹ Core fields are watched by the built-in health check: if more than 50% come back null the run fails loudly naming the dead field (DEAD_FIELDS) — never a silent broken dataset. STATS (key-value store) records completeness per core field, upcPresenceRate, retries and warnings; ERRORS records failures with stable codes (HTTP_UNAVAILABLE, HTTP_TIMEOUT, INVALID_INPUT, API_CONTRACT_CHANGED, EMPTY_RESULTS, DEAD_FIELDS).

An empty window (API answering 200 with []) is a legitimate success flagged as STATS.legitimateEmptyWindow — distinct from a failed fetch, which always fails the run loudly.

Recalls are a daily/weekly compliance feed — the relative window recomputes every run. Use Apify's own Schedules, not a local scheduler — configure it once and it runs in the cloud whether or not your machine is on.

  1. Save your input as a Task (Console → this Actor → Create task), e.g. daysBack: 7 with your category keywords.
  2. Console → Schedules → Create schedule, add the Task, set the cron (e.g. daily 6am → 0 6 * * *).
  3. Route the dataset to Slack, Sheets, your CRM or webhook via Apify integrations.

Because daysBack is relative, a saved schedule never needs maintenance — the window moves with the run.

API usage examples

Run and get items in one call:

curl -s "https://api.apify.com/v2/acts/<YOUR_USERNAME>~cpsc-recalls-monitor/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
-X POST -H "Content-Type: application/json" \
-d '{"daysBack": 7, "maxResults": 50}'

Weekly category watch (schedule in Console → Schedules):

{ "daysBack": 7, "keywords": ["crib", "stroller", "car seat", "toy"], "maxResults": 100 }

Amazon-seller catalog guard:

{ "daysBack": 30, "retailer": "Amazon", "maxResults": 200 }

Pricing

Billed per record written to the dataset (Pay Per Event) — see the Pricing tab on this page for current rates. Records discarded by the date window, the server-side filters, the client-side filters or maxResults are never billed. Use daysBack, productName, manufacturer, retailer, keywords and maxResults to control exactly what you pay for.

Honest limits

  • CPSC publishes ~500 recalls/year; short windows (1–3 days) can legitimately be empty — that's why the default window is 30 days.
  • upcs is present in only ~4% of recalls (measured); retailer/product-name matching is the reliable join path.
  • Hazard text is free-form; there is no official hazard taxonomy in the API.
  • One API request per run (the API returns the whole window; no pagination).

FAQ

Do I need an account or API key for CPSC? No. The Actor reads the official public CPSC Recall Database API without logging in.

What exactly am I charged for? Per record written to the dataset (Pay Per Event) — everything discarded by filters, windows or caps costs you nothing. The Pricing tab on this page is always the authoritative source for current rates and for any per-run fee.

Can I schedule it? Yes — that is the intended use. See "Schedule it" above.

Is this affiliated with the CPSC? No. This is an unofficial community Actor; all data comes from the official public CPSC Recall Database API and remains subject to CPSC's terms.