Open Food Facts Scraper — Nutrition, Barcode & Labels
Pricing
from $1.50 / 1,000 results
Open Food Facts Scraper — Nutrition, Barcode & Labels
Scrape Open Food Facts by category, brand, or barcode. Extract nutrition facts, Nutri-Score, NOVA group, ingredients, labels, and allergens for diet analysis, food research, and product databases. No API key, no login.
Pricing
from $1.50 / 1,000 results
Rating
0.0
(0)
Developer
Logiover
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Open Food Facts Scraper — Nutrition, Barcode & Food Labels Data
Extract food product data, nutrition facts, Nutri-Score grades, NOVA processing groups, ingredient lists, and allergen labels from the Open Food Facts database — the world's largest open food product database with over 3 million products.
What does Open Food Facts Scraper do?
This actor connects to the Open Food Facts public API (world.openfoodfacts.org) — a keyless, open-access food database — and retrieves detailed nutrition and product data at scale. The actor supports three modes: search (filter by category, brand, and country across thousands of products with automatic pagination), product (look up specific products by EAN or UPC barcode), and category (browse all products in a food category).
The search mode queries the /api/v2/search endpoint with category, brand, and country filters, paginating in batches of 100 until your maxResults limit is reached. The category mode uses the dedicated /category/<slug>.json endpoint for efficient category browsing. The product mode fetches individual products via /api/v2/product/<barcode>.json.
Each product record includes 17 fields: barcode, product name, brand, category, quantity, Nutri-Score grade (A–E), NOVA group (1–4 processing level), six key nutriments per 100g (energy, fat, sugars, salt, proteins), full ingredients text, quality labels, country availability, product image URL, and a direct link to the Open Food Facts product page. No API key, no login, no scraping of HTML — pure official JSON API.
Who is it for?
- Nutritionists and dietitians building diet comparison tools or client food tracking systems.
- Food tech startups developing apps that need a free, maintained nutrition database.
- Data scientists and researchers analyzing food composition, ultra-processing levels, or Nutri-Score distribution across countries.
- E-commerce and retail teams enriching product catalogs with nutrition facts, images, and ingredient data.
- Journalists and public health advocates studying food labeling, additive use, and ultra-processed food patterns.
Use cases
- Bulk-download nutrition data for a food category (e.g. all "yogurts" or "breakfast cereals") for a research dataset.
- Look up products by barcode list to build a nutrition enrichment pipeline for a grocery delivery app.
- Compare Nutri-Score distribution across brands or countries to surface health patterns.
- Build a filtered product database of organic, vegan, or gluten-free certified products using label tags.
- Monitor changes in ingredient lists or nutritional values over time for a specific category.
Why use Open Food Facts Scraper?
- Keyless and loginless: uses the official Open Food Facts public API — zero credentials required, runs forever without token expiry.
- 17 output fields per product: barcode, name, brand, category, quantity, Nutri-Score, NOVA group, 5 nutriments, ingredients, labels, countries, image URL, product URL.
- Bulk pagination to thousands of results: automatic multi-page crawl — a single run can extract 10,000+ products.
- Three flexible modes: search by category/brand/country, product lookup by barcode list, or category browse.
- Export to CSV, JSON, Excel, or Google Sheets: Apify dataset supports all formats instantly.
- Pay-per-result pricing: costs pennies for hundreds of records, scales linearly.
What data can you extract?
The actor extracts the following fields per product:
| Field | Type | Description |
|---|---|---|
code | string | EAN/UPC barcode |
product_name | string | Full product name |
brands | string | Brand name(s) |
categories | string | Product category tags |
quantity | string | Package size (e.g. "500 g") |
nutriscore_grade | string | Nutri-Score grade: a, b, c, d, e |
nova_group | number | NOVA processing group 1–4 |
energy_kcal_100g | number | Energy in kcal per 100g |
fat_100g | number | Fat in grams per 100g |
sugars_100g | number | Sugars in grams per 100g |
salt_100g | number | Salt in grams per 100g |
proteins_100g | number | Proteins in grams per 100g |
ingredients_text | string | Full ingredient list |
labels | string | Quality/certification labels (organic, fair-trade, etc.) |
countries | string | Countries where the product is sold |
image_url | string | Front image URL |
url | string | Direct Open Food Facts product page URL |
Example JSON output:
{"code": "3017620422003","product_name": "Nutella","brands": "Ferrero","categories": "Spreads, Sweet spreads, Chocolate spreads","quantity": "400 g","nutriscore_grade": "e","nova_group": 4,"energy_kcal_100g": 539,"fat_100g": 30.9,"sugars_100g": 56.3,"salt_100g": 0.107,"proteins_100g": 6.3,"ingredients_text": "Sugar, palm oil, hazelnuts (13%), skimmed milk powder (8.7%), fat-reduced cocoa (7.4%), lecithins (soy), vanillin","labels": "no-gluten, rainforest-alliance","countries": "france, germany, united-kingdom, united-states","image_url": "https://images.openfoodfacts.org/images/products/301/762/042/2003/front_en.497.400.jpg","url": "https://world.openfoodfacts.org/product/3017620422003"}
How to use
Option A — Search by category, brand, or country
The most common and powerful mode. Filter the Open Food Facts database by one or more criteria and paginate automatically to thousands of products.
Step-by-step:
- Set
modetosearch. - Provide one or more category slugs (e.g.
breakfast-cereals,yogurts,cheeses). - Optionally add brand filters (e.g.
Nestlé,Kellogg's) or country filters (e.g.france,united-states). - Set
maxResultsto control how many products to collect per category.
{"mode": "search","categories": ["breakfast-cereals", "muesli"],"brands": ["Kellogg's"],"countries": ["united-states"],"maxResults": 1000}
Option B — Lookup by barcode list
Pass a list of EAN or UPC barcodes to fetch exact product data for each.
Step-by-step:
- Set
modetoproduct. - Provide a list of barcodes in the
barcodesfield.
{"mode": "product","barcodes": ["3017620422003", "5449000000996", "7613036020328"]}
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | search | Scraping mode: search, product, or category |
categories | array | ["breakfast-cereals"] | Category slugs to search or browse |
brands | array | [] | Brand name filters (search mode only) |
countries | array | [] | Country filters in English slug form (search mode only) |
barcodes | array | [] | EAN/UPC barcodes to look up (product mode only) |
maxResults | integer | 500 | Maximum products per category/search. 0 = unlimited |
proxyConfiguration | object | Apify proxy | Proxy settings — datacenter proxy is sufficient |
Full input JSON:
{"mode": "search","categories": ["breakfast-cereals"],"brands": [],"countries": [],"barcodes": [],"maxResults": 500,"proxyConfiguration": { "useApifyProxy": true }}
Output example
{"code": "3168930010265","product_name": "cruesly mélange de noix","brands": "Quaker","categories": "Mueslis, Cereal clusters with nuts","quantity": "450 g","nutriscore_grade": "b","nova_group": 4,"energy_kcal_100g": 462,"fat_100g": 19,"sugars_100g": 12,"salt_100g": 0,"proteins_100g": 8.5,"ingredients_text": "_avoine_ complète (32%), _blé_ complet (18%), sirop de glucose, huile de tournesol, sucre...","labels": "no-artificial-flavors, no-preservatives, no-colorings, no-palm-oil, nutriscore","countries": "belgium, france, germany, italy, netherlands, spain, united-kingdom","image_url": "https://images.openfoodfacts.org/images/products/316/893/001/0265/front_en.297.400.jpg","url": "https://world.openfoodfacts.org/product/3168930010265"}
Tips for best results
- Use category slugs, not display names: the API expects slugs like
breakfast-cerealsnot "Breakfast Cereals". Check Open Food Facts categories for valid slugs. - Start with a smaller
maxResults(e.g. 100–200) to preview data quality before running a full scrape. - Combine filters for precision: use both
categoriesandcountriesto get products available in a specific market. - NOVA group 4 = ultra-processed: filter results for
nova_group === 4to build ultra-processed food datasets. - Nutri-Score is not always available: some products have empty
nutriscore_grade— filter these out if comparing grades. - Ingredients text may be in local language: the database is multilingual. Use
countriesfilter to bias toward products with English ingredients. - Barcode mode is fastest: if you have a list of barcodes,
productmode fetches each directly without pagination overhead. - Category browsing vs. search:
categorymode uses the/category/<slug>.jsonendpoint which is slightly faster but returns fewer fields thansearch. - No rate limits: Open Food Facts is a public nonprofit — the API is open and generous, but use reasonable concurrency (actor defaults to 3 concurrent requests).
- Data freshness: Open Food Facts is community-updated. New products or nutritional corrections appear daily. Re-run regularly for up-to-date datasets.
Integrations
- Google Sheets: use Apify's built-in Google Sheets integration to push results directly to a spreadsheet for team sharing.
- Slack: configure a webhook to notify your Slack channel when a scrape run completes with a product count summary.
- Zapier / Make (Integromat): trigger downstream workflows when new nutrition data is available — e.g. auto-update a recipe database or e-commerce catalog.
- Webhooks: set an Apify webhook on run completion to POST results to your own endpoint.
- Scheduler: run daily or weekly via Apify Scheduler to keep your food database current as products are added to Open Food Facts.
API usage
cURL
curl -X POST \"https://api.apify.com/v2/acts/logiover~open-food-facts-scraper/runs?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"mode":"search","categories":["breakfast-cereals"],"maxResults":200}'
Node.js (Apify client)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_TOKEN' });const run = await client.actor('logiover/open-food-facts-scraper').call({mode: 'search',categories: ['breakfast-cereals', 'yogurts'],maxResults: 500,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items[0].product_name, items[0].nutriscore_grade);
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_TOKEN")run = client.actor("logiover/open-food-facts-scraper").call(run_input={"mode": "search","categories": ["breakfast-cereals"],"maxResults": 500,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["product_name"], item["nutriscore_grade"], item["nova_group"])
Use with AI agents (MCP)
Open Food Facts Scraper is compatible with the Apify MCP (Model Context Protocol) server, making it callable from Claude, GPT, and other AI agents. You can give your AI agent a prompt like: "Use the Open Food Facts Scraper to get all breakfast cereals in the United States with maxResults 300, then find which brands have the most Nutri-Score A products." The agent will call the actor, receive the dataset, and perform the analysis — no manual steps required.
FAQ
Does this actor require an API key?
No. Open Food Facts is a free, open-access nonprofit database. This actor uses the public API at world.openfoodfacts.org with no authentication required.
How many products can one run return?
A single run can return tens of thousands of products. The search mode paginates automatically — for popular categories like "yogurts" or "beverages" there are 50,000+ products in the database. Set maxResults to control volume.
What category slugs should I use?
Use slugs from the Open Food Facts categories page. Examples: breakfast-cereals, cheeses, yogurts, chocolates, biscuits, soft-drinks, dairy-products, plant-based-foods, organic-foods.
Why do some products return null for nutrition fields?
Open Food Facts is community-contributed. Many products are missing nutrition data because no contributor has added it. The actor returns null for missing nutriments — filter these out with energy_kcal_100g !== null in your downstream pipeline.
What is Nutri-Score?
Nutri-Score is a 5-letter color-coded nutritional rating system (A = healthiest, E = least healthy) used in Europe. It is calculated from a product's nutriments. Not all products have it — it depends on whether the product country mandates it.
What is NOVA group?
NOVA is a food classification system based on the extent of food processing: 1 (unprocessed), 2 (processed culinary ingredients), 3 (processed foods), 4 (ultra-processed). A nova_group of 4 means ultra-processed.
Can I export results to Excel or CSV?
Yes. Any Apify dataset can be downloaded as CSV, Excel, JSON, XML, or JSONL directly from the Apify Console or via the API. You can also connect Google Sheets directly.
How fast does it run?
With default concurrency of 3 requests and 100 products per page, the actor collects roughly 200–300 products per minute. A 1,000-product run takes about 4–5 minutes including build time.
Is it legal to scrape Open Food Facts?
Open Food Facts data is published under the Open Database License (ODbL) and is explicitly provided for open reuse. This actor uses the official JSON API — there is no HTML scraping, no bypassing of access controls. Commercial and research use is permitted under ODbL attribution requirements.
How often is the database updated?
Open Food Facts is updated continuously by its global community. New products and corrections are added daily. For production use cases, schedule this actor to run weekly or monthly to keep your local database fresh.
What happens if a barcode is not found?
In product mode, if a barcode returns no product, the actor logs a warning and skips it. Your dataset will contain only the barcodes that existed in the database.
Are there any related scrapers I should know about?
- logiover/amazon-search-scraper — product listings with prices for cross-reference with food products.
- logiover/amazon-reviews-scraper — consumer sentiment on food products sold on Amazon.
- logiover/b2b-lead-scraper — find food industry companies (importers, distributors) for B2B outreach.
Is it legal?
Open Food Facts (openfoodfacts.org) is a nonprofit collaborative project that explicitly publishes its data under the Open Database License (ODbL 1.0). This license permits free use, redistribution, and creation of derivative works, including commercial applications, provided you attribute the source and share any changes to the database itself under the same license.
This actor uses only the official public JSON API — it does not bypass any authentication, CAPTCHA, or access control. It is equivalent to any other programmatic consumer of the Open Food Facts API. Users are responsible for complying with ODbL attribution requirements in their own products or publications.