# FDA Recalls Scraper API — Food, Drug & Device Recalls (`factpipe/fda-recalls-monitor`) Actor

Search and monitor FDA recalls and enforcement reports for food, drugs and medical devices via official openFDA. Filter by keyword, Class I/II/III, date. No key, flat JSON, alerts. $3 per 1,000.

- **URL**: https://apify.com/factpipe/fda-recalls-monitor.md
- **Developed by:** [Neo B](https://apify.com/factpipe) (community)
- **Categories:** Business, News
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$3.00 / 1,000 recall 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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## FDA Recalls Scraper API — Food, Drug & Device Recalls

Search and monitor **FDA recalls and enforcement reports** across food, drugs, and medical devices via the **official openFDA API**. Filter by keyword, classification (Class I/II/III), and report date; run on a schedule in incremental mode to catch every new recall the day FDA publishes it. Clean, flat JSON records for supply-chain risk, QA, retail compliance, and news monitoring.

### Quick start

1. Click **Start** with the prefilled search `listeria` in food recalls. It finishes in under a minute.
2. You get up to 25 recall reports with firm, product, reason and classification.
3. That first run costs at most $0.08, well within Apify's free monthly credit. Then swap in your own input or schedule it.

### What you get

```json
{
  "recall_number": "F-0609-2015",
  "event_id": "69516",
  "product_type": "Food",
  "classification": "Class I",
  "status": "Terminated",
  "recalling_firm": "Oasis Brands, Inc",
  "city": "Miami",
  "state": "FL",
  "country": "United States",
  "product_description": "Crema GuateLinda (Guatemalan Style Cream)...",
  "reason_for_recall": "Virginia State (VDACS) found Listeria monocytogenes...",
  "product_quantity": "144 pieces",
  "distribution_pattern": "FL, GA, NC, and TN",
  "voluntary_mandated": "Voluntary: Firm initiated",
  "recall_initiation_date": "2014-10-01",
  "report_date": "2014-10-15",
  "source_url": "https://api.fda.gov/food/enforcement.json?...",
  "fetched_at": "2026-09-11T12:00:00.000Z"
}
```

### Use cases

- **Supply-chain risk**: monitor recalls touching your suppliers, ingredients, or product categories.
- **Retail & food-service compliance**: daily incremental runs feed your QA workflow automatically.
- **Healthcare & pharmacovigilance**: track drug and device Class I recalls as they publish.
- **AI agents**: small input schema, deterministic output — ideal via API or MCP.

### Input

| Field | Type | Notes |
|---|---|---|
| `category` | `food` | `drug` | `device` | Which enforcement database |
| `searchTerm` | string | Optional keywords |
| `classifications` | string\[] | `Class I`, `Class II`, `Class III` |
| `reportedAfter` | `YYYY-MM-DD` | Lower bound on report date |
| `maxResults` | integer | Cap on charged results (default 100) |
| `sinceLastRun` | boolean | Incremental monitoring mode |

### Pricing (pay per event)

| Event | Price | Meaning |
|---|---|---|
| `recall-result` | **$3.00 per 1,000** ($0.003 each) | One recall record delivered. **Empty runs are never charged.** |

Example: 1,000 recall records cost **$3.00**. You only pay for delivered results.

### factpipe Compliance Suite

Official-source compliance data, all pay-per-result and runnable from one Apify account. Same conventions everywhere: flat records, ISO dates, `source_url` and `fetched_at` on every row, and no charge for empty or failed lookups, so outputs join cleanly in a single KYB, AML or GRC pipeline.

| Workflow | Actor | What it does | Price |
|---|---|---|---|
| Counterparty & KYB checks | [OFAC Sanctions Screening](https://apify.com/factpipe/ofac-sanctions-screening) | Screen names against the US Treasury SDN list with fuzzy matching | $3/1k |
| Counterparty & KYB checks | [EU VAT Validation](https://apify.com/factpipe/eu-vat-validation) | Validate EU VAT numbers in bulk against VIES, with registered name and address | $2/1k |
| Counterparty & KYB checks | [UK Companies House Lookup](https://apify.com/factpipe/uk-company-lookup) | Company status, SIC codes and registered office from Companies House | $2.50/1k |
| Public-sector sales intelligence | [SAM.gov Contracts](https://apify.com/factpipe/sam-gov-contracts) | Federal contract opportunities, set-asides and deadlines from SAM.gov | $2/1k |
| Public-sector sales intelligence | [EU Tenders (TED)](https://apify.com/factpipe/eu-ted-tenders-monitor) | EU public procurement notices from TED, filterable by CPV and country | $3/1k |
| Regulatory & disclosure monitoring | [Federal Register Monitor](https://apify.com/factpipe/federal-register-monitor) | New US rules, proposed rules and notices by agency or keyword | $2.50/1k |
| Regulatory & disclosure monitoring | **FDA Recalls Monitor** (this Actor) | FDA food, drug and device recall enforcement reports | $3/1k |
| Regulatory & disclosure monitoring | [SEC EDGAR Filings](https://apify.com/factpipe/sec-edgar-filings-search) | Full-text search across 10-K, 10-Q, 8-K and other SEC filings | $2/1k |

**Use it together:**

- **Product safety and supplier risk:** track new recalls here, follow related rulemaking with [Federal Register](https://apify.com/factpipe/federal-register-monitor), and check recalling firms' disclosures in [SEC EDGAR Filings](https://apify.com/factpipe/sec-edgar-filings-search).

### FAQ

**Do I need an openFDA API key?**
No. The Actor calls the official openFDA enforcement endpoints without a key and respects their rate limits.

**Can I get only serious (Class I) recalls?**
Yes. Set `classifications` to `Class I` and schedule daily with `sinceLastRun: true` for a new-recall alert feed.

**Which recalls are covered?**
All openFDA enforcement reports for food, drugs and medical devices, with recalling firm, product, reason, quantity and distribution pattern.

**Can I call it from Python, JavaScript, Make, Zapier or an AI agent?**
Yes. Run it through the Apify API or official Python/JavaScript clients, connect it to Make, Zapier, n8n, Slack or Google Sheets via Apify integrations, or expose it to AI agents through the Apify MCP server. Input is small and output is deterministic flat JSON.

### Reliability

Official openFDA API, polite rate limiting, retries with backoff, structured failure reporting, daily issue triage.

# Actor input Schema

## `category` (type: `string`):

Which FDA enforcement database to search.

## `searchTerm` (type: `string`):

Optional keyword(s), e.g. listeria, salmonella, insulin.

## `classifications` (type: `array`):

Optional: Class I (most serious), Class II, Class III.

## `reportedAfter` (type: `string`):

YYYY-MM-DD lower bound on FDA report date.

## `maxResults` (type: `integer`):

Cap on charged recall records.

## `sinceLastRun` (type: `boolean`):

Incremental monitoring mode for schedules.

## Actor input object example

```json
{
  "category": "food",
  "searchTerm": "listeria",
  "maxResults": 25,
  "sinceLastRun": false
}
```

# Actor output Schema

## `resultsDatasetUrl` (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 = {
    "searchTerm": "listeria",
    "maxResults": 25
};

// Run the Actor and wait for it to finish
const run = await client.actor("factpipe/fda-recalls-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 = {
    "searchTerm": "listeria",
    "maxResults": 25,
}

# Run the Actor and wait for it to finish
run = client.actor("factpipe/fda-recalls-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 '{
  "searchTerm": "listeria",
  "maxResults": 25
}' |
apify call factpipe/fda-recalls-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,factpipe/fda-recalls-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/smk2CKKwsLyKuxIzY/builds/FwKyRd4H8t3qwstlW/openapi.json
