CPSC Product Recall Monitor
Search and monitor product recalls issued by the U.S. Consumer Product Safety Commission (CPSC). This Apify actor queries the official SaferProducts.gov API and returns structured, clean data on recalled consumer products including hazard details, remedy options, manufacturer information, injury reports, and product images. No API key required.
Maintenance Pulse
90/100Cost Estimate
How many results do you need?
Pricing
Pay Per Event model. You only pay for what you use.
| Event | Description | Price |
|---|---|---|
| recall-fetched | Charged per product recall record retrieved from CPSC. | $0.002 |
Example: 100 events = $0.20 · 1,000 events = $2.00
Documentation
Search and monitor product recalls issued by the U.S. Consumer Product Safety Commission (CPSC). This Apify actor queries the official SaferProducts.gov API and returns structured, clean data on recalled consumer products including hazard details, remedy options, manufacturer information, injury reports, and product images. No API key required.
Why Use This Actor?
The CPSC SaferProducts.gov API returns deeply nested JSON with inconsistent field structures. This actor normalizes everything into a flat, predictable schema suitable for spreadsheets, databases, and automated workflows. Key advantages:
- No infrastructure to manage — Runs in the Apify cloud. No servers, rate limiting, or API pagination to handle.
- Scheduled monitoring — Use Apify schedules to run daily or weekly and get notified when new recalls match your criteria. Ideal for brand protection and supply chain compliance.
- Clean, flat output — The raw CPSC API has 13+ nested object arrays (Products, Hazards, Remedies, Manufacturers, etc.). This actor flattens them into a single record per recall.
- No API key required — The CPSC SaferProducts.gov API is free and open. Zero authentication setup.
- Client-side manufacturer filtering — The CPSC API doesn't support manufacturer search, but this actor filters across manufacturers, importers, and distributors locally.
Features
- Search recalls by keyword, product name, manufacturer, or date range
- Client-side manufacturer filtering across manufacturers, importers, and distributors
- Configurable result limits (up to 10,000 records per run)
- Optional product image URLs in output
- Complete hazard and remedy information for each recall
- UPC codes for affected products when available
- Injury report summaries
- Full supply chain details: manufacturers, retailers, importers, distributors, and countries of manufacture
- Flat JSON output ready for spreadsheets, databases, and APIs
How to Use
- Go to the CPSC Product Recall Monitor actor page on Apify
- Click Start to open the input form
- Enter your search criteria (you can combine multiple filters):
- Search Keyword: Searches across recall titles (e.g., "battery fire", "lead paint", "choking hazard")
- Product Name: Filters by specific product type (e.g., "laptop", "stroller", "space heater")
- Manufacturer: Filters results by manufacturer, importer, or distributor name
- Start Date / End Date: Restricts results to a date range in YYYY-MM-DD format
- Set Max Results to control how many records are returned (default: 100)
- Toggle Include Images on or off depending on whether you need product photo URLs
- Click Start and wait for the run to complete
- Download results from the Dataset tab in JSON, CSV, or Excel format
If you leave all filters empty, the actor fetches the most recent recalls from the CPSC database.
Input Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
keyword | string | No | — | Search across recall titles and descriptions (e.g., "battery fire", "lead paint") |
productName | string | No | — | Filter by specific product name (e.g., "laptop", "stroller") |
manufacturer | string | No | — | Filter by manufacturer, importer, or distributor name (client-side) |
recallDateStart | string | No | — | Start date in YYYY-MM-DD format |
recallDateEnd | string | No | — | End date in YYYY-MM-DD format |
maxResults | integer | No | 100 | Maximum number of recalls to return (0 = all matching, max 10,000) |
includeImages | boolean | No | true | Include product image URLs in output |
Input Examples
Search for battery-related recalls in 2024:
{
"keyword": "battery fire",
"recallDateStart": "2024-01-01",
"maxResults": 50,
"includeImages": true
}
Monitor a specific manufacturer's recalls:
{
"manufacturer": "Fisher-Price",
"recallDateStart": "2023-01-01",
"maxResults": 0
}
Child safety product recalls:
{
"keyword": "choking hazard",
"productName": "toy",
"recallDateStart": "2024-06-01",
"maxResults": 100
}
Latest recalls (no filters):
{
"maxResults": 50,
"includeImages": true
}
Tips for Input
- Combine filters for precision — Use a keyword plus a date range (e.g., "choking hazard" + start date "2024-01-01") to narrow results.
- Manufacturer filter — This is applied client-side and searches across manufacturers, importers, and distributors. Use partial names (e.g., "Samsung" will match "Samsung Electronics America").
- Set
maxResultsto 0 for comprehensive data — retrieves all matching records. - Date format — All dates must be in YYYY-MM-DD format.
Output Example
Each recall record in the dataset contains the following fields:
{
"recallId": 25432,
"recallNumber": "24-117",
"recallDate": "2024-03-14",
"title": "Lithium-Ion Battery Packs Recalled Due to Fire and Burn Hazards",
"description": "The battery packs can overheat, posing fire and burn hazards to consumers. The firm has received 23 reports of the battery packs overheating, including 4 reports of fires and 2 reports of minor burn injuries.",
"url": "https://www.cpsc.gov/Recalls/2024/Lithium-Ion-Battery-Packs-Recalled",
"consumerContact": "Contact ExampleCorp toll-free at 800-555-0199 from 8 a.m. to 5 p.m. ET Monday through Friday",
"lastPublishDate": "2024-03-14",
"products": "ExampleCorp 20V Lithium-Ion Battery Pack",
"productTypes": ["Batteries"],
"units": "About 145,000 (In addition, about 12,000 were sold in Canada)",
"hazardDescription": "The battery packs can overheat, posing fire and burn hazards.",
"hazardTypes": ["Fire", "Burn"],
"remedyDescription": "Consumers should immediately stop using the recalled battery packs and contact ExampleCorp for a free replacement.",
"remedyOptions": ["Replace"],
"injuries": ["Two reports of minor burn injuries"],
"manufacturers": "ExampleCorp Manufacturing Ltd.",
"retailers": "Home Depot; Lowe's; Amazon.com",
"importers": "",
"distributors": "ExampleCorp Tools Inc.",
"manufacturerCountries": ["China"],
"upcs": ["012345678901"],
"images": [
"https://www.cpsc.gov/s3fs-public/styles/recall_item/public/ExampleBattery.jpg"
],
"extractedAt": "2024-03-15T10:30:00.000Z"
}
Output Fields
| Field | Type | Description |
|---|---|---|
recallId | number | CPSC internal recall ID |
recallNumber | string | Official recall number (e.g., "24-117") |
recallDate | string | Date the recall was announced |
title | string | Recall headline |
description | string | Full description of the recall and hazard |
url | string | Link to the official CPSC recall page |
consumerContact | string | How consumers should contact the company |
lastPublishDate | string | Date the recall record was last updated |
products | string | Product names (semicolon-separated if multiple) |
productTypes | string[] | Product categories (deduplicated) |
units | string | Number of affected units |
hazardDescription | string | Description of the hazard (semicolon-separated if multiple) |
hazardTypes | string[] | Hazard categories (e.g., "Fire", "Burn", "Choking") — deduplicated |
remedyDescription | string | What consumers should do (semicolon-separated if multiple) |
remedyOptions | string[] | Remedy types (e.g., "Replace", "Refund", "Repair") |
injuries | string[] | Reported injury summaries |
manufacturers | string | Manufacturer names (semicolon-separated) |
retailers | string | Retailer names (semicolon-separated) |
importers | string | Importer names (semicolon-separated) |
distributors | string | Distributor names (semicolon-separated) |
manufacturerCountries | string[] | Countries where the product was manufactured |
upcs | string[] | UPC barcodes for affected products |
images | string[] | Product image URLs (empty if includeImages is false) |
extractedAt | string | ISO timestamp of when the data was extracted |
Use Cases
- Product safety researchers — Search the CPSC database for hazard trends, injury patterns, and recall frequency across product categories
- E-commerce businesses — Check supplier inventory against active recalls before listing products for sale
- Compliance teams — Monitor industry-specific recalls to ensure your products meet current safety standards
- Journalists — Track recall trends, identify repeat offenders, and build data-driven stories about product safety
- Brand protection — Monitor recalls mentioning your company name or product lines, set up alerts for new entries
- Supply chain managers — Track recalls by manufacturer country to assess geographic supply chain risks
- Parents and consumer advocates — Stay informed about child safety recalls for toys, cribs, and baby products
API & Programmatic Access
Python
from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("ryanclinton/cpsc-recall-monitor").call(run_input={
"keyword": "battery fire",
"recallDateStart": "2024-01-01",
"maxResults": 50,
"includeImages": True,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(f"[{item['recallNumber']}] {item['title']}")
print(f" Hazards: {', '.join(item['hazardTypes'])}")
print(f" Remedy: {', '.join(item['remedyOptions'])}")
print(f" Units: {item['units']}")
JavaScript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('ryanclinton/cpsc-recall-monitor').call({
keyword: 'battery fire',
recallDateStart: '2024-01-01',
maxResults: 50,
includeImages: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach(item => {
console.log(`[${item.recallNumber}] ${item.title}`);
console.log(` Hazards: ${item.hazardTypes.join(', ')}`);
console.log(` Remedy: ${item.remedyOptions.join(', ')}`);
});
cURL
# Start the actor
curl -X POST "https://api.apify.com/v2/acts/ryanclinton~cpsc-recall-monitor/runs?token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"keyword": "battery fire",
"recallDateStart": "2024-01-01",
"maxResults": 50
}'
# Fetch results (use defaultDatasetId from the response above)
curl "https://api.apify.com/v2/datasets/DATASET_ID/items?token=YOUR_API_TOKEN&format=json"
How It Works — Technical Details
Input: keyword, productName, manufacturer, dates, maxResults
│
▼
┌─────────────────────────────────────────────────────────┐
│ BUILD API URL │
│ │
│ Base: saferproducts.gov/RestWebServices/Recall │
│ Params: │
│ format=json │
│ RecallTitle={keyword} │
│ ProductName={productName} │
│ RecallDateStart={recallDateStart} │
│ RecallDateEnd={recallDateEnd} │
│ │
│ Note: No pagination — single request returns all matches │
│ Note: No API key required │
└────────────────────────┬────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ FETCH CPSC API │
│ │
│ GET request → parse JSON response │
│ Returns array of CpscRecallRaw objects │
│ (13+ nested arrays per recall record) │
└────────────────────────┬────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ MANUFACTURER FILTER (client-side) │
│ │
│ CPSC API does NOT support manufacturer search │
│ Actor filters locally with case-insensitive substring: │
│ - Manufacturers[].Name │
│ - Importers[].Name │
│ - Distributors[].Name │
│ Matches if ANY entity name includes the search term │
└────────────────────────┬────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ TRANSFORM: Nested → Flat │
│ │
│ For each recall: │
│ Products[] → products (joined with ";") │
│ Products[].Type → productTypes (deduplicated Set) │
│ Products[].NumberOfUnits → units (joined) │
│ Hazards[].Name → hazardDescription (joined) │
│ Hazards[].HazardType → hazardTypes (deduplicated Set) │
│ Remedies[].Name → remedyDescription (joined) │
│ RemedyOptions[].Option → remedyOptions (array) │
│ Injuries[].Name → injuries (filtered non-empty) │
│ Manufacturers/Retailers/Importers/Distributors │
│ → joined with ";" │
│ ManufacturerCountries → array of country names │
│ ProductUPCs[] → upcs (filtered non-empty) │
│ Images[].URL → images (if includeImages=true) │
└────────────────────────┬────────────────────────────────┘
│
▼
Push to Dataset
(cap at maxResults)
CPSC API Parameter Mapping
| Actor Input | CPSC API Parameter | Notes |
|---|---|---|
keyword | RecallTitle | Searches recall titles |
productName | ProductName | Filters by product name |
recallDateStart | RecallDateStart | YYYY-MM-DD format |
recallDateEnd | RecallDateEnd | YYYY-MM-DD format |
manufacturer | (client-side) | Not supported by API — filtered locally |
Data Normalization
The CPSC API returns 13+ nested object arrays per recall. This actor flattens them:
- Multi-value string fields (products, manufacturers, retailers, etc.) are joined with
"; "separators - Typed arrays (hazardTypes, productTypes) are deduplicated using
Setto remove duplicates - Images are conditionally included based on the
includeImagesinput flag - UPCs and injuries are filtered to remove empty strings
How Much Does It Cost?
The CPSC Product Recall Monitor is very lightweight. It makes a single API call to the CPSC SaferProducts.gov endpoint and performs local data transformation.
| Scenario | Records | Estimated Time | Estimated Cost |
|---|---|---|---|
| Quick search (50 recalls) | 50 | ~10 seconds | ~$0.002 |
| Standard run (100 recalls) | 100 | ~15 seconds | ~$0.005 |
| Full database query (1,000+) | 1,000+ | ~30 seconds | ~$0.01 |
The Apify Free plan includes $5 of monthly credits, which is enough for hundreds of runs per month. The CPSC API itself is completely free with no rate limits.
| Plan | Monthly Credits | Approximate Runs |
|---|---|---|
| Free | $5 | ~1,000+ runs |
| Starter ($49/mo) | $49 | ~10,000+ runs |
| Scale ($499/mo) | $499 | ~100,000+ runs |
Tips
- Combine filters for precision — Use a keyword plus a date range to narrow results (e.g., "choking hazard" + start date "2024-01-01")
- Use manufacturer filtering for brand monitoring — Enter a company name to filter across manufacturers, importers, and distributors
- Schedule regular runs — Set up daily or weekly schedules with your search criteria for automatic recall alerts. Pair with Slack or email webhooks
- Set
maxResultsto 0 for comprehensive data — Retrieves all matching records for research or database building - Export to CSV for spreadsheet analysis — The flat JSON output translates cleanly into spreadsheet columns
- Leave all fields empty for latest recalls — Running without any filters returns the most recent recalls, useful for a general safety news feed
Limitations
- US recalls only — This actor queries the US Consumer Product Safety Commission. It does not cover recalls from other countries (Canada, EU, etc.)
- No full-text search — The
keywordparameter maps to the CPSCRecallTitlefield. It searches titles, not the full description text - No manufacturer search at API level — Manufacturer filtering is done client-side after fetching all results, which means the initial API call may return more data than needed
- No pagination — The CPSC API returns all matching results in a single response. Very broad queries may return large datasets
- Date format strict — Dates must be in YYYY-MM-DD format exactly
- Image availability — Not all recall records include product images. The
imagesarray may be empty even whenincludeImagesis true - Historical data — The CPSC database goes back decades, but older records may have fewer structured fields (missing UPCs, images, or detailed hazard types)
Responsible Use
This actor accesses the official, publicly available CPSC SaferProducts.gov API. The data is published by the U.S. federal government for public safety purposes and is in the public domain.
- Use recall data for legitimate safety, compliance, and research purposes
- Do not misrepresent recall information or use it to unfairly disparage companies
- If publishing recall data, attribute it to the CPSC and link to the official recall page
- See Apify's guide on web scraping legality for general guidance
FAQ
Do I need a CPSC API key? No. The SaferProducts.gov API is free and open to the public. No API keys or authentication required.
How often is the CPSC recall database updated? The CPSC publishes new recalls as they are announced, typically several times per week. Data returned by this actor is always live from the official API.
Can I monitor recalls from a specific date forward?
Yes. Set recallDateStart to your desired start date and leave recallDateEnd empty. Schedule the actor to run periodically for ongoing monitoring.
Does manufacturer filtering work for importers and distributors too? Yes. The manufacturer filter searches across manufacturer names, importer names, and distributor names with case-insensitive substring matching.
Can I get UPC codes for recalled products?
Yes. When available in the CPSC database, UPC codes are included in the upcs array. Useful for cross-referencing with inventory systems.
What happens if I leave all filters empty? The actor fetches the most recent recalls from the CPSC database. This is useful for a general safety news feed.
What date format should I use? All dates must be in YYYY-MM-DD format (e.g., "2024-01-01").
Integrations
Connect this actor to your existing tools and workflows:
- Google Sheets — Automatically push new recalls to a shared spreadsheet
- Slack — Get instant notifications when recalls match your criteria
- Zapier — Connect to thousands of apps for custom recall workflows
- Make — Build complex recall monitoring automation
- The Apify API — Programmatic access to results via REST API
- Apify Webhooks — Send recall data to your own endpoint when a run completes
Related Actors
| Actor | Use Case |
|---|---|
| ryanclinton/fda-food-recall-monitor | Search FDA food and dietary supplement recalls — pair for comprehensive consumer safety monitoring |
| ryanclinton/openfda-drug-events | Search FDA adverse drug event reports — covers pharmaceutical safety |
| ryanclinton/nhtsa-vehicle-safety | Search vehicle safety complaints, recalls, and investigations from NHTSA |
| ryanclinton/fda-device-recalls | Search FDA medical device recalls — covers healthcare product safety |
How it works
Configure
Set your parameters in the Apify Console or pass them via API.
Run
Click Start, trigger via API, webhook, or set up a schedule.
Get results
Download as JSON, CSV, or Excel. Integrate with 1,000+ apps.
Use cases
Sales Teams
Build targeted lead lists with verified contact data.
Marketing
Research competitors and identify outreach opportunities.
Data Teams
Automate data collection pipelines with scheduled runs.
Developers
Integrate via REST API or use as an MCP tool in AI workflows.
Related actors
Bulk Email Verifier
Verify email deliverability at scale. MX record validation, SMTP mailbox checks, disposable and role-based detection, catch-all flagging, and confidence scoring. No external API costs.
GitHub Repository Search
Search GitHub repositories by keyword, language, topic, stars, forks. Sort by stars, forks, or recently updated. Returns metadata, topics, license, owner info, URLs. Free API, optional token for higher limits.
Website Content to Markdown
Convert any website to clean Markdown for RAG pipelines, LLM training, and AI apps. Crawls pages, strips boilerplate, preserves headings, tables, and code blocks. GFM support.
Website Tech Stack Detector
Detect 100+ web technologies on any website. Identifies CMS, frameworks, analytics, marketing tools, chat widgets, CDNs, payment systems, hosting, and more. Batch-analyze multiple sites with version detection and confidence scoring.
Ready to try CPSC Product Recall Monitor?
Start for free on Apify. No credit card required.
Open on Apify Store