openFDA Drug Enforcement Reports Scraper avatar

openFDA Drug Enforcement Reports Scraper

Pricing

Pay per event

Go to Apify Store
openFDA Drug Enforcement Reports Scraper

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

Stas Persiianenko

Maintained by Community

Actor 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?

FieldDescription
recallNumberFDA recall number
statusOngoing, Completed, Terminated, or other status
classificationClass I, Class II, or Class III recall classification
productDescriptionProduct description supplied to FDA
reasonForRecallReason for the recall
recallingFirmFirm responsible for recall action
city, state, countryRecalling firm location
reportDateFDA report date
recallInitiationDateRecall initiation date
terminationDateTermination date when available
distributionPatternDistribution notes and geography
openfdaRaw nested openFDA object
sourceUrlExact API URL used for the page
scrapedAtExtraction 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

Use search for free-text matching across product descriptions, recall reasons, recalling firms, and distribution patterns.

Example search terms:

  • metformin
  • sterility
  • Sun Pharmaceutical
  • nitrosamine

Classification

Use classification to filter by FDA recall class.

Common values:

  • Class I
  • Class II
  • Class III

Status

Use status to track open or closed recall actions.

Common values:

  • Ongoing
  • Completed
  • Terminated

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-DD
  • YYYYMMDD

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

  1. Open the actor on Apify.
  2. Enter search terms or structured filters.
  3. Set maxItems.
  4. Optionally add your openFDA API key for higher rate limits.
  5. Start the run.
  6. 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 ApifyClient
client = 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().items
print(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 maxItems 100 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 sourceUrl in 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.

Explore related Automation Lab actors for public-data, compliance, and monitoring workflows:

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.