Fda Recalls Scraper avatar

Fda Recalls Scraper

Pricing

Pay per event

Go to Apify Store
Fda Recalls Scraper

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

Stas Persiianenko

Maintained by Community

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:

EventPrice
Actor start$0.001
Per recall extracted$0.001

Cost examples:

ScenarioRecallsEstimated cost
Quick search10~$0.011
Medium search50~$0.051
Full search500~$0.501

Platform costs (compute and memory) are additional but minimal — a typical run uses under $0.001 in platform costs.

Input parameters

ParameterTypeDescriptionDefault
searchQuerystringSearch term (e.g., "salmonella", "aspirin", company name)Required
productTypestringFilter by category: drug, food, device, or empty for allAll types
classificationstringFilter by severity: Class I, Class II, Class III, or empty for allAll classes
maxResultsintegerMaximum 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 ApifyClient
client = 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:

ClassRisk LevelDescription
Class IMost seriousReasonable probability of serious health consequences or death
Class IIModerateMay cause temporary or reversible health problems; slight probability of serious consequences
Class IIILeast seriousNot 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

  1. Use specific search terms — "salmonella peanut butter" works better than just "food"
  2. Filter by product type — Searching a specific endpoint (drug/food/device) is faster than searching all three
  3. Class I recalls first — Filter by Class I to focus on the most serious safety issues
  4. Company monitoring — Search by company name (e.g., "Abbott" or "Pfizer") to track specific firms
  5. 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)