# CPSC Product Recalls Scraper (`maximedupre/cpsc-product-recalls`) Actor

Search official CPSC product recall records by keywords, product names, retailers, or dates. Get structured details such as hazards, injuries, remedies, product data, and official notice links.

- **URL**: https://apify.com/maximedupre/cpsc-product-recalls.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Business, Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$2.70 / 1,000 product recalls

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### 🔎 CPSC product recalls for safety checks

Retailers, product-safety teams, and researchers can search official Consumer Product Safety Commission (CPSC) recall records. Get structured rows with recall identity, product details, hazards, injuries, remedies, source-reported contacts, and direct notice links for review or downstream work.

- Use **[Walmart recalls this week](https://apify.com/maximedupre/cpsc-product-recalls/examples/walmart-recalls-this-week)** to review matching CPSC notices for a seller.
- Use **[Amazon product recall alert](https://apify.com/maximedupre/cpsc-product-recalls/examples/amazon-product-recall-alert)** to check marketplace-related safety notices.
- Build a focused set with **[Product recall list](https://apify.com/maximedupre/cpsc-product-recalls/examples/product-recall-list)** for a safety review.
- Search **[Consumer Product Safety Commission](https://apify.com/maximedupre/cpsc-product-recalls/examples/consumer-product-safety-commission)** when you need the agency's published details.
- Check **[Toy recalls](https://apify.com/maximedupre/cpsc-product-recalls/examples/toy-recalls)** when reviewing a product category.

#### 📋 Structured CPSC recall records

Each dataset row is one structured recall record from the public CPSC source. It includes the official recall number, title, date, notice URL, product details, hazard, remedy, and other fields when the source reports them.

#### ▶️ Search a date window or all available CPSC records

Add keywords, product names, retailers, or a recall date range, then run the Actor. Use calendar dates such as `2024-01-01` or relative values such as `-30 days` and `now`. Leave out `dateRange` to search all available dates.

Results are saved as structured records in the default dataset and can be read through the Apify API. Set `maxItems` when you want a run limit. If you leave `maxItems` empty, the Actor returns all available matching records until the source is exhausted.

#### ⚙️ Input

Use the filters that match your question. Each list can contain one or more values.

**Input fields**

| Field | Type | What it does |
|---|---|---|
| `keywords` | array of strings | Finds recalls when a word or phrase appears in recall content, including product and hazard text. |
| `productNames` | array of strings | Limits recalls to the product names you provide. |
| `retailers` | array of strings | Limits recalls to records that mention these retailers or sellers in sold-at information. |
| `dateRange` | object | Limits recalls by date. Set both child fields to calendar dates or relative values, or leave this object out to search all available dates. |
| `dateRange.startDate` | string | Sets the first recall date to include, such as `2024-01-01` or `-30 days`. |
| `dateRange.endDate` | string | Sets the last recall date to include, such as `2024-12-31` or `now`. |
| `maxItems` | integer | Sets the maximum number of recall records to return. Leave it empty to return all available matching records until the source is exhausted. |

**Example input**

This is the public input from a successful current beta run using the prefilled 30-day date window and 50-record limit:

```json
{
  "dateRange": {
    "startDate": "-30 days",
    "endDate": "now"
  },
  "maxItems": 50
}
```

#### 🧾 Output

The Actor returns one output link to the run's default dataset. Each dataset item is a recall object. Optional fields are included when the public CPSC notice reports them.

**Output fields**

| Field | Type | What it does |
|---|---|---|
| `dataset` | URL string | Links to the default dataset for the run's recall records. |
| `recallNumber` | string | Gives the official CPSC recall number. |
| `title` | string | Gives the title of the recall notice. |
| `recallDate` | date string | Gives the date reported for the recall. |
| `noticeUrl` | URL string | Links to the direct official CPSC recall notice. |
| `product` | object | Groups the product details reported in the notice. |
| `product.name` | string | Gives the reported product name. |
| `product.description` | string | Gives the reported product description when available. |
| `product.model` | string | Gives the reported product model when available. |
| `product.type` | string | Gives the reported product type when available. |
| `product.category` | string | Gives the reported product category when available. |
| `product.affectedUnits` | string | Gives the reported number or description of affected units when available. |
| `product.codes` | array of strings | Lists product codes reported in the notice when available. |
| `hazard` | string | Describes the hazard reported in the recall notice. |
| `injuryInformation` | string | Gives reported incidents or injuries when present. |
| `remedy` | object | Groups the remedy instructions and options reported in the notice. |
| `remedy.instructions` | string | Gives instructions for getting the reported remedy. |
| `remedy.options` | array of strings | Lists the remedy options reported in the notice when available. |
| `retailers` | array of strings | Lists retailers or sellers reported in the notice. |
| `soldAt` | string | Gives the reported places or sales channels where the product was sold. |
| `importer` | string | Gives the importer reported in the notice. |
| `manufacturer` | string | Gives the manufacturer reported in the notice when available. |
| `distributor` | string | Gives the distributor reported in the notice when available. |
| `manufacturingCountry` | string | Gives the reported manufacturing country. |
| `consumerContact` | object | Groups public consumer contact details supplied in the notice. |
| `consumerContact.phone` | string | Gives a public consumer contact phone number when available. |
| `consumerContact.email` | string | Gives a public consumer contact email address when available. |
| `consumerContact.website` | URL string | Gives a public consumer contact website when available. |
| `consumerContact.address` | string | Gives a public consumer contact address when available. |
| `images` | array of objects | Lists official product images supplied by the source. |
| `images[].url` | URL string | Links to an official product image. |
| `images[].caption` | string | Gives the image caption when available. |
| `relatedLinks` | array of URL strings | Lists related official notice links supplied by the source. |
| `recallType` | string | Gives the recall type reported by the source when available. |

**Example output**

This is one unshortened row from a successful current beta run with `maxItems` set to `1`:

```json
{
  "recallNumber": "26789",
  "title": "5Color Recalls Children’s Bicycle Helmet and Pads Sets Due to Risk of Serious Injury or Death from Head Injury; Violate Mandatory Standard for Bicycle Helmets",
  "recallDate": "2026-09-24",
  "noticeUrl": "https://cpsc.gov/Recalls/2026/5Color-Recalls-Childrens-Bicycle-Helmet-and-Pads-Sets-Due-to-Risk-of-Serious-Injury-or-Death-from-Head-Injury-Violate-Mandatory-Standard-for-Bicycle-Helmets",
  "product": {
    "name": "5Color Children’s Bike Helmet and Pads Sets",
    "description": "This recall involves 5Color-branded bicycle helmet and pads sets. The sets consist of a pink helmet, knee and elbow pads. Only the size small helmets are included in this recall. The helmets are size small (S), fitting a head circumference of about 18 to 22 inches, and have black padding, black straps, a black and a black fit-adjusting knob at the back. “2026/03/20” are included in this recall. “Model No.: YD-001,” “Lot/Ref: YD-260320” and “Date 2026/03/20” are printed on a label on the inside of the helmet and on the product packaging.",
    "type": "Helmets & Helmet Accessories",
    "category": "1995",
    "affectedUnits": "About 324"
  },
  "hazard": "The helmets in the recalled sets violate the mandatory safety standard for bicycle helmets because the helmets do not comply with the impact attenuation, retention system, positional stability, labeling and certification requirements. The helmets can fail to protect the user in the event of a crash, posing a serious risk of injury or death due to head injury.",
  "remedy": {
    "instructions": "Consumers should stop using the helmets immediately and contact 5Color for a full refund of the set. Consumers will be asked to destroy the recalled helmet by cutting the straps and email a photo of the destroyed helmet to FiveColorCS@163.com. Consumers should then dispose of the recalled helmet. Consumers may keep the protection pads.",
    "options": [
      "Refund"
    ]
  },
  "injuryInformation": "None reported",
  "retailers": [
    "Sold Online At:\nAmazon.com in May 2026 for between $25 and $26.",
    "Hengqin Guangwei Consulting Co., Ltd., dba. 5Color, of China"
  ],
  "manufacturingCountry": "China",
  "consumerContact": {
    "phone": "833-382-6461",
    "email": "FiveColorCS@163.com"
  },
  "images": [
    {
      "url": "https://cpsc.gov/s3fs-public/5Color1.jpg?VersionId=atSu6_Bv4DlP1J_K78WbQQJAQhdw9JUP",
      "caption": "Recalled 5Color Helmet and Pads Set"
    },
    {
      "url": "https://cpsc.gov/s3fs-public/5Color2.jpg?VersionId=ZWuv6bs5xXdfyiOT.9yKdKcrqGdi12a0",
      "caption": "“Model No.: YD-001,” “Lot/Ref: YD-260320” and “Date 2026/03/20” are printed on a label inside of the Recalled 5Color helmet and on the set’s packaging."
    }
  ]
}
```

#### 💳 Pricing

This Actor uses pay-per-event pricing. Each matching product recall saved to the dataset is charged at the current listed rate of $0.0027. The Apify Store pricing panel shows the current charge.

#### 🔌 Integrations

Read the dataset through the Apify API or connect a completed run to a downstream workflow. You can also schedule runs in Apify when you need to repeat the same search.

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### Can I filter recalls by product name or retailer?

Yes. Add product names or retailers to narrow the CPSC records returned for a run. Add keywords when the term may appear in recall content, product text, or hazard text.

##### Can I search all available recall dates?

Yes. Leave out `dateRange` to search all available dates. You can also set a calendar or relative start and end date.

##### What happens when I leave `maxItems` empty?

The Actor returns all available matching records until the source is exhausted. Set `maxItems` when you want to stop after a chosen number of records.

##### Does a recall result prove that my exact product or inventory is affected?

No. The Actor does not determine whether a particular SKU, listing, or inventory item is affected. Read the official notice and verify important safety or business decisions with qualified professionals.

##### Does this Actor provide legal or compliance advice?

No. It returns public CPSC records for review and does not make legal or compliance decisions or guarantee that a remedy is complete.

##### Are all product, hazard, and contact fields present in every record?

No. Optional source fields are included when the public notice reports them.

##### Do I need a CPSC API key?

No customer CPSC API key is required for the public source data used by this Actor.

##### Can one run perform several independent searches?

No. Configure one set of filters for each run. Start another run when you need a separate search.

##### Does this Actor keep a cross-run recall baseline or send alerts?

No. It does not maintain a cross-run baseline or emit new, changed, or resolved lifecycle alerts.

### 📝 Changelog

**v0.0** (26-09-2026)

- Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~cpsc-product-recalls/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [FDA Food Recall Monitor](https://apify.com/maximedupre/fda-food-recalls-scraper) searches official FDA food-enforcement recalls for food-safety research.
- [CPSC Product Recall Monitor Scraper](https://apify.com/zenolvepro/cpsc-recalls) offers a recurring-monitoring option for seller and compliance checks.
- [CPSC Product Recalls & Safety Data Monitor](https://apify.com/johnatan029/cpsc-recalls-monitor) supports filtered safety-data monitoring across product and retailer terms.
- [CPSC Product Recalls Scraper - Hazards, UPCs & Remedies](https://apify.com/thirdwatch/cpsc-product-recalls-scraper) helps review product, hazard, and remedy fields for safety research.
- [CPSC Product Recalls Scraper: Safety Recall Data API](https://apify.com/scrapers_lat/cpsc-recalls-scraper) provides another structured recall-data source for downstream research.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `keywords` (type: `array`):

Find recalls when these words or phrases appear in recall content, including product and hazard text.

## `productNames` (type: `array`):

Limit results to recalls for these product names.

## `retailers` (type: `array`):

Limit results to recalls that mention these retailers or sellers in their sold-at information.

## `dateRange` (type: `object`):

Limit recalls by recall date. Set both dates to calendar dates or relative values, or leave this out to search all available dates.

## `maxItems` (type: `integer`):

Maximum number of recall records to return. Leave it empty to return all available matching records until the source is exhausted.

## Actor input object example

```json
{
  "keywords": [
    "battery"
  ],
  "productNames": [
    "stroller"
  ],
  "retailers": [
    "Walmart"
  ],
  "dateRange": {
    "startDate": "2024-01-01",
    "endDate": "2024-12-31"
  },
  "maxItems": 100
}
```

# Actor output Schema

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

A link to the successful recall records found in this run.

# 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 = {
    "dateRange": {
        "startDate": "-30 days",
        "endDate": "now"
    },
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/cpsc-product-recalls").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 = {
    "dateRange": {
        "startDate": "-30 days",
        "endDate": "now",
    },
    "maxItems": 50,
}

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

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

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

```

## CLI example

```bash
echo '{
  "dateRange": {
    "startDate": "-30 days",
    "endDate": "now"
  },
  "maxItems": 50
}' |
apify call maximedupre/cpsc-product-recalls --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maximedupre/cpsc-product-recalls"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/GiaZ3bGWn5V5OamKo/builds/rvnZj8RCbEgF84B4V/openapi.json
