AIDEVELOPER TOOLS

Food Safety Report - Contamination & Compliance Risk

Food Safety Report is a supply chain risk intelligence tool that queries 7 public data sources simultaneously and applies 4 independent scoring models to produce a composite food safety risk score (0-100) for any food product, ingredient, supplier, or brand. It is built for food safety managers, supply chain analysts, and quality assurance teams who need structured, defensible risk data — not manual literature searches.

Try on Apify Store
$0.20per event
0
Users (30d)
0
Runs (30d)
90
Actively maintained
Maintenance Pulse
$0.20
Per event

Maintenance Pulse

90/100
Last Build
Today
Last Version
1d ago
Builds (30d)
8
Issue Response
N/A

Cost Estimate

How many results do you need?

analysis-runs
Estimated cost:$20.00

Pricing

Pay Per Event model. You only pay for what you use.

EventDescriptionPrice
analysis-runFull intelligence analysis run$0.20

Example: 100 events = $20.00 · 1,000 events = $200.00

Documentation

Food Safety Report is a supply chain risk intelligence tool that queries 7 public data sources simultaneously and applies 4 independent scoring models to produce a composite food safety risk score (0-100) for any food product, ingredient, supplier, or brand. It is built for food safety managers, supply chain analysts, and quality assurance teams who need structured, defensible risk data — not manual literature searches.

The actor calls the FDA food recall database, FDA adverse event reporting system (CAERS), UK Food Standards Agency hygiene ratings, Open Food Facts product quality data, UN COMTRADE global trade flows, OpenAQ real-time air quality readings, and NOAA weather alerts in parallel. All seven sources resolve concurrently, then four scoring models combine their outputs into a weighted composite score with contamination pathway mapping and prioritized recommendations.

⬇️ What data does the Food Safety Report produce?

Data PointSourceExample
📊 Composite risk scoreAll 7 sources62 / 100 — HIGH
🏷️ Risk levelComposite modelHIGH (LOW / MODERATE / HIGH / CRITICAL)
🧫 Ingredient risk scoreFDA recalls + adverse events + UN COMTRADE58 / 100
🔬 Contamination pathwaysFDA recall reasons + OpenAQ air quality["Biological: listeria", "Chemical: allergen"]
🏪 Supplier hygiene scoreUK FSA ratings + Open Food Facts Nutri-Score71 / 100 — GOOD
🌡️ Seasonal risk scoreNOAA weather alerts + recall seasonality34 / 100 — MODERATE
⚠️ Risk signalsAll scoring models"8 FDA food recalls — elevated ingredient risk"
📋 RecommendationsScoring thresholds"Review HACCP plan — 3 contamination pathways"
📦 Raw FDA recallsFDA Enforcement ReportsUp to 30 records with reason codes
🧾 Raw adverse eventsFDA CAERSUp to 25 records with outcome severity
🏬 Hygiene ratingsUK FSA APIUp to 20 establishment ratings (0-5 scale)
🌍 Trade flow recordsUN COMTRADEUp to 15 records with import/export values

Why use Food Safety Report?

Building a food safety risk profile manually means pulling reports from the FDA Enforcement Reports portal, cross-referencing CAERS adverse event data, checking UK FSA hygiene scores for each supplier, pulling UN COMTRADE commodity trade volumes, and monitoring active NOAA weather alerts — all in separate sessions, then combining them in a spreadsheet. For a single product category, that process takes 3-6 hours and produces a static snapshot.

This actor automates the entire data collection and scoring pipeline in a single run. All seven sources are queried in parallel, the four scoring models run automatically, and the output arrives as a structured JSON record ready for dashboards, compliance reports, or automated alerting workflows.

  • Scheduling — run daily or weekly to track risk trends over time and catch emerging recall patterns before they affect procurement
  • API access — trigger runs from Python, JavaScript, or any HTTP client to integrate food safety signals into internal risk management systems
  • Proxy rotation — scrape at scale without IP blocks using Apify's built-in proxy infrastructure
  • Monitoring — receive Slack or email alerts when a run detects a new CRITICAL risk signal for a monitored product
  • Integrations — pipe results into Zapier, Make, Google Sheets, HubSpot, or any webhook endpoint without writing custom data connectors

Features

  • 7 parallel data source queries — FDA food recall monitor, FDA food adverse events (CAERS), UK Food Standards Agency hygiene ratings, Open Food Facts product data, UN COMTRADE trade flows, OpenAQ air quality, and NOAA weather alerts all called simultaneously via Promise.allSettled, so one slow source never blocks the rest
  • FDA recall severity classification — Class I recalls score 10 points each, Class II score 5, Class III score 2, giving recall history a severity-weighted risk signal rather than a flat count
  • CAERS adverse event burden scoring — adverse events with outcomes including death, hospitalization, or life-threatening reactions score 5 points each; other events score 2 points; maximum contribution capped at 25 points in the ingredient risk model
  • Biological pathogen detection — recall reason strings are scanned for 8 pathogens: Salmonella, Listeria, E. coli, Campylobacter, Norovirus, Botulism, and Clostridium, each generating a named pathway entry
  • Chemical hazard detection — 9 chemical hazard terms scanned in recall reasons: undeclared allergens, lead, mercury, arsenic, pesticides, melamine, aflatoxin, and sulfites
  • Environmental contamination scoring — OpenAQ PM2.5 readings above the WHO guideline of 15 μg/m³ contribute environmental risk to the contamination pathway model; PM10 readings above 45 μg/m³ also contribute
  • UK FSA hygiene rating analysis — computes average rating (0-5 scale), five-star establishment percentage (bonus), zero/one-star establishment percentage (penalty), and volume reliability score across all matching establishments
  • Open Food Facts Nutri-Score integration — Nutri-Score grade A adds 5 points to supplier hygiene; grades D/E subtract 2 points each, reflecting product formulation quality
  • UN COMTRADE trade volume amplifier — total import/export value (log-scaled) amplifies ingredient risk; recall-to-trade-volume correlation rate identifies systemic supply chain problems
  • Recall seasonality analysis — historical recall dates are bucketed by month; the ratio of current-month recalls to monthly average detects elevated seasonal risk periods
  • NOAA weather severity weighting — EXTREME alerts score 10 points, SEVERE score 6, MODERATE score 3; heat events trigger a separate cold chain disruption amplifier (max 20 points)
  • Weighted composite formula — Ingredient Risk (30%) + Contamination Pathways (25%) + Hygiene inverted (25%) + Seasonal Risk (20%)
  • Actionable recommendation generation — five threshold-based rules convert score conditions into plain-language recommendations: supplier audit triggers, HACCP review triggers, alternative supplier flags, cold chain testing escalation, and microbiological testing enhancement

Use cases for food safety risk assessment

Food safety procurement screening

A food safety manager at a contract manufacturer needs to pre-qualify a new salmon supplier before signing a $2M annual contract. Running this actor on "salmon seafood" returns the complete FDA recall history, detects any Listeria or undeclared allergen pathways, checks UK FSA hygiene scores for establishments that match the query, and flags whether current weather conditions pose cold chain disruption risk. The structured output goes directly into the supplier qualification record.

Supply chain risk monitoring

A supply chain risk analyst monitors 15 high-risk ingredient categories for a food manufacturer. Each category is scheduled to run weekly. When compositeScore crosses 50 (HIGH), a webhook fires into their Jira instance and creates a supplier risk ticket with the allSignals array pre-populated. This replaces a manual weekly FDA portal review that previously consumed 4 hours.

Quality assurance audit prioritization

A QA team audits 40 co-manufacturers on a rolling annual schedule. Rather than auditing alphabetically, they run this actor on each manufacturer's primary product category quarterly and sort by compositeScore descending. Facilities whose supply chain scores are CRITICAL or HIGH get prioritized for unannounced audits, and the contamination pathway list pre-populates the audit checklist.

Food safety insurance underwriting

An underwriter assessing product liability coverage for a meat processor needs to quantify recall exposure. The ingredientRisk.riskCorrelation metric — recalls per million dollars of trade volume — provides a defensible quantitative basis for rate-setting. The CAERS adverse event count with hospitalization outcomes maps directly to liability severity estimates.

Regulatory compliance readiness

A regulatory affairs team at a supplement company tracks FDA enforcement patterns for their ingredient categories. Scheduled weekly runs on "vitamin supplement" and "herbal extract" capture the current CAERS adverse event burden and Class I recall rate. A compositeScore trending upward over 4 weeks triggers a compliance review before the FDA acts.

HACCP plan validation and update triggers

A HACCP coordinator uses this actor to validate that their current control points address the contamination pathways present in the FDA enforcement record. When contaminationPathways.pathways contains a hazard not covered in the current HACCP plan, the recommendation "review HACCP plan" automatically surfaces, flagging a plan update cycle.

How to run a food safety risk assessment

  1. Enter the product or supplier name — type a food product ("peanut butter"), ingredient ("listeria monocytogenes"), or brand ("Conagra") in the query field. This is the only required field.
  2. Optionally narrow the scope — add a food category such as "dairy" or "seafood" to focus FDA recall searches, and a country code such as "US" or "CN" to filter UN COMTRADE trade flow data to a specific import origin.
  3. Click Start and wait approximately 2-4 minutes — all 7 sub-actors run in parallel. Total run time depends on how many records each source returns for the query.
  4. Download results — open the Dataset tab and export as JSON, CSV, or Excel. The top-level compositeScore, riskLevel, and recommendations fields give you the executive summary in the first three rows.

Input parameters

ParameterTypeRequiredDefaultDescription
querystringYes"salmon"Food product, ingredient, supplier, or brand name to analyze. Passed to all 7 data sources as the primary search term.
categorystringNoOptional food category appended to query for FDA and Open Food Facts searches (e.g., "seafood", "dairy", "produce", "supplements").
countrystringNoOptional ISO country code for UN COMTRADE trade flow filtering and NOAA/OpenAQ location context (e.g., "US", "CN", "BR").

Input examples

Standard product safety check:

{
  "query": "peanut butter",
  "category": "nuts",
  "country": "US"
}

Supplier brand risk profile:

{
  "query": "Pinnacle Foods",
  "category": "frozen produce"
}

Import corridor risk — specific origin:

{
  "query": "shrimp",
  "category": "seafood",
  "country": "TH"
}

Input tips

  • Start with the product name alone — adding category is useful when a query term is ambiguous (e.g., "bass" could be fish or music; "bass seafood" narrows it correctly)
  • Use country for import risk — setting country to an ISO code filters UN COMTRADE data to that reporter country's trade flows, making the riskCorrelation metric directly attributable to that origin
  • Run broad then narrow — run with just query first to see all signals, then add category and country to scope the report to a specific procurement decision
  • Schedule high-risk queries — products that return HIGH or CRITICAL scores benefit from weekly scheduling so emerging recalls appear within days rather than during quarterly reviews

⬆️ Output example

{
  "query": "peanut butter",
  "compositeScore": 68,
  "riskLevel": "HIGH",
  "ingredientRisk": {
    "score": 72,
    "recallCount": 9,
    "adverseEventCount": 18,
    "tradeFlowVolume": 1850000000,
    "riskCorrelation": 0.49,
    "riskLevel": "HIGH",
    "topRecallReasons": [
      { "reason": "Potential Salmonella contamination", "count": 4 },
      { "reason": "Undeclared peanut allergen", "count": 3 },
      { "reason": "Aflatoxin levels above FDA action level", "count": 2 }
    ],
    "signals": [
      "9 FDA food recalls — elevated ingredient risk",
      "5 serious adverse events (death/hospitalization)"
    ]
  },
  "contaminationPathways": {
    "score": 54,
    "biologicalRisk": 16,
    "chemicalRisk": 24,
    "environmentalRisk": 5,
    "pathwayCount": 4,
    "pathways": [
      "Biological: salmonella",
      "Chemical: allergen",
      "Chemical: aflatoxin",
      "Chemical: pesticide"
    ],
    "signals": [
      "Chemical contamination pathways detected (allergens/metals/pesticides)"
    ]
  },
  "supplierHygiene": {
    "score": 64,
    "establishmentsChecked": 22,
    "averageRating": 4.1,
    "fiveStarPct": 54.5,
    "zeroStarPct": 4.5,
    "hygieneLevel": "GOOD",
    "ratingDistribution": { "0": 1, "1": 1, "2": 2, "3": 3, "4": 6, "5": 9 },
    "signals": []
  },
  "seasonalRisk": {
    "score": 38,
    "activeWeatherAlerts": 4,
    "severeAlerts": 2,
    "recallSeasonality": { "01": 2, "03": 4, "06": 3, "09": 5, "11": 3 },
    "currentSeasonRisk": "MODERATE",
    "weatherFactors": [
      "Extreme heat — cold chain disruption risk",
      "Flooding — water contamination risk"
    ],
    "signals": [
      "2 severe/extreme weather alerts — food safety impact"
    ]
  },
  "allSignals": [
    "9 FDA food recalls — elevated ingredient risk",
    "5 serious adverse events (death/hospitalization)",
    "Chemical contamination pathways detected (allergens/metals/pesticides)",
    "2 severe/extreme weather alerts — food safety impact"
  ],
  "recommendations": [
    "IMMEDIATE: Conduct supplier audit — critical ingredient risk detected",
    "Multiple contamination pathways identified — review HACCP plan",
    "Biological pathogen risk elevated — enhance microbiological testing"
  ],
  "input": {
    "query": "peanut butter",
    "category": "nuts",
    "country": "US"
  },
  "dataSources": {
    "fdaRecalls": 9,
    "fdaAdverseEvents": 18,
    "ukFoodHygiene": 22,
    "openFoodFacts": 11,
    "unComtrade": 8,
    "openaqAirQuality": 6,
    "noaaWeatherAlerts": 4
  },
  "rawData": {
    "recalls": [ "... up to 30 FDA recall records ..." ],
    "adverseEvents": [ "... up to 25 CAERS records ..." ],
    "hygieneRatings": [ "... up to 20 UK FSA establishment records ..." ],
    "foodProducts": [ "... up to 15 Open Food Facts records ..." ],
    "tradeFlows": [ "... up to 15 UN COMTRADE records ..." ],
    "airQuality": [ "... up to 10 OpenAQ readings ..." ],
    "weatherAlerts": [ "... up to 10 NOAA alerts ..." ]
  },
  "generatedAt": "2026-03-20T09:14:22.000Z"
}

Output fields

FieldTypeDescription
querystringThe search term submitted as input
compositeScorenumberWeighted composite risk score 0-100
riskLevelstringLOW (0-24) / MODERATE (25-49) / HIGH (50-74) / CRITICAL (75-100)
ingredientRisk.scorenumberIngredient risk sub-score 0-100 (30% of composite)
ingredientRisk.recallCountnumberNumber of FDA food recall records matched
ingredientRisk.adverseEventCountnumberNumber of CAERS adverse event records matched
ingredientRisk.tradeFlowVolumenumberTotal UN COMTRADE trade value in USD
ingredientRisk.riskCorrelationnumberRecalls per million USD of trade volume
ingredientRisk.riskLevelstringLOW / MODERATE / HIGH / CRITICAL for this dimension
ingredientRisk.topRecallReasonsarrayTop 8 recall reason strings with counts
ingredientRisk.signalsarrayHuman-readable signal strings triggered by thresholds
contaminationPathways.scorenumberContamination pathway sub-score 0-100 (25% of composite)
contaminationPathways.biologicalRisknumberBiological pathogen risk component 0-30
contaminationPathways.chemicalRisknumberChemical hazard risk component 0-30
contaminationPathways.environmentalRisknumberEnvironmental (air quality) risk component 0-20
contaminationPathways.pathwayCountnumberTotal distinct contamination pathways detected
contaminationPathways.pathwaysarrayNamed pathway strings (e.g., "Biological: salmonella")
supplierHygiene.scorenumberSupplier hygiene sub-score 0-100; higher = better hygiene
supplierHygiene.establishmentsCheckednumberNumber of UK FSA establishments with valid ratings
supplierHygiene.averageRatingnumberMean hygiene rating on 0-5 FSA scale
supplierHygiene.fiveStarPctnumberPercentage of establishments rated 5 stars
supplierHygiene.zeroStarPctnumberPercentage of establishments rated 0 stars
supplierHygiene.hygieneLevelstringPOOR / BELOW_AVERAGE / AVERAGE / GOOD / EXCELLENT
supplierHygiene.ratingDistributionobjectCount of establishments per rating level (keys "0" to "5")
seasonalRisk.scorenumberSeasonal risk sub-score 0-100 (20% of composite)
seasonalRisk.activeWeatherAlertsnumberTotal NOAA weather alerts active for the location
seasonalRisk.severeAlertsnumberCount of SEVERE or EXTREME severity alerts
seasonalRisk.recallSeasonalityobjectMonthly recall counts keyed by two-digit month string
seasonalRisk.currentSeasonRiskstringLOW / MODERATE / HIGH / PEAK
seasonalRisk.weatherFactorsarrayHuman-readable weather risk strings
allSignalsarrayCombined signal strings from all four scoring models
recommendationsarrayPrioritized plain-language action recommendations
inputobjectEcho of the submitted query, category, country
dataSourcesobjectRecord count from each of the 7 data sources
rawDataobjectTruncated raw records (up to 30 recalls, 25 adverse events, 20 hygiene, 15 products, 15 trade, 10 air, 10 weather)
generatedAtstringISO 8601 timestamp of report generation

How much does it cost to run a food safety risk assessment?

Food Safety Report uses pay-per-run pricing — platform compute costs are billed against your Apify credit balance based on the memory and time consumed. A typical run uses 128-512 MB RAM for 2-4 minutes.

ScenarioRunsEstimated cost per runEstimated total
Quick test1~$0.25~$0.25
Small monitoring set (5 products)5~$0.30~$1.50
Weekly monitoring (20 products)20~$0.30~$6.00
Monthly supplier audit (50 ingredients)50~$0.35~$17.50
Enterprise program (200 SKUs/month)200~$0.35~$70.00

You can set a maximum spending limit per run to control costs. The actor stops when your budget is reached.

The Apify Free plan includes $5 of monthly credits — enough for approximately 15-20 food safety reports at no cost. Compare this to manual analyst time at $50-100/hour for multi-source research, or enterprise food safety platforms charging $500-2,000/month for subscription access to similar data.

Food safety risk assessment using the API

Python

from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run = client.actor("ryanclinton/food-safety-report").call(run_input={
    "query": "peanut butter",
    "category": "nuts",
    "country": "US"
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"Query: {item['query']}")
    print(f"Composite Score: {item['compositeScore']}/100 — {item['riskLevel']}")
    print(f"Signals: {item['allSignals']}")
    print(f"Recommendations: {item['recommendations']}")
    print(f"Contamination pathways: {item['contaminationPathways']['pathways']}")

JavaScript

import { ApifyClient } from "apify-client";

const client = new ApifyClient({ token: "YOUR_API_TOKEN" });

const run = await client.actor("ryanclinton/food-safety-report").call({
    query: "peanut butter",
    category: "nuts",
    country: "US"
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const item of items) {
    console.log(`Query: ${item.query}`);
    console.log(`Score: ${item.compositeScore}/100 — ${item.riskLevel}`);
    console.log(`Pathways: ${item.contaminationPathways.pathways.join(", ")}`);
    console.log(`Recommendations: ${item.recommendations.join("; ")}`);
}

cURL

# Start the actor run
curl -X POST "https://api.apify.com/v2/acts/ryanclinton~food-safety-report/runs?token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"query": "peanut butter", "category": "nuts", "country": "US"}'

# Fetch results (replace DATASET_ID with the defaultDatasetId from the run response)
curl "https://api.apify.com/v2/datasets/DATASET_ID/items?token=YOUR_API_TOKEN&format=json"

How Food Safety Report works

Phase 1 — Parallel data collection across 7 sources

The actor constructs up to three distinct input variants from the user's query before calling sub-actors. The base searchQuery appends the optional category to the query term. The trade input adds reporterCode for UN COMTRADE if country is provided. The environmental input uses country as a location hint for NOAA and OpenAQ when available, otherwise falls back to the product query itself. All seven sub-actor calls are dispatched with Promise.allSettled, which means partial failures — a single unresponsive data source — return an empty array rather than failing the entire run. Each sub-actor receives 256 MB memory and a 120-second timeout, with up to 1,000 results fetched per source.

Phase 2 — Four independent scoring models

The generateSupplyChainRiskReport function in scoring.ts calls all four models sequentially on the collected data object. Each model operates on the same data structure but reads from different keys:

  • scoreIngredientRisk reads fda-food-recall-monitor, fda-food-adverse-events, and un-comtrade-search. It iterates recall records and applies severity-weighted scoring (Class I: 10 pts, Class II: 5 pts, Class III: 2 pts, capped at 35). Adverse events score 2 pts each plus 5 pts for serious outcomes, capped at 25. Trade volume is log-scaled with Math.log10 then multiplied by 3, capped at 20. The recall-to-trade correlation score caps at 20.
  • scoreContaminationPathways reads recall reason strings from fda-food-recall-monitor and scans them against hardcoded pathogen and chemical hazard arrays. PM2.5 readings from openaq-air-quality are compared against the WHO 15 μg/m³ guideline. Adverse event severity amplifies the total.
  • scoreSupplierHygiene reads uk-food-hygiene and processes ratingValue fields into a distribution, computing average rating, five-star percentage, and poor rating percentage. Open Food Facts Nutri-Score grades A/B/C/D/E from nutrition_grade_fr or nutriscore_grade contribute a product quality component. This score is inverted before entering the composite formula.
  • scoreSeasonalRisk reads NOAA alert severity fields, classifying EXTREME (10 pts), SEVERE (6 pts), and MODERATE (3 pts). Heat-specific events trigger an additional cold chain risk amplifier. Recall records are parsed for month strings to build a seasonality distribution, and the current month's recall count is compared to the monthly average.

Phase 3 — Composite scoring and recommendation generation

The composite score applies fixed weights: Ingredient Risk × 0.30, Contamination Pathways × 0.25, Hygiene inverted × 0.25, Seasonal Risk × 0.20. Risk level thresholds are 0-24 LOW, 25-49 MODERATE, 50-74 HIGH, 75-100 CRITICAL. Five threshold rules generate recommendations: ingredientRisk.riskLevel === 'CRITICAL' triggers an immediate supplier audit recommendation; contaminationPathways.pathwayCount >= 3 triggers HACCP review; supplierHygiene.hygieneLevel of POOR or BELOW_AVERAGE triggers an alternative supplier recommendation; seasonalRisk.currentSeasonRisk === 'PEAK' triggers cold chain monitoring escalation; contaminationPathways.biologicalRisk >= 20 triggers enhanced microbiological testing.

Phase 4 — Output assembly and raw data truncation

The final output merges the composite report with an echo of input parameters, a dataSources count object for auditability, and a rawData object containing the first 30 FDA recalls, 25 adverse events, 20 hygiene ratings, 15 food products, 15 trade flow records, 10 air quality readings, and 10 weather alerts. Truncation limits are applied in main.ts using .slice() before pushing to the Apify dataset.

Tips for best results

  1. Use the full product name, not abbreviations. "Peanut butter" will match more FDA recall records than "PB". Supplier names work well when the company appears in UK FSA establishment records or FDA enforcement actions by name.

  2. Add category for commodity ingredients. For generic terms like "oil", "flour", or "extract", the category narrows recall and adverse event searches to the relevant product category and reduces noise from unrelated matches.

  3. Set country for sourcing decisions. When evaluating a supplier from a specific origin (e.g., shrimp from Thailand), the country parameter scopes UN COMTRADE data to that bilateral trade corridor, making the riskCorrelation metric directly relevant to the procurement decision.

  4. Compare products in one batch. Run the actor on your top 10 ingredient categories in succession, export the results, and sort by compositeScore to build a risk-ranked procurement watchlist.

  5. Interpret riskCorrelation alongside trade volume. A high riskCorrelation value (recalls per million USD trade) is more significant for high-volume commodities than for specialty ingredients where one recall affects the ratio disproportionately.

  6. Use allSignals for audit pre-work. The signals array contains specific quantitative observations (e.g., "9 FDA food recalls — elevated ingredient risk") that can be copied directly into supplier audit pre-assessment documentation.

  7. Pair with Waterfall Contact Enrichment to find the food safety contact at a supplier after the report flags them for follow-up audit.

Combine with other Apify actors

ActorHow to combine
Website Contact ScraperAfter identifying a high-risk supplier, extract the food safety manager's contact details from the supplier's website to initiate an audit
Company Deep ResearchFeed HIGH or CRITICAL-scored supplier names into Company Deep Research for a full corporate intelligence profile including ownership and litigation history
Waterfall Contact EnrichmentEnrich a list of flagged supplier contacts through a 10-step enrichment cascade to find email and phone for audit outreach
Website Change MonitorMonitor supplier website pages for changes to quality certifications or compliance statements that might indicate a shift in risk posture
Trustpilot Review AnalyzerCross-reference consumer complaint sentiment about a food brand against the risk signals in the safety report
B2B Lead QualifierScore potential supplier partners on 30+ signals before requesting their food safety documentation
Multi-Review AnalyzerPull Trustpilot and BBB reviews for a food manufacturer to surface consumer-reported contamination complaints not yet captured in FDA enforcement data

Limitations

  • FDA data covers US-reported incidents only. Recalls and adverse events from the EU, Asia, or other jurisdictions are not included. For European incidents, the EU RASFF database is not currently integrated.
  • UK Food Hygiene ratings are establishment-specific. The actor searches UK FSA by query term and returns matching establishment names. If your supplier does not have a UK presence, this dimension returns no data and the hygiene score defaults to neutral.
  • UN COMTRADE data can lag by 3-6 months. Trade flow volumes reflect the most recently published UN COMTRADE records, which may not capture the current period's import volume. Use as a trend indicator rather than a real-time figure.
  • Adverse event matching is keyword-based. The CAERS search matches product names in adverse event reports. Products sold under different brand names or SKU codes may not retrieve all relevant adverse events.
  • Contamination pathway detection is text-pattern matching. The actor scans recall reason strings for pathogen and hazard keywords. Novel contaminants or newly coined terminology may not be detected until the keyword list is updated.
  • NOAA weather alerts are US-only. The weather alert data from NOAA covers US regions. For supply chains based outside the US, the seasonal risk model will have limited weather alert data and will rely primarily on recall seasonality.
  • No real-time recall alert capability. The actor queries data at run time. If a recall is issued between scheduled runs, it will not appear until the next run executes.
  • Open Food Facts data coverage varies by product. Established branded products have complete Nutri-Score data; commodity ingredients or private-label products may have sparse or missing product records.

Integrations

  • Zapier — trigger a food safety report run when a new supplier is added to a procurement spreadsheet, and post HIGH/CRITICAL results to a Slack channel
  • Make — build a weekly monitoring scenario that runs reports for all active ingredient categories and updates a risk dashboard in Airtable or Notion
  • Google Sheets — export compositeScore, riskLevel, and recommendations for each product to a shared supplier risk register
  • Apify API — integrate food safety risk scores programmatically into internal ERP or LIMS systems via REST calls
  • Webhooks — receive a POST notification whenever a run completes with a CRITICAL risk level so your team responds within hours, not days
  • LangChain / LlamaIndex — feed the structured allSignals and rawData.recalls arrays into an LLM pipeline to generate narrative food safety assessment summaries for non-technical stakeholders

Troubleshooting

  • Composite score is 0 or very low despite known recall history — The query term may not match FDA recall reason text exactly. FDA records often use full product category names ("ready-to-eat chicken") rather than brand names. Try a broader or alternative search term. Check the dataSources object in the output to see which sources returned zero records.

  • supplierHygiene.establishmentsChecked is 0 — The UK FSA database matches on establishment name and address. If the query is a US-only brand or commodity ingredient with no UK retail presence, no hygiene records will match. The hygiene dimension will default to neutral (no penalty or bonus to composite score).

  • Run taking longer than 4 minutes — Each sub-actor is allocated 120 seconds. If all 7 sources are slow to respond simultaneously, the total run can approach 4-5 minutes. This is normal behavior. If runs consistently exceed 5 minutes, increase the actor's memory allocation to 512 MB.

  • unComtrade data source count is 0 — UN COMTRADE searches commodity codes and descriptions. Very specific product names or brand names will not match COMTRADE's commodity classification system. Use a generic category term (e.g., "shrimp" rather than "Pacific white shrimp from Benchmark") as the query or category for trade flow analysis.

  • Only 0-1 signals generated for a high-risk ingredient — Signal thresholds are calibrated to common public data volumes. Low-recall products (fewer than 5 FDA recalls) will not trigger the recall signal threshold. This accurately reflects limited public enforcement data, not necessarily low actual risk. Use the raw score values rather than signal count alone for low-volume products.

Responsible use

  • This actor only accesses publicly available food safety enforcement and environmental data from FDA, NOAA, OpenAQ, UK FSA, UN COMTRADE, and Open Food Facts.
  • Risk scores are derived from public regulatory data and should be used as a screening input, not as a definitive safety certification or regulatory finding.
  • Do not use output scores as the sole basis for public statements about a specific brand's safety without corroboration from direct supplier documentation and regulatory inspection records.
  • Comply with applicable data use terms for each underlying data source, particularly UN COMTRADE and Open Food Facts.
  • For guidance on web scraping and data use legality, see Apify's guide.

❓ FAQ

How does Food Safety Report calculate the composite risk score? The composite score is a weighted average of four sub-scores: Ingredient Risk (30%), Contamination Pathways (25%), Supplier Hygiene inverted (25%), and Seasonal Risk (20%). Each sub-score is independently capped at 100. The hygiene score is inverted so that poor hygiene increases the composite risk rather than reducing it. Final composite scores of 0-24 are LOW, 25-49 MODERATE, 50-74 HIGH, and 75-100 CRITICAL.

What FDA databases does the food safety report pull from? Two FDA sources: the FDA Enforcement Reports database (food recalls with Class I, II, III severity classification and reason codes) and the FDA Center for Food Safety and Applied Nutrition Adverse Event Reporting System (CAERS), which captures consumer-reported adverse outcomes including hospitalizations, emergency room visits, and deaths associated with food products.

How many contamination pathways can the food safety analysis detect? The actor scans for 8 biological pathogens (Salmonella, Listeria, E. coli, Campylobacter, Norovirus, Botulism, Clostridium) and 9 chemical hazards (undeclared allergens, lead, mercury, arsenic, pesticides, melamine, aflatoxin, sulfites), plus environmental contamination from PM2.5 and PM10 air quality readings. Each distinct hazard detected in recall reasons becomes a named pathway in the output.

Can I schedule this actor to monitor food safety signals continuously? Yes. Apify's built-in scheduler supports daily, weekly, or custom cron intervals. Set a separate scheduled run for each product or ingredient category you want to monitor. Combine with webhook notifications to alert your team when a new run returns a HIGH or CRITICAL score.

How accurate is the food safety risk score? The score is only as accurate as the underlying public data. FDA recall records and CAERS adverse events are official regulatory data with high accuracy for captured incidents. UK FSA hygiene ratings reflect the most recent inspection for each establishment. UN COMTRADE trade data may lag by up to 6 months. The score is designed as a screening tool to prioritize human review, not as a substitute for direct supplier audit or laboratory testing.

Is it legal to use this data for supplier screening and procurement decisions? All underlying data sources are publicly available government and intergovernmental datasets (FDA, NOAA, UK FSA, UN COMTRADE) or open-access food product databases (Open Food Facts). Using this data for internal procurement risk screening is lawful. For guidance on web scraping legality, see Apify's guide.

How is Food Safety Report different from commercial food safety platforms like Corvium or SafetyChain? Commercial food safety platforms typically focus on internal HACCP documentation, supplier portal management, and corrective action workflows. Food Safety Report focuses on external public data intelligence — FDA enforcement records, trade volumes, environmental conditions — and delivers it in a programmable format. It is a research and screening tool, not a compliance management system. Most users spend $1-20/month depending on monitoring frequency, versus $500-2,000/month for enterprise SaaS platforms.

What happens if one of the 7 data sources is unavailable? The actor uses Promise.allSettled to call all sub-actors in parallel. If one source fails or times out, it returns an empty array for that source and the run continues. The dataSources object in the output shows a count of 0 for any source that returned no data, so you can identify partial results. The composite score is calculated from whatever data was successfully retrieved.

Can I use the raw data fields for my own analysis beyond the scores? Yes. The rawData object includes the first 30 FDA recall records, 25 CAERS adverse event records, 20 UK FSA hygiene records, 15 Open Food Facts product records, 15 UN COMTRADE trade records, 10 OpenAQ readings, and 10 NOAA weather alerts. These can be processed programmatically or exported to spreadsheets for custom analysis outside the actor's scoring models.

How long does a typical food safety report run take? Most runs complete in 2-4 minutes. All 7 sub-actors execute in parallel, so total run time is determined by the slowest source. Runs for highly specific queries that return few results across all sources tend to complete faster (under 2 minutes) than runs for broad commodity terms that return large result sets.

Can I run food safety reports for multiple products at once? The current version processes one query per run. To screen multiple products, start multiple runs in parallel via the API. The Python and JavaScript examples above can be adapted to loop over a list of product queries and collect all results into a single dataset for comparison. Alternatively, use B2B Lead Gen Suite patterns to batch-process supplier lists.

How do the NOAA weather alerts affect the food safety risk score? NOAA weather alerts are scored by severity: EXTREME alerts add 10 points, SEVERE add 6, MODERATE add 3, others add 1 — capped at 30 points total. Heat-specific events (containing "HEAT" or "EXCESSIVE" in the event name) trigger an additional cold chain disruption amplifier capped at 20 points. This dimension reflects the elevated spoilage and pathogen growth risk that occurs when temperature-controlled supply chains are disrupted by extreme weather.

Help us improve

If you encounter issues, you can help us debug faster by enabling run sharing in your Apify account:

  1. Go to Account Settings > Privacy
  2. Enable Share runs with public Actor creators

This lets us see your run details when something goes wrong, so we can fix issues faster. Your data is only visible to the actor developer, not publicly.

Support

Found a bug or have a feature request? Open an issue in the Issues tab on this actor's page. For custom solutions or enterprise integrations, reach out through the Apify platform.

How it works

01

Configure

Set your parameters in the Apify Console or pass them via API.

02

Run

Click Start, trigger via API, webhook, or set up a schedule.

03

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.

Ready to try Food Safety Report - Contamination & Compliance Risk?

Start for free on Apify. No credit card required.

Open on Apify Store