openFDA Drug, Device & Biologics Recall Scraper (USA) avatar

openFDA Drug, Device & Biologics Recall Scraper (USA)

Pricing

from $9.20 / 1,000 results

Go to Apify Store
openFDA Drug, Device & Biologics Recall Scraper (USA)

openFDA Drug, Device & Biologics Recall Scraper (USA)

Scrape FDA drug, medical device and biologics recalls and enforcement reports from the official openFDA API. Extract recall number, hazard class, product, reason, recalling firm, location, dates, product codes and 510(k) numbers. Export JSON, CSV or Excel.

Pricing

from $9.20 / 1,000 results

Rating

0.0

(0)

Developer

Scrapers Lat

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

openFDA Drug, Device & Biologics Recall Scraper (USA)

openFDA Drug, Device & Biologics Recall Scraper (USA)

Here is one real result, with every field the actor returns (the distributionPattern is trimmed here for length; AI add-on fields included):

{
"source": "enforcement",
"endpoint": "/device/enforcement.json",
"recallNumber": "Z-2372-2023",
"status": "Ongoing",
"classification": "Class I",
"productType": "Devices",
"productDescription": "MAHURKAR 12 Fr High Pressure Triple Lumen Acute Dialysis Catheter, 24 cm, Straight Extensions, IC Tray REF: 8888102004HP",
"reasonForRecall": "Catheter center lumen was found to have an occlusion in the tip of the catheter; the source of the occlusion an excessive MDX, a silicone-based lubricant which coats the catheter tip. An occluded catheter may lead to full obstruction resulting in delay to treatment, hemolysis, embolism or thrombosis.",
"recallingFirm": "Covidien LP",
"city": "Mansfield",
"state": "MA",
"country": "United States",
"postalCode": "02048-1113",
"addressLine1": "15 Hampshire St",
"addressLine2": null,
"distributionPattern": "US Nationwide - Worldwide Distribution. Foreign: Argentina Austria Bahrain Bangladesh Belgium Brazil Canada China ...",
"productQuantity": "685 units",
"codeInfo": "GTIN: 20884521128009 LOT Numbers: 2200400154",
"moreCodeInfo": null,
"voluntaryMandated": "Voluntary: Firm initiated",
"initialFirmNotification": "Letter",
"recallInitiationDate": "2023-06-28",
"centerClassificationDate": "2023-08-11",
"reportDate": "2023-08-23",
"terminationDate": null,
"eventId": "92660",
"productCode": null,
"kNumbers": null,
"rootCauseDescription": null,
"action": null,
"firmFeiNumber": null,
"additionalInfoContact": null,
"classificationLevel": 1,
"active": true,
"firmAddress": "15 Hampshire St, Mansfield, MA 02048-1113, United States",
"recallAgeDays": 1087,
"distributionNationwide": true,
"distributionStates": ["PR"],
"riskScore": 90,
"openfda": null,
"observedAt": "2026-08-14T07:37:17.542Z",
"aiSummary": "The MAHURKAR High Pressure Triple Lumen Acute Dialysis Catheter was recalled due to an occlusion in the catheter's center lumen, caused by excessive silicone-based lubricant. This poses a serious hazard as it can lead to full catheter obstruction, delaying treatment, or cause complications such as hemolysis, embolism, or thrombosis.",
"aiSeverity": "critical",
"aiSeverityScore": 95,
"error": null
}

The most complete FDA drug and device recall scraper available. It returns every field the FDA drug, device and biologics enforcement reports expose (recall number, class, product, reason, firm, distribution, code info and dates), adds the richer device recall database (product code, 510(k) numbers, root cause, firm action) and derived fields like riskScore and distributionStates, and offers optional AI summary and severity add-ons, with 15+ filters to target exactly the recalls you need.

📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples

Apify Coverage Output Billing

Table of contents

What it does

The actor queries the openFDA drug and device enforcement datasets, applies the filters you pass, paginates through the matching recalls, and writes one normalized record per recall to the run's dataset. Choose productType to pull drugs, devices, biologics, or all combined. Enable deviceRecallDatabase for the richer FDA device recall database, which adds product code, 510(k) numbers, root cause and firm action.

Dates are normalized to YYYY-MM-DD, missing source values are returned as null, and a set of derived fields (riskScore, distributionStates, distributionNationwide, firmAddress, recallAgeDays, classificationLevel, active) is computed on top of the raw FDA fields. Two optional AI add-ons produce a plain-English summary and a health-risk severity rating.

Quickstart

Open the actor, paste this into the input, and press Run. It returns the 10 most recent Class I device recalls, newest first.

{
"productType": "Devices",
"classification": "Class I",
"sortOrder": "Newest first",
"maxRecalls": 10
}

Leave every field empty to pull the most recent drug and device recalls combined. Add searchQuery, state, recallingFirm or a date range to narrow the results.

Input reference

FieldTypeRequiredDefaultDescription
productTypeenumno(all)`` (all: drug + device), Drugs, Devices, Biologics.
deviceRecallDatabasebooleannofalsePull from the richer FDA device recall database instead of enforcement reports. Adds product code, 510(k) numbers, root cause and firm action. Overrides productType (device-only).
searchQuerystringno(empty)A keyword matched to the recall reason (for example contamination, sterility, malfunction), or a raw openFDA expression such as product_description:insulin or recalling_firm:Pfizer.
classificationenumno(any)Hazard class: Class I (most serious), Class II, Class III. Applies to enforcement reports.
statusenumno(any)Ongoing, Completed, Terminated, Pending, or Open (device recall database).
stateenumno(any)Two-letter US state code of the recalling firm, for example CA, NY, NJ.
recallingFirmstringno(empty)Firm or manufacturer name phrase, for example Pfizer, Medtronic, Baxter.
productDescriptionstringno(empty)Word or phrase in the product description, for example insulin, catheter, pacemaker, vaccine.
productCodestringno(empty)FDA device product code, for example LWS, DXN. Only applies to the device recall database.
citystringno(empty)City of the recalling firm, for example Minneapolis, Boston.
countrystringno(empty)Country of the recalling firm, for example United States, Germany. Applies to enforcement reports.
voluntaryMandatedenumno(any)Voluntary (firm initiated) or Mandated (FDA ordered). Applies to enforcement reports.
dateFromstringno(empty)Include recalls on or after this date (YYYY-MM-DD). Applies to dateField.
dateTostringno(empty)Include recalls on or before this date (YYYY-MM-DD). Applies to dateField.
dateFieldenumnoreport_dateWhich date the range applies to: report_date, recall_initiation_date, center_classification_date, termination_date.
sortOrderenumno(relevance)Newest first or Oldest first, ordered on dateField. Empty keeps openFDA relevance order.
recallNumberstringno(empty)Look up one exact FDA recall number, for example D-321-2016 (drug), Z-2372-2023 (device).
eventIdstringno(empty)Pull every recall in one FDA recall event, for example 92660. Applies to enforcement reports.
withAiSummarybooleannofalseAI add-on: plain-English summary of each recall (paid).
withAiSeveritybooleannofalseAI add-on: health-risk severity rating with a 0-100 score (paid).
maxRecallsintegerno10Maximum recall records to collect. openFDA paginates with skip up to 25000.

Filters combine with logical AND.

Output reference

One dataset item per recall. Types: string, integer, boolean, string[], object, or null when the source value is absent. The productCode through additionalInfoContact fields populate mainly from the device recall database. Fields prefixed ai populate only when the matching AI add-on is enabled.

FieldTypeDescription
sourcestringWhich dataset the record came from (enforcement or device-recall).
endpointstringThe openFDA endpoint queried, for example /device/enforcement.json.
recallNumberstringFDA recall number (unique per recall).
statusstringRecall status: Ongoing, Completed, Terminated, Pending, or Open.
classificationstringHazard class: Class I, Class II, or Class III.
productTypestringDrugs, Devices, or Biologics.
productDescriptionstringFull description of the recalled product.
reasonForRecallstringNarrative reason the product was recalled.
recallingFirmstringFirm or manufacturer subject to the recall.
citystringCity of the recalling firm.
statestringTwo-letter state code of the recalling firm.
countrystringCountry of the recalling firm.
postalCodestringPostal code of the recalling firm.
addressLine1stringFirst line of the firm street address.
addressLine2stringSecond line of the firm street address, or null.
distributionPatternstringFree-text description of where the product was distributed.
productQuantitystringQuantity of product in distribution.
codeInfostringLot codes, GTINs, best-by dates identifying affected product.
moreCodeInfostringAdditional code information, or null.
voluntaryMandatedstringWhether the recall was firm initiated (voluntary) or FDA mandated.
initialFirmNotificationstringHow the firm first notified the public or trade.
recallInitiationDatestringDate the firm started the recall (YYYY-MM-DD).
centerClassificationDatestringDate the FDA center classified the recall (YYYY-MM-DD).
reportDatestringDate the recall was first reported by the FDA (YYYY-MM-DD).
terminationDatestringDate the recall was terminated (YYYY-MM-DD), or null if still open.
eventIdstringFDA event ID grouping related recalls.
productCodestringFDA device product code (device recall database).
kNumbersstring[]Related 510(k) numbers (device recall database).
rootCauseDescriptionstringRoot cause of the device recall (device recall database).
actionstringFirm action taken (device recall database).
firmFeiNumberstringFirm FDA Establishment Identifier (device recall database).
additionalInfoContactstringAdditional information contact (device recall database).
classificationLevelintegerNumeric hazard rank: 1 = Class I, 2 = Class II, 3 = Class III, null if unknown.
activebooleantrue while the recall is Ongoing, Pending or Open, otherwise false.
firmAddressstringSingle-line firm postal address, ready for CRM or mapping.
recallAgeDaysintegerWhole days between reportDate and the run time.
distributionNationwidebooleantrue when the distribution text names nationwide or all-states distribution.
distributionStatesstring[]US state codes parsed from distributionPattern.
riskScoreintegerComposite 0 to 100 hazard score combining severity, recency and distribution scope. null if severity is unknown.
openfdaobjectThe openFDA harmonization block when present, otherwise null.
observedAtstringISO 8601 timestamp of when the record was collected.
aiSummarystringAI plain-English summary of the recall (AI).
aiSeveritystringAI health-risk rating: low, medium, high, critical (AI).
aiSeverityScoreintegerAI severity score, 0 to 100 (AI).
errorstringnull on success. On a failed run, a single item with a populated error field is written instead.

Example output record

The hero record at the top of this page is a real record from a live run (input {"productType":"Devices","classification":"Class I","withAiSummary":true,"withAiSeverity":true,"maxRecalls":10}), with the distributionPattern trimmed for length.

Run via API and CLI

Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.

Run synchronously and get dataset items in one call:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~fda-drug-device-recalls-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"productType":"Drugs","classification":"Class I","searchQuery":"contamination","maxRecalls":25,"sortOrder":"Newest first"}'

Start a run asynchronously:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~fda-drug-device-recalls-scraper/runs?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"deviceRecallDatabase":true,"recallingFirm":"Medtronic","maxRecalls":100}'

Apify CLI:

apify call scrapers_lat/fda-drug-device-recalls-scraper \
--input '{"eventId":"92660"}'

Fetch results

Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:

# JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
# CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"
# Paginate large datasets
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"

<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.

Billing and limits

  • Pay per result. You are charged per recall returned (result event). See the pricing tab for the current per-result price.
  • AI add-ons are billed separately. withAiSummary and withAiSeverity are paid add-ons, charged only when they return usable output.
  • No charge on failure. If a run errors, the actor writes a single item with a populated error field and does not charge for it. Empty runs cost nothing.
  • Spend cap respected. Set maxTotalChargeUsd on the run; once reached, the actor stops emitting and charging further billable results.
  • Free Apify plans are capped at 10 records per run. Upgrade for higher maxRecalls.
  • Source pagination ceiling. openFDA allows a skip offset up to 25000 per query. For larger pulls, split the work with narrower filters or date ranges.

FAQ and troubleshooting

A run returned 0 records. Why? The filter combination matched nothing. Loosen filters (remove state or classification, widen the date range), or confirm the keyword exists in the recall reason. Zero-result runs are not charged.

How do I get product code, 510(k) numbers and root cause? Enable deviceRecallDatabase. It pulls from the richer FDA device recall database and adds productCode, kNumbers, rootCauseDescription, action and firmFeiNumber. It is device-only and overrides productType.

What is the difference between drugs, devices and biologics? Drugs and biologics come from the drug enforcement endpoint; devices from the device enforcement endpoint. productType empty combines drug and device enforcement reports.

What do the AI add-ons do? withAiSummary adds a plain-English summary. withAiSeverity adds a health-risk rating and a 0-100 score. Both are optional, paid, and charged only when they return usable output.

Why is terminationDate null? The recall is still open (Ongoing, Pending or Open), so the FDA has not set a termination date. Missing values are returned as null, never invented.

Is this an official FDA tool? No. This actor is independent and has no affiliation with the FDA or openFDA. It reads only data that is publicly available through the openFDA API. Use it in accordance with the openFDA terms of service.

More scrapers at scrapers.lat

Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.


Independent tool, not affiliated with the FDA or openFDA. Accesses only publicly available openFDA data. Use in accordance with the openFDA terms of service.