FDA Food Recall Monitor
## What does FDA Food Recall Monitor do?
Maintenance Pulse
90/100Cost Estimate
How many results do you need?
Pricing
Pay Per Event model. You only pay for what you use.
| Event | Description | Price |
|---|---|---|
| recall-fetched | Charged per food recall record retrieved from openFDA. | $0.002 |
Example: 100 events = $0.20 · 1,000 events = $2.00
Documentation
What does FDA Food Recall Monitor do?
FDA Food Recall Monitor searches and extracts food recall and enforcement data directly from the U.S. Food and Drug Administration's openFDA API. It provides structured, machine-readable access to FDA food safety enforcement actions, including product recalls triggered by contamination (salmonella, listeria, E. coli), undeclared allergens, foreign object contamination, mislabeling, and other hazards.
The actor queries the FDA's food enforcement endpoint and returns detailed recall records, including the recalling company, product descriptions, the reason for the recall, recall classification severity (Class I, II, or III), geographic distribution, recall status, and key dates. All data is returned in clean, normalized JSON format ready for analysis, monitoring dashboards, or integration into downstream workflows.
Why use FDA Food Recall Monitor on Apify?
- No query syntax required -- The openFDA API uses a complex query language with
+AND+joins, bracket date ranges, and multi-field keyword searches. This actor translates a simple form into the correct query automatically. - Automatic pagination -- The openFDA API returns at most 100 results per request. The actor pages through automatically with built-in 300 ms rate limiting.
- Clean date formatting -- Raw API dates (YYYYMMDD) are converted to ISO format (YYYY-MM-DD). Address fields are combined.
- Schedule for monitoring -- Run daily or weekly to track new recalls matching your criteria, with webhook alerts to Slack, email, or any endpoint.
- No API key required -- Uses the free openFDA public endpoint.
Key features
- Keyword search across product descriptions and recall reasons (e.g., "salmonella", "undeclared peanut", "glass fragments")
- Company filter to monitor recalls from specific food manufacturers or distributors
- Classification filter for Class I (dangerous), Class II (temporary health problems), or Class III (unlikely adverse effects)
- State filter to focus on recalls originating from a specific U.S. state
- Date range filter to search recalls within a specific time window
- Status filter to show only Ongoing, Terminated, or Completed recalls
- Up to 10,000 results per run with automatic pagination
How to use FDA Food Recall Monitor
- Navigate to the FDA Food Recall Monitor on the Apify Store.
- Click Try for free to open the actor in Apify Console.
- Enter a keyword (e.g., "salmonella"), optionally specify company, classification, state, date range, or status.
- Click Start and wait for the run to complete.
- Download your results from the Dataset tab in JSON, CSV, or Excel format.
Input parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
keyword | string | No | -- | Search across product descriptions and recall reasons (e.g., "salmonella", "undeclared allergen", "peanut") |
recallingFirm | string | No | -- | Filter by recalling company name |
classification | select | No | -- | Recall severity: "Class I", "Class II", or "Class III" |
state | string | No | -- | Filter by U.S. state (2-letter code, e.g., "CA", "TX") |
dateStart | string | No | -- | Start date in YYYYMMDD format (e.g., "20240101") |
dateEnd | string | No | -- | End date in YYYYMMDD format. Leave empty for latest. |
statusFilter | select | No | -- | Recall status: "Ongoing", "Terminated", or "Completed" |
maxResults | integer | No | 100 | Maximum number of recalls to return (1--10,000) |
Input examples
Serious salmonella recalls in 2024:
{
"keyword": "salmonella",
"classification": "Class I",
"dateStart": "20240101",
"dateEnd": "20241231",
"maxResults": 500
}
Undeclared allergen recalls:
{
"keyword": "undeclared peanut",
"classification": "Class I",
"maxResults": 200
}
Active recalls from California:
{
"state": "CA",
"statusFilter": "Ongoing",
"maxResults": 100
}
All recalls from a specific company:
{
"recallingFirm": "Fresh Harvest Foods",
"maxResults": 500
}
Input tips
- Use specific keywords for targeted results. "undeclared peanut" is more precise than "peanut" and surfaces allergen recalls specifically.
- Combine filters for narrow results -- e.g., Class I + date range to find only the most serious recent recalls.
- Schedule daily runs with a date range covering the last 7 days to catch new recalls automatically.
- Date format is YYYYMMDD (no dashes), e.g.,
20240101for January 1, 2024. - Class I is most serious -- situations with reasonable probability of serious health consequences or death.
Output example
{
"recallNumber": "F-0123-2024",
"eventId": "92847",
"status": "Ongoing",
"classification": "Class I",
"recallingFirm": "Fresh Harvest Foods Inc.",
"city": "Salinas",
"state": "CA",
"country": "United States",
"address": "1200 Valley Industrial Blvd",
"postalCode": "93901",
"productDescription": "Fresh Harvest Organic Baby Spinach, 5 oz clamshell containers, UPC 0 12345 67890 1",
"productQuantity": "14,832 cases",
"reasonForRecall": "Product was found to contain Salmonella after routine sampling by the FDA revealed contamination.",
"distributionPattern": "Nationwide distribution to retail stores in all 50 states.",
"recallDate": "2024-06-15",
"reportDate": "2024-06-22",
"terminationDate": null,
"codeInfo": "Lot codes 2024-A155 through 2024-A162, Best By dates 06/20/2024 through 06/27/2024",
"voluntaryMandated": "Voluntary",
"initialNotification": "Press Release",
"extractedAt": "2025-01-15T14:32:07.123Z"
}
Output fields
| Field | Type | Description |
|---|---|---|
recallNumber | string | FDA recall number (e.g., "F-0123-2024") |
eventId | string | FDA event ID linking related recalls |
status | string | Recall status: Ongoing, Terminated, or Completed |
classification | string | Severity: Class I (dangerous), Class II (temporary), Class III (unlikely) |
recallingFirm | string | Name of the company issuing the recall |
city | string | City where the company is located |
state | string | State where the company is located (2-letter code) |
country | string | Country of the recalling firm |
address | string | Company address (address_1 and address_2 combined) |
postalCode | string | Company ZIP/postal code |
productDescription | string | Full description of the recalled product including UPC, size, packaging |
productQuantity | string | Quantity of product recalled |
reasonForRecall | string | Detailed explanation of why the product was recalled |
distributionPattern | string | Geographic scope of distribution (e.g., "Nationwide", specific states) |
recallDate | string | Date the recall was initiated (YYYY-MM-DD) |
reportDate | string | Date the recall was reported to FDA (YYYY-MM-DD) |
terminationDate | string|null | Date the recall was terminated (null if ongoing) |
codeInfo | string | Lot codes, UPC codes, and identifying information for recalled products |
voluntaryMandated | string | Whether the recall was Voluntary or FDA Mandated |
initialNotification | string | How the public was initially notified (e.g., "Press Release", "Letter") |
extractedAt | string | ISO 8601 timestamp of extraction |
Use cases
- Food safety monitoring -- Track active recalls for contamination, allergens, or specific hazard types. Schedule daily runs with webhook alerts.
- Supply chain compliance -- Monitor your suppliers' recall history to assess vendor risk and compliance.
- Insurance and risk analysis -- Analyze recall patterns by company, state, and classification to assess food industry liability risk.
- Journalism -- Investigate contamination patterns, repeat offenders, or geographic trends in food safety enforcement.
- Consumer protection -- Build apps or dashboards that alert consumers about recalled products in their area.
- Regulatory compliance -- Track FDA enforcement trends for food industry regulatory planning.
Programmatic access (API)
Python:
from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("ryanclinton/fda-food-recall-monitor").call(run_input={
"keyword": "salmonella",
"classification": "Class I",
"dateStart": "20240101",
"maxResults": 500,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(f"[{item['classification']}] {item['recallingFirm']}: {item['reasonForRecall'][:80]}")
print(f" Product: {item['productDescription'][:80]}")
print(f" Status: {item['status']} | Date: {item['recallDate']}")
JavaScript:
import { ApifyClient } from "apify-client";
const client = new ApifyClient({ token: "YOUR_API_TOKEN" });
const run = await client.actor("ryanclinton/fda-food-recall-monitor").call({
keyword: "salmonella",
classification: "Class I",
dateStart: "20240101",
maxResults: 500,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const item of items) {
console.log(`[${item.classification}] ${item.recallingFirm}`);
console.log(` Reason: ${item.reasonForRecall.substring(0, 100)}`);
}
cURL:
# Start a run
curl "https://api.apify.com/v2/acts/ryanclinton~fda-food-recall-monitor/runs" \
-X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-d '{
"keyword": "salmonella",
"classification": "Class I",
"dateStart": "20240101",
"maxResults": 500
}'
# Fetch results (after run completes)
curl "https://api.apify.com/v2/datasets/DATASET_ID/items?format=json" \
-H "Authorization: Bearer YOUR_API_TOKEN"
How it works -- technical details
Input (keyword, company, classification, state, dates, status)
│
▼
┌─────────────────────────────────────────────┐
│ 1. Query Builder │
│ • keyword → search reason_for_recall │
│ AND product_description with OR (+) │
│ • recallingFirm → recalling_firm:"..." │
│ • classification → classification:"..." │
│ • state → state:XX (uppercased) │
│ • statusFilter → status:"Ongoing" │
│ • Date range → report_date:[start TO end] │
│ • All parts joined with +AND+ │
└──────────────────┬──────────────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ 2. Paginated Fetcher │
│ • GET api.fda.gov/food/enforcement.json │
│ • 100 results per page (API max) │
│ • Increment skip by limit each page │
│ • 300 ms delay between requests │
│ • NOT_FOUND on first page = zero results │
└──────────────────┬──────────────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ 3. Transform │
│ • Dates: YYYYMMDD → YYYY-MM-DD │
│ • Address: address_1 + address_2 combined │
│ • terminationDate: null if not terminated │
│ • All fields renamed to camelCase │
└──────────────────┬──────────────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ 4. Output & Summary │
│ • Each recall → Apify dataset │
│ • Summary: classification breakdown, │
│ state count, status breakdown │
└─────────────────────────────────────────────┘
Query construction
The actor builds an openFDA search query using the same syntax as other openFDA endpoints:
| Input | openFDA query fragment | Notes |
|---|---|---|
keyword: "salmonella" | (reason_for_recall:"salmonella"+product_description:"salmonella") | Searches both reason and product description with OR |
recallingFirm: "Dole" | recalling_firm:"Dole" | Exact match on company name |
classification: "Class I" | classification:"Class I" | Filter by severity level |
state: "CA" | state:CA | Uppercased 2-letter state code |
statusFilter: "Ongoing" | status:"Ongoing" | Filter by recall status |
dateStart/dateEnd | report_date:[20240101+TO+20241231] | Bracket range on report date |
Recall classifications
| Classification | Severity | Description |
|---|---|---|
| Class I | Highest | Reasonable probability of serious adverse health consequences or death |
| Class II | Medium | May cause temporary or medically reversible adverse health consequences |
| Class III | Lowest | Not likely to cause adverse health consequences |
How much does it cost to use?
| Scenario | Recalls | Pages | Time | Est. cost |
|---|---|---|---|---|
| Quick search | 100 | 1 | ~10 sec | ~$0.001 |
| Medium search | 500 | 5 | ~20 sec | ~$0.005 |
| Large dataset | 5,000 | 50 | ~1 min | ~$0.01 |
| Maximum extraction | 10,000 | 100 | ~2 min | ~$0.02 |
The openFDA API is completely free. Apify's free tier includes $5 of monthly platform usage.
Limitations
- 10,000 result maximum -- The actor caps at 10,000 results per run. Use date ranges to split larger datasets across multiple runs.
- Food recalls only -- This actor queries the food enforcement endpoint only. For medical device recalls, drug events, or non-food products, use separate actors.
- openFDA data lag -- There may be a delay between when a recall is initiated and when it appears in the openFDA database.
- Keyword search is broad -- The keyword searches both reason_for_recall and product_description fields. Very common terms may return many results.
- YYYYMMDD date format -- Dates must be entered in YYYYMMDD format (no dashes). Output dates are converted to YYYY-MM-DD.
- No notification tracking -- The actor captures the
initialNotificationfield but does not track subsequent FDA communications about the recall. - Address data varies -- Some recall records have incomplete address information. The actor combines address_1 and address_2 fields.
- Rate limiting -- The openFDA public endpoint allows 240 requests/minute. The built-in 300 ms delay prevents hitting this limit.
Responsible use
- FDA recall data is public information. Use it for food safety monitoring, research, and consumer protection.
- Follow the openFDA Terms of Service when using the data.
- Do not use recall data to make unsubstantiated claims about food companies. Recalls can occur for many reasons and do not necessarily indicate ongoing safety issues.
- When building consumer-facing applications, ensure recall information is presented accurately with appropriate context.
FAQ
Do I need an API key? No. The openFDA enforcement API is free and publicly accessible.
How current is the data? The FDA updates its enforcement database regularly, typically within days of a recall being reported.
Can I search for non-food recalls?
No. This actor queries the /food/enforcement endpoint. For medical device recalls, see FDA Medical Device Recall Search. For drug adverse events, see openFDA Drug Event Monitor.
What do the recall classifications mean? Class I is the most serious (risk of serious health consequences or death). Class II may cause temporary health problems. Class III is unlikely to cause adverse health effects.
What is the difference between recall date and report date?
The recall date (recallDate) is when the company initiated the recall. The report date (reportDate) is when it was reported to the FDA. There can be a gap of days or weeks between the two.
Integrations and related actors
The output dataset can be exported in JSON, CSV, or Excel format, or accessed programmatically via the Apify API. Use webhooks to trigger automated workflows when a run completes. Connect with Google Sheets, Zapier, Make (Integromat), Amazon S3, and custom API endpoints to build automated food safety monitoring workflows.
FDA regulatory intelligence suite
| Actor | Description | Use together for |
|---|---|---|
| FDA Food Adverse Events (CAERS) | Food/supplement adverse event reports | Recall triggers correlated with adverse event signals |
| FDA Drug Recall Search | FDA drug enforcement actions | Complete FDA recall monitoring across food and drugs |
| FDA Medical Device Recall Search | FDA medical device recalls | Complete FDA recall coverage across all product types |
| openFDA Drug Event Monitor | FDA adverse drug event reports (FAERS) | Full FDA safety monitoring across food, drugs, and devices |
| FDA Drug Approval Search | NDA/ANDA/BLA drug approval search | Approved products to recall correlation |
| FDA 510(k) Device Clearances | Pre-market 510(k) clearance search | Cross-domain FDA regulatory monitoring |
| FDA PMA Device Approvals | Class III PMA approval search | Cross-domain FDA regulatory monitoring |
| FDA Device Adverse Events (MAUDE) | Medical device adverse event reports | Complete adverse event coverage across FDA domains |
| FDA Product Intelligence | Cross-domain FDA intelligence with risk assessment | Single query across all 9 openFDA endpoints |
| FDA Intelligence MCP | MCP server with 11 FDA tools | AI agent access to the full FDA intelligence suite |
Other safety and regulatory actors
| Actor | Description | Use together for |
|---|---|---|
| Open Food Facts | Food product database | Cross-reference recalled products with nutrition data |
| CPSC Product Recall Monitor | U.S. Consumer Product Safety Commission recalls | Multi-agency product safety tracking |
| NHTSA Vehicle Safety Search | Vehicle recall and complaint data | Comprehensive U.S. safety recall coverage |
How it works
Configure
Set your parameters in the Apify Console or pass them via API.
Run
Click Start, trigger via API, webhook, or set up a schedule.
Get results
Download as JSON, CSV, or Excel. Integrate with 1,000+ apps.
Use cases
Sales Teams
Build targeted lead lists with verified contact data.
Marketing
Research competitors and identify outreach opportunities.
Data Teams
Automate data collection pipelines with scheduled runs.
Developers
Integrate via REST API or use as an MCP tool in AI workflows.
Related actors
Bulk Email Verifier
Verify email deliverability at scale. MX record validation, SMTP mailbox checks, disposable and role-based detection, catch-all flagging, and confidence scoring. No external API costs.
GitHub Repository Search
Search GitHub repositories by keyword, language, topic, stars, forks. Sort by stars, forks, or recently updated. Returns metadata, topics, license, owner info, URLs. Free API, optional token for higher limits.
Website Content to Markdown
Convert any website to clean Markdown for RAG pipelines, LLM training, and AI apps. Crawls pages, strips boilerplate, preserves headings, tables, and code blocks. GFM support.
Website Tech Stack Detector
Detect 100+ web technologies on any website. Identifies CMS, frameworks, analytics, marketing tools, chat widgets, CDNs, payment systems, hosting, and more. Batch-analyze multiple sites with version detection and confidence scoring.
Ready to try FDA Food Recall Monitor?
Start for free on Apify. No credit card required.
Open on Apify Store