# Recall Exposure Monitor — CPSC Recalls, Watchlisted (`alaudinburki/recall-exposure-monitor`) Actor

Matches new CPSC consumer product recalls against your brand/manufacturer watchlist, ranked by hazard urgency (keyword-scanned from the official text, since CPSC publishes no severity score). Built for retailers, e-commerce sellers, and insurers who need exposure, not a firehose of every recall.

- **URL**: https://apify.com/alaudinburki/recall-exposure-monitor.md
- **Developed by:** [alaudin burki](https://apify.com/alaudinburki) (community)
- **Categories:** Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.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/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

## Recall Exposure Monitor — CPSC Recalls, Watchlisted

CPSC's own recall feed is a firehose — hundreds of consumer product recalls
a year across every category. A retailer, e-commerce seller, or insurer's
real question isn't "show me every recall," it's **"does any recall touch
a brand I actually carry?"**

This matches new CPSC recalls against a brand/manufacturer watchlist and
ranks them by hazard urgency — same pattern as the WARN Act and OT/ICS
Advisory Matcher actors: watchlist in, only-relevant-matches out.

### A real data quirk this actor works around

CPSC's own `Manufacturers` field is **empty on nearly every recent
recall**, verified live. The brand/company name only reliably appears in
the free-text title and description ("Branch Furniture has received 11
reports..."). Matching is therefore against title + description + product
names combined, not a clean structured field — a limitation of the source
data, not this actor's design.

### Input

```json
{ "watchlist": ["Cambridge Audio", "Branch Furniture"], "daysBack": 90 }
```

Leave `watchlist` empty to return every recall in the window instead of
matching against specific brands.

### Sample output

```json
{
  "title": "Audio Partnership Recalls Cambridge Audio Yoyo (M) Portable Bluetooth Speakers Due to Fire Hazard",
  "recallDate": "2026-09-03T00:00:00",
  "unitsAffected": "About 4,500",
  "hazard": "The lithium-ion battery in the speakers can overheat, posing fire and burn hazards.",
  "urgency": "high",
  "urgencyNote": "Hazard involves fire, shock, entrapment, or choking risk.",
  "matchedWatchlistEntry": "Cambridge Audio",
  "url": "https://www.cpsc.gov/Recalls/2026/Audio-Partnership-Recalls-Cambridge-Audio-Yoyo-M"
}
```

### Typical uses

- **E-commerce liability watch** — know within a day if a brand you sell
  gets recalled, instead of finding out from a customer complaint.
- **Insurer product-liability monitoring** — track recall activity across
  an insured portfolio of brands.
- **Retail buyer due diligence** — check a vendor's recall history before
  a purchasing decision.

### Pricing

**$3.00 / 1,000 results** (`$0.003` per matched recall).

### ⚠️ Read before you act

- **Urgency is a keyword scan of the official hazard/injury text, not a
  formal severity score** — CPSC doesn't publish one. "Critical" means the
  text mentions death/fatality; "high" means fire/shock/entrapment/choking
  language; read the actual hazard text before acting on the label alone.
- **Brand matching depends on the recall's title/description actually
  naming the brand** — CPSC's structured `Manufacturers` field is
  essentially never populated in recent data, so this is a text match, not
  a guaranteed-structured lookup.
- **Re-run periodically.** New recalls post continuously; this is a
  point-in-time snapshot.

### FAQ

- **Why not just filter by the `Manufacturers` field?** It's empty on
  nearly every recent recall — verified live before building this. Title
  and description text is the only reliable place a brand name appears.
- **What if my brand isn't found?** Either nothing was recalled, or the
  recall names it slightly differently than you searched — try variations.
- **Does this cover food or drug recalls?** No — CPSC covers consumer
  products (electronics, furniture, toys, appliances, etc.). Food and drug
  recalls are FDA's domain, a different agency and feed.

### Related actors

- **Layoff Early Warning (WARN Act)** — the same watchlist-matched-against-
  an-official-feed pattern, for mass-layoff filings instead of recalls.
- **OT/ICS Advisory Matcher** — the same pattern again, for CISA security
  advisories instead of consumer product recalls.

# Actor input Schema

## `watchlist` (type: `array`):

Brand or manufacturer names to watch for in new CPSC recalls, e.g. Cambridge Audio, Branch Furniture. Leave empty to return every recall in the window instead of matching a watchlist.

## `daysBack` (type: `integer`):

How many days of CPSC recalls to scan.

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

Hard cap on items returned. You are never charged beyond this.

## Actor input object example

```json
{
  "daysBack": 90,
  "maxItems": 1000
}
```

# Actor output Schema

## `results` (type: `string`):

Matched CPSC recalls, ranked by urgency.

## `qualityReport` (type: `string`):

Recalls scanned, urgency breakdown.

# 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("alaudinburki/recall-exposure-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 = {}

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,alaudinburki/recall-exposure-monitor"
        }
    }
}
```

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/UlhRdTDNxjRxHIs5U/builds/e2h880kRisTbDnXCf/openapi.json
