CPSC Product Recalls Scraper
Pricing
from $1.61 / 1,000 item extracteds
CPSC Product Recalls Scraper
Search official CPSC product recalls and export normalized hazards, incidents, remedies, companies, identifiers, images, and source records.
Pricing
from $1.61 / 1,000 item extracteds
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Search official CPSC product recalls and export normalized product, company, hazard, incident, remedy, date, identifier, image, and source records.
The Actor reads the public U.S. Consumer Product Safety Commission recall service. Use it for a one-time safety analysis, exact Recall ID lookup, or a scheduled monitor that returns only records not delivered by earlier runs in the same state scope.
What does this CPSC recall Actor do?
The Actor turns official CPSC recall responses into integration-ready dataset rows.
It can:
- search an inclusive recall-date range;
- look back a configurable number of days from today;
- retrieve up to 100 exact CPSC Recall IDs;
- filter by any-field, product, company, hazard, or remedy text;
- sort matching notices before applying an output limit;
- include official product images and captions;
- remember emitted Recall IDs for recurring
onlyNewmonitors; - retain official recall and API source links on every row.
It uses the official SaferProducts.gov JSON service rather than interpreting search-engine snippets or aggregating unofficial notices.
Who is it for?
Retail and marketplace compliance teams can compare newly published recalls against product catalogs.
Manufacturers and importers can monitor company, brand, model, and hazard terms relevant to their products.
Insurance and product-safety analysts can build structured histories of incidents, hazards, and remedies.
Data engineers can send normalized recall rows to a warehouse, spreadsheet, webhook, or review queue.
Researchers and journalists can retrieve an exact official record with its identifying details and source URL.
Why use this Actor?
CPSC records contain useful nested structures that are inconvenient to normalize repeatedly.
This Actor provides:
- stable camelCase field names;
- separate arrays for products, manufacturers, importers, retailers, and distributors;
- convenient flattened product names and image URLs;
- hazard, incident, remedy, and remedy-option fields kept distinct;
- deterministic filtering applied to the normalized official record;
- explicit transient retry limits and input validation;
- state scopes that prevent unrelated recurring monitors from contaminating each other.
No proxy, browser, login, cookie, or private credential is required for the current official API route.
What CPSC recall data is extracted?
| Field | Meaning |
|---|---|
recallId | Stable numeric CPSC Recall ID |
recallNumber | Public recall number |
recallDate | Official recall date |
lastPublishDate | Most recent CPSC publication date |
title | Official recall headline |
description | Product identification and recall description |
products | Product names, models, types, categories, and unit counts |
manufacturers | Named manufacturers and available company IDs |
importers | Named importers |
retailers | Named retailers and sales-channel details |
distributors | Named distributors |
manufacturerCountries | Reported countries of manufacture |
productUpcs | UPC values when CPSC supplies them |
hazards | Official hazard statements |
incidents | CPSC injury or incident-report text |
remedies | Full consumer remedy instructions |
remedyOptions | Labels such as Replace, Repair, or Refund |
consumerContact | Official response contact details |
images | Official image URLs and captions |
sourceUrl | Official CPSC notice page |
sourceApiUrl | Exact official API request for the Recall ID |
matchedFilters | Filters that selected the row |
isNew | Whether the selected monitor state had seen the ID |
scrapedAt | UTC extraction timestamp |
Empty arrays or strings mean the upstream CPSC record did not supply that value.
Getting started
- Open the Actor input page.
- Choose a date scope with
sinceDays, or enter exactrecallIds. - Add optional safety filters.
- Set
maxItemsto the largest dataset you need. - Keep
includeImagesenabled when image evidence is useful. - Run the Actor.
- Open the Recall overview dataset view or export JSON, CSV, Excel, XML, or RSS.
- For recurring work, schedule the Actor and enable
onlyNew.
The default input searches the last 30 days and saves up to 100 recalls.
Input parameters
Date or exact-record scope
sinceDays— days beforeendDateor today; from 1 to 3,650.startDate— optional inclusiveYYYY-MM-DDstart.endDate— optional inclusiveYYYY-MM-DDend.recallIds— optional list of up to 100 numeric Recall ID strings.
When recallIds is not empty, date fields are ignored.
Safety filters
All supplied filters use case-insensitive substring matching and are combined with AND logic.
keywordsearches titles, descriptions, products, companies, hazards, incidents, remedies, countries, and contact text.productKeywordsearches normalized product identity fields.companyKeywordsearches manufacturers, importers, retailers, and distributors.hazardKeywordsearches official hazard statements.remedyKeywordsearches remedy instructions and option labels.
Output controls
maxItemslimits matching records after sorting.sortByisnewestoroldest.includeImagescontrols theimagesandimageUrlsfields.
Monitoring controls
onlyNewskips Recall IDs already emitted to the selected state scope.stateKeygives a monitor a stable independent scope name.
If stateKey is empty, the Actor derives a scope from the filters and exact Recall IDs. Date windows and output limits do not change that derived identity, so a rolling scheduled search keeps its history.
Example inputs
Search recent recalls
{"sinceDays": 365,"maxItems": 25,"sortBy": "newest","includeImages": true}
Retrieve one official Recall ID
{"recallIds": ["10937"],"maxItems": 1,"includeImages": true}
Monitor fire-hazard notices
{"sinceDays": 365,"hazardKeyword": "fire","onlyNew": true,"stateKey": "fire-hazard-compliance","maxItems": 100,"sortBy": "newest"}
Schedule the third input with the same key-value store to receive unseen matching IDs on later runs.
Output example
A direct lookup of Recall ID 10937 produces a row shaped like this:
{"recallId": 10937,"recallNumber": "26716","recallDate": "2026-08-20","title": "CCM Hockey U.S. Recalls FMHVR Hybrid Visors and ACCHVR Replacement Visor Accessories Due to Risk of Injury from Laceration or Impact Hazards","productNames": ["FMHVR Hybrid Visors and ACCHVR Replacement Visor Accessories"],"hazards": ["The recalled hockey visors and replacement visor accessories can crack upon impact, posing a risk of injury due to laceration or impact hazards."],"incidents": ["None reported"],"remedyOptions": ["Replace"],"manufacturerCountries": ["China"],"source": "U.S. Consumer Product Safety Commission (CPSC)","isNew": true}
The full row also contains products, parties, remedy instructions, consumer contact, images, source URLs, and extraction metadata.
How much does it cost to export CPSC product recalls?
The Actor uses pay-per-event pricing:
- a one-time $0.0005 start fee per run;
- one
itemevent for each normalized recall row saved.
Per-record prices decrease across Apify pricing tiers:
| Tier | Price per recall |
|---|---|
| Free | $0.003082 |
| Bronze | $0.00268 |
| Silver | $0.0020904 |
| Gold | $0.001608 |
| Platinum | $0.001072 |
| Diamond | $0.0007504 |
At the Bronze tier, 1 result costs about $0.00318, 25 results cost about $0.0675, and 100 results cost about $0.269, including the start fee.
No item fee is charged for filtered-out, duplicate, already-seen, malformed, or failed records.
Build a recurring product-safety monitor
Create one saved Task per compliance scope.
For example:
- set
sinceDaysto cover the time between schedules plus a safety buffer; - add a company, product, or hazard filter;
- enable
onlyNew; - choose a durable
stateKey; - schedule daily or weekly runs;
- connect the dataset to email, Slack, a webhook, Google Sheets, or your warehouse.
The first run emits current matching recalls. Later runs using the same key-value store emit only unseen Recall IDs.
Changing the stateKey creates a fresh monitor. Purging or replacing the key-value store also resets history.
Export and integration workflows
Common workflows include:
- compare
productNames, models, and UPCs with a catalog; - route
hazardsandincidentsinto a risk-review queue; - notify category owners when
remedyOptionscontains Refund or Stop Sale language; - enrich a compliance case using exact
recallIds; - archive official
sourceUrland image evidence; - join company names against vendor master data;
- track changes using
lastPublishDatein a warehouse.
Apify datasets can be downloaded as JSON, JSONL, CSV, Excel, XML, and RSS.
Run with the Apify API
Replace APIFY_TOKEN with your token.
cURL
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~cpsc-recalls-remedies-monitor/runs?token=APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"sinceDays":30,"hazardKeyword":"fire","maxItems":25}'
To wait for results in one request:
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~cpsc-recalls-remedies-monitor/run-sync-get-dataset-items?token=APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"recallIds":["10937"],"maxItems":1}'
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/cpsc-recalls-remedies-monitor').call({sinceDays: 365,companyKeyword: 'CCM',maxItems: 100,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
from apify_client import ApifyClientimport osclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/cpsc-recalls-remedies-monitor').call(run_input={'sinceDays': 365,'remedyKeyword': 'refund','maxItems': 100,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
Use with Apify MCP
Claude Code MCP setup
Add the Actor to Claude Code:
claude mcp add --transport http apify \"https://mcp.apify.com?tools=automation-lab/cpsc-recalls-remedies-monitor"
Claude Desktop, Cursor, and VS Code MCP setup
Claude Desktop, Cursor, and VS Code can use this HTTP MCP configuration in the MCP server settings supported by each client:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/cpsc-recalls-remedies-monitor"}}}
Example prompts showing MCP usage
After setup, ask the MCP client to run the Actor with prompts such as:
- “Find CPSC recalls from the last 90 days involving fire hazards.”
- “Export official CPSC Recall ID 10937 and summarize products and remedies.”
- “Run my saved fire-hazard monitor and list only newly seen Recall IDs.”
Reliability and retry behavior
The official JSON service is called directly with a 30-second request timeout.
Network errors, HTTP 429, and temporary server errors are retried at most twice after the initial request. Backoff includes jitter.
Stable client errors fail immediately. Unexpected HTML or a changed response shape is treated as an upstream error, not as a successful empty dataset.
The Actor intentionally has no automatic residential proxy or browser fallback. The selected official endpoint currently requires neither, and excluding them keeps runtime and transfer cost predictable.
Limits and data freshness
- Results reflect records returned by the official CPSC service at run time.
- The Actor does not create or verify safety findings independently.
- CPSC can omit a manufacturer, UPC, image, incident, or other field.
- A date query retrieves the official response before local filtering and
maxItemsare applied. - Exact mode supports up to 100 Recall IDs per run.
- A monitor stores up to 10,000 seen IDs per state scope.
onlyNewcompares Recall IDs, not field-level revisions.- Scheduling, notifications, and downstream comparisons are configured in Apify rather than performed inside one run.
For a complete audit trail, retain dataset rows and compare lastPublishDate or the full normalized record between runs.
Legality
The Actor accesses public official U.S. government recall records without login or personal-data collection. Users remain responsible for how they combine, redistribute, or act on the output and should verify consequential decisions against the current official notice.
Responsible use
CPSC recall notices are official public U.S. government safety information.
Use the data responsibly:
- follow applicable laws and organizational policies;
- preserve official source links when redistributing records;
- do not present automated matching as legal or safety advice;
- verify high-impact decisions against the current CPSC notice;
- protect any private catalog or supplier data joined downstream.
This Actor does not replace CPSC guidance, legal counsel, product testing, or a formal recall-management process.
Troubleshooting
The dataset is empty
Check the date range and remove filters one at a time. All supplied filters must match the same recall.
An empty exact-ID result can mean the official service does not recognize that ID.
A scheduled monitor returned no rows
That can be correct: all matching Recall IDs may already exist in its state. Disable onlyNew, change stateKey, or use a fresh key-value store to inspect the current full match set.
The run says a date is invalid
Use an exact YYYY-MM-DD value, such as 2026-08-01. The start date cannot be after the end date.
Why is a company absent?
CPSC may identify an importer or retailer but leave the manufacturer array empty. Check all party arrays and the description.
Why are images missing?
Confirm includeImages is enabled. Some official records do not provide images.
The official service failed
Inspect the run log for status and retry details. Retry later only for a temporary CPSC outage; deterministic input errors require an input correction.
Related Automation Lab Actors
- FDA Food Recalls Scraper for U.S. food enforcement and recall records.
- NHTSA Vehicle Recall Campaigns for make, model, and model-year vehicle recall campaigns.
CPSC covers consumer products. It is not a substitute for FDA food or medical-device recall sources, or NHTSA vehicle campaigns.
FAQ
Does this Actor use official data?
Yes. It reads the public SaferProducts.gov Recall REST service and retains official CPSC notice URLs.
Can I query one recall directly?
Yes. Supply its numeric CPSC Recall ID as a string in recallIds.
Can I search several fields at once?
Yes. Filters use AND logic. For example, companyKeyword: "CCM" and hazardKeyword: "impact" require both to match.
Does maxItems reduce the API date range?
No. The official date response is normalized and filtered first, then sorted and limited.
Does monitor mode detect changed text?
No. It tracks whether a Recall ID has been emitted. Use lastPublishDate and downstream comparison when field-level changes matter.
Are filtered or duplicate rows charged?
No. The per-record event is charged only for normalized rows saved to the default dataset.
Can I use a proxy?
The current input intentionally does not expose proxy configuration because the official JSON service works directly. This avoids needless transfer cost and configuration complexity.
Can I publish alerts directly from the Actor?
Use Apify schedules and integrations to send dataset results to your chosen notification system. The Actor itself produces structured records and monitor state.