FDA Recalls Scraper - Food, Drug and Device
Pricing
from $1.00 / 1,000 run start fees
FDA Recalls Scraper - Food, Drug and Device
Search FDA enforcement reports across food, drug and medical device recalls. Returns recall class, recalling firm, product, reason, distribution and normalised dates from the official openFDA API.
FDA Recalls Scraper
Search FDA enforcement reports across food, drug and medical device recalls in one run. Recall class, recalling firm, product, reason, distribution area, lot codes and dates.
Reads the official openFDA API. No key, no login.
Class I is the field that matters
The FDA grades every recall, and the grade is the whole point:
| Class | What it means |
|---|---|
| Class I | A reasonable probability of serious harm or death |
| Class II | Temporary or medically reversible harm |
| Class III | Unlikely to cause harm |
There is no numeric severity field anywhere in the data. Sort by date or firm
and the dangerous recalls sit among the labelling corrections with nothing to
distinguish them. Every row here carries a derived is_class_i so that
filter is one step.
To put the scale in perspective: of 29,317 food enforcement reports, 12,867 are Class I.
Three datasets, one schema
| Category | Records |
|---|---|
food | 29,317 |
drug | 17,899 |
device | 39,794 |
They share one shape, so you can pull all three in one run and every row carries
its category. Drug recalls additionally carry brand_names, generic_names
and manufacturer_names, lifted out of openFDA's nested block.
Three things about this data that trip people up
Dates arrive as 20160808, not as dates. Six date fields come back as bare
YYYYMMDD strings. Feed one into anything date-aware and you get a wrong answer
or an exception. All six are normalised to ISO here.
Terminated does not mean cancelled. It means the FDA considers the
enforcement action complete. A recall that was withdrawn and a recall that ran
its course look identical if you read that field as plain English, and counting
"active recalls" wrongly is the usual result.
An empty result comes back as HTTP 404. openFDA answers 404 when a search matches nothing. Treating that as a transport failure turns "no recalls for this firm" into "the scraper broke" — which is worse, because the first is a useful answer. This Actor returns zero rows and says so.
Why this Actor connects directly
across every .gov host tested:
| Route | Result |
|---|---|
| Direct | HTTP 200, working JSON |
| Through a residential proxy | CONNECT tunnel failed, response 491 |
A 491 on the CONNECT is our proxy refusing to tunnel to the host, not the
FDA refusing us. That pattern held for every government host, so on a .gov
target a proxy error is a fact about the proxy rather than the site. openFDA
publishes this data for public use, and this Actor takes it directly at a polite
pace.
Input reference
| Field | Type | Default |
|---|---|---|
categories | food, drug, device, any combination | ["food"] |
classification | Class I, II or III | all |
firm | recalling company name | — |
product | words from the product description | — |
reason | words from the recall reason, e.g. Listeria | — |
state | two-letter state of the firm | — |
status | Ongoing, Completed, Terminated | all |
date_from, date_to | YYYY-MM-DD | — |
limit | 1-5000 | 100 |
retries | 1-6 | 3 |
Filters combine with AND. limit is split across the categories you choose, so
asking for 60 across all three gives roughly 20 of each.
Typical uses
- Food safety monitoring.
categories: food,classification: Class I, run daily.reasonsearches likeListeriaorundeclarednarrow it further. - Supplier risk. Search
firmfor your suppliers and see their recall history, with class and reason attached. - Pharmacovigilance. Drug recalls with brand and generic names, filterable by manufacturer.
- Medical device compliance. Device recalls by firm or product, which is the first check in a hospital procurement review.
- Geographic exposure.
distribution_patternnames the states or regions a recalled product reached, andstatefilters by where the firm is. - Trend analysis. Date ranges plus the classification breakdown show whether recalls in a category are rising, and whether the severity mix is shifting.
Notes on behaviour
code_info carries the lot numbers, UPCs and expiry dates in scope, which is
what you need to check whether a specific batch is affected rather than a
product line.
event_id groups related recalls, so one contamination incident spanning many
products can be collapsed back into a single event.
openFDA allows 240 requests a minute per IP without a key. This Actor paces itself well under that, so long runs are slower than they could be and stay within what a free public service is offered on.
The data covers US enforcement only. A product recalled elsewhere and not in the US will not appear.