CPSC Product Recalls Monitor — US Consumer Product Safety
Pricing
from $4.00 / 1,000 recall results
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
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}
| Field | Type | Default | Description |
|---|---|---|---|
daysBack | int 1–365 | 30 | Relative window when dates are empty. CPSC publishes ~40 recalls/month (measured Jun–Jul 2026), so 30 days is practically never empty |
recallDateStart / recallDateEnd | YYYY-MM-DD | — | Absolute window (both together); takes precedence |
productName | string | — | Server-side filter (e.g. stroller) |
manufacturer | string | — | Server-side filter (e.g. Peony) |
retailer | string | — | Client-side substring over the retailers list (e.g. Amazon) |
keywords | string[] | [] | Client-side; any keyword may match title, description, product names or hazard text |
maxResults | int | 100 | Cap 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": []}
| Field | Type | Presence (measured on 84 real recalls) | Notes |
|---|---|---|---|
recallId, recallNumber, recallDate, title, url | scalar | 100% — core fields¹ | |
lastPublishDate, description, consumerContact | string | ~100% | |
productNames / products[] | array | 100% | products[] keeps name/model/type/units per product |
hazards[], injuries[], remedies[], remedyOptions[] | array | 100% | hazard text is free-form paragraphs (that's why hazard filtering is keyword-based) |
retailers[] | array | 100% | free-text, includes where/when/price sold — the practical bridge to match recalls against your Amazon/e-commerce catalog |
manufacturers[], manufacturerCountries[] | array | 100% | |
imageUrls[], imageCaptions[] | array | 100% | 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/array | rare | best-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.
Schedule it (recommended — cloud, not your desktop)
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.
- Save your input as a Task (Console → this Actor → Create task), e.g.
daysBack: 7with your category keywords. - Console → Schedules → Create schedule, add the Task, set the cron (e.g. daily 6am →
0 6 * * *). - 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.
upcsis 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.