# 🚨 FDA Recall Intelligence - Drug, Device & Food (`benthepythondev/fda-recall-intelligence`) Actor

Extract FDA recall data from openFDA database: drug recalls, medical device recalls, food safety alerts. AI-powered intelligence scoring (0-100) based on severity (Class I/II/III), recency, distribution scope. 82,000+ recalls (17K drugs, 37K devices, 28K food).

- **URL**: https://apify.com/benthepythondev/fda-recall-intelligence.md
- **Developed by:** [Ben](https://apify.com/benthepythondev) (community)
- **Categories:** AI, Automation, Other
- **Stats:** 11 total users, 0 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $40.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.
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?

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 Recall Intelligence — Drug, Device & Food Recalls with AI Risk Scoring

Extract **FDA recall data — drugs, medical devices and food** — from the official openFDA
database as clean, structured rows with an **AI intelligence score** on every recall.
Search across 80,000+ enforcement records by classification (Class I/II/III), company,
product keywords and date range, then rank what matters by severity, recency and reach.
Export to JSON/CSV/Excel, run on a schedule, call via API, or connect to Make, Zapier or
n8n.

### 🚨 What is the FDA Recall Intelligence?

It turns the openFDA enforcement database into a structured, filterable dataset. Choose a
product type and filters (severity class, firm name, keywords like "insulin" or
"salmonella", and a date window) and it returns every matching recall with full detail —
product description, reason, recalling firm, distribution and status — plus a transparent
0–100 intelligence score that surfaces the most serious, recent and widely-distributed
recalls first. So compliance teams, pharmacies, hospitals, distributors and legal
professionals can monitor safety risk without combing through the FDA site by hand.

#### What data does it extract?

- **Product type** (drug / device / food), **description** and recall **classification**
- **Reason for recall** and current **status** (e.g. ongoing / terminated)
- **Recalling firm** with **city, state, country** and postal code
- **Recall number**, **initiation date**, report date and termination date
- **Distribution pattern** and **product quantity**
- **Regulatory detail** — event ID, voluntary/mandated, firm notification, code info
- **Drug fields when available** — brand name, generic name, manufacturer name
- **AI intelligence score (0–100)** ranking each recall's severity and relevance

### ⬇️ Input

Every field is optional — leave them empty for all recent recalls, or narrow it down:

| Field | Description |
|-------|-------------|
| `productType` | `all` (drugs + devices + food), `drug`, `device`, or `food` |
| `classification` | Filter by severity, e.g. `["Class I"]`, `["Class I", "Class II"]`; empty = all |
| `keywords` | Search product descriptions, e.g. `["insulin", "pacemaker", "salmonella"]` |
| `firmName` | Recalling firm or manufacturer, e.g. `Pfizer`, `Johnson & Johnson` |
| `dateFrom` | Start of recall-initiation date range (`YYYY-MM-DD`) |
| `dateTo` | End of recall-initiation date range (`YYYY-MM-DD`) |
| `maxResults` | Cap the run (1–1000) |
| `includeIntelligenceScore` | Toggle the AI intelligence score on/off |

#### Example input

```json
{
  "productType": "drug",
  "classification": ["Class I", "Class II"],
  "keywords": ["insulin"],
  "dateFrom": "2025-01-01",
  "dateTo": "2026-06-26",
  "maxResults": 100,
  "includeIntelligenceScore": true
}
```

### ⬆️ Output

Every recall is one clean row (view as a **table**, or export **JSON / CSV / Excel**):

```json
{
  "product_type": "drug",
  "product_description": "Insulin Glargine Injection 100 units/mL, 10 mL vial",
  "classification": "Class II",
  "status": "Ongoing",
  "recalling_firm": "Example Pharma Inc.",
  "city": "Trenton",
  "state": "NJ",
  "country": "United States",
  "postal_code": "08611",
  "reason_for_recall": "Product may contain particulate matter identified during stability testing.",
  "recall_number": "D-1234-2026",
  "recall_initiation_date": "20260115",
  "report_date": "20260205",
  "termination_date": null,
  "distribution_pattern": "Nationwide in the United States",
  "product_quantity": "12,400 vials",
  "event_id": "90876",
  "voluntary_mandated": "Voluntary: Firm initiated",
  "initial_firm_notification": "Letter",
  "code_info": "Lot #ABC123, Exp 2027-03",
  "center_classification_date": "20260130",
  "more_code_info": null,
  "brand_name": "Example Insulin",
  "generic_name": "insulin glargine",
  "manufacturer_name": "Example Pharma Inc.",
  "intelligence_score": 73
}
```

### 💡 Use cases

- **✅ Compliance & quality teams:** monitor new recalls in your product categories and flag high-severity Class I events the day they post.
- **🏥 Pharmacies, hospitals & distributors:** check whether drugs or devices you stock are affected and act on ongoing recalls fast.
- **⚖️ Legal & due diligence:** research a company's recall history by `firmName` for litigation, M\&A or supplier vetting.
- **🛡️ Supply-chain & consumer safety:** track food recalls by keyword (e.g. `salmonella`, `listeria`) and distribution scope to assess exposure.

### 🧮 How the intelligence score works

A transparent 0–100 score combining four factors: **classification severity** (Class I >
Class II > Class III, up to 50 pts), **recency** of the recall-initiation date (up to 25
pts), **distribution scope** (nationwide > regional > local, up to 15 pts) and **status**
(ongoing recalls rank above terminated ones, up to 10 pts). Higher scores flag the most
serious, recent and widely-distributed recalls — use it to triage and prioritize.

### ❓ FAQ

**What recalls does it cover?** FDA enforcement records for drugs, medical devices and
food/cosmetics from the openFDA database — tens of thousands of recalls across all three
categories. Use `productType` to focus on one or pull all of them.

**How do I find the most serious recalls?** Set `classification` to `["Class I"]` (the
most serious, risk of death or serious injury) and sort by the intelligence score, which
already weights severity, recency and reach.

**Can I search by company?** Yes — set `firmName` to a manufacturer or recalling firm
(e.g. `Pfizer`) to pull that company's recall history.

**Can I filter by product or contaminant?** Yes — `keywords` searches the product
description, so terms like `insulin`, `pacemaker` or `salmonella` return matching
recalls.

**Can I limit to a date range?** Yes — set `dateFrom` and/or `dateTo` (`YYYY-MM-DD`) to
filter by recall-initiation date; leave both empty for all dates.

**What is the intelligence score?** A transparent 0–100 rating built from severity class,
recency, distribution scope and status. Set `includeIntelligenceScore` to `false` if you
don't need it.

**Do I need an API key?** No. It uses the public openFDA API — no key, login or
authentication required.

**Can I run it on a schedule or via API?** Yes — schedule recurring runs in Apify, call
it via the API/SDK, or connect it to Make, Zapier or n8n.

**Is it legal?** It collects publicly available recall data published by the FDA via the
openFDA API. Use it responsibly for compliance, research and safety monitoring, and
follow applicable laws.

### 🔗 You might also like

- **[openFDA Drug Intelligence](https://apify.com/benthepythondev/openfda-drug-intelligence)** — FDA drug label & data intelligence
- **[Vehicle Recalls Intelligence](https://apify.com/benthepythondev/vehicle-recalls-intelligence)** — NHTSA vehicle recalls

***

**Keywords:** FDA recall scraper, openFDA API, drug recalls, medical device recalls, food recalls, recall intelligence, Class I recall, product safety alerts, compliance monitoring, recall data, FDA enforcement, consumer safety, supply chain risk, recall tracking, pharmaceutical recalls, food safety.

# Actor input Schema

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

Type of FDA recalls to extract

## `classification` (type: `array`):

Filter by recall severity (leave empty for all classifications)

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

Keywords to search in product descriptions (e.g., insulin, pacemaker, salmonella)

## `firmName` (type: `string`):

Name of the recalling firm or manufacturer (e.g., Pfizer, Johnson & Johnson)

## `dateFrom` (type: `string`):

Start date for recall initiation date (YYYY-MM-DD format). Default: 1 year ago.

## `dateTo` (type: `string`):

End date for recall initiation date (YYYY-MM-DD format). Default: today.

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

Maximum number of recalls to extract (1-1000)

## `includeIntelligenceScore` (type: `boolean`):

Calculate AI-powered intelligence score (0-100) for each recall based on severity, recency, and distribution

## Actor input object example

```json
{
  "productType": "all",
  "maxResults": 100,
  "includeIntelligenceScore": true
}
```

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("benthepythondev/fda-recall-intelligence").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("benthepythondev/fda-recall-intelligence").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 benthepythondev/fda-recall-intelligence --silent --output-dataset

```

## MCP server setup

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

```

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/txon0totUhxy0WIQ1/builds/5sN63ZaYHV8F39TAT/openapi.json
