openFDA Scraper avatar

openFDA Scraper

Pricing

from $2.50 / 1,000 results

Go to Apify Store
openFDA Scraper

openFDA Scraper

Scrape openFDA: drug, device and food recalls, FAERS and MAUDE adverse-event reports, drug labels with boxed warnings, Drugs@FDA approvals and 510(k) clearances. Search by keyword, query or date and get one clean row per record. No login, no proxy, API key optional.

Pricing

from $2.50 / 1,000 results

Rating

0.0

(0)

Developer

Anyx Solutions

Anyx Solutions

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

banner

openFDA Scraper

FDA recalls, adverse-event reports, drug labels, drug approvals and 510(k) clearances from openFDA, searchable by keyword and date, as clean JSON.

openFDA is the US Food and Drug Administration's public data service: millions of records on the drugs, medical devices and foods sold in the United States. This Actor turns it into a dataset. Pick one of nine FDA datasets, type search terms such as a drug, device, firm or ingredient, add a date range or an openFDA query, and get one row per record, newest first: drug, device and food recalls with their class, status, reason, firm and distribution; drug adverse-event reports (FAERS) with seriousness, patient age and sex, the drugs involved and each reaction's outcome; medical-device reports (MAUDE) with the devices, problems and event narrative; food, supplement and cosmetic adverse-event reports (CAERS); drug labels with the boxed warning, indications, dosage, contraindications, warnings, adverse reactions and interactions; Drugs@FDA applications with their products, approval date and every submission with its letters and labels; and 510(k) device clearances with their decision. Every row keeps the full FDA record too. No login and no proxy; an API key is optional. Built for pharmacovigilance and drug-safety teams, regulatory affairs and quality, medical-device and food-safety compliance, competitive intelligence on products and manufacturers, healthcare analysts, journalists and researchers.

⚑ Quick start

{
"dataset": "drug/enforcement",
"searchTerms": ["metformin"],
"maxItems": 5
}

Or every serious Ozempic adverse-event report received in 2025:

{
"dataset": "drug/event",
"searchTerms": ["ozempic"],
"searchQuery": "serious:1",
"dateFrom": "2025-01-01",
"dateTo": "2025-12-31",
"maxItems": 1000
}

🧩 Input

FieldTypeRequiredDefaultDescription
datasetstringno"drug/enforcement"The FDA dataset to search (see the table below).
searchTermsarraynoβ€”Words to look for, one search per line, such as metformin or insulin pump. Each is matched as a phrase in the dataset's main text (see the table below).
searchQuerystringnoβ€”Optional openFDA query syntax, combined with every search term, such as classification:"Class I" AND state:CA. Without search terms it runs as a search of its own.
dateFromstringnoβ€”Only records on or after this date (YYYY-MM-DD), on the dataset's main date.
dateTostringnoβ€”Only records on or before this date (YYYY-MM-DD), on the dataset's main date.
maxItemsintegernoβ€”Maximum number of records per search term, query or start URL, newest first. The input form starts at 5; leave it empty to get every match.
startUrlsarraynoβ€”Public FDA pages to look up: a device recall, 510(k), MAUDE report or Drugs@FDA application on accessdata.fda.gov, or a DailyMed label or search page. Each record page returns that one record.
apiKeystringnoβ€”Optional free openFDA API key. Raises openFDA's daily limit from 1,000 to 120,000 requests.
proxyConfigurationobjectno{ "useApifyProxy": false }Proxy settings. openFDA needs no proxy.

With no search terms, query or start URL, the Actor returns the newest records of the whole dataset, narrowed by the date range if you set one.

Datasets. Each search term is matched as a phrase in the fields listed here, and the date range applies to the date shown:

datasetRecordsSearch terms matchDates filter on
drug/enforcementDrug recalls (FDA enforcement reports)Product description, reason for recall, recalling firmReport date
drug/eventDrug adverse-event reports (FAERS)Drug name, brand and generic names, reaction termsDate FDA received it
drug/labelDrug labels (structured product labels)Brand, generic and substance names, manufacturer, indicationsEffective date
drug/drugsfdaDrug approvals (Drugs@FDA applications)Brand names, active ingredients, sponsorSubmission date
device/eventMedical-device adverse-event reports (MAUDE)Device brand and generic names, manufacturerDate FDA received it
device/recallMedical-device recallsProduct description, reason for recall, firm, device nameDate posted
device/510k510(k) premarket clearancesDevice name, applicantDecision date
food/enforcementFood recalls (FDA enforcement reports)Product description, reason for recall, recalling firmReport date
food/eventFood, dietary supplement and cosmetic adverse events (CAERS)Product name, industry, reaction termsDate created

openFDA queries. searchQuery takes openFDA's own syntax, field by field, so any field of a record can be filtered, for example classification:"Class I" and status:Ongoing for recalls, patient.patientsex:2 or occurcountry:US for drug reports, openfda.product_type:"HUMAN OTC DRUG" for labels, or decision_code:SESE for 510(k)s. Join conditions with AND, OR and NOT.

πŸ“€ Output

Each FDA record is one dataset row. Every row has dataset, id, url, title, date and raw; the other fields depend on the dataset, as listed below. Fields a record does not have are null (or an empty list), and raw always holds the complete FDA record with every field.

Fields

FieldTypeDescription
datasetstringThe dataset the record comes from, such as drug/enforcement.
idstringThe record's FDA identifier: recall number, report ID, label set ID, application number or K number.
urlstringThe record's public FDA page (device recall, MAUDE report, DailyMed label, Drugs@FDA or 510(k) page), or the dataset's openFDA page when FDA has none per record.
titlestringA short label: the product, drug or device and, for reports, what happened.
datestringThe record's main date (the one dateFrom and dateTo filter on), YYYY-MM-DD.
rawobjectThe full openFDA record, unchanged.
recallNumberstringRecalls: FDA recall number, such as D-0657-2026.
eventIdstringRecalls: the recall event the product belongs to.
statusstringRecalls: Ongoing, Terminated, Completed, or a device recall's status.
classificationstringDrug and food recalls: Class I, Class II or Class III.
productTypestringRecalls: Drugs, Food, Devices. Labels: such as HUMAN PRESCRIPTION DRUG.
productDescriptionstringRecalls: the recalled product as FDA describes it.
productCodestringDevice recalls and 510(k)s: FDA product code.
productQuantitystringRecalls: quantity recalled.
codeInfostringRecalls: lots, serial numbers and expiry dates affected.
reasonForRecallstringRecalls: why the product was recalled.
rootCausestringDevice recalls: the firm's root cause.
actionstringDevice recalls: what the firm told customers to do.
recallingFirmstringRecalls: the firm recalling the product.
citystringRecalls and 510(k)s: the firm's city.
statestringRecalls and 510(k)s: the firm's state.
countrystringRecalls and 510(k)s: the firm's country.
distributionPatternstringRecalls: where the product was distributed.
voluntaryMandatedstringDrug and food recalls: whether the recall was voluntary or FDA-mandated.
recallInitiationDatestringRecalls: when the recall started, YYYY-MM-DD.
reportDatestringRecalls: when FDA published it (device recalls: date posted), YYYY-MM-DD.
terminationDatestringRecalls: when the recall was closed, YYYY-MM-DD.
brandNamesarrayBrand names (labels, approvals, and recalls FDA has linked to a product).
genericNamesarrayGeneric names (labels, approvals, and linked recalls).
deviceNamestringDevice recalls and 510(k)s: the device's name.
deviceClassstringDevice recalls and 510(k)s: FDA device class, 1, 2 or 3.
kNumbersarrayDevice recalls: the 510(k) clearances of the recalled device.
safetyReportIdstringDrug reports: the FAERS safety report ID.
receiveDatestringReports and 510(k)s: when FDA received it, YYYY-MM-DD.
seriousbooleanDrug reports: whether the report is serious.
seriousOutcomesarrayDrug reports: Death, Life threatening, Hospitalization, Disability, Congenital anomaly, Other serious.
reporterQualificationstringDrug reports: who reported it, such as Physician or Consumer or non-health professional.
reporterCountrystringDrug reports: the reporter's country code.
occurCountrystringDrug reports: where the event happened, as a country code.
patientSexstringReports: the patient's sex.
patientAgenumberReports: the patient's age, in patientAgeUnit.
patientAgeUnitstringReports: years, months, weeks, days, hours or decades.
patientWeightKgnumberDrug reports: the patient's weight in kilograms.
drugsarrayDrug reports: each drug with name, role (Suspect, Concomitant, Interacting), indication, activeSubstance, dosage, brandNames, genericNames, manufacturers.
reactionsarrayDrug and food reports: each reaction with its MedDRA term and, for drug reports, its outcome (such as Recovered/resolved or Fatal).
eventDatestringFood and device reports: when the event happened, YYYY-MM-DD.
outcomesarrayFood and device reports: outcomes such as Hospitalization or Required Intervention.
productsarrayFood reports: each product with name, role, industryCode, industryName. Approvals: each product with productNumber, brandName, activeIngredients (name, strength), dosageForm, route, marketingStatus, referenceDrug, teCode.
reportNumberstringDevice reports: the MDR report number.
eventTypestringDevice reports: Malfunction, Injury, Death or Other.
reportSourcestringDevice reports: who filed it, such as Manufacturer report.
eventLocationstringDevice reports: where it happened, such as HOSPITAL.
manufacturerstringDevice reports, labels and approvals: the manufacturer.
productProblemsarrayDevice reports: device problems, such as Incorrect Measurement.
devicesarrayDevice reports: each device with brandName, genericName, manufacturer, modelNumber, catalogNumber, lotNumber, productCode, deviceName, deviceClass, udi.
eventDescriptionstringDevice reports: the description of the event or problem.
manufacturerNarrativestringDevice reports: the manufacturer's narrative.
versionstringLabels: the label version.
effectiveDatestringLabels: the label's effective date, YYYY-MM-DD.
routesarrayLabels: routes of administration, such as ORAL.
substanceNamesarrayLabels: active substances.
pharmacologicClassesarrayLabels: established pharmacologic classes, such as GLP-1 Receptor Agonist [EPC].
productNdcsarrayLabels: product NDC codes.
applicationNumbersarrayLabels: the NDA, ANDA or BLA numbers the label belongs to.
boxedWarningstringLabels: the boxed ("black box") warning.
indicationsstringLabels: indications and usage.
dosagestringLabels: dosage and administration.
contraindicationsstringLabels: contraindications.
warningsstringLabels: warnings and precautions.
adverseReactionsstringLabels: adverse reactions.
drugInteractionsstringLabels: drug interactions.
applicationNumberstringApprovals: NDA, ANDA or BLA number, such as NDA209637.
sponsorNamestringApprovals: the application's sponsor.
approvalDatestringApprovals: when the original application was approved, YYYY-MM-DD.
latestSubmissionDatestringApprovals: the latest submission's status date, YYYY-MM-DD.
submissionsarrayApprovals: submissions newest first, each with type, number, status, statusDate, classCode, classDescription, reviewPriority and documents (letters, labels, reviews with type, date, url).
kNumberstring510(k)s: the K number, such as K253470.
applicantstring510(k)s: the company that applied.
contactstring510(k)s: the applicant's contact person.
decisionDatestring510(k)s: decision date, YYYY-MM-DD.
decisionCodestring510(k)s: decision code, such as SESE.
decisionDescriptionstring510(k)s: the decision, such as Substantially Equivalent.
clearanceTypestring510(k)s: Traditional, Special or Abbreviated.
advisoryCommitteestring510(k)s: the reviewing panel, such as Clinical Chemistry.
regulationNumberstring510(k)s: the device regulation number, such as 880.5730.

πŸ’‘ Use cases

  • Pharmacovigilance and drug safety β€” pull every FAERS report on your products or a competitor's, with seriousness, reactions and outcomes, for signal detection.
  • Recall monitoring β€” a daily feed of new Class I drug, device and food recalls, by product, firm or ingredient, for quality, supply-chain and retail compliance.
  • Medical-device surveillance β€” track MAUDE malfunction and injury reports and device recalls for a product code or manufacturer.
  • Regulatory and competitive intelligence β€” follow Drugs@FDA approvals, label changes, new boxed warnings and 510(k) clearances in a therapy area.
  • Label analysis β€” compare indications, dosing, contraindications and warnings across every label of an ingredient.
  • Research and journalism β€” build datasets on drug safety, recalls and approvals, and feed FDA text into search, RAG and LLM pipelines.

❓ FAQ

  • Is this data reliable enough for medical decisions? No. openFDA states that its data must not be relied on to make decisions about medical care: treat every record as unvalidated. An adverse-event report does not prove that a product caused the event, and report counts cannot be used to estimate how often an event happens.
  • Do I need an openFDA account or API key? No. Without a key, openFDA allows 1,000 requests a day per IP address; each request returns up to 1,000 recalls, approvals or 510(k)s, or 50 to 100 labels and reports. For larger runs, get a free key at open.fda.gov and enter it in apiKey to raise the limit to 120,000 a day.
  • Do I need a proxy? No. It runs without one by default.
  • How are results ordered? Newest first, by the dataset's main date, so maxItems keeps the most recent records.
  • Why is url the same for every recall or drug report? FDA publishes no public page per drug or food recall, FAERS report or CAERS report, so those rows link to the dataset's openFDA page. Device recalls, MAUDE reports, labels, approvals and 510(k)s link to their own FDA or DailyMed page.
  • Can I search one field only? Yes. Leave searchTerms empty and write the condition in searchQuery, for example recalling_firm:"Pfizer" or patient.drug.openfda.generic_name:"semaglutide".
  • Can I paste FDA recall announcements? No. FDA press releases do not map to a record. Search the recalled product or firm instead, or paste the record page of a device recall, 510(k), MAUDE report, Drugs@FDA application or DailyMed label.
  • Why are brand and generic names empty on some recalls? FDA links only some recalls to a product listing. The product is always in productDescription.

πŸ”— More scrapers by Anyx

🀝 Anyx Solutions

We build custom scrapers and data-extraction pipelines.

πŸ–Ό Image credit

Image credit: open.fda.gov