# Food Safety & Recall Risk Analyzer (`ntriqpro/food-safety-intelligence`) Actor

Check for food safety issues, recalls, and contamination risks. Rate food products and suppliers for safety.

- **URL**: https://apify.com/ntriqpro/food-safety-intelligence.md
- **Developed by:** [daehwan kim](https://apify.com/ntriqpro) (community)
- **Categories:** AI, Business, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

$80.00 / 1,000 food safety analyses

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Food Safety Intelligence

Analyze any food product by barcode or name for nutrition quality, recall history, and safety score. Returns 0-100 overall score using Open Food Facts + OpenFDA recall data.

### Features

- **Barcode/Name Search**: UPC/EAN barcode or product name lookup
- **Nutritional Analysis**: Nutri-Score grade, calories, macros (sugar, fat, sodium, fiber)
- **FDA Recall History**: Last 5 years of brand-level recalls
- **Allergen Detection**: Major allergens from ingredient list
- **Food Additive Analysis**: High-risk additives detection
- **Comprehensive Scoring**:
  - Quality Score (0-100): Based on Nutri-Score
  - Safety Score (0-100): Based on FDA recalls
  - Overall Score (0-100): Combined weighted score

### Input

| Field | Type | Required | Example |
|-------|------|----------|---------|
| barcode | string | No* | "0041196018769" |
| productName | string | No* | "Nutella" |

*Either barcode or productName required (barcode takes priority)

### Output

Each analysis returns a dataset item with:

- `product_name`: Product name
- `brand`: Brand name
- `barcode`: Product barcode/UPC
- `categories`: Product categories
- `nutriscore_grade`: A/B/C/D/E grade
- `calories_per_100g`: kcal per 100g
- `sugar_per_100g`: grams per 100g
- `saturated_fat_per_100g`: grams per 100g
- `sodium_per_100g`: mg per 100g
- `fiber_per_100g`: grams per 100g
- `allergens`: Array of detected allergens
- `recall_count`: Number of FDA recalls (brand, last 5 years)
- `high_risk_additives`: Count of high-risk additives
- `quality_score`: 0-100 nutritional quality
- `safety_score`: 0-100 safety (recall history)
- `overall_score`: 0-100 combined score
- `disclaimer`: Legal disclaimer
- `timestamp`: ISO timestamp

### Scoring Logic

````

Quality Score = Nutri-Score Points (A=90, B=70, C=50, D=30, E=10)
Safety Score = max(0, 100 - min(40, recall\_count × 20))
Overall Score = max(0, (Quality × 0.5 + Safety × 0.5) - additive\_penalty)

Additive Penalty = min(30, high\_risk\_count × 5)

````

### Data Sources

1. **Open Food Facts** (https://world.openfoodfacts.org)
   - Product info, ingredients, Nutri-Score
   - ODbL license (open data)

2. **OpenFDA Food Enforcement API** (https://api.fda.gov)
   - FDA recall history (last 5 years)
   - Public domain data

3. **USDA FoodData Central**
   - Nutritional reference (if needed)
   - Public domain data

### Disclaimer

This Actor aggregates publicly available data from Open Food Facts (ODbL license), OpenFDA (public domain), and USDA FoodData Central (public domain). It is **NOT medical or dietary advice**. Nutritional scores are estimates based on labeled information. Recall data is historical and may not reflect current product safety. Consult healthcare professionals for dietary decisions. Individuals with allergies must verify ingredients independently. Open Food Facts is community-contributed data without 100% accuracy guarantee.

### Usage Example

#### Input
```json
{
  "barcode": "0041196018769"
}
````

#### Output

```json
{
  "product_name": "Nutella",
  "brand": "Ferrero",
  "barcode": "0041196018769",
  "categories": "Breakfast cereals, Chocolate spreads",
  "nutriscore_grade": "E",
  "calories_per_100g": 540,
  "sugar_per_100g": 56.3,
  "saturated_fat_per_100g": 10.7,
  "sodium_per_100g": null,
  "fiber_per_100g": 1.3,
  "allergens": ["en:tree-nuts", "en:soy"],
  "recall_count": 0,
  "high_risk_additives": 0,
  "quality_score": 10,
  "safety_score": 100,
  "overall_score": 52.5,
  "disclaimer": "...",
  "timestamp": "2025-02-13T18:30:00.000Z"
}
```

### Pricing

- Pay-per-event: $0.08 per product analysis
- Free during development/testing

### Local Testing

```bash
npm install
npm start
```

Input: `{"barcode": "0041196018769"}` or `{"productName": "Nutella"}`

***

### 🔗 Related Actors by ntriqpro

Extend this actor with the ntriqpro intelligence network:

- [**drug-safety-intelligence**](https://apify.com/ntriqpro/drug-safety-intelligence) — FDA FAERS drug adverse event analysis
- [**fda-food-facility-inspector**](https://apify.com/ntriqpro/fda-food-facility-inspector) — FDA food facility inspection records
- [**fda-drug-safety-monitor**](https://apify.com/ntriqpro/fda-drug-safety-monitor) — FDA drug recall & safety alerts

### ⭐ Love it? Leave a Review

Your rating helps professionals discover this actor. [Rate it here](https://apify.com/ntriqpro/food-safety-intelligence/reviews).

# Actor input Schema

## `barcode` (type: `string`):

Product barcode number (UPC-12 or EAN-13). Takes priority over product name.

## `productName` (type: `string`):

Food product name to search (used if barcode is not provided)

## Actor input object example

```json
{
  "barcode": "0041196018769"
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "barcode": "0041196018769"
};

// Run the Actor and wait for it to finish
const run = await client.actor("ntriqpro/food-safety-intelligence").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "barcode": "0041196018769" }

# Run the Actor and wait for it to finish
run = client.actor("ntriqpro/food-safety-intelligence").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "barcode": "0041196018769"
}' |
apify call ntriqpro/food-safety-intelligence --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=ntriqpro/food-safety-intelligence",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Food Safety & Recall Risk Analyzer",
        "description": "Check for food safety issues, recalls, and contamination risks. Rate food products and suppliers for safety.",
        "version": "1.0",
        "x-build-id": "bTuH9S7nIEFnUIoIi"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/ntriqpro~food-safety-intelligence/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-ntriqpro-food-safety-intelligence",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/ntriqpro~food-safety-intelligence/runs": {
            "post": {
                "operationId": "runs-sync-ntriqpro-food-safety-intelligence",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/ntriqpro~food-safety-intelligence/run-sync": {
            "post": {
                "operationId": "run-sync-ntriqpro-food-safety-intelligence",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "barcode": {
                        "title": "Product Barcode (UPC/EAN)",
                        "type": "string",
                        "description": "Product barcode number (UPC-12 or EAN-13). Takes priority over product name."
                    },
                    "productName": {
                        "title": "Product Name (Alternative to Barcode)",
                        "type": "string",
                        "description": "Food product name to search (used if barcode is not provided)"
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
