# Recall Brand Watch: New CPSC, FDA, USDA & NHTSA Recall Alerts (`intuitive_ytterbium/recall-brand-watch`) Actor

Watch your brands, products, UPCs and keywords across CPSC, FDA (food, drug, device), USDA FSIS and NHTSA recalls. Remembers what it already reported, so each scheduled run outputs only NEW recalls. Perfect for daily alerts via Slack, email, Zapier or webhooks.

- **URL**: https://apify.com/intuitive_ytterbium/recall-brand-watch.md
- **Developed by:** [Dan W](https://apify.com/intuitive_ytterbium) (community)
- **Categories:** E-commerce, Automation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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 Brand Watch: New CPSC, FDA, USDA & NHTSA Recall Alerts

Watch your brands, products, UPCs and keywords across CPSC, FDA (food, drug, device), USDA FSIS and NHTSA recalls. Remembers what it already reported, so each scheduled run outputs only NEW recalls. Perfect for daily alerts via Slack, email, Zapier or webhooks.

### What it does

- Checks **CPSC** (consumer products), **FDA** food, drug and device enforcement reports, **USDA FSIS** (meat, poultry, egg; best effort (source often blocks automated access)) and **NHTSA** (vehicles) in one run.
- Matches your **brands, product phrases, UPCs and keywords** (whole-word, not fuzzy noise).
- Keeps a memory in a named key-value store, so a daily schedule only alerts on **new** recalls. Hook the run's "succeeded" webhook or the Zapier/Make integration to Slack or email.

### How to use

**Example use cases**

1. **Retailers & marketplaces:** get alerted when a brand you sell is recalled by CPSC, FDA or USDA.
2. **Food & CPG brands:** watch competitors and ingredients (e.g. listeria, peanut) for new recalls.
3. **Newsletters & safety sites:** schedule daily runs and publish only the new recalls.

**Steps:** 1) Click **Try for free** — the form is pre-filled with the example below. 2) Press **Start**. 3) Download results as JSON, CSV or Excel, or connect them to Sheets, Zapier, Make or Slack. Schedule it to run daily/weekly.

**Example input** (the prefilled form):

```json
{"brands": ["Walmart", "Trader Joe's"], "products": ["peanut butter"], "keywords": ["listeria"], "lookbackDays": 90}
```

**Sample output** (first row of a real run on 2026-10-15, long fields trimmed):

```json
{
 "source": "CPSC",
 "date": "2026-10-01",
 "product": "Metal Wire Bristle Grill Brushes",
 "hazard": "Small metal wire bristles can detach from the brushes and stick to the grill or food, posing an ingestion h...",
 "link": "https://www.cpsc.gov/Recalls/2027/Walmart-Recalls-Over-4-4-Million-Expert-Grill-Brushes-Due-to-Ingestion-Ha...",
 "company": "Walmart, Inc. of Bentonville, Arkansas",
 "recallId": "27010",
 "classification": null,
 "remedy": "Consumers should stop using the recalled grill brushes immediately and contact Walmart for a full refund or...",
 "matchedTerms": [
  "brand: Walmart"
 ],
 "firstSeenAt": "2026-10-15T21:52:36Z"
}
```

**Pricing:** pay per event — $0.002 per watch run; $0.01 per new recall match. No monthly rental; you only pay for results. Set a max charge per run to cap spend.

### Who uses it

Amazon/Shopify sellers and retailers checking their catalog, grocery and restaurant buyers, product-safety and compliance teams, insurance and legal researchers, and AI agents that need fresh recall alerts.

### Quick start

1. Enter brands, products, UPCs or keywords.
2. Pick a **watchlist name** (one per client or catalog).
3. Add a **schedule** (daily) and an integration. Done.

### Input example

```json
{"watchlistName": "demo-watchlist", "brands": ["Target", "Walmart", "Trader Joe's", "Kroger"], "products": ["peanut butter", "space heater"], "upcs": [], "keywords": ["listeria", "salmonella"], "vehicles": [{"make": "Toyota", "model": "Camry", "year": 2024}], "lookbackDays": 30}
```

### Output example

```json
[
  {
    "source": "FDA-food",
    "date": "2026-10-07",
    "product": "Todd's Seeds Salad Sprouting Mixture - Broccoli, Mustard, Alfalfa and Cabbage, packaged in heat-sealed resealable bags in the following sizes: 1/4 lb., 1/2 lb., and 1 lb.",
    "hazard": "Products contain alfalfa seed recalled by the supplier and may be contaminated with E. coli and/or Salmonella (downstream recall)",
    "link": "https://api.fda.gov/food/enforcement.json?search=recall_number:%22H-1407-2026%22",
    "company": "TODD'S SEEDS LLC",
    "recallId": "H-1407-2026",
    "classification": "Class I",
    "remedy": "Voluntary: Firm initiated",
    "matchedTerms": [
      "keyword: salmonella"
    ],
    "firstSeenAt": "2026-10-15T01:34:48Z"
  },
  {
    "source": "FDA-food",
    "date": "2026-10-07",
    "product": "Todd's Seeds Broccoli & Friends Sprouting Seed Mix - Broccoli, Alfalfa, Radish, Clover, packaged in 1 oz. sample packets and heat-sealed resealable bags in the following sizes: 1/4 lb., 1/2 lb., 1 lb., 2.5 lb., and 5 lb.",
    "hazard": "Products contain alfalfa seed recalled by the supplier and may be contaminated with E. coli and/or Salmonella (downstream recall)",
    "link": "https://api.fda.gov/food/enforcement.json?search=recall_number:%22H-1405-2026%22",
    "company": "TODD'S SEEDS LLC",
    "recallId": "H-1405-2026",
    "classification": "Class I",
    "remedy": "Voluntary: Firm initiated",
    "matchedTerms": [
      "keyword: salmonella"
    ],
    "firstSeenAt": "2026-10-15T01:34:48Z"
  }
]
```

### Pricing (pay per event)

| Event | Price |
|---|---|
| Watch run (`watch-run`) | $0.002 per run |
| New recall match (`new-recall-match`) | $0.01 per new match |

A daily watch with 2 new matches a week costs about $0.08 a month. Repeats are never charged.

### FAQ

**Does it charge again for the same recall?** No. Reported recalls are remembered per watchlist.
**Can I use it from an AI agent / MCP client?** Yes, through Apify's MCP server (mcp.apify.com), or use the bundled **Public Data MCP** server by the same author.

### Notes

Public government data only (saferproducts.gov, openFDA, FSIS, NHTSA). USDA FSIS coverage is best effort (source often blocks automated access). Not legal advice; always confirm details on the agency notice.

Keywords: product recall API, recall alerts, CPSC recall API, FDA recall monitor, USDA FSIS recalls, NHTSA recall API, UPC recall check, AI agent tool, MCP.

# Actor input Schema

## `watchlistName` (type: `string`):

Names the key-value store that remembers already-reported recalls. Use one name per watchlist/client.

## `brands` (type: `array`):

Brand or company names, matched as whole words in the recall text and recalling firm.

## `products` (type: `array`):

Product phrases. A recall matches when all words of the phrase appear, e.g. "peanut butter", "space heater".

## `upcs` (type: `array`):

UPC/EAN codes (digits only). Matched against UPCs listed in the recall.

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

Any other whole-word keyword: an ingredient, hazard or model, e.g. listeria, lithium battery.

## `vehicles` (type: `array`):

Optional list of {"make","model","year"} objects to watch for new NHTSA campaigns.

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

Which recall databases to check.

## `lookbackDays` (type: `integer`):

How far back each run scans. Already-reported recalls are skipped, so overlap is free.

## `since` (type: `string`):

Optional fixed start date; overrides look back.

## `baselineOnFirstRun` (type: `boolean`):

If on, the very first run only records existing matches (no output, no match charges) so later runs alert on truly new recalls.

## Actor input object example

```json
{
  "watchlistName": "recall-brand-watch",
  "brands": [
    "Walmart",
    "Trader Joe's"
  ],
  "products": [
    "peanut butter"
  ],
  "keywords": [
    "listeria"
  ],
  "sources": [
    "cpsc",
    "fda-food",
    "fda-drug",
    "fda-device",
    "usda-fsis",
    "nhtsa"
  ],
  "lookbackDays": 90,
  "baselineOnFirstRun": false
}
```

# Actor output Schema

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

No description

## `summary` (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 = {
    "brands": [
        "Walmart",
        "Trader Joe's"
    ],
    "products": [
        "peanut butter"
    ],
    "keywords": [
        "listeria"
    ],
    "lookbackDays": 90
};

// Run the Actor and wait for it to finish
const run = await client.actor("intuitive_ytterbium/recall-brand-watch").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 = {
    "brands": [
        "Walmart",
        "Trader Joe's",
    ],
    "products": ["peanut butter"],
    "keywords": ["listeria"],
    "lookbackDays": 90,
}

# Run the Actor and wait for it to finish
run = client.actor("intuitive_ytterbium/recall-brand-watch").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 '{
  "brands": [
    "Walmart",
    "Trader Joe'\''s"
  ],
  "products": [
    "peanut butter"
  ],
  "keywords": [
    "listeria"
  ],
  "lookbackDays": 90
}' |
apify call intuitive_ytterbium/recall-brand-watch --silent --output-dataset

```

## MCP server setup

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

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/Z6vPEygfFTE9cmHfd/builds/uvolW0BXkinworZOc/openapi.json
