openFDA Scraper | 7 Endpoints: Drug, Device & Food, No Key avatar

openFDA Scraper | 7 Endpoints: Drug, Device & Food, No Key

Pricing

from $0.60 / 1,000 record scrapeds

Go to Apify Store
openFDA Scraper | 7 Endpoints: Drug, Device & Food, No Key

openFDA Scraper | 7 Endpoints: Drug, Device & Food, No Key

Scrape all openFDA endpoints in one actor: drug adverse events (FAERS), recalls, labels, device 510k & MAUDE, food enforcement. No API key needed. Date filtering, JSON output. Use in Claude, ChatGPT & any MCP agent for pharmacovigilance.

Pricing

from $0.60 / 1,000 record scrapeds

Rating

0.0

(0)

Developer

The Mine Works

The Mine Works

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

9 days ago

Last modified

Share

openFDA Scraper: 7 Endpoints: Drug, Device & Food, No Key

Pay only for results delivered. Browse all Actors.

💰 From $0.60 / 1,000 results.

One actor across seven openFDA datasets: drug adverse events, drug labels, drug recalls, device 510(k) clearances, device recalls, device adverse events and food recalls.

Why use this openFDA scraper

openFDA is seven separate datasets behind one API, each with its own date field, its own record shape and its own query grammar. Most scrapers cover one of them. This actor covers all seven and handles the differences for you.

Supported endpoints:

EndpointWhat it contains
drug/eventFAERS adverse event reports for drugs
drug/labelStructured product labelling
drug/enforcementDrug recall enforcement reports
device/510kDevice 510(k) premarket clearances
device/recallDevice recall records
device/eventDevice adverse event reports
food/enforcementFood recall enforcement reports

Date filtering just works. Each endpoint uses a different date field: receivedate, effective_time, recall_initiation_date, decision_date, date_received. Give dateFrom and dateTo as plain YYYY-MM-DD and the actor builds the right range clause for the endpoint you chose.

Records are passed through complete. openFDA records are deeply structured and differ per endpoint, so the actor does not flatten or trim them. You get the FDA's record exactly as published, plus an endpoint field and a scraped_at timestamp. Nothing is discarded.

No API key. An FDA key is optional and only raises rate limits; put one in fdaApiKey if you have one and are pulling large volumes.

Pull adverse event reports for a drug

openFDA's search syntax uses field:value. drug/event is the FAERS dataset and is the default endpoint.

{
"endpoint": "drug/event",
"search": "patient.drug.medicinalproduct:aspirin",
"maxResults": 500
}

Monitor drug recalls in a date window

dateFrom and dateTo are mapped to recall_initiation_date for this endpoint automatically. Schedule it and you have a recall alarm.

{
"endpoint": "drug/enforcement",
"dateFrom": "2026-01-01",
"dateTo": "2026-08-01",
"maxResults": 1000
}

Track device 510(k) clearances for a competitor

device/510k covers premarket clearances, and dates map to decision_date. Searching by applicant name gives you a competitor's regulatory pipeline.

{
"endpoint": "device/510k",
"search": "applicant:Medtronic",
"dateFrom": "2025-01-01",
"maxResults": 300
}

Watch food recalls by classification

Class I is the most serious recall classification. food/enforcement dates map to recall_initiation_date.

{
"endpoint": "food/enforcement",
"search": "classification:\"Class I\"",
"dateFrom": "2026-01-01",
"maxResults": 500
}

What data you get back

Because openFDA's seven datasets publish genuinely different record shapes, the actor does not flatten them into a common schema. Each record is the FDA's own object, complete and unchanged, plus two fields the actor adds:

FieldWhat it is
endpointWhich openFDA endpoint the record came from
scraped_atISO timestamp of capture

Everything else is exactly what openFDA returned. A drug/event record carries the FAERS structure with patient, drug and reaction sub-objects; a device/510k record carries k_number, applicant, decision_date and device_name; a food/enforcement record carries recalling_firm, classification, reason_for_recall and distribution_pattern. Check the openFDA field reference for the endpoint you are querying.

A final _type: "summary" record reports the endpoint and total record count.

How it works

The actor calls api.fda.gov/<endpoint>.json, paging 100 records at a time up to your maxResults.

Your search string is passed through to openFDA unchanged, so the full openFDA query grammar is available: field:value, quoted phrases, +AND+ and +OR+ joins, and range syntax.

Date filtering is where the actor does real work. It maps dateFrom and dateTo onto the correct date field for the endpoint you named, formats them as openFDA's compact YYYYMMDD range clause, and joins them onto your search with AND.

A 404 from openFDA means no more pages and ends the run cleanly. 429 and 5xx are retried with capped backoff. An fdaApiKey, if supplied, is sent as api_key.

Who uses openFDA data

Pharmacovigilance. Standing FAERS queries on a drug or ingredient, refreshed daily.

Regulatory competitive intelligence. device/510k searches by applicant show what a competitor is clearing and when.

Recall monitoring. Drug, device and food enforcement reports on a schedule, filtered to a firm or a classification.

Safety signal research. Adverse event reports as a corpus for classification or trend analysis.

What it costs

One pay-per-event charge, record-scraped, billed per record that actually lands in your dataset. Your rate depends on your own Apify discount tier:

Your Apify tierPer recordPer 1,000
FREE$0.002$2.00
BRONZE$0.0016$1.60
SILVER$0.00125$1.25
GOLD / PLATINUM / DIAMOND$0.001$1.00

Nothing else is billed. Failed requests, blocked pages, empty searches and error records are never charged, so a run that returns no records costs nothing. There is no subscription and no monthly minimum.

Run it on a schedule

Scheduled runs are the pattern most people end up on: smaller, more frequent runs finish faster, keep the data fresh, and cost exactly the same per record as one big run.

  1. On this actor's page, click ... -> Schedule Actor (or Console -> Schedules -> Create new).
  2. Pick a frequency. @daily suits most standing queries.
  3. Your saved input is reused on every run and each run appends to the dataset.
  4. Wire the dataset to Google Sheets, Slack, or a webhook from the Integrations tab so new rows reach you without you looking.

FAQ

Do I need an FDA API key? No. It is optional and only raises rate limits. Supply one in fdaApiKey if you have one and are pulling high volumes.

Which endpoints are supported? Seven: drug/event, drug/label, drug/enforcement, device/510k, device/recall, device/event and food/enforcement. One per run.

Why are the fields different between runs? Because each openFDA endpoint publishes a different record structure, and this actor passes those records through complete rather than truncating them into a lowest-common-denominator schema. endpoint on every record tells you which shape to expect.

What search syntax should I use? openFDA's own. field:value with quoted phrases for multi-word values, joined with AND and OR. The openFDA docs list the searchable fields per endpoint.

How do dates work across different endpoints? You give plain YYYY-MM-DD dates and the actor maps them to the right field: receivedate for drug events, effective_time for labels, recall_initiation_date for enforcement reports, decision_date for 510(k), date_received for device events.

Do adverse event reports prove a drug caused the effect? No. FAERS reports are voluntary submissions and are explicitly not causality determinations. The FDA says so directly. Treat them as signals, not evidence.

Can I query several endpoints in one run? No, one endpoint per run. Run once per endpoint and combine downstream.

Use it from Claude, ChatGPT and any MCP agent

Hosted MCP endpoint, no install, OAuth on first connect:

https://mcp.apify.com/?tools=themineworks/openfda-unified-crawler

Claude Desktop / Cursor config with token auth:

{
"mcpServers": {
"openfda": {
"url": "https://mcp.apify.com/?tools=themineworks/openfda-unified-crawler",
"headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }
}
}
}

Or call it from code with the Apify client:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('themineworks/openfda-unified-crawler').call({
"endpoint": "drug/event",
"search": "patient.drug.medicinalproduct:aspirin",
"maxResults": 100
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Disclaimer: This actor is an independent tool and is not affiliated with, endorsed by, or sponsored by the U.S. Food and Drug Administration. It uses the public openFDA API. FDA adverse event reports are voluntary submissions and do not establish causation. Nothing here is medical advice.

Found a bug or want a field added? Open an issue from the actor's Apify Console page or reach out through the The Mine Works profile.

Last verified: 2026-08