OpenFDA Recall and Enforcement Monitor
Pricing
from $0.50 / 1,000 results
OpenFDA Recall and Enforcement Monitor
Query the public openFDA enforcement API for food, drug, or device recalls with Lucene search filters. One row per recall with firm, product, status, classification, and distribution fields. Unofficial; not affiliated with the FDA.
Pricing
from $0.50 / 1,000 results
Rating
0.0
(0)
Developer
Bakos Bence
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
What is OpenFDA Recall and Enforcement Monitor?
Query the public openFDA enforcement API for food, drug, or device recalls with Lucene search filters. One row per recall with firm, product, status, classification, and distribution fields.
What OpenFDA Recall and Enforcement Monitor returns
| Field | What it is | Example |
|---|---|---|
recallNumber | Recall number | F-1234-2024 |
productDescription | Product description | Frozen vegetable blend 16 oz bag |
status | Status | Ongoing |
classification | Classification | Class I |
reportDate | Report date | 2024-03-15 |
country | Country | United States |
sourceUrl | Source URL | https://api.fda.gov/food/enforcement.json?... |
scrapedAt | Scraped at | 2026-09-09T10:00:00+00:00 |
How do I query the public openFDA enforcement API for food, drug, or device recalls with Lucene search filters?
- Click Try for free.
- Fill Recall category and Search filter.
- Set Maximum recalls.
- Click Start.
- Open the dataset and download it, or send it on with one of the integrations below.
A search can match more than one row. The run keeps the first matches, up to Maximum recalls.
Saved runs on the Tasks tab:
- Class I food recalls from openFDA enforcement API
- Ongoing drug recalls from openFDA enforcement API
- Ongoing food recalls from openFDA enforcement API
Input
The Input tab lists every field. The sample input is:
{"dataset": "food","searchQuery": "status:Ongoing","maxItems": 5}
Output
One row looks like this. scrapedAt, when present, is the time that run finished.
{"recallNumber": "F-1234-2024","productDescription": "Frozen vegetable blend 16 oz bag","reasonForRecall": "Potential Listeria contamination","status": "Ongoing","classification": "Class I","reportDate": "2024-03-15","city": "Chicago","state": "IL","country": "United States","distributionPattern": "Nationwide","productQuantity": "12,000 cases","sourceUrl": "https://api.fda.gov/food/enforcement.json?...","scrapedAt": "2026-09-09T10:00:00+00:00"}
How much does OpenFDA Recall and Enforcement Monitor cost?
You pay for each row saved. Platform usage is included. Current rates are on the Pricing tab.
How pay-per-event billing works: Actors in Store.
Related Actors
| Actor | When to use it |
|---|---|
| FDA Novel Drug Approvals | Novel drug approval timeline |
| FTC Warning Letters | FTC warning letters alongside FDA recalls |
Integrations
Excel
- Click Try for free, run this Actor, and wait until the run finishes.
- Open that run and go to its dataset.
- Choose Export, then Excel.
To download the newest successful run later without opening the dataset:
- In Apify Console, open Settings β API & Integrations and copy an API token.
- On this Actor, open the Tasks tab, open the task you want, and copy the task ID from the URL.
- Run that task once.
- Paste this into a browser. Replace
TASK_IDandYOUR_TOKEN.
https://api.apify.com/v2/actor-tasks/TASK_ID/runs/last/dataset/items?format=xlsx&clean=true&status=SUCCEEDED&token=YOUR_TOKEN
Anyone with that URL can read the rows. Treat the token like a password.
Dataset export formats: Dataset items.
Google Sheets
- In Apify Console, open Settings β API & Integrations and copy an API token.
- On this Actor, open the Tasks tab, open the task you want, and copy the task ID from the URL.
- Run that task once so there is a successful dataset.
- In a Google Sheet, click cell A1 and paste this formula. Replace
TASK_IDandYOUR_TOKEN.
=IMPORTDATA("https://api.apify.com/v2/actor-tasks/TASK_ID/runs/last/dataset/items?format=csv&clean=true&status=SUCCEEDED&token=YOUR_TOKEN")
- Wait until the columns fill. Sheets refreshes
IMPORTDATAon its own. Use Data β Data connectors β Refresh when you want it now.
Anyone with that URL can read the rows. Treat the token like a password.
API, Python, and Node
- In Apify Console, open Settings β API & Integrations and copy an API token.
- Send this request. Replace
YOUR_TOKEN.
curl -X POST "https://api.apify.com/v2/acts/bakos_bence~openfda-recalls/runs?token=YOUR_TOKEN&waitForFinish=120" \-H "Content-Type: application/json" \-d '{"dataset":"food","searchQuery":"status:Ongoing","maxItems":5}'
- From the response, copy
defaultDatasetId. - Fetch the rows:
https://api.apify.com/v2/datasets/DATASET_ID/items?format=json&clean=true&token=YOUR_TOKEN
The API tab on this page has the same call in JavaScript, Python, and the CLI. Client docs: JavaScript, Python, Run an Actor.
Zapier
- In Apify Console, open Settings β API & Integrations and copy an API token. You will only need it if the connection asks for a token. The usual path is the access prompt below.
- In Zapier, create a Zap. For the action, search Apify and choose Run Actor.
- Connect your Apify account and choose Allow Access.
- Select OpenFDA Recall and Enforcement Monitor.
- Paste this input:
{"dataset": "food","searchQuery": "status:Ongoing","maxItems": 5}
- Use a synchronous run only when the run will finish within 30 seconds. Otherwise leave it asynchronous, then add Fetch dataset items, or start the Zap with the Finished Actor run trigger.
- Test the step. Add the next action, such as Google Sheets, Slack, or email. Publish the Zap.
Triggers and the other actions: Zapier integration.
Make
- In Apify Console, open Settings β API & Integrations and copy an API token.
- In a Make scenario, add a module and search Apify.
- Create the connection with OAuth, or paste the API token.
- Choose Run an Actor. Select OpenFDA Recall and Enforcement Monitor. Set Run synchronously to Yes.
- Paste this input:
{"dataset": "food","searchQuery": "status:Ongoing","maxItems": 5}
- Add Get Dataset Items. Set the dataset ID to the default dataset ID from the Run an Actor module.
- Add the module that should receive the rows, such as Google Sheets Bulk add rows, and map the fields.
If the run can take longer than your Make plan lets a synchronous module wait, start with Watch Actor Runs instead, then add Get Dataset Items. Details: Make integration.
n8n
- In Apify Console, open Settings β API & Integrations and copy an API token.
- On n8n Cloud, open the nodes panel, search Apify, and install the node. On a self-hosted n8n, go to Settings β Community Nodes β Install and enter
@apify/n8n-nodes-apify. - Create a credential. Search Apify API, paste the token, and save. On n8n Cloud you can use Apify OAuth2 instead.
- Add an Apify node. Choose Run Actor. Pick OpenFDA Recall and Enforcement Monitor. Turn on Wait for finish.
- Set the input to:
{"dataset": "food","searchQuery": "status:Ongoing","maxItems": 5}
- Add another Apify node, Get Dataset Items. Set the dataset ID to the
defaultDatasetIdfrom the Run Actor node. - Add the next node, such as Google Sheets, and map the fields.
Full setup, triggers, and the AI-tool node: n8n integration.
Power BI
- In Apify Console, open Settings β API & Integrations and copy an API token.
- On this Actor, open the Tasks tab, open the task you want, and copy the task ID from the URL.
- Run that task once.
- Open Power BI Desktop β Home β Get data β Web.
- Paste this URL. Replace
TASK_IDandYOUR_TOKEN.
https://api.apify.com/v2/actor-tasks/TASK_ID/runs/last/dataset/items?format=csv&clean=true&status=SUCCEEDED&token=YOUR_TOKEN
- When asked how to sign in, choose Anonymous β Connect.
- Check that the preview is a table, then Load.
- After you publish, schedule refresh against that same URL.
A 401 means the token is missing or you did not choose Anonymous. Anyone with the URL can read the rows.
Looker Studio
Looker Studio does not open a private CSV URL on its own. Put the rows in a Google Sheet first.
- In Apify Console, open Settings β API & Integrations and copy an API token.
- On this Actor, open the Tasks tab, open the task you want, and copy the task ID from the URL.
- Run that task once.
- In a Google Sheet, click cell A1 and paste this formula. Replace
TASK_IDandYOUR_TOKEN.
=IMPORTDATA("https://api.apify.com/v2/actor-tasks/TASK_ID/runs/last/dataset/items?format=csv&clean=true&status=SUCCEEDED&token=YOUR_TOKEN")
- Wait until the columns fill.
- In Looker Studio, choose Create β Report β Google Sheets and pick that spreadsheet.
- After the next run, refresh the Sheet, then refresh the Looker data source.
For a single snapshot, open the finished run, export CSV from the dataset, and use File upload in Looker Studio.
Tableau
- In Apify Console, open Settings β API & Integrations and copy an API token.
- On this Actor, open the Tasks tab, open the task you want, and copy the task ID from the URL.
- Run that task once.
- In Tableau Desktop 2023.3+, install the REST API connector from Tableau Exchange.
- Choose Connect β To a Server β REST API.
- Paste this URL. Replace
TASK_IDandYOUR_TOKEN. Set the response format to CSV.
https://api.apify.com/v2/actor-tasks/TASK_ID/runs/last/dataset/items?format=csv&clean=true&status=SUCCEEDED&token=YOUR_TOKEN
- Leave credentials empty. The token is already in the URL.
- Create an extract. Refresh it after the next run.
For a single snapshot, open the finished run, export CSV from the dataset, and connect Tableau to that file.
Qlik
- In Apify Console, open Settings β API & Integrations and copy an API token.
- On this Actor, open the Tasks tab, open the task you want, and copy the task ID from the URL.
- Run that task once.
- In Qlik Cloud or Qlik Sense, choose Add data β REST.
- Set the method to GET and paste this URL. Replace
TASK_IDandYOUR_TOKEN.
https://api.apify.com/v2/actor-tasks/TASK_ID/runs/last/dataset/items?format=csv&clean=true&status=SUCCEEDED&token=YOUR_TOKEN
- Set the response type to CSV.
- Test the connection, pick the table, and load.
- Reload the app after the next run.
For a single snapshot, open the finished run, export CSV from the dataset, and add that file in Qlik.
Webhooks
- In Apify Console, open this Actor and go to Integrations.
- Add a webhook for Actor run succeeded.
- Set the URL of the service that should receive the run.
- When a run finishes, the payload includes
defaultDatasetId. Read the rows with this URL. ReplaceDATASET_IDandYOUR_TOKEN. The token is under Settings β API & Integrations.
https://api.apify.com/v2/datasets/DATASET_ID/items?format=json&clean=true&token=YOUR_TOKEN
Event types and the payload: Webhooks.
AI tools
- Open the API tab on this Actor.
- Copy the MCP config shown there.
- Paste it into the MCP client (Claude, Cursor, or another client that accepts that config).
- Sign in when the client asks. It can then run this Actor.
Setup for each client: Apify MCP server.
Airtable, Google Drive, Slack, and Snowflake are listed in Integrations.
FAQ
FAQ
Is this official FDA software?
No. It is unofficial and not affiliated with the FDA. Do not rely on openFDA for medical decisions.
Do I need an API key?
No for basic use β openFDA public endpoints. High-volume use may require an FDA API key per their terms.
Can AI agents call this?
Yes β Actor ID bakos_bence/openfda-recalls via Apify API or MCP.
Something broke?
Open the Issues tab on this Actor's page.
For AI agents & LLM apps
Paste this Actor's Apify Store URL into an agent that can use Apify (MCP, Claude, Cursor, etc.). With an Apify account and API token, the agent can set input, run the Actor, and fetch the dataset.
Can I schedule this?
Yes. Save a Task from the input you want, then add a schedule in Console. After each successful run, this URL returns that taskβs newest dataset. Replace TASK_ID and YOUR_TOKEN (the token is under Settings β API & Integrations).
https://api.apify.com/v2/actor-tasks/TASK_ID/runs/last/dataset/items?format=json&clean=true&status=SUCCEEDED&token=YOUR_TOKEN
This Actor is not affiliated with the FDA.