# CPSC Product Recalls Scraper: Safety Recall Data API (`scrapers_lat/cpsc-recalls-scraper`) Actor

Scrape US CPSC consumer product recalls from SaferProducts.gov, no API key. Filter by keyword, date, hazard, product type, manufacturer, retailer or recall number. Get recall number, date, products, hazards, injuries, remedies, manufacturers, importers, UPCs, images. Export JSON, CSV, Excel.

- **URL**: https://apify.com/scrapers_lat/cpsc-recalls-scraper.md
- **Developed by:** [Scrapers Lat](https://apify.com/scrapers_lat) (community)
- **Categories:** Business, Automation, Developer tools
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $6.15 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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 Scraper: Safety Recall Data API](https://scrapers.lat/banners/cpsc-recalls-scraper.png)](https://console.apify.com/actors/b70GPrkViHaGatvts/input)

## CPSC Product Recalls Scraper: Safety Recall Data API

Download **US consumer product recall data** from the official **CPSC** (Consumer Product Safety Commission) SaferProducts.gov recall database, with **no API key** and no rate limits to manage. This **product recalls API / scraper** returns every field CPSC exposes for each **safety recall** and gives you ten filters (keyword, date range, hazard, product type, manufacturer/brand, retailer, recall number, UPC and more) for **recall monitoring**, compliance and product-safety research.

Here is one real result, with every field the actor returns:

```json
{
  "imageUrl": "https://www.cpsc.gov/s3fs-public/voomf-1.jpg",
  "title": "Play Yard and Crib Mattresses Recalled Due to Risk of Serious Injury or Death from Entrapment and Fire Hazards; Violate Mandatory Standards for Mattresses; Sold on Amazon by Voomf",
  "recallNumber": "26669",
  "url": "https://www.cpsc.gov/Recalls/2026/Play-Yard-and-Crib-Mattresses-Recalled-Due-to-Risk-of-Serious-Injury-or-Death-from-Entrapment-and-Fire-Hazards-Violate-Mandatory-Standards-for-Mattresses-Sold-on-Amazon-by-Voomf",
  "recallId": 10904,
  "recallDate": "2026-08-06",
  "lastPublishDate": "2026-08-07",
  "description": "This recall involves Voomf-branded play yard mattresses and crib mattresses. The tri-fold aftermarket play yard mattresses are white with a neutral-colored letter or balloon print and measure about 38 inches by 26 inches by 3 inches. \"Product Model: BYL001\" is printed on a label inside the mattress cover. The full-sized crib mattresses are white with an aquamarine band and a zipper along the sides, and measure about 25 inches by 27 inches by 5.5 inches. \"voomf\" is printed on a label on the side of the mattress.",
  "consumerContact": "Voomf by email at voomfrecall@outlook.com.",
  "products": [{"name": "Voomf Play Yard and Crib Mattresses", "description": null, "model": null, "type": null, "categoryId": null, "units": "About 2,401"}],
  "upcs": [],
  "manufacturers": [],
  "importers": ["Shanghaiyuejiuyaoguojimaoyiyouxiangongsi (Shanghai Yuejiuyao International Trade Co., Ltd.), dba Voomf, of China"],
  "retailers": ["Online at Amazon.com from January 2026 through May 2026 for between $40 and $87."],
  "distributors": [],
  "manufacturerCountries": ["China"],
  "soldAt": null,
  "hazards": ["The recalled mattresses violate the mandatory safety standard for crib mattresses because the mattresses may not adequately fit certain play yards, posing a deadly entrapment hazard. Babies can suffocate in gaps between an undersized mattress, or extra padding, and side walls of a product, especially when the infant's face becomes trapped against the side and the mattress, preventing the infant from breathing. Furthermore, the full-sized crib mattresses violate the mandatory flammability standard for mattress sets, posing a risk of serious injury or death from fire."],
  "hazardTypes": [],
  "injuries": ["CPSC has received one report of inadequate mattress fit. No injuries have been reported."],
  "remedies": ["Consumers should stop using the mattresses immediately and contact Voomf for a full refund. Consumers will be asked to destroy the mattresses by writing in permanent marker \"Recalled,\" cutting the play yard mattress in half and cutting the full-sized mattress cover diagonally across the entire mattress using scissors, and to send a photo of the destroyed mattress to voomfrecall@outlook.com. Consumers should then dispose of the recalled product in accordance with local and/or state disposal procedures."],
  "remedyOptions": ["Refund"],
  "inConjunctionWith": [],
  "images": ["https://www.cpsc.gov/s3fs-public/voomf-1.jpg", "https://www.cpsc.gov/s3fs-public/voomf-2.jpg", "https://www.cpsc.gov/s3fs-public/voomf-3.gif", "https://www.cpsc.gov/s3fs-public/voomf-4.jpg"],
  "imagesDetailed": [{"url": "https://www.cpsc.gov/s3fs-public/voomf-1.jpg", "caption": "Recalled Voomf Tri-Fold Play Yard Mattress, letters print"}, {"url": "https://www.cpsc.gov/s3fs-public/voomf-4.jpg", "caption": "Recalled Voomf Full-sized Crib Mattress"}]
}
```

The example above shows the first 25 of 32 fields.

### What it does

The actor calls the official CPSC recall web service, applies the filters you pass as input, and writes one normalized record per recall to the run's dataset. Dates are normalized to `YYYY-MM-DD`, missing source values are returned as `null`, and nested source structures (products, hazards, injuries, remedies, manufacturers, importers, retailers, distributors, UPCs and images) are flattened into clean arrays so you can sort and filter without extra parsing.

### Quickstart

Open the actor, paste this into the input, and press Run. It returns 2 recent recalls whose title contains "fire", each enriched with all three AI add-ons.

```json
{
  "recallTitle": "fire",
  "maxRecalls": 2,
  "withSummary": true,
  "withSeverity": true,
  "withExtract": true
}
```

### Billing and limits

- **Pay per result.** You are charged per recall record returned (`result` event). See the [pricing tab](https://apify.com/scrapers_lat/cpsc-recalls-scraper/pricing) for the current per-result price.
- **Optional AI add-ons** are billed as separate events only when they produce output: `ai_summary`, `ai_severity` and `ai_extract`. They are off by default and require a paid Apify plan.
- **No charge on failure.** If a run errors, the actor writes a single item with a populated `error` field and does not charge for it. Empty runs cost nothing.
- **Spend cap respected.** Set `maxTotalChargeUsd` on the run; once reached, the actor stops emitting and charging further billable results and add-ons.
- **Free Apify plans** are capped at 10 records per run and cannot use the AI add-ons. Upgrade for higher `maxRecalls`.

### FAQ and troubleshooting

**A run returned 0 records. Why?**
The filter combination matched nothing in the source. Loosen filters (for example remove `productName` or widen the date range). Zero-result runs are not charged.

**Why are the `ai*` fields null?**
The AI add-ons are off by default. Enable `withSummary`, `withSeverity` or `withExtract` on a paid Apify plan. Free plans cannot use them.

**Is this an official CPSC tool?**
No. This actor is independent and has no affiliation with the CPSC. It reads only data that is publicly available through the CPSC recall web service. Use it in accordance with the CPSC terms of service.

# Actor input Schema

## `maxRecalls` (type: `integer`):

Maximum number of recall records to collect. Optional. The CPSC web service returns all matching recalls in one response, so narrow with the date or keyword filters for large pulls.

## `keyword` (type: `string`):

Free-text keyword filter. All words must appear across the recall title, description, product names and hazards, for example lithium battery or infant sleeper. Leave empty to ignore.

## `recallDateStart` (type: `string`):

Only include recalls with a recall date on or after this date (YYYY-MM-DD), for example 2026-01-01. Leave empty to start from the earliest available recall.

## `recallDateEnd` (type: `string`):

Only include recalls with a recall date on or before this date (YYYY-MM-DD), for example 2026-06-30.

## `recallTitle` (type: `string`):

Keyword matched against the recall title, for example fire, lithium, helmet, or a brand name. Leave empty to ignore.

## `productName` (type: `string`):

Keyword matched against the recalled product name, for example vaporizer, stroller, heater. Leave empty to ignore.

## `productType` (type: `string`):

Filter by CPSC product type / category, for example Toys, Furniture, Clothing. Leave empty to ignore.

## `hazard` (type: `string`):

Keyword matched against the recall hazard text, for example fire, burn, laceration, entrapment, choking. Leave empty to ignore.

## `manufacturer` (type: `string`):

Filter by manufacturer or brand name, for example Fisher-Price, Peloton. Leave empty to ignore.

## `retailer` (type: `string`):

Filter by retailer or where the product was sold, for example Amazon, Target, Walmart. Leave empty to ignore.

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

Fetch a single recall by its CPSC recall number, for example 26611. Leave empty to ignore.

## `recallId` (type: `string`):

Fetch a single recall by its internal CPSC recall ID, for example 10859. Leave empty to ignore.

## `upc` (type: `string`):

Filter recalls that list this product UPC / barcode. Leave empty to ignore.

## `lastPublishDateStart` (type: `string`):

Only include recalls last published on or after this date (YYYY-MM-DD). Useful for incremental monitoring of newly updated recalls. Leave empty to ignore.

## `lastPublishDateEnd` (type: `string`):

Only include recalls last published on or before this date (YYYY-MM-DD). Leave empty to ignore.

## `withSummary` (type: `boolean`):

Optional paid AI add-on, off by default. Adds a plain-language summary of each recall (what, hazard, what to do). Billed only when produced. Requires a paid Apify plan.

## `withSeverity` (type: `boolean`):

Optional paid AI add-on, off by default. Classifies each recall's severity (low/medium/high/critical) with a 0-100 risk score and rationale. Billed only when produced. Requires a paid Apify plan.

## `withExtract` (type: `boolean`):

Optional paid AI add-on, off by default. Extracts structured data: hazard type, affected products, injury/incident counts, remedy, age range and retailers. Billed only when produced. Requires a paid Apify plan.

## Actor input object example

```json
{
  "maxRecalls": 10,
  "withSummary": false,
  "withSeverity": false,
  "withExtract": false
}
```

# Actor output Schema

## `results` (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 = {
    "maxRecalls": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapers_lat/cpsc-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 = { "maxRecalls": 10 }

# Run the Actor and wait for it to finish
run = client.actor("scrapers_lat/cpsc-recalls-scraper").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 '{
  "maxRecalls": 10
}' |
apify call scrapers_lat/cpsc-recalls-scraper --silent --output-dataset

```

## MCP server setup

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

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/b70GPrkViHaGatvts/builds/teHfmjZiUFitvf2MR/openapi.json
