# FDA Drug Recalls & Enforcement Data (`wakey7dev/fda-drug-recalls-enforcement`) Actor

Search, filter, and normalize FDA drug recall and enforcement records. Returns cleaned data with drug name normalization, firm deduplication, severity classification, and recall category analysis. Free API, no key required.

- **URL**: https://apify.com/wakey7dev/fda-drug-recalls-enforcement.md
- **Developed by:** [Chris Wakefield](https://apify.com/wakey7dev) (community)
- **Categories:** Business, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-usage

## 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

![Chris The Dev](https://raw.githubusercontent.com/chriswakefield87/appstore-screenshot-translator/main/assets/actor-banner.png)

## FDA Drug Recalls & Enforcement Data Scraper

Search, filter, and normalize FDA drug recall and enforcement records from the openFDA API. Returns cleaned data with drug name normalization, firm name deduplication, severity classification, and recall reason categorization.

### Features

- **Zero API key required** — uses the free public openFDA API
- **Structured filters** — search by query, classification (Class I/II/III), status, country, firm, or product type
- **Data normalization** — firm names cleaned, recall reasons categorized, severity ranked
- **Multiple output formats** — full dataset (JSON), human-readable summary (text), statistics (JSON)
- **17,773+ enforcement records** — continuously updated by the FDA

### Input Parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `searchQuery` | string | (empty) | Free-text search across recall reason, product, and firm name |
| `classification` | select | All | FDA severity class (Class I=high, II=moderate, III=low) |
| `recallStatus` | select | All | Ongoing or Terminated recalls |
| `maxResults` | integer | 50 | Max records to return (up to 1000) |
| `country` | string | (empty) | Filter by country name |
| `recallingFirm` | string | (empty) | Filter by firm name (partial match) |
| `productType` | select | All | Drug, Biologics, Device, or Veterinary |

### Example Input

```json
{
  "searchQuery": "sterility",
  "classification": "Class_I",
  "recallStatus": "Ongoing",
  "maxResults": 20,
  "country": "United States"
}
````

### Example Output

```json
{
  "eventId": "12345-6",
  "recallingFirm": "Teva Pharmaceuticals Usa",
  "recallingFirmRaw": "Teva Pharmaceuticals USA",
  "productDescription": "Lisinopril 10 mg Tablets",
  "classification": "Class_II",
  "classificationLabel": "Class II — Moderate Risk (temporary/reversible effects)",
  "severityRank": 2,
  "status": "Ongoing",
  "reasonForRecall": "Failed dissolution specifications",
  "recallCategory": "dissolution",
  "activeIngredients": ["Lisinopril"],
  "country": "United States",
  "distributionPattern": "Nationwide"
}
```

### Use Cases

- **Pharma competitive intelligence** — track competitor recall patterns and quality issues
- **Compliance monitoring** — automated alerts for new recalls in your product category
- **Supply chain risk assessment** — identify problematic manufacturers and distributors
- **Healthcare legal & regulatory** — research recall history for litigation support
- **Market research** — analyze recall trends by firm, class, and geography

### Classification Guide

| Class | Risk Level | Meaning |
|-------|-----------|---------|
| Class I | High | Dangerous or defective products that could cause serious health problems or death |
| Class II | Moderate | Products that may cause temporary or medically reversible adverse effects |
| Class III | Low | Products unlikely to cause adverse health effects (labeling or packaging violations) |

### Data Source

This actor uses the [openFDA](https://open.fda.gov/) drug enforcement API, a free public API provided by the U.S. Food and Drug Administration. Data is updated regularly as the FDA processes recall reports. Licensing: openFDA data is available under [CC0](https://open.fda.gov/license/).

### About Chris The Dev

Built by [Chris Wakefield](https://apify.com/wakey7dev). Follow for more data scraping actors.

# Actor input Schema

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

Free-text search across recall reason, product description, and firm name. Examples: 'sterility', 'contamination', 'labeling', 'manufacturing'. Leave empty to return all records.

## `classification` (type: `string`):

FDA recall classification. Class I = dangerous/deadly, Class II = temporary/reversible health effects, Class III = unlikely to cause adverse effects.

## `recallStatus` (type: `string`):

Filter by recall status. Ongoing = currently active recall, Terminated = recall has been completed/closed.

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

Maximum number of recall records to return (max 1000). The API returns up to 100 per page.

## `country` (type: `string`):

Filter by country (e.g. 'United States', 'China', 'India'). Leave empty for all countries.

## `recallingFirm` (type: `string`):

Filter by recalling firm name (partial match). Examples: 'Pfizer', 'Teva', 'Johnson'.

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

Filter by FDA-regulated product type.

## Actor input object example

```json
{
  "classification": "",
  "recallStatus": "",
  "maxResults": 50,
  "productType": ""
}
```

# Actor output Schema

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

All recall/enforcement records with normalized fields.

## `summary` (type: `string`):

Human-readable formatted summary of recall results.

## `stats` (type: `string`):

Machine-readable run statistics and classification 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("wakey7dev/fda-drug-recalls-enforcement").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("wakey7dev/fda-drug-recalls-enforcement").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 '{}' |
apify call wakey7dev/fda-drug-recalls-enforcement --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=wakey7dev/fda-drug-recalls-enforcement",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "FDA Drug Recalls & Enforcement Data",
        "description": "Search, filter, and normalize FDA drug recall and enforcement records. Returns cleaned data with drug name normalization, firm deduplication, severity classification, and recall category analysis. Free API, no key required.",
        "version": "1.0",
        "x-build-id": "qVxO3e17sGOb5loKE"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/wakey7dev~fda-drug-recalls-enforcement/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-wakey7dev-fda-drug-recalls-enforcement",
                "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/wakey7dev~fda-drug-recalls-enforcement/runs": {
            "post": {
                "operationId": "runs-sync-wakey7dev-fda-drug-recalls-enforcement",
                "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/wakey7dev~fda-drug-recalls-enforcement/run-sync": {
            "post": {
                "operationId": "run-sync-wakey7dev-fda-drug-recalls-enforcement",
                "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",
                "properties": {
                    "searchQuery": {
                        "title": "Search Query",
                        "type": "string",
                        "description": "Free-text search across recall reason, product description, and firm name. Examples: 'sterility', 'contamination', 'labeling', 'manufacturing'. Leave empty to return all records."
                    },
                    "classification": {
                        "title": "Recall Classification",
                        "enum": [
                            "",
                            "Class_I",
                            "Class_II",
                            "Class_III"
                        ],
                        "type": "string",
                        "description": "FDA recall classification. Class I = dangerous/deadly, Class II = temporary/reversible health effects, Class III = unlikely to cause adverse effects.",
                        "default": ""
                    },
                    "recallStatus": {
                        "title": "Recall Status",
                        "enum": [
                            "",
                            "Ongoing",
                            "Terminated"
                        ],
                        "type": "string",
                        "description": "Filter by recall status. Ongoing = currently active recall, Terminated = recall has been completed/closed.",
                        "default": ""
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum number of recall records to return (max 1000). The API returns up to 100 per page.",
                        "default": 50
                    },
                    "country": {
                        "title": "Country Filter",
                        "type": "string",
                        "description": "Filter by country (e.g. 'United States', 'China', 'India'). Leave empty for all countries."
                    },
                    "recallingFirm": {
                        "title": "Recalling Firm",
                        "type": "string",
                        "description": "Filter by recalling firm name (partial match). Examples: 'Pfizer', 'Teva', 'Johnson'."
                    },
                    "productType": {
                        "title": "Product Type",
                        "enum": [
                            "",
                            "Drugs",
                            "Biologics",
                            "Devices",
                            "Veterinary"
                        ],
                        "type": "string",
                        "description": "Filter by FDA-regulated product type.",
                        "default": ""
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
