FDA Recalls, Adverse Events & 510(k) Scraper (openFDA) avatar

FDA Recalls, Adverse Events & 510(k) Scraper (openFDA)

Pricing

from $0.70 / 1,000 results

Go to Apify Store
FDA Recalls, Adverse Events & 510(k) Scraper (openFDA)

FDA Recalls, Adverse Events & 510(k) Scraper (openFDA)

Export FDA drug, food & device recalls, FAERS adverse events, 510(k) clearances and drug labels from the official openFDA API. No API key, no 25k record cap.

Pricing

from $0.70 / 1,000 results

Rating

0.0

(0)

Developer

dean ko

dean ko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

FDA Recalls, Adverse Events & 510(k) Scraper (openFDA API)

Export FDA recalls, FDA adverse events (FAERS), 510(k) clearances and drug labels from openFDA, the U.S. Food and Drug Administration's official public API. You get clean, flat rows ready for Excel, Google Sheets, BI tools or your database. One Actor covers six of the most-used FDA datasets, with no API key, no proxies and no 25,000-record cap.

Dataset (dataset value)What it containsRecords in openFDA
Drug recalls (drug/enforcement)FDA enforcement reports for drug recalls18,000+
Food recalls (food/enforcement)Food, beverage and dietary supplement recalls29,000+
Medical device recalls (device/enforcement)Medical device recalls40,000+
Drug adverse events (drug/event)FAERS reports of side effects and medication errors20 million+
Device 510(k) clearances (device/510k)Premarket notifications and FDA decisions176,000+
Drug labels (drug/label)Structured prescribing information and package inserts (SPL)260,000+

Who it's for and use cases

  • Recall monitoring and food safety teams. Schedule a daily run for new Class I recalls (dateFrom = yesterday) and send alerts to Slack or email with webhooks.
  • Pharmacovigilance and drug safety. Pull FAERS adverse event reports for a drug. Each row shows suspect vs. concomitant drugs, seriousness flags (death, hospitalization, life-threatening) and MedDRA reaction terms.
  • Medical device market intelligence. List every 510(k) clearance for a competitor or product code, and measure time from submission to decision.
  • Supplier risk and compliance. Check whether a manufacturer or supplier has a recall history and how severe it was.
  • Regulatory affairs and consulting. Build datasets of labels, boxed warnings and indications across a drug class.
  • Research, journalism and legal work. Analyse recall trends, adverse event patterns or a company's history.

Why this Actor

  • Six FDA datasets, one input form. Drug, food and device recalls, FAERS adverse events, 510(k) clearances and drug labels. You don't need a separate Actor for each one.
  • No 25,000-record ceiling. openFDA's skip parameter stops at 25,000 records. This Actor follows openFDA's search_after links instead, so a single run can export a full dataset.
  • Same leading columns for every dataset. dataset, recordId, date, company, title and url always come first, so you can combine recalls, clearances and labels in one sheet.
  • Decoded, analysis-ready fields. FAERS numeric codes become readable values (patientSex: "Female", patientAgeUnit: "Year", reporterQualification: "Physician", drug role Suspect/Concomitant). Seriousness flags are booleans. All dates are ISO YYYY-MM-DD.
  • Links included. 510(k) rows link to the FDA 510(k) database, and drug label rows link to DailyMed.
  • Privacy by design. 510(k) contact-person names and adverse event reporter or sender details are dropped.
  • Low, predictable price. $0.70 per 1,000 records. The run stops automatically when your maximum charge is reached.
  • Clear failures. Invalid openFDA queries fail with openFDA's error message instead of returning an empty "successful" run. Temporary HTTP errors are retried automatically, with a longer wait each time.

How to use

  1. Click Try for free (or Start) on this page.
  2. Choose a Dataset, for example Food recalls.
  3. Optionally add Search text (listeria), Company names (Medtronic), a date range or a recall class.
  4. Set Max records. The default is 20, which costs about $0.01.
  5. Click Start, then download the results as JSON, CSV, Excel, XML or HTML from the Output tab.

Different filters are combined with AND. Several company names or recall classes are combined with OR. With the default input, the Actor returns the 20 newest FDA drug recalls in a few seconds.

Example: Class I Listeria food recalls in 2024

{
"dataset": "food/enforcement",
"searchText": "listeria",
"classifications": ["Class I"],
"dateFrom": "2024-01-01",
"dateTo": "2024-12-31",
"maxItems": 1000
}

Example: FDA adverse event reports for Ozempic since 2024

{
"dataset": "drug/event",
"searchText": "patient.drug.medicinalproduct:\"OZEMPIC\"",
"dateFrom": "2024-01-01",
"maxItems": 5000
}

Example: Medtronic 510(k) clearances since 2023

{ "dataset": "device/510k", "firmNames": ["Medtronic"], "dateFrom": "2023-01-01", "maxItems": 500 }

Input fields

FieldDescription
datasetdrug/enforcement (default), food/enforcement, device/enforcement, drug/event, device/510k or drug/label
searchTextFree-text search across all fields, e.g. listeria. Also accepts openFDA syntax, e.g. reason_for_recall:undeclared
firmNamesCompany names (OR-ed): recalling firm, 510(k) applicant, or manufacturer
dateFrom / dateToYYYY-MM-DD. Uses the report date (recalls), receive date (adverse events), decision date (510(k)) or effective date (labels)
classificationsRecalls only: Class I, Class II, Class III
sortOrderdesc (newest first, default) or asc
maxItemsMaximum number of records (default 20)
apiKeyOptional free openFDA API key. You only need it for very large exports

Output sample

Every row starts with dataset, recordId, date, company, title, url and ends with scrapedAt. Dataset-specific columns come in between.

Drug recall (real record from the default input):

{
"dataset": "drug/enforcement",
"recordId": "D-0879-2026",
"date": "2026-10-07",
"company": "SV Labs Toronto Corporation",
"title": "Benzoyl Peroxide Wash, USP, 10%, packaged in a)5 FL OZ (148mL) bottles ...",
"url": null,
"recallNumber": "D-0879-2026",
"status": "Ongoing",
"classification": "Class II",
"reasonForRecall": "Microbial contamination of topical product.",
"distributionPattern": "IL only",
"voluntaryMandated": "Voluntary: Firm initiated",
"recallingFirm": "SV Labs Toronto Corporation",
"city": "Brampton",
"country": "Canada",
"recallInitiationDate": "2026-09-01",
"reportDate": "2026-10-07",
"terminationDate": null,
"scrapedAt": "2026-10-19T08:23:05.442Z"
}

Drug adverse event (FAERS):

{
"dataset": "drug/event",
"recordId": "26940200",
"date": "2026-06-30",
"company": "Novo Nordisk Pharmaceutical Industries, LP",
"title": "Monoplegia, Back pain, Product use in unapproved indication",
"serious": true,
"seriousnessDeath": false,
"seriousnessHospitalization": true,
"reporterQualification": "Consumer or non-health professional",
"patientAge": 45,
"patientAgeUnit": "Year",
"patientSex": "Female",
"reactions": ["Monoplegia", "Back pain", "Product use in unapproved indication"],
"suspectDrugs": ["OZEMPIC"],
"drugs": [{ "name": "OZEMPIC", "role": "Suspect", "indication": "Obesity", "activeSubstance": "SEMAGLUTIDE" }]
}

Columns by dataset

DatasetMain columns
All datasetsdataset, recordId, date, company, title, url, scrapedAt
Recalls (drug, food, device)recallNumber, eventId, status, classification, productType, productDescription, reasonForRecall, productQuantity, codeInfo, distributionPattern, voluntaryMandated, initialFirmNotification, recallingFirm, address, city, state, postalCode, country, recallInitiationDate, centerClassificationDate, reportDate, terminationDate, brandNames, genericNames
Drug adverse events (FAERS)safetyReportId, receiveDate, receiptDate, serious, seriousnessDeath, seriousnessHospitalization, seriousnessLifeThreatening, seriousnessDisabling, seriousnessCongenitalAnomaly, seriousnessOther, occurCountry, reporterCountry, reporterQualification, patientAge, patientAgeUnit, patientSex, patientWeightKg, reactions, suspectDrugs, drugs, manufacturers
Device 510(k)kNumber, deviceName, applicant, decisionDate, dateReceived, decisionCode, decisionDescription, clearanceType, productCode, deviceClass, regulationNumber, genericDeviceName, advisoryCommittee, thirdPartyReview, expeditedReview, statementOrSummary, city, state, postalCode, countryCode
Drug labelssplId, setId, effectiveDate, version, brandNames, genericNames, manufacturers, productType, routes, substances, productNdcs, applicationNumbers, pharmClasses, boxedWarning, indicationsAndUsage, dosageAndAdministration, contraindications, warnings, adverseReactions, drugInteractions, activeIngredient, purpose

Pricing

This Actor uses pay per event. Platform usage is included, so you pay only for:

  • $0.0007 per record saved to the dataset ($0.70 per 1,000 records), and
  • $0.00005 per run start per GB of memory. At the default 4 GB that is $0.0002 per run.

Worked example. You export 10,000 Ozempic adverse event reports in one run: 10,000 × $0.0007 = $7.00, plus $0.0002 for the start, for about $7.00 in total. The default input (20 drug recalls) costs about $0.01. If you set a maximum total charge for a run, the Actor stops as soon as the next record would exceed it.

Integrations and API

Run the Actor from your own code with the official apify-client package. Replace <YOUR_APIFY_TOKEN> with your token from Console > Settings > API & Integrations.

Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("deanko/openfda-scraper").call(run_input={
"dataset": "device/enforcement",
"classifications": ["Class I"],
"dateFrom": "2026-01-01",
"maxItems": 200,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["date"], item["company"], item["reasonForRecall"])

JavaScript / Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('deanko/openfda-scraper').call({
dataset: 'drug/event',
searchText: 'patient.drug.medicinalproduct:"METFORMIN"',
maxItems: 500,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, items[0]);

You can also connect the Actor to Make, Zapier, n8n, Google Sheets, Slack, webhooks or the Apify MCP server. Use Schedules to run it daily for recall or 510(k) monitoring.

FAQ

Where does the data come from? From the official openFDA API (api.fda.gov), published by the U.S. Food and Drug Administration. The Actor does not scrape web pages and doesn't need proxies.

Do I need an openFDA API key? No. Without a key, openFDA allows 240 requests per minute and 1,000 requests per day per IP address. Each request returns up to 1,000 records. A free key raises the daily limit to 120,000 requests. Add one in apiKey only for very large or frequent exports. The Actor waits between pages to stay under the per-minute limit.

How do I search a specific field? Use openFDA query syntax in searchText, e.g. reason_for_recall:undeclared, openfda.generic_name:"metformin" or patient.reaction.reactionmeddrapt:"nausea". See the openFDA query syntax docs.

How fresh is the data? Every run queries openFDA live, so you get whatever openFDA has published at that moment. openFDA updates each dataset on its own schedule (FAERS, for example, is quarterly). The openFDA dataset pages show each dataset's last update date.

Why did my search return nothing? openFDA matches whole words. Try a shorter term, a different spelling, or field syntax. Company names match words inside the name, so Pfizer finds "Pfizer Laboratories Div Pfizer Inc".

Is an adverse event report proof that a drug caused the reaction? No. FAERS reports are submitted voluntarily, can be duplicated or incomplete, and do not establish causation.

Limitations

  • Only the six datasets listed above are supported. Device adverse events (MAUDE), food and animal adverse events, NDC and Drugs@FDA are not included yet.
  • Output columns differ by dataset after the six common columns.
  • Free-text search matches whole words only. It does not do fuzzy matching.
  • Without an API key, openFDA's 1,000-requests-per-day limit applies per IP. Very large exports (over about 1 million records a day) need your own key.
  • openFDA data is not validated by the FDA and must not be used to make medical decisions. This Actor is not affiliated with or endorsed by the FDA.

The data comes from the public openFDA API and is in the public domain. Adverse event reports are de-identified by the FDA. The Actor does not collect reporter or sender details, and it drops 510(k) contact-person names.

Support and feedback

Found a bug, need another openFDA dataset or a new field? Open an issue on the Issues tab.