# FDA Recall Enforcement Reports Search & Export API (`koalastuff/fda-enforcement-report-finder`) Actor

Search openFDA enforcement reports for drugs, devices, and food. Filter recalls by date, class, status, location, or text for compliance exports.

- **URL**: https://apify.com/koalastuff/fda-enforcement-report-finder.md
- **Developed by:** [Timo Schmidt](https://apify.com/koalastuff) (community)
- **Categories:** Business, Automation
- **Stats:** 2 total users, 1 monthly users, 66.7% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 enforcement reports

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/platform/actors/running/actors-in-store#pay-per-event

## 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/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/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

## FDA Enforcement Report Finder & Export

Search openFDA enforcement reports for drugs, devices, and food. Filter recalls by date, class, status, location, or text for compliance exports.

This is an independent research/export tool. It is not an FDA alert service, is not endorsed by FDA, and must not be used for medical decisions or recall lifecycle tracking.

### Try this first

Start with the example input below to compare recent Class I and Class II reports across all three product domains. Results are written to the default dataset for research export.

[![FDA Enforcement Report Finder & Export icon](https://api.apify.com/v2/key-value-stores/JoHkELuyqjk6waZJX/records/icon-fda-enforcement-report-finder.png)](https://apify.com/koalastuff/fda-enforcement-report-finder)

#### Example output

[![Example output preview](https://api.apify.com/v2/key-value-stores/JoHkELuyqjk6waZJX/records/preview-fda-enforcement-report-finder.svg)](https://apify.com/koalastuff/fda-enforcement-report-finder)

This preview is generated from a checked-in official-source fixture. It shows the normalized output shape without inventing live demand or results.

### Use cases

- Research FDA enforcement reports across three product domains in one dataset.
- Filter published reports by date, classification, published status, state, country, or text.
- Export product, firm, distribution, reason, code, and drug-identifier fields into internal research or compliance workflows.

### Input

| Field | Description | Default |
| --- | --- | --- |
| `productTypes` | `DRUG`, `DEVICE`, and/or `FOOD` | all three |
| `daysBack` | Published report window, 1 to 3,650 days | `90` |
| `classifications` | Optional Class I, II, III, or Not Yet Classified filter | all |
| `statuses` | Optional published status value | all |
| `state` | Optional two-letter US state | none |
| `country` | Optional exact country | none |
| `keywords` | Local text match across product, firm, reason, distribution, and code fields | none |
| `maxResults` | Hard output and billing limit | `100` |
| `requestDelayMs` | Delay between official product endpoints | `500` |

### Output

Each row contains a stable product-type/recall-number ID, event and classification data, published dates and status, recalling firm and location, product description, reason, quantity, code and distribution details, available drug identifiers, source URL, attribution, and safety disclaimer.

### Reliability and limits

- Official openFDA JSON endpoints only; no page scraping, browser, proxy, account, API key, or paid service.
- At most one request per selected product endpoint and three requests per run.
- openFDA permits 240 anonymous requests per minute and 1,000 per day per IP; this Actor uses sequential requests with a minimum 250 ms delay.
- Each endpoint returns at most 1,000 records. The combined output is capped at 3,000.
- Malformed source rows with missing required identifiers, descriptions, or valid dates are counted as rejected and skipped instead of failing the complete run.
- FDA states Enforcement Report status is not updated after publication. The field is preserved as `publishedStatus`, not presented as current lifecycle state.

### Required safety limits

Do not rely on openFDA for medical decisions. FDA states these enforcement-report data should not be used to issue public alerts or track the lifecycle of a recall. Verify product identity, current FDA information, and appropriate professional guidance before taking action.

### Pricing

- Actor start: USD 0.00005
- Normalized enforcement report: USD 0.001

A two-result Apify smoke run on 256 MB used USD 0.0003642041 of platform resources and completed in 22.721 seconds.

After the malformed-source-row fix, build `0.1.3` and run `ZbFV9gLeFAai653IH` succeeded with two FOOD results and final reported platform usage of USD 0.0000835703.

### Data source and reuse

Sources: `https://api.fda.gov/drug/enforcement.json`, `https://api.fda.gov/device/enforcement.json`, and `https://api.fda.gov/food/enforcement.json`.

The FDA Recall Enterprise System dataset is Public Domain/CC0. Every row includes the requested credit: “Data provided by the U.S. Food and Drug Administration (https://open.fda.gov)”. No GMDN content is extracted or redistributed.

### Support

Report reproducible problems with the input, run link, expected field, and recall number. Do not include private health information or unpublished safety reports.

### Related Actors

- [EU Safety Gate Product Alert Monitor](https://apify.com/koalastuff/eu-safety-gate-alert-monitor) for European non-food product alerts.
- [CISA KEV Priority & Remediation Monitor](https://apify.com/koalastuff/cisa-kev-priority-monitor) for exploited-vulnerability remediation data.

# Actor input Schema

## `productTypes` (type: `array`):

Select one or more official openFDA enforcement-report endpoints.
## `daysBack` (type: `integer`):

Rolling report-date window ending today.
## `classifications` (type: `array`):

Optional exact health-hazard classifications published in the Enforcement Report.
## `statuses` (type: `array`):

FDA states that Enforcement Report status is not updated after publication; do not use it for lifecycle tracking.
## `state` (type: `string`):

Optional exact two-letter state code for the recalling firm.
## `country` (type: `string`):

Optional exact country name for the recalling firm.
## `keywords` (type: `string`):

Case-insensitive local match across product, firm, reason, distribution, and code fields.
## `maxResults` (type: `integer`):

Hard unique-output and billing limit.
## `requestDelayMs` (type: `integer`):

Conservative delay in milliseconds between sequential official API requests.

## Actor input object example

```json
{
  "productTypes": [
    "DRUG",
    "DEVICE",
    "FOOD"
  ],
  "daysBack": 90,
  "maxResults": 100,
  "requestDelayMs": 500
}
````

# 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("koalastuff/fda-enforcement-report-finder").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("koalastuff/fda-enforcement-report-finder").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 koalastuff/fda-enforcement-report-finder --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "FDA Recall Enforcement Reports Search & Export API",
        "description": "Search openFDA enforcement reports for drugs, devices, and food. Filter recalls by date, class, status, location, or text for compliance exports.",
        "version": "0.1",
        "x-build-id": "ytfkC43Uvu1DYQuWY"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/koalastuff~fda-enforcement-report-finder/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-koalastuff-fda-enforcement-report-finder",
                "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/koalastuff~fda-enforcement-report-finder/runs": {
            "post": {
                "operationId": "runs-sync-koalastuff-fda-enforcement-report-finder",
                "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/koalastuff~fda-enforcement-report-finder/run-sync": {
            "post": {
                "operationId": "run-sync-koalastuff-fda-enforcement-report-finder",
                "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": {
                    "productTypes": {
                        "title": "Product types",
                        "minItems": 1,
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Select one or more official openFDA enforcement-report endpoints.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "DRUG",
                                "DEVICE",
                                "FOOD"
                            ],
                            "enumTitles": [
                                "Drugs",
                                "Medical devices",
                                "Food"
                            ]
                        },
                        "default": [
                            "DRUG",
                            "DEVICE",
                            "FOOD"
                        ]
                    },
                    "daysBack": {
                        "title": "Report days back",
                        "minimum": 1,
                        "maximum": 3650,
                        "type": "integer",
                        "description": "Rolling report-date window ending today.",
                        "default": 90
                    },
                    "classifications": {
                        "title": "Recall classifications",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Optional exact health-hazard classifications published in the Enforcement Report.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "Class I",
                                "Class II",
                                "Class III",
                                "Not Yet Classified"
                            ]
                        }
                    },
                    "statuses": {
                        "title": "Published status values",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "FDA states that Enforcement Report status is not updated after publication; do not use it for lifecycle tracking.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "Ongoing",
                                "Completed",
                                "Terminated",
                                "Pending"
                            ]
                        }
                    },
                    "state": {
                        "title": "US state code",
                        "pattern": "^[A-Z]{2}$",
                        "type": "string",
                        "description": "Optional exact two-letter state code for the recalling firm."
                    },
                    "country": {
                        "title": "Country",
                        "maxLength": 100,
                        "type": "string",
                        "description": "Optional exact country name for the recalling firm."
                    },
                    "keywords": {
                        "title": "Keywords",
                        "maxLength": 200,
                        "type": "string",
                        "description": "Case-insensitive local match across product, firm, reason, distribution, and code fields."
                    },
                    "maxResults": {
                        "title": "Maximum results",
                        "minimum": 1,
                        "maximum": 3000,
                        "type": "integer",
                        "description": "Hard unique-output and billing limit.",
                        "default": 100
                    },
                    "requestDelayMs": {
                        "title": "Delay between product endpoints",
                        "minimum": 250,
                        "maximum": 60000,
                        "type": "integer",
                        "description": "Conservative delay in milliseconds between sequential official API requests.",
                        "default": 500
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
