openFDA Drug Enforcement Reports Scraper
Pricing
Pay per event
openFDA Drug Enforcement Reports Scraper
Monitor FDA drug enforcement and recall reports by classification, status, firm, product, geography, and dates from the official openFDA API.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Export FDA drug enforcement and recall reports from the official openFDA API into clean Apify datasets.
Use this actor to monitor drug recalls, enforcement classifications, recalling firms, product descriptions, dates, and distribution details without writing openFDA API queries yourself.
What does openFDA Drug Enforcement Reports Scraper do?
This actor calls the official drug/enforcement.json endpoint from openFDA and saves each FDA enforcement report as a structured dataset item.
It is built for repeat compliance monitoring and due-diligence workflows.
You can filter reports by recall status, classification, firm, geography, product text, report dates, recall initiation dates, termination dates, recall number, and event ID.
The output keeps the key openFDA recall fields and adds traceability fields such as sourceUrl and scrapedAt.
Who is it for?
- ๐ฅ Healthcare compliance teams monitoring recall exposure.
- ๐ Pharmaceutical operations teams tracking products and firms.
- ๐ Supply-chain teams checking distribution patterns and affected geography.
- โ๏ธ Legal and risk teams building recall evidence datasets.
- ๐ Data teams loading FDA enforcement reports into BI tools.
- ๐ Monitoring teams scheduling repeat Apify runs for new recalls.
Why use this actor?
openFDA is powerful, but building correct search strings and pagination takes time.
This actor wraps the official API with a friendly input form, safe pagination, typed output, and Apify integrations.
You can run it manually, schedule it, call it by API, connect it to Make or Zapier, or use it from MCP-enabled tools.
Data source
The data comes from the official openFDA drug enforcement API.
Source endpoint:
https://api.fda.gov/drug/enforcement.json
The actor does not use scraped browser pages, private accounts, or unofficial mirrors.
What data can you extract?
| Field | Description |
|---|---|
recallNumber | FDA recall number |
status | Ongoing, Completed, Terminated, or other status |
classification | Class I, Class II, or Class III recall classification |
productDescription | Product description supplied to FDA |
reasonForRecall | Reason for the recall |
recallingFirm | Firm responsible for recall action |
city, state, country | Recalling firm location |
reportDate | FDA report date |
recallInitiationDate | Recall initiation date |
terminationDate | Termination date when available |
distributionPattern | Distribution notes and geography |
openfda | Raw nested openFDA object |
sourceUrl | Exact API URL used for the page |
scrapedAt | Extraction timestamp |
How much does it cost to scrape openFDA drug enforcement reports?
The actor uses pay-per-event pricing.
You pay a small start fee for each run and a per-result fee for each FDA enforcement report saved.
Because this actor uses an official JSON API and no browser automation, compute cost is low.
Set maxItems to the number of reports you actually need.
Input options
Search
Use search for free-text matching across product descriptions, recall reasons, recalling firms, and distribution patterns.
Example search terms:
metforminsterilitySun Pharmaceuticalnitrosamine
Classification
Use classification to filter by FDA recall class.
Common values:
Class IClass IIClass III
Status
Use status to track open or closed recall actions.
Common values:
OngoingCompletedTerminated
Firm and location filters
Use recallingFirm, state, and country to narrow reports to one organization or geography.
This is useful for supplier monitoring and due diligence.
Product filters
Use productDescription for a drug or product phrase.
Use productType when you need a product-type constraint.
Date filters
Use report, recall initiation, and termination date ranges.
Accepted date formats:
YYYY-MM-DDYYYYMMDD
Example input
{"search": "metformin","classification": "Class II","status": "Ongoing","country": "United States","maxItems": 100}
Example output
{"recallNumber": "D-0000-2026","status": "Ongoing","classification": "Class II","productDescription": "Example drug product description","reasonForRecall": "Reason supplied by FDA","recallingFirm": "Example Firm Inc.","city": "Example City","state": "CA","country": "United States","reportDate": "2026-01-01","recallInitiationDate": "2025-12-15","terminationDate": null,"distributionPattern": "Nationwide","eventId": "00000","sourceUrl": "https://api.fda.gov/drug/enforcement.json?...","scrapedAt": "2026-06-28T00:00:00.000Z"}
How to run the actor
- Open the actor on Apify.
- Enter search terms or structured filters.
- Set
maxItems. - Optionally add your openFDA API key for higher rate limits.
- Start the run.
- Download results as JSON, CSV, Excel, XML, or RSS.
Scheduling and monitoring
You can schedule this actor to run daily, weekly, or monthly.
Typical monitoring patterns:
- Daily ongoing Class I and Class II recall checks.
- Weekly supplier recall exports.
- Monthly compliance archive snapshots.
- Product-keyword monitoring for risk review.
Integrations
Send results to your compliance workflow using Apify integrations.
Common patterns:
- Save recalls to Google Sheets.
- Send high-priority classifications to Slack.
- Load reports into a data warehouse.
- Trigger a webhook when new recall records appear.
- Compare scheduled output with a previous dataset.
API usage with Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/openfda-drug-enforcement-reports-scraper').call({search: 'metformin',classification: 'Class II',maxItems: 100,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
API usage with Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_APIFY_TOKEN')run = client.actor('automation-lab/openfda-drug-enforcement-reports-scraper').call(run_input={'status': 'Ongoing','classification': 'Class II','maxItems': 100,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
API usage with cURL
curl -X POST 'https://api.apify.com/v2/acts/automation-lab~openfda-drug-enforcement-reports-scraper/runs?token=YOUR_APIFY_TOKEN' \-H 'Content-Type: application/json' \-d '{"search":"metformin","maxItems":100}'
MCP usage
Use this actor from Claude Desktop, Claude Code, or other MCP clients through Apify MCP.
MCP endpoint:
https://mcp.apify.com/?tools=automation-lab/openfda-drug-enforcement-reports-scraper
Claude Code setup:
$claude mcp add apify-openfda-drug-enforcement https://mcp.apify.com/?tools=automation-lab/openfda-drug-enforcement-reports-scraper
Claude Desktop JSON config:
{"mcpServers": {"apify-openfda-drug-enforcement": {"url": "https://mcp.apify.com/?tools=automation-lab/openfda-drug-enforcement-reports-scraper"}}}
Example prompts:
- "Run the openFDA drug enforcement reports scraper for ongoing Class II recalls."
- "Find FDA drug enforcement reports mentioning metformin from 2024 onward."
- "Export recall reports for this supplier and summarize the classification mix."
Tips for best results
- Start with
maxItems100 to validate your filters. - Use classification and status filters for high-signal monitoring.
- Use date ranges for repeat scheduled jobs.
- Add an openFDA API key if you run many large exports.
- Keep
sourceUrlin downstream storage for audit traceability.
FAQ
Is this data from the official FDA API?
Yes. The actor calls the official openFDA drug enforcement endpoint and preserves the FDA recall fields in the output dataset.
Can I use it for recurring monitoring?
Yes. Use Apify schedules with status, classification, product, firm, and date filters to build repeat monitoring workflows.
Troubleshooting
Why did my run return zero items?
Your filters may be too narrow or the exact openFDA field value may differ from your expectation.
Try removing one filter at a time, or start with only search and maxItems.
Why did I get a rate-limit error?
openFDA applies public API limits.
Retry later, reduce run volume, or add an optional openFDA API key.
Why are some date fields empty?
Not every enforcement report has every lifecycle date.
The actor preserves missing values as null.
Legality and compliance
This actor reads public data from the official openFDA API.
You are responsible for how you use and interpret FDA enforcement data.
Always verify high-impact compliance decisions against official FDA sources and your internal policies.
Related scrapers
Explore related Automation Lab actors for public-data, compliance, and monitoring workflows:
- https://apify.com/automation-lab/google-search-results-scraper
- https://apify.com/automation-lab/website-contact-finder
- https://apify.com/automation-lab/rss-feed-scraper
Changelog
0.1
Initial version with openFDA drug enforcement filters, pagination, typed output, PPE charging, and compliance-ready dataset fields.
Support
If you need a new filter, different output mapping, or integration advice, open an issue on the actor page.
Summary
openFDA Drug Enforcement Reports Scraper turns official FDA recall data into a repeatable Apify dataset.
It is designed for healthcare, pharma, supply-chain, legal, and risk teams that need reliable drug recall monitoring.