Fda Recalls Scraper
Pricing
Pay per event
Fda Recalls Scraper
Search FDA enforcement actions for drug, food, and device recalls. Get recall classifications, reasons, affected products, and distribution data.
Pricing
Pay per event
Rating
0.0
(0)
Developer

Stas Persiianenko
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
12 hours ago
Last modified
Categories
Share
Search the FDA enforcement database for drug, food, and medical device recalls. Get recall classifications, reasons, affected products, distribution patterns, and regulatory details from all three FDA enforcement endpoints.
What does FDA Recalls Scraper do?
This actor searches the openFDA Enforcement API to extract recall data across three product categories:
- Drugs — prescription and OTC medication recalls
- Food — food and dietary supplement recalls
- Medical Devices — device and equipment recalls
Each recall includes the company name, classification severity (Class I/II/III), product description, reason for recall, distribution pattern, initiation date, and regulatory status.
Why use FDA Recalls Scraper?
The FDA's openFDA API is powerful but requires manual URL construction, pagination handling, and response parsing. This actor handles all of that automatically:
- Searches all three enforcement endpoints (drug, food, device) in one run
- Handles pagination to retrieve up to 500 results
- Formats raw 8-digit dates (YYYYMMDD) into readable ISO format
- Filters by product type and recall classification
- Returns clean, structured JSON ready for analysis
How much does it cost?
FDA Recalls Scraper uses the pay-per-event pricing model:
| Event | Price |
|---|---|
| Actor start | $0.001 |
| Per recall extracted | $0.001 |
Cost examples:
| Scenario | Recalls | Estimated cost |
|---|---|---|
| Quick search | 10 | ~$0.011 |
| Medium search | 50 | ~$0.051 |
| Full search | 500 | ~$0.501 |
Platform costs (compute and memory) are additional but minimal — a typical run uses under $0.001 in platform costs.
Input parameters
| Parameter | Type | Description | Default |
|---|---|---|---|
searchQuery | string | Search term (e.g., "salmonella", "aspirin", company name) | Required |
productType | string | Filter by category: drug, food, device, or empty for all | All types |
classification | string | Filter by severity: Class I, Class II, Class III, or empty for all | All classes |
maxResults | integer | Maximum recalls to extract (1–500) | 50 |
Output example
Each recall in the dataset looks like this:
{"recallNumber": "F-0123-2026","recallingFirm": "Example Foods Inc","city": "Chicago","state": "IL","country": "US","classification": "Class I","status": "Ongoing","productType": "food","productDescription": "Frozen chicken nuggets, 12 oz packages","reasonForRecall": "Product may contain undeclared milk allergen","distributionPattern": "Nationwide distribution in retail stores","productQuantity": "15,000 cases","voluntaryMandated": "Voluntary: Firm initiated","recallInitiationDate": "2026-01-15","centerClassificationDate": "2026-01-20","terminationDate": "","reportDate": "2026-02-01","codeInfo": "Best by dates 03/2026 through 06/2026, lot codes A1234-A5678","initialFirmNotification": "Press Release","searchQuery": "chicken allergen","scrapedAt": "2026-03-03T06:45:00.000Z"}
How to use the API
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('automation-lab/fda-recalls-scraper').call({searchQuery: 'salmonella',productType: 'food',classification: 'Class I',maxResults: 25,});const { items } = await client.dataset(run.defaultDatasetId).listItems();items.forEach((recall) => {console.log(`${recall.recallingFirm} — ${recall.classification}: ${recall.reasonForRecall}`);});
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("automation-lab/fda-recalls-scraper").call(run_input={"searchQuery": "salmonella","productType": "food","classification": "Class I","maxResults": 25,})for recall in client.dataset(run["defaultDatasetId"]).iterate_items():print(f"{recall['recallingFirm']} — {recall['classification']}: {recall['reasonForRecall']}")
Use cases
- Food safety monitoring — Track salmonella, listeria, and allergen recalls across the food supply
- Pharmaceutical compliance — Monitor drug recalls by classification severity for regulatory reporting
- Medical device tracking — Stay informed about device safety issues and recall status
- Supply chain risk — Identify companies with recurring recalls across product categories
- Research and journalism — Analyze recall trends, geographic patterns, and enforcement actions
- Consumer safety alerts — Build notification systems for product recalls in specific categories
Recall classifications explained
The FDA classifies recalls by severity:
| Class | Risk Level | Description |
|---|---|---|
| Class I | Most serious | Reasonable probability of serious health consequences or death |
| Class II | Moderate | May cause temporary or reversible health problems; slight probability of serious consequences |
| Class III | Least serious | Not likely to cause adverse health consequences |
Integrations
Connect FDA Recalls Scraper with other tools using Apify integrations:
- Slack/Email — Get notified when new Class I recalls match your search
- Google Sheets — Automatically export recall data for tracking and analysis
- Webhooks — Trigger downstream workflows when new recalls are found
- Zapier/Make — Connect recall data to 5,000+ apps for automated workflows
- API — Schedule daily/weekly recall monitoring runs via the Apify API
Tips for best results
- Use specific search terms — "salmonella peanut butter" works better than just "food"
- Filter by product type — Searching a specific endpoint (drug/food/device) is faster than searching all three
- Class I recalls first — Filter by Class I to focus on the most serious safety issues
- Company monitoring — Search by company name (e.g., "Abbott" or "Pfizer") to track specific firms
- Combine with OpenFDA Drug Events — Pair recall data with adverse event reports for comprehensive safety monitoring
Data source
All data comes from the openFDA Enforcement API, a public API maintained by the U.S. Food and Drug Administration. The API is free, requires no authentication, and is updated regularly with new enforcement actions.
Limitations
- Maximum 500 results per run (API pagination limit)
- The openFDA API may have slight delays between when a recall is announced and when it appears in the database
- Search is text-based across all fields; the API does not support exact field-specific queries for all fields
- Rate limits apply to the openFDA API (approximately 240 requests per minute without an API key)