
Open Food Facts Product Scraper
hipersoft/openfoodfacts-scraper
Search Open Food Facts or look up barcodes for food product data: name, brand, categories, Nutri-Score, NOVA, Eco-Score, ingredients, allergens, additives, labels and full per-100g nutrition (energy, fat, sugars, salt, protein, carbs, fibre). For nutrition apps, retail and CPG research. No setup.
Total users
1Monthly users
1Total runs
124Per product scraped
$0.016Last rebuilt
Oct 26, 2026Overview
Search Open Food Facts or look up barcodes and get rich food product data back as clean, structured JSON: name, brand, categories, Nutri-Score, NOVA group, Eco-Score, ingredients, allergens, additives, labels and full per-100g nutrition (energy, fat, sugars, salt, protein, carbs, fibre). No account, no API key. Perfect for nutrition apps, retail and CPG research, and food data pipelines.

Features
- ๐ Search or barcode โ pass
searchTermslikeoat milk, or exactbarcodes(EAN/UPC) for direct product lookups. - ๐ฅ Full nutrition per 100g โ energy (kcal), fat, saturated fat, sugars, salt, protein, carbohydrates, fibre and sodium.
- ๐ Health & processing scores โ Nutri-Score grade, NOVA group and Eco-Score grade on every product.
- ๐งพ Ingredients & safety โ ingredients text, allergens and a cleaned
additiveslist (E-numbers without theen:prefix). - ๐ Country database selection โ query the global
worldDB or a country code likeus,uk,fr,deviacountry. - ๐ท๏ธ Always-usable names โ a
displayNameis synthesized from brand + category when a product's own name is missing. - ๐ No key needed โ uses the public Open Food Facts API with polite rate limiting built in.
What you get

One flat JSON record per product (a source field records the search term or barcode it came from):
{
"source": "search:oat milk",
"code": "3017620422003",
"productName": "Oat Drink Barista",
"displayName": "Oat Drink Barista",
"brands": "Oatly",
"categories": "Plant-based foods, Beverages, Plant-based milk",
"quantity": "1 l",
"servingSize": "100 ml",
"countries": "United Kingdom, France",
"nutriscoreGrade": "c",
"novaGroup": 4,
"ecoscoreGrade": "b",
"ingredientsText": "Oat base (water, oats 10%), rapeseed oil, ...",
"allergens": "en:gluten",
"additives": ["e340", "e450"],
"labels": "Vegan, No added sugar",
"packaging": "Tetra Pak",
"stores": "Tesco",
"energyKcal100g": 59,
"fat100g": 3.0,
"saturatedFat100g": 0.3,
"sugars100g": 3.3,
"salt100g": 0.09,
"proteins100g": 1.0,
"carbohydrates100g": 6.6,
"fiber100g": 0.8,
"sodium100g": 0.036,
"imageUrl": "https://images.openfoodfacts.org/images/products/oat.jpg",
"url": "https://world.openfoodfacts.org/product/3017620422003"
}
Output schema
| Field | Type | Description |
|---|---|---|
source |
string | The search term or barcode the record came from. |
code |
string | Product barcode (EAN/UPC). |
productName |
string | Product name as listed on Open Food Facts. |
displayName |
string | Usable product name, synthesized from brand + category when the name is missing. |
brands |
string | Brand name(s) for the product. |
categories |
string | Category labels for the product. |
quantity |
string | Net quantity of the product (e.g. "1 l"). |
servingSize |
string | Serving size the nutrition may reference. |
countries |
string | Countries where the product is sold. |
nutriscoreGrade |
string | Nutri-Score health grade (aโe). |
novaGroup |
integer | NOVA food-processing group (1โ4). |
ecoscoreGrade |
string | Eco-Score environmental grade (aโe). |
ingredientsText |
string | Full ingredients list text. |
allergens |
string | Declared allergens. |
additives |
array | Cleaned list of additive E-numbers. |
labels |
string | Product labels and certifications (e.g. Vegan, Organic). |
packaging |
string | Packaging description. |
stores |
string | Stores where the product is sold. |
energyKcal100g |
integer | Energy in kcal per 100g. |
fat100g |
number | Fat in grams per 100g. |
saturatedFat100g |
number | Saturated fat in grams per 100g. |
sugars100g |
integer | Sugars in grams per 100g. |
salt100g |
number | Salt in grams per 100g. |
proteins100g |
number | Protein in grams per 100g. |
carbohydrates100g |
number | Carbohydrates in grams per 100g. |
fiber100g |
number | Fibre in grams per 100g. |
sodium100g |
number | Sodium in grams per 100g. |
imageUrl |
string (URL) | Link to the product image. |
url |
string (URL) | Link to the product page on Open Food Facts. |
Input
{
"searchTerms": ["oat milk", "dark chocolate"],
"barcodes": [],
"country": "world",
"maxResultsPerSearch": 50
}
| Field | Description |
|---|---|
searchTerms |
Keywords to search products by (name, brand, ingredient). |
barcodes |
Optional. Look up these EAN/UPC barcodes directly (search terms are ignored when set). |
country |
Which OFF database to query: world or a country code like us, uk, fr. |
maxResultsPerSearch |
Maximum products to collect per search term (1โ2000). |
Use cases
- Build or enrich a nutrition app with Nutri-Score, NOVA and per-100g macros.
- Look up a batch of product barcodes for a retail or inventory catalog.
- Research ingredients, additives and allergens across a food category.
- Feed clean CPG product data into dashboards or comparison tools.
Pricing
Pay-per-event: you're billed a small amount per run and per product scraped โ you only pay for what you get. See the Pricing tab for current rates.
FAQ
Do I need an API key or account? No. The Actor uses the public Open Food Facts API with polite rate limiting built in โ no login and no key required.
How many products can I get per run?
Up to 2,000 products per search term. Pass multiple searchTerms, or look up exact barcodes (EAN/UPC) directly for pinpoint product records.
How fresh is the data? Products are pulled live from Open Food Facts at run time. Because it's a crowd-sourced database, freshness and completeness depend on community contributions for each product.
Is the data official? The data comes from Open Food Facts, a free, open, crowd-sourced food database โ not from manufacturers. This Actor is an independent tool and is not affiliated with or endorsed by Open Food Facts.
What's the output format? Flat JSON, one record per product, with name, brand, categories, Nutri-Score, NOVA group, Eco-Score, ingredients, allergens, additives and full per-100g nutrition. Export as JSON, CSV or Excel.
Can I connect this to other apps and services? The Open Food Facts Scraper can be connected with almost any cloud service or web app thanks to integrations on the Apify platform. It works with Make, Zapier, Slack, Airbyte, GitHub, Google Drive and many more, plus the Apify API, JavaScript/Python clients and MCP. Or use webhooks to trigger an action whenever a run finishes.
More open-data scrapers from the same publisher:
- Open Library Scraper โ book metadata, authors and editions from Open Library.
- openFDA Scraper โ FDA drug, device and food recalls, labels and adverse events.
- CoinGecko Scraper โ live crypto prices, market cap, volume and ATH/ATL.
Notes
This Actor uses the public Open Food Facts API (openfoodfacts.org), a free, open, crowd-sourced food database. It is an independent tool and is not affiliated with or endorsed by Open Food Facts; all trademarks belong to their respective owners.
Input
| Field | Type | Description |
|---|---|---|
searchTerms requiredSearch terms | array | Keywords to search products by (name, brand, ingredient), e.g. "oat milk", "dark chocolate". |
barcodesBarcodes (EAN/UPC) | array | Optional. Look up these product barcodes directly (search terms are ignored when set). |
countryCountry database | string | Which Open Food Facts database to query: 'world' (global) or a country code like us, uk, fr, de. Affects which products/language surface first. Default: "world" |
maxResultsPerSearchMax results per search term | integer | Maximum products to collect per search term. Default: 50 |
API
curl -X POST "https://api.apify.com/v2/acts/hipersoft~openfoodfacts-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"searchTerms": [
"oat milk"
],
"barcodes": []
}'from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("hipersoft/openfoodfacts-scraper").call(run_input={
"searchTerms": [
"oat milk"
],
"barcodes": []
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('hipersoft/openfoodfacts-scraper').call({
"searchTerms": [
"oat milk"
],
"barcodes": []
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);Pricing
| Event | Price | Paid plans from |
|---|---|---|
| Product scraped One food product with full metadata + per-100g nutrition | $0.016 | $0.008 |
You pay only for what the run returns. Set a maximum cost per run and it stops cleanly at that limit.
Related scrapers
Carousell Scraper
Scrape Carousell search listings: title, price, condition, location, seller, photo and URL. Requires your own Carousell app token.
242 runs ยท 2 users ยท $0.003 / listing scrapedGoogle Flights Scraper
Scrape flight options from Google Flights by route and date: airline, flight number, departure and arrival times, duration, stops, layovers and price. One-way or round-trip, any cabin and currency. For travel and price monitoring.
216 runs ยท 4 users ยท $0.004 / flight scrapedPinterest Scraper
Search Pinterest and scrape pins (title, description, destination link, image, pinner, board, saves), boards and users. Fast. For visual research, e-commerce, trend and marketing analysis.
151 runs ยท 2 users ยท $0.0034 / item scrapedGoogle Trends Scraper
Scrape Google Trends for any keyword: interest over time, related and rising queries, and interest by region. Per country and timeframe. For SEO, market and trend research. No setup.
139 runs ยท 6 users ยท $0.001 / keyword scrapedAliExpress Product Search Scraper
Search AliExpress by keyword and export one clean row per product โ title, sale price, original price, image and product URL. Export to JSON, CSV or Excel.
135 runs ยท 3 users ยท $0.003 / product scrapedGoogle Maps Scraper
Search Google Maps and scrape places: name, category, full address, city, coordinates, rating, phone, website, Place ID and map link. Fast browser-free via Google's internal endpoint, no setup. For local lead generation and market research.
130 runs ยท 2 users ยท $0.005 / place scrapedSend the site and the fields. We build it and you get it first.