# CPSC Product Recalls Scraper (`compute-edge/cpsc-product-recalls-scraper`) Actor

Extract product recall data from the U.S. Consumer Product Safety Commission (CPSC) database. Search by keyword, date range, or recall number. Get hazards, injuries, manufacturers, retailers, remedies, and product details for 9,000+ recalls.

- **URL**: https://apify.com/compute-edge/cpsc-product-recalls-scraper.md
- **Developed by:** [Compute Edge](https://apify.com/compute-edge) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 0 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## CPSC Product Recalls Scraper

Extract **product recall data** from the U.S. **Consumer Product Safety Commission (CPSC)** database at [SaferProducts.gov](https://www.saferproducts.gov). This Actor provides structured access to thousands of consumer product recalls with full details on hazards, injuries, manufacturers, retailers, remedies, and affected products.

The CPSC maintains the most comprehensive database of **consumer product recalls in the United States**, covering everything from children's toys and household appliances to sporting goods and electronics. With over **9,000 recall records** spanning decades of enforcement actions, this data is essential for **product safety research**, **supply chain compliance**, **competitive intelligence**, and **consumer protection analysis**.

This scraper wraps the official SaferProducts.gov REST API, transforming raw recall data into a **clean, structured format** with both flattened fields for easy analysis and raw nested data for advanced use cases. Each recall record includes the recall number, date, hazard descriptions, injury reports, affected product details, manufacturer and retailer information, country of origin, remedy options, and direct links to the official CPSC recall page.

### Key Features

- **Search by keyword** -- Find recalls matching specific terms like "battery", "fire", "children", or brand names
- **Filter by date range** -- Target recalls from a specific time period (e.g., all 2024 recalls)
- **Look up specific recalls** -- Retrieve a single recall by its CPSC recall number
- **Flattened output** -- Manufacturer names, hazard types, injury types, and remedies extracted into simple comma-separated fields
- **Full raw data** -- Nested arrays preserved for users who need complete detail
- **No authentication required** -- Uses the public SaferProducts.gov API
- **Fast execution** -- Single API call returns all matching results

### Output Data Fields

| Field | Type | Description |
|-------|------|-------------|
| `recallId` | Number | Internal CPSC recall ID |
| `recallNumber` | String | Official CPSC recall number (e.g., "24284") |
| `recallDate` | String | Date the recall was issued |
| `title` | String | Full recall title |
| `description` | String | Detailed description of the recalled product |
| `url` | String | Link to the official CPSC recall page |
| `consumerContact` | String | Contact information for consumers |
| `lastPublishDate` | String | Date the recall was last updated |
| `productNames` | String | Comma-separated list of recalled product names |
| `productModels` | String | Comma-separated model numbers |
| `numberOfUnits` | String | Number of units affected |
| `manufacturers` | String | Comma-separated manufacturer names |
| `retailers` | String | Comma-separated retailer names |
| `importers` | String | Comma-separated importer names |
| `distributors` | String | Comma-separated distributor names |
| `manufacturerCountries` | String | Countries where products were manufactured |
| `hazards` | String | Comma-separated hazard descriptions |
| `hazardTypes` | String | Comma-separated hazard type classifications |
| `injuries` | String | Comma-separated injury types reported |
| `remedies` | String | Comma-separated remedy descriptions |
| `remedyOptions` | String | Remedy options (e.g., "Refund", "Replace") |
| `imageUrls` | Array | URLs of product images |
| `productUPCs` | Array | UPC codes for affected products |

Raw nested arrays are also included (`rawProducts`, `rawManufacturers`, `rawRetailers`, `rawImporters`, `rawDistributors`, `rawHazards`, `rawInjuries`, `rawRemedies`, `rawRemedyOptions`, `rawImages`, `rawInconjunctions`) for users who need the full original data structure.

### How to Scrape CPSC Product Recalls

1. Go to this Actor's page on the Apify Store
2. Click **Try for free**
3. Enter your search criteria:
   - **Search Query**: Enter keywords like "fire hazard" or "children" to find related recalls
   - **Start Date**: Set a start date in YYYY-MM-DD format (e.g., "2024-01-01")
   - **End Date**: Set an end date in YYYY-MM-DD format (e.g., "2024-12-31")
   - **Recall Number**: Or look up a specific recall by its number (e.g., "24284")
   - **Max Results**: Set a limit on results (default: 100)
4. Click **Start** and wait for the run to finish
5. Download your data in JSON, CSV, Excel, or other formats from the Dataset tab

### Input Examples

#### Search by keyword
```json
{
    "searchQuery": "battery",
    "maxResults": 50
}
````

#### Filter by date range

```json
{
    "startDate": "2024-01-01",
    "endDate": "2024-12-31",
    "maxResults": 500
}
```

#### Look up a specific recall

```json
{
    "recallNumber": "24284"
}
```

#### Combine filters

```json
{
    "searchQuery": "fire",
    "startDate": "2023-01-01",
    "endDate": "2024-12-31",
    "maxResults": 200
}
```

### Output Example

```json
{
    "recallId": 9988,
    "recallNumber": "24284",
    "recallDate": "2024-06-27T00:00:00",
    "title": "At Home Procurement Recalls Toy Trunk Storage Chests Due to Entrapment and Suffocation Hazards",
    "description": "This recall involves Tie Dye Fur Toy Trunk Storage Chests, sold in two sizes...",
    "url": "https://www.cpsc.gov/Recalls/2024/At-Home-Procurement-Recalls-Toy-Trunk-Storage-Chests-Due-to-Entrapment-and-Suffocation-Hazards",
    "consumerContact": "At Home by email at productrecalls@athome.com...",
    "lastPublishDate": "2024-06-27T00:00:00",
    "productNames": "Tie Dye Fur Toy Trunk Storage Chests",
    "productModels": null,
    "numberOfUnits": "About 990",
    "manufacturers": null,
    "retailers": "At Home stores nationwide and online at athome.com...",
    "importers": "At Home Procurement Inc., of Dallas, Texas",
    "distributors": null,
    "manufacturerCountries": "China",
    "hazards": "The toy trunk storage chests do not contain a lid support feature or ventilation holes, posing entrapment and suffocation hazards.",
    "hazardTypes": null,
    "injuries": "None reported",
    "remedies": "Consumers should immediately stop using the recalled toy storage chests, and return them to any At Home store for a full refund.",
    "remedyOptions": "Refund",
    "imageUrls": ["https://www.cpsc.gov/s3fs-public/TieDye.jpg"],
    "productUPCs": []
}
```

### Pricing

This Actor uses a pay-per-result pricing model:

| Event | Cost |
|-------|------|
| Actor Start | $0.00005 |
| Per recall record | $0.002 |

For example, fetching 100 recalls costs approximately $0.20 plus Apify platform compute costs. The Actor is very lightweight -- it makes a single API call and processes the response, so compute costs are minimal (typically under $0.01 per run).

### Use Cases

- **Product safety monitoring** -- Track new recalls for specific product categories or manufacturers
- **Supply chain compliance** -- Identify recalled products from specific manufacturers or countries
- **Consumer protection research** -- Analyze recall trends, common hazards, and injury patterns
- **E-commerce compliance** -- Ensure products you sell are not subject to active recalls
- **Journalism and reporting** -- Research product safety stories with comprehensive recall data
- **Legal research** -- Find recall data for product liability cases
- **Market intelligence** -- Understand which product categories have the highest recall rates

### FAQ

#### Is it legal to scrape CPSC product recall data?

Yes. This Actor uses the official public SaferProducts.gov API provided by the U.S. Consumer Product Safety Commission. The data is in the public domain and freely available for any use. No authentication is required.

#### How Much Does It Cost to Scrape CPSC Data?

See the pricing table above. At $0.002 per result, fetching 100 recalls costs approximately $0.20 in Actor fees plus minimal Apify compute costs.

#### Can I export CPSC data to Excel or CSV?

Yes. Apify supports exporting results in JSON, CSV, Excel, XML, and other formats directly from the Dataset tab after a run completes.

#### How often is the CPSC data updated?

The CPSC updates their database as new recalls are issued. This Actor fetches live data from the API on each run. You can schedule this Actor to run at any interval to capture new recalls.

#### What date range does the data cover?

The CPSC database contains recalls going back to the 1970s. The most comprehensive data is from 2000 onward.

### Other Scrapers by SeatSignal

- [NHTSA Vehicle Safety Scraper](https://apify.com/seatsignal/nhtsa-vehicle-safety-scraper) — Extract vehicle recalls, complaints, and safety investigations
- [FDA Food Recalls Scraper](https://apify.com/seatsignal/fda-food-recalls-scraper) — Extract FDA food recall enforcement reports
- [FDA OpenFDA Scraper](https://apify.com/seatsignal/fda-openfda-scraper) — Extract FDA drug and device safety data
- [OSHA Inspections Scraper](https://apify.com/seatsignal/osha-inspections-scraper) — Extract OSHA workplace safety inspection data
- [CFPB Complaints Scraper](https://apify.com/seatsignal/cfpb-complaints-scraper) — Extract consumer financial complaints data

### Legal Disclaimer

This Actor accesses publicly available data from the U.S. Consumer Product Safety Commission (CPSC) through their official public API at SaferProducts.gov. No authentication or login is required. The data is provided by a U.S. government agency and is in the public domain. Users are responsible for ensuring their use of the data complies with applicable laws and regulations. This Actor does not collect personal data.

For support, contact us through the Apify Store or open an issue on the Actor's page.

# Actor input Schema

## `searchQuery` (type: `string`):

Search term to match against recall titles (e.g. 'battery', 'children', 'fire hazard'). Supports partial matching.

## `startDate` (type: `string`):

Start date for recall date range in YYYY-MM-DD format (e.g. '2024-01-01').

## `endDate` (type: `string`):

End date for recall date range in YYYY-MM-DD format (e.g. '2024-12-31').

## `recallNumber` (type: `string`):

Specific CPSC recall number to look up (e.g. '24001').

## `maxResults` (type: `integer`):

Maximum number of recall records to return.

## Actor input object example

```json
{
  "searchQuery": "",
  "startDate": "",
  "endDate": "",
  "recallNumber": "",
  "maxResults": 100
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("compute-edge/cpsc-product-recalls-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("compute-edge/cpsc-product-recalls-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call compute-edge/cpsc-product-recalls-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=compute-edge/cpsc-product-recalls-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "CPSC Product Recalls Scraper",
        "description": "Extract product recall data from the U.S. Consumer Product Safety Commission (CPSC) database. Search by keyword, date range, or recall number. Get hazards, injuries, manufacturers, retailers, remedies, and product details for 9,000+ recalls.",
        "version": "0.1",
        "x-build-id": "lvoh8zqKFW42CMEnD"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/compute-edge~cpsc-product-recalls-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-compute-edge-cpsc-product-recalls-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/compute-edge~cpsc-product-recalls-scraper/runs": {
            "post": {
                "operationId": "runs-sync-compute-edge-cpsc-product-recalls-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/compute-edge~cpsc-product-recalls-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-compute-edge-cpsc-product-recalls-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchQuery": {
                        "title": "Search Query",
                        "type": "string",
                        "description": "Search term to match against recall titles (e.g. 'battery', 'children', 'fire hazard'). Supports partial matching.",
                        "default": ""
                    },
                    "startDate": {
                        "title": "Start Date",
                        "type": "string",
                        "description": "Start date for recall date range in YYYY-MM-DD format (e.g. '2024-01-01').",
                        "default": ""
                    },
                    "endDate": {
                        "title": "End Date",
                        "type": "string",
                        "description": "End date for recall date range in YYYY-MM-DD format (e.g. '2024-12-31').",
                        "default": ""
                    },
                    "recallNumber": {
                        "title": "Recall Number",
                        "type": "string",
                        "description": "Specific CPSC recall number to look up (e.g. '24001').",
                        "default": ""
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Maximum number of recall records to return.",
                        "default": 100
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
