# Product Recall & Safety Alert Monitor (`thescrapelab/product-recall-safety-alert-monitor`) Actor

Search public product recall and safety alert sources and export clean structured recall records.

- **URL**: https://apify.com/thescrapelab/product-recall-safety-alert-monitor.md
- **Developed by:** [Inus Grobler](https://apify.com/thescrapelab) (community)
- **Categories:** Developer tools, Automation, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.99 / 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

## Product Recall Scraper & Safety Alert Monitor

Product Recall Scraper & Safety Alert Monitor helps you find public product recalls, product safety alerts, and recall notices across multiple official sources with one keyword search.

Use it to check products, brands, hazards, or categories such as `charger`, `lithium battery`, `electric scooter`, `baby toy`, `cosmetics`, `power bank`, or `hair dryer`. The Actor returns structured recall data that is easy to review in the Apify dataset or export to JSON, CSV, Excel, XML, and other formats.

If you need a product recall scraper, recall monitoring tool, product safety monitor, or recall data API for public sources, this Actor is built for that workflow.

### What this Actor does

- Searches selected public recall and safety alert sources
- Collects matching recall records from official public pages and feeds
- Normalizes results into one consistent dataset
- Marks records as new or changed across repeat runs
- Optionally saves RSS and JSON Feed outputs

### Why teams use this product recall scraper

- Find product recalls by keyword across several countries in one run
- Monitor product safety alerts without checking each official source manually
- Export recall data for compliance, marketplace, and research workflows
- Track newly published recalls or updated recall notices over time

### Supported sources

This Actor currently supports these public sources:

- United Kingdom: UK OPSS product safety alerts and recalls
- Canada: consumer product recalls
- United States: US CPSC product recalls
- Australia: consumer product recalls
- European Union: Safety Gate weekly reports
- New Zealand: product recalls

This is not a complete global recall database. Coverage depends on the public sources listed above.

### Who this is for

- e-commerce sellers
- importers and distributors
- compliance teams
- product safety consultants
- marketplace operators
- researchers and analysts
- agencies monitoring product risks for clients

### Common use cases

- Check whether a product line has been recalled
- Monitor hazards such as fire, electric shock, choking, or burn risk
- Track brand or competitor recalls
- Build internal recall watchlists
- Export recall results for reporting or review workflows
- Run repeat checks and focus on newly found recalls

### Input

The Actor is designed to stay simple.

The default example is intentionally lightweight: it uses `battery` with the fast US CPSC source so the sample run is quick and usually returns results.

- `searchQuery`:
  Product, brand, hazard, or keyword to search. This is the only required field.
- `sources`:
  Choose which countries or regions to search.
- `maxResultsPerSource`:
  Maximum number of matching records to collect from each selected source.
- `onlyNew`:
  Return only records that were not seen in previous runs for the same search and source.

### Output

Results are saved to the default dataset. Each item represents one recall or safety alert record from an official public source.

Typical fields include:

- `title`
- `source`
- `countryOrRegion`
- `alertType`
- `riskLevel`
- `productName`
- `brand`
- `model`
- `barcodeOrIdentifier`
- `hazard`
- `correctiveAction`
- `publishedAt`
- `recallDate`
- `sourceUrl`
- `imageUrls`
- `isNew`
- `isChanged`

Example dataset item:

```json
{
  "title": "Product Recall: Example USB Charger",
  "source": "UK_OPSS",
  "sourceId": "2501-0001",
  "countryOrRegion": "United Kingdom",
  "alertType": "Product recall",
  "riskLevel": "Serious",
  "productCategory": "Electrical appliances and equipment",
  "brand": "Example",
  "productName": "Example USB Charger",
  "model": "X100",
  "barcodeOrIdentifier": "ABC123",
  "hazard": "The product presents a risk of electric shock.",
  "correctiveAction": "The product has been recalled from end users.",
  "publishedAt": "2026-05-13T00:00:00.000Z",
  "recallDate": "2026-05-12T00:00:00.000Z",
  "sourceUrl": "https://www.gov.uk/product-safety-alerts-reports-recalls/example",
  "imageUrls": [],
  "searchQuery": "charger",
  "matchedKeyword": "charger",
  "riskScore": 85,
  "isNew": true,
  "isChanged": false,
  "previousHash": null,
  "contentHash": "example-content-hash",
  "scrapedAt": "2026-05-13T10:00:00.000Z"
}
````

### Repeat monitoring

The Actor keeps track of seen records by search keyword and source.

- `isNew = true` means the record was not seen before
- `isChanged = true` means the same official record was seen before but important content changed

If you want a repeat monitoring workflow, run the same search on a schedule and set `onlyNew` to `true`.

### Additional outputs

When `outputFeeds` is enabled, the Actor also saves:

- `RUN_SUMMARY`
- `RSS_XML`
- `JSON_FEED`

These are stored in the default key-value store for the run.

### How to use it

1. Enter a product, brand, or hazard keyword such as `charger` or `lithium battery`.
2. Select the countries or regions you want to search.
3. Run the Actor.
4. Review the dataset, summary, and optional feed outputs.

### Python API example

You can run the Actor with the Apify API and read the dataset results with the official Python client:

```python
from apify_client import ApifyClient

APIFY_TOKEN = "YOUR_APIFY_TOKEN"
ACTOR_ID = "TheScrapeLab/product-recall-safety-alert-monitor"

client = ApifyClient(APIFY_TOKEN)
actor_client = client.actor(ACTOR_ID)

run_input = {
    "searchQuery": "lithium battery",
    "sources": ["UK_OPSS", "US_CPSC", "EU_SAFETY_GATE"],
    "maxResultsPerSource": 25,
    "onlyNew": False,
    "includeImages": False,
    "outputFeeds": False,
}

run = actor_client.call(run_input=run_input)

if run is None:
    raise RuntimeError("Actor run failed")

dataset_client = client.dataset(run["defaultDatasetId"])

for item in dataset_client.iterate_items():
    print(item["title"], "-", item["sourceUrl"])
```

### Limitations

- This Actor searches public sources only
- It does not use private or restricted recall databases
- Some official sites expose limited historical coverage or limited result windows
- Some fields may be missing because different sources publish different levels of detail
- EU Safety Gate currently relies on public weekly report endpoints and may not provide full historical coverage for sparse queries
- New Zealand results may still be limited by source-side search ranking and per-source result limits for very broad searches

### Compliance note

Always verify important recall or safety decisions against the official source page before taking action. This Actor is a monitoring and research tool, not legal or compliance advice.

# Actor input Schema

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

Enter a product name, brand, hazard, or keyword to search public product recall and safety alert sources.

## `sources` (type: `array`):

Choose which public recall and safety alert sources to search. The default example uses the fast US CPSC source.

## `maxResultsPerSource` (type: `integer`):

Maximum number of matching recall records to collect from each selected source.

## `onlyNew` (type: `boolean`):

Return only records that were not seen in previous runs for the same search.

## Actor input object example

```json
{
  "searchQuery": "battery",
  "sources": [
    "US_CPSC"
  ],
  "maxResultsPerSource": 5,
  "onlyNew": false
}
```

# Actor output Schema

## `datasetItems` (type: `string`):

Structured product recall and safety alert records in the default dataset.

## `runSummary` (type: `string`):

Summary of sources searched, result counts, and run outputs.

## `rssFeed` (type: `string`):

RSS 2.0 feed for matching recall and safety alert records when outputFeeds is enabled.

## `jsonFeed` (type: `string`):

JSON Feed output for matching recall and safety alert records when outputFeeds is enabled.

# 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 = {
    "searchQuery": "battery"
};

// Run the Actor and wait for it to finish
const run = await client.actor("thescrapelab/product-recall-safety-alert-monitor").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 = { "searchQuery": "battery" }

# Run the Actor and wait for it to finish
run = client.actor("thescrapelab/product-recall-safety-alert-monitor").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 '{
  "searchQuery": "battery"
}' |
apify call thescrapelab/product-recall-safety-alert-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=thescrapelab/product-recall-safety-alert-monitor",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Product Recall & Safety Alert Monitor",
        "description": "Search public product recall and safety alert sources and export clean structured recall records.",
        "version": "0.1",
        "x-build-id": "MrQIJtabq0fRt8qA3"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/thescrapelab~product-recall-safety-alert-monitor/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-thescrapelab-product-recall-safety-alert-monitor",
                "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/thescrapelab~product-recall-safety-alert-monitor/runs": {
            "post": {
                "operationId": "runs-sync-thescrapelab-product-recall-safety-alert-monitor",
                "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/thescrapelab~product-recall-safety-alert-monitor/run-sync": {
            "post": {
                "operationId": "run-sync-thescrapelab-product-recall-safety-alert-monitor",
                "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",
                "required": [
                    "searchQuery"
                ],
                "properties": {
                    "searchQuery": {
                        "title": "Product or keyword",
                        "type": "string",
                        "description": "Enter a product name, brand, hazard, or keyword to search public product recall and safety alert sources."
                    },
                    "sources": {
                        "title": "Countries and regions",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Choose which public recall and safety alert sources to search. The default example uses the fast US CPSC source.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "UK_OPSS",
                                "CA_RECALLS",
                                "US_CPSC",
                                "AU_PRODUCT_SAFETY",
                                "EU_SAFETY_GATE",
                                "NZ_PRODUCT_SAFETY"
                            ],
                            "enumTitles": [
                                "UK OPSS product safety alerts and recalls",
                                "Canada consumer product recalls",
                                "US CPSC product recalls",
                                "Australia consumer product recalls",
                                "EU Safety Gate weekly reports",
                                "New Zealand product recalls"
                            ]
                        },
                        "default": [
                            "US_CPSC"
                        ]
                    },
                    "maxResultsPerSource": {
                        "title": "Results per source",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum number of matching recall records to collect from each selected source.",
                        "default": 5
                    },
                    "onlyNew": {
                        "title": "Only new results",
                        "type": "boolean",
                        "description": "Return only records that were not seen in previous runs for the same search.",
                        "default": false
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
