FDA Recalls API — FDA Enforcement Reports (Food, Drug, Device) avatar

FDA Recalls API — FDA Enforcement Reports (Food, Drug, Device)

Pricing

from $33.50 / 1,000 recall records

Go to Apify Store
FDA Recalls API — FDA Enforcement Reports (Food, Drug, Device)

FDA Recalls API — FDA Enforcement Reports (Food, Drug, Device)

FDA recalls as clean records: FDA enforcement reports from openFDA for food, drugs and devices — recalling firm, product, classification, reason, distribution and status, with an optional alert feed. openFDA disclaimer carried. No API key. Part of NexGen Signal — official-source data products

Pricing

from $33.50 / 1,000 recall records

Rating

0.0

(0)

Developer

NexGen Signal

NexGen Signal

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

10 days ago

Last modified

Share

FDA recalls, from the official FDA enforcement reports. Every food, drug and device recall published through openFDA — recalling firm, product, classification, reason and status — as clean records, with an optional new-since-last-check alert feed.

Official source. No API key. Pay per record.

This actor turns the U.S. FDA's recall/enforcement data (via openFDA) into clean, per-recall records across food, drug, and device. Each run reads the official openFDA enforcement endpoints and delivers one record per recall — the recalling firm, the product, the classification (Class I/II/III), the reason, the distribution pattern, and the status — with openFDA's own accuracy disclaimer carried on every record.

What this is, in one paragraph

The FDA publishes recall and enforcement actions for food, drugs, and medical devices. This actor reads them through openFDA's keyless API and flattens each into a row: who recalled, what product, why, how serious (classification), where it was distributed, and the current status. Values are verbatim. Because openFDA explicitly labels its data as unvalidated, that disclaimer travels on every record.

Who buys this and for what job

  • Supply-chain, QA, and compliance teams screening suppliers and products against FDA recalls across food/drug/device in one feed.
  • Risk and insurance analysts tracking recall classification and reasons over time.
  • Researchers and journalists who need the structured recall facts with firm and product detail.
  • Data engineers wanting a keyless, one-call recall feed.

Buyers usually search for this as "FDA recalls" or "FDA enforcement reports".

openFDA disclaimer (carried verbatim)

openFDA labels its data as unvalidated. This actor carries that disclaimer, exactly as published, on every record and in this listing:

"Do not rely on openFDA to make decisions regarding medical care. While we make every effort to ensure that data is accurate, you should assume all results are unvalidated. We may limit or otherwise restrict your access to the API in line with our Terms of Service."

These are recall records for information and screening — not medical, legal, or safety advice.

Sample output

Sample output — FDA Recall Risk Records — openFDA Enforcement

Real rows from a live run of this actor (first 5 rows, selected columns).

One full record from the same run, exactly as delivered:

{
"record_id": "F-0276-2017:food",
"endpoint": "food",
"recall_number": "F-0276-2017",
"event_id": "75272",
"status": "Terminated",
"classification": "Class II",
"product_type": "Food",
"recalling_firm": "Pharmatech LLC",
"product_description": "CytoDetox, Hydrolyzed Clinoptilolite Fragments, 1 oz./30 mL, OTC Non-Sterile. Dietary supplement.",
"reason_for_recall": "Recall initiated as a precautionary measure due to potential risk of product contamination with Burkholderia cepacia.",
"distribution_pattern": "FL, MI, MS, and OH.",
"product_quantity": "1,990 bottles",
"voluntary_mandated": "Voluntary: Firm initiated",
"initial_firm_notification": "Letter",
"recall_initiation_date": "20160808",
"report_date": "20161102",
"state": "FL",
"country": "United States",
"city": "Davie",
"source": "openFDA (FDA enforcement / recalls)",
"openfda_disclaimer": "Do not rely on openFDA to make decisions regarding medical care. While we make every effort to ensure that data is accurate, you should assume all results are unvalidated. We may limit or otherwise restrict your access to the API in line with our Terms of Service.",
"licence": "openFDA — U.S. Food & Drug Administration. Public-domain U.S. Government data (https://open.fda.gov/license/). Reformatted to recall records; values verbatim.",
"attribution": "Source: U.S. FDA openFDA",
"observed_at": "2026-09-25T17:22:56Z"
}

Pricing

EventFree planBronzeSilverGold / Platinum / Diamond
recall_record$0.05$0.045$0.04$0.0335

Delivered before charged. Blocked runs and empty results cost nothing.

Input

FieldTypeDefaultDescription
endpointsstring listfood, drug, deviceWhich openFDA enforcement datasets to pull.
sinceDatestring (YYYYMMDD)—Optional. Keep recalls with a report date on or after this date.
classificationselectAnyOptional recall classification filter (Class I/II/III).
watchFirmsstring list—Optional watchlist: recalling-firm texts, e.g. Fresenius.
watchProductTermsstring list—Optional watchlist: product-description texts, e.g. insulin, a product or NDC code.
classificationsmulti-select—Optional: several classifications at once.
sinceLastCheckbooleanfalseAlert feed: return only recalls not delivered by an earlier run with the same settings.
firstRunLookbackDaysinteger30Alert feed: how far back the first check reads.
maxRecordsinteger10Ceiling on records delivered and billed.

The actor paces requests under openFDA's published rate limit.

Recall alert feed (watchlist + "new since last check")

Added 3 October 2026. Give a watchlist — firm names and/or product terms — and, if you like, the classifications you care about, then turn on sinceLastCheck and schedule the actor (for example weekly, after FDA's Wednesday enforcement report). Each run returns only the recalls you have not received before, each tagged with the watch entry it matched (matched_watch_entries).

{
"endpoints": ["drug", "device"],
"watchFirms": ["Fresenius", "Baxter"],
"watchProductTerms": ["insulin"],
"classifications": ["Class I", "Class II"],
"sinceLastCheck": true,
"maxRecords": 100
}

How it never misses and never repeats:

  • The watermark (latest report date delivered, plus the recalls already delivered from the last 14 days of report dates) is saved in a key-value store named fda-recall-watch-state in your own Apify account, after every delivered record. It survives restarts and only moves forward. Each different combination of endpoints, watchlist and classifications keeps its own watermark.
  • Each check re-reads the 14 days before the watermark, so a recall FDA adds late to an earlier weekly report is still caught; anything already delivered is skipped.
  • If openFDA cannot be read for any endpoint, the run delivers nothing, charges nothing and leaves the watermark where it was.
  • If maxRecords or your maximum charge stops a run early, the rest are delivered by the next check.
  • Checks with no new recalls cost nothing. Two runs of the same watch at the same moment are not coordinated; schedule one at a time.

The watchlist also works without sinceLastCheck, as a filter on an ordinary run.

Fixed 3 October 2026: a run with Report date since set returned no records, because the date range reached openFDA in a form it rejected (HTTP 500). Date filtering now works.

Output

One JSON object per recall. Example:

{
"record_id": "D-1234-2026:drug",
"endpoint": "drug",
"recall_number": "D-1234-2026",
"status": "Ongoing",
"classification": "Class II",
"product_type": "Drugs",
"recalling_firm": "Example Pharma Inc.",
"product_description": "Example Tablets 10mg",
"reason_for_recall": "Failed dissolution specification",
"distribution_pattern": "Nationwide",
"voluntary_mandated": "Voluntary: Firm Initiated",
"recall_initiation_date": "20260710",
"report_date": "20260805",
"state": "NJ", "country": "United States", "city": "Trenton",
"source": "openFDA (FDA enforcement / recalls)",
"openfda_disclaimer": "Do not rely on openFDA ... assume all results are unvalidated ...",
"licence": "openFDA — U.S. FDA. Public-domain U.S. Government data ...",
"attribution": "Source: U.S. FDA openFDA",
"observed_at": "2026-08-18T00:00:00Z"
}

An unbilled RUN_RECEIPT records the robots check, endpoints, the disclaimer seen, records seen/delivered, and whether charged equals delivered.

Cost guidance

One recall_record per delivered recall: cost = recalls pulled × your plan's per-record price. 1,000 recalls is $50 (Free) / $33.50 (Gold). The full enforcement corpus across the three endpoints is roughly 87,000 records.

Honest limitations

  • Unvalidated by the source. openFDA states results are unvalidated; treat as informational and verify against FDA.
  • Recalls only. This is the enforcement/recall dataset — not approvals, adverse events, or launches.
  • Firm-level. Records are firm/product level; there is no person data.
  • Rate-limited. Runs pace under openFDA's published limit; very large pulls take longer.

Differentiation

This actor is FDA recalls specifically — U.S. FDA food, drug and device recalls, not consumer-product recalls from other agencies and not product launches.

Input fields

Every input this actor accepts, read from its input schema:

FieldTypeDefaultDescription
endpointsarray["food", "drug", "device"]Which openFDA enforcement datasets to pull: food, drug, and/or device.
sinceDatestringOptional. Keep only recalls with a report_date on or after this date.
classificationstringOptional recall classification filter.
watchFirmsarray[]Optional watchlist of recalling-firm texts.
watchProductTermsarray[]Optional watchlist of product-description texts.
classificationsarray[]Optional list of classifications.
sinceLastCheckbooleanfalseAlert feed: only recalls not delivered before (watermark in your account's fda-recall-watch-state store).
firstRunLookbackDaysinteger30Alert feed: first-check look-back in days.
maxRecordsinteger10Maximum records delivered and billed. You are billed only for records delivered.

Default changed on 30 Sep 2026: if you leave maxRecords out, a run now returns up to 10 records (it was 500). Set maxRecords yourself to get more — the maximum is unchanged.

Output fields

Every field in each delivered record, read from its output schema:

FieldTypeMeaning
record_idstringRecall number + endpoint.
endpointstringopenFDA endpoint (food/drug/device).
recall_numberstringFDA recall number.
event_idstringFDA recall event id.
statusstringRecall status, verbatim.
classificationstringRecall classification (Class I/II/III).
product_typestringProduct type.
recalling_firmstringRecalling firm (organisation).
product_descriptionstringProduct description, verbatim.
reason_for_recallstringReason for recall, verbatim.
distribution_patternstringDistribution pattern, verbatim.
product_quantitystringProduct quantity, verbatim.
voluntary_mandatedstringVoluntary or FDA-mandated.
initial_firm_notificationstringInitial firm notification method.
recall_initiation_datestringRecall initiation date.
report_datestringReport date.
statestringFirm state.
countrystringFirm country.
citystringFirm city.
sourcestringData source (openFDA).
openfda_disclaimerstringopenFDA's verbatim results-unvalidated disclaimer.
licencestringLicence and reformatting notice.
attributionstringRequired attribution string.
observed_atstringUTC retrieval timestamp.

FAQ

How much does it cost? You pay $0.05 per recall record delivered to your dataset (less on higher Apify plans). Set the record limit in the input to cap what a run can cost. Records that are not delivered are never charged.

How do I get the data out? Every run saves its records to an Apify dataset. You can download it as JSON, CSV, Excel, XML or HTML from the run page, or read it through the Apify API.

Can I run it on a schedule? Yes. Use Apify Schedules to run it daily, weekly or monthly, with the same input each time.

Can I call it from my own code? Yes. Call nexgensignal/fda-recall-risk-records through the Apify API or the Apify Python and JavaScript clients, pass the same JSON input as the form, and read the dataset when the run finishes.

What happens if the source is down? The run ends with a clear status message, and nothing is charged for records that were not delivered.

The NexGen Signal family

Part of the NexGen Signal family of official-source, pay-per-record products:

Source: U.S. FDA via openFDA (public-domain U.S. Government data, https://open.fda.gov/license/). Reformatted to recall records; values verbatim. openFDA's "results are unvalidated" disclaimer is carried on every record.