Food, Drug & Device Recalls Monitor (from openFDA data) avatar

Food, Drug & Device Recalls Monitor (from openFDA data)

Pricing

from $0.70 / 1,000 recalls

Go to Apify Store
Food, Drug & Device Recalls Monitor (from openFDA data)

Food, Drug & Device Recalls Monitor (from openFDA data)

Food, drug and medical device recalls from the official openFDA enforcement API in one uniform format. Filter by company, product words, class I/II/III, state, country and dates, and get only new recalls since the last run.

Pricing

from $0.70 / 1,000 recalls

Rating

0.0

(0)

Developer

br_data_hub

br_data_hub

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Get U.S. recalls of food, drugs and medical devices from public openFDA enforcement data, all three in one uniform format, and turn them into scheduled alerts that return only recalls you have not seen yet.

Built for compliance, quality, supply-chain and retail teams who need to know when a supplier, a brand or a product type is recalled, and for AI agents that need clean recall data.

Why this Actor

  • Three categories, one schema. Food, drug and device enforcement records come out with the same fields (recallNumber, recallingFirm, productDescription, reasonForRecall, classification, status, distributionPattern, dates, productQuantity...). No need to merge three APIs yourself.
  • "Only new since last run" mode. The Actor remembers which recalls it already returned (in a named key-value store, one memory per filter combination). Schedule it daily or weekly and get just the new ones, ready for an email, Slack or webhook integration.
  • Handles openFDA paging limits. openFDA cannot page past 26,000 results (skip max 25,000). The Actor splits the date range automatically, so long histories still come out complete.
  • Optional free API key. Without a key openFDA allows 1,000 requests per day per IP address; add your key for 120,000 per day.

Input

FieldDescription
categoriesfood, drug, device (all by default).
companiesRecalling firm names, e.g. ["Abbott", "Tyson Foods"] (phrase search, any matches).
productKeywordsWords in the product description, e.g. ["peanut", "insulin pump"].
classificationsI, II, III (FDA hazard class).
statesU.S. state of the recalling firm, e.g. ["CA", "NY"].
countriesCountry of the recalling firm, e.g. ["United States", "India"].
statusesOngoing, Completed, Terminated, Pending.
dateFrom, dateToDate range (YYYY-MM-DD). Empty = last lookbackDays (30) until today.
dateFieldWhich date the range applies to: report_date (default, weekly FDA Enforcement Report), recall_initiation_date, center_classification_date, termination_date.
onlyNewReturn only recalls not returned before for the same filters.
skipExistingOnFirstRunWith onlyNew, the first run just memorizes current recalls (returns and charges nothing).
stateStoreNameNamed key-value store for the memory (default fda-recalls-monitor-state).
maxItemsMaximum recalls per run, newest first (default 100).
apiKeyOptional openFDA API key (stored as a secret).

Example: Class I food and drug recalls mentioning peanut or milk, alerts only for new ones:

{
"categories": ["food", "drug"],
"productKeywords": ["peanut", "milk"],
"classifications": ["I"],
"onlyNew": true,
"lookbackDays": 14
}

Output

One item per recall (product), same fields for every category:

{
"category": "food",
"recallNumber": "F-2058-2012",
"eventId": "62644",
"recallingFirm": "Cass Clay Creamery AMPI Fargo Division",
"productDescription": "Cass-Clay, Swiss Chip, 3 Gallon(11.34 L).",
"productType": "Food",
"reasonForRecall": "Cass-Clay Creamery is voluntarily recalling a number of ice cream products because they may contain undeclared soy (lecithin).",
"classification": "Class II",
"classLevel": "II",
"status": "Ongoing",
"voluntaryMandated": "Voluntary: Firm Initiated",
"initialFirmNotification": "Two or more of the following: Email, Fax, Letter, Press Release, Telephone, Visit",
"distributionPattern": "ND, AZ, MN, SD, KS",
"productQuantity": "81 containers",
"codeInfo": "all products that has a plant code of \"38-25\".",
"city": "Fargo",
"state": "ND",
"country": "United States",
"recallInitiationDate": "2012-07-20",
"centerClassificationDate": "2012-08-31",
"reportDate": "2012-09-05",
"terminationDate": null,
"brandNames": [],
"genericNames": [],
"productCode": null,
"sourceUrl": "https://api.fda.gov/food/enforcement.json?search=recall_number%3A%22F-2058-2012%22"
}

brandNames and genericNames come from openFDA's harmonized fields when available (mostly drugs). Street addresses of firms are not included.

How much does it cost?

Pay per event, no platform usage fees:

EventWhenPrice
apify-actor-startOnce per run (charged by Apify)US$ 0.00005
recallOnce per recall returnedUS$ 0.002 (US$ 2 per 1,000)

Runs that find nothing, failed runs and the first "memorize only" run pay only the start event. A daily alert that finds 5 new recalls costs about US$ 0.01 per day.

$0.001 per recall (recall event, pay per event). Charged once per recall returned. Errors, empty runs and memorize-only runs are free.

  • apify-actor-start: $0.00005 (Charged once when a run starts (Apify synthetic event).)
You getFree tierBronze tier (10% off)Gold tier (30% off)
100 recalls$0.10$0.09$0.07
1,000 recalls$1.00$0.90$0.70
10,000 recalls$10.00$9.00$7.00

Discounts follow your Apify subscription tier: Bronze 10%, Silver 20%, Gold and above 30%. No subscription to this Actor and no charge for platform usage: you pay only for results. The Apify Free plan includes $5 of monthly credit, enough for about 5,000 recalls at the list price. You can cap the cost of any run with Maximum cost per run; the Actor stops when it is reached.

Data source

openFDA enforcement endpoints of the U.S. Food and Drug Administration: /food/enforcement, /drug/enforcement and /device/enforcement (api.fda.gov). These are the recalls published in FDA's weekly Enforcement Report. Data is public domain (CC0 1.0) per the openFDA terms. Data provided by the U.S. Food and Drug Administration (https://open.fda.gov). This Actor is an independent tool. It is not affiliated with, endorsed by or sponsored by the U.S. Food and Drug Administration (FDA) or openFDA. openFDA notes that results are unvalidated and must not be used for medical decisions.

Limits: openFDA is updated weekly; without an API key, Apify servers share the 1,000 requests per day per IP limit with other users, so add your free key for heavy or frequent use.

More questions

How fresh is the data?

As fresh as openFDA. FDA publishes recalls in its weekly Enforcement Report and openFDA updates about once a week, so a recall announced by a company today can take a week or more to appear here. Each run asks openFDA live; nothing is cached by the Actor.

What do Class I, II and III mean?

They are FDA's hazard classes. Class I is the most serious: a reasonable probability that the product causes serious health problems or death. Class II covers temporary or reversible problems, and Class III products are unlikely to cause harm. Filter with classifications (I, II, III; 1, 2, 3 or Class I also work). classLevel holds just the Roman numeral.

Why do I get several rows for what looks like one recall?

openFDA lists each recalled product separately, with its own recallNumber. Products recalled together share the same eventId, so group by eventId to see one row per recall event.

How does "only new since last run" work?

With onlyNew, the Actor keeps the recall numbers it already returned in a named key-value store (stateStoreName), one memory per combination of filters, and returns only the ones not seen before. Each run looks back lookbackDays before the previous run, because FDA sometimes publishes reports late. Turn on skipExistingOnFirstRun if the first run should only memorize what exists today, without returning or charging anything.

How do company and product filters match?

Each company name and each product keyword is searched as a phrase in recalling_firm or product_description. Several values are combined with OR inside a field, and different fields with AND. A short phrase such as peanut catches more than peanut butter cups. The country filter accepts US, USA or United States.

Do I need an openFDA API key?

No, but it helps for frequent runs. Without a key openFDA allows 1,000 requests per day per IP address, and Apify IP addresses are shared with other users. A free key raises that to 120,000 per day. Add it in apiKey, a secret input field.

Can I get more than 26,000 recalls?

Yes. openFDA stops paging after 26,000 results, so the Actor splits the date range in halves until each part fits, newest part first. Set maxItems to the number you want.

Can it tell me if a product I have at home is safe?

No. The Actor only relays FDA enforcement records, which openFDA says are not validated and must not be used for medical decisions. It gives no medical advice. Read the official FDA or company recall notice, and ask a pharmacist or doctor about any health concern.

Use it via API

Run it from any language and get the results as JSON. Replace <YOUR_API_TOKEN> with your Apify API token.

curl -X POST "https://api.apify.com/v2/acts/br_data_hub~fda-recalls-monitor/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"categories": ["food", "drug", "device"], "dateField": "report_date", "lookbackDays": 30, "onlyNew": false, "skipExistingOnFirstRun": false, "stateStoreName": "fda-recalls-monitor-state", "maxItems": 100}'
from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("br_data_hub/fda-recalls-monitor").call(run_input={'categories': ['food', 'drug', 'device'],
'dateField': 'report_date',
'lookbackDays': 30,
'onlyNew': False,
'skipExistingOnFirstRun': False,
'stateStoreName': 'fda-recalls-monitor-state',
'maxItems': 100})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

You can also schedule runs, send results to webhooks, or connect the Actor to Make, Zapier, n8n, Google Sheets and other integrations.

Use it with AI agents (MCP)

This Actor is ready for AI agents: typed input and output schemas, pay-per-event pricing, limited permissions and short runs.

  • Apify MCP server: add https://mcp.apify.com/?tools=br_data_hub/fda-recalls-monitor to Claude, ChatGPT, Cursor, VS Code or any MCP client, and the agent can call this Actor as a tool.
  • Agent frameworks: call it from LangChain, LlamaIndex, CrewAI or the OpenAI Agents SDK through the Apify integrations, or with the API call above.
  • Results come as structured JSON with stable field names, documented in the Output tab.

FAQ

Where does the data come from?

openFDA enforcement endpoints of the U.S. Food and Drug Administration: /food/enforcement, /drug/enforcement and /device/enforcement (api.fda.gov). These are the recalls published in FDA's weekly Enforcement Report. Data is public domain (CC0 1.0) per the openFDA terms. Data provided by the U.S. Food and Drug Administration (https://open.fda.gov). This Actor is an independent tool. It is not affiliated with, endorsed by or sponsored by the U.S. Food and Drug Administration (FDA) or openFDA. openFDA notes that results are unvalidated and must not be used for medical decisions.

How much does it cost?

$0.001 per recall. Discounts follow your Apify subscription tier: Bronze 10%, Silver 20%, Gold and above 30%. See How much does it cost? above for examples.

Do I pay for errors or empty results?

No. Charged once per recall returned. Errors, empty runs and memorize-only runs are free.

Can I run it on a schedule or connect it to other tools?

Yes. Use Apify schedules to run it daily or weekly, webhooks to get notified, and integrations such as Make, Zapier, n8n and Google Sheets. Everything also works through the API.

Can AI agents use it?

Yes. It works as a tool in the Apify MCP server and in agent frameworks, and AI agents can pay per event. See Use it with AI agents (MCP).

The Actor reads only public sources. You are responsible for how you use the data and for complying with the source's terms and with privacy laws such as GDPR.

I found a bug or need a feature. What should I do?

Open an issue in the Issues tab. We answer within 14 days, usually much sooner.

More Actors from BR Data Hub

ActorWhat it does
Domain RDAP Lookup: modern WHOIS for any TLDBulk RDAP lookup on each TLD's official registry server (IANA bootstrap): registrar, creation, update and expi
Email Domain Auth Checker: SPF, DKIM, DMARC, BIMI, MTA-STSBulk check SPF (real recursive lookup count vs
CVE Risk Prioritizer, from NVD, CISA KEV and EPSS dataOne row per CVE built from public NVD (CVSS, CWE, affected products), CISA KEV (exploited, due date, ransomwar
Clinical Trials Tracker, from ClinicalTrials.gov dataSearch public ClinicalTrials.gov data by condition, drug, sponsor, phase, status and country, and track what c

See all our Actors at apify.com/br_data_hub.

Usar em português

Recalls (recolhimentos) da FDA dos EUA para alimentos, medicamentos e dispositivos médicos, pela API oficial openFDA, num formato único para as três categorias. Filtre por empresa, palavras do produto, classe (I, II, III), estado, país, status e datas. O modo "só novos desde a última execução" guarda o que já foi devolvido num key-value store nomeado, para alertas agendados de compliance, cadeia de suprimentos e varejo. Chave da API opcional (sem ela, 1.000 requisições por dia por IP). Cobrança só por recall devolvido; execuções sem resultado ou com erro não são cobradas.

Quanto custa: $0.001 por resultado (recall); 1.000 resultados saem por $1.00. Desconto pelo nível da assinatura Apify: Bronze 10%, Silver 20%, Gold ou acima 30%. Erros e consultas sem resultado não são cobrados. Use também pela API ou por agentes de IA no servidor MCP da Apify (https://mcp.apify.com/?tools=br_data_hub/fda-recalls-monitor).