Open Food Facts Products Scraper avatar

Open Food Facts Products Scraper

Pricing

Pay per event

Go to Apify Store
Open Food Facts Products Scraper

Open Food Facts Products Scraper

Export curated Open Food Facts product data — barcode, name, brand, quantity, category/label/country tags, nutriscore, ecoscore, NOVA group and ingredients — filtered by brand, category, country or search term, as clean JSON, CSV or Excel.

Pricing

Pay per event

Rating

0.0

(0)

Developer

DevilScrapes

DevilScrapes

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Categories

Share


🎯 What this scrapes

This Actor searches Open Food Facts — the crowdsourced, keyless product database covering 3M+ barcoded products — and exports a curated slice: barcode, product name, brand, quantity, category/label/country tags, nutriscore, ecoscore, NOVA processing group and ingredients. Filter by brand, category, country or free-text search term, and stop after however many products you need.

🔥 What we handle for you

  • 🛡️ Browser fingerprint rotationcurl-cffi impersonates real Chrome / Firefox / Safari TLS handshakes on every request, even though Open Food Facts is a friendly public API.
  • 🔁 Retries with exponential backoff — Open Food Facts intermittently serves a transient 503 under valid queries; we retry up to 5 times (2s → 30s cap) before ever giving up.
  • 🎯 A curated field list, not the full ~140 KB product document — we request only the fields your dataset needs, keeping runs fast and cheap.
  • 🧊 Clean, typed dataset rows — Pydantic-validated, ISO-8601 timestamps, stable product codes, JSON / CSV / Excel export straight from the Apify Console.
  • 💰 Pay-Per-Event pricing — you only pay for results that hit your dataset. No data, no charge.

💡 Use cases

  • CPG / retail intelligence — pull a competitor brand's full catalog with nutrition, eco and processing scores in one export.
  • Nutrition & health research — build a scored dataset (nutriscore, ecoscore, NOVA) for a category or country without hand-rolling Open Food Facts' pagination.
  • Ingredient audits — export ingredients_text alongside category and label tags to screen a brand's lineup for a claim (organic, allergen, etc.).
  • Retail catalog enrichment — attach barcode, quantity and image_url to an existing SKU list by matching on code.

⚙️ How to use it

  1. Click Try for free at the top of the page.
  2. Fill in the input form — most fields have sensible defaults.
  3. Click Start. Output streams into the run's dataset.
  4. Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.

📥 Input

FieldTypeRequiredDefaultNotes
brandsTagstringno'nutella'Filter to products whose brand facet matches this tag, e.g. nutella, coca-cola. Leave blank…
categoriesTagstringno'—'Filter to a category facet tag, e.g. en:sodas. Leave blank to skip this filter.
countriesTagstringno'—'Filter to a country facet tag, e.g. en:france. Leave blank to skip this filter.
searchTermsstringno'—'Free-text search across product name and brand. Leave blank to skip this filter.
maxResultsintegerno100Stop after this many products. Each product is one billed result row.
proxyConfigurationobjectno{'useApifyProxy': False}Open Food Facts is a public, keyless API and does not fingerprint clients — a proxy is optional. Leave this off unless…

Example input

{
"brandsTag": "nutella",
"maxResults": 3,
"proxyConfiguration": {
"useApifyProxy": false
}
}

📤 Output

Every row is one dataset item.

FieldTypeNotes
codestringBarcode / product code.
product_namestringProduct display name.
brandsstringComma-separated brand names as OFF stores them.
quantitystringFree-text pack size, e.g. '1 kg'.
categories_tagsarrayOFF category taxonomy tags.
labels_tagsarrayOFF label taxonomy tags (organic, fair-trade, etc.).
countries_tagsarrayCountries the product is sold in.
nutriscore_gradestringa-e or unknown/not-applicable.
ecoscore_gradestringa-e or unknown/not-applicable.
nova_groupinteger1-4 processing-level classification.
ingredients_textstringRaw ingredients list as published.
packaging_tagsarrayPackaging material/type tags.
storesstringComma-separated store names where reported sold.
image_urlstringFront product image URL.
product_urlstringBuilt as https://world.openfoodfacts.org/product/.
scraped_atstringISO 8601 UTC at row creation.

Example output

{
"code": "3017620422003",
"product_name": "Nutella",
"brands": "Nutella, Ferrero, Yum yum",
"quantity": null,
"categories_tags": [
"en:breakfasts",
"en:spreads",
"en:sweet-spreads"
],
"labels_tags": [],
"countries_tags": [
"en:france"
],
"nutriscore_grade": "e",
"ecoscore_grade": "unknown",
"nova_group": 4,
"ingredients_text": "Sucre, huile de palme, NOISETTES 13%, cacao maigre 7,4%, LAIT \u00e9cr\u00e9m\u00e9 en poudre 6,6%, LACTOSERUM en poudre, \u00e9mulsifiants: l\u00e9cithines [SOJA), vanilline. Sans gluten.",
"packaging_tags": [],
"stores": null,
"image_url": "https://images.openfoodfacts.org/images/products/301/762/042/2003/front_en.879.400.jpg",
"product_url": "https://world.openfoodfacts.org/product/3017620422003",
"scraped_at": "2026-08-20T12:00:00+00:00"
}

💰 Pricing

Pay-Per-Event — you pay only when these events fire:

EventUSDWhat it is
actor-start$0.20One-off warm-up charge per run
result$0.002Per dataset item

Example: 1 000 results at the rates above ≈ $2.20. No subscription, no minimum, no card to start — Apify gives every new account $5 of free credit.

🚧 Limitations

  • Open Food Facts is a crowdsourced database — coverage and field completeness vary by product and region; a product missing from Open Food Facts simply won't appear.
  • The Actor requires at least one filter (brand, category, country or search term) — an unfiltered full-database pull is out of scope.
  • Nutrient-value-by-100g numeric breakdowns and single-barcode lookup are not included in v1.

❓ FAQ

Do I need to filter by something?

Yes — set at least one of Brand tag, Category tag, Country tag or Search terms. Open Food Facts holds 3M+ products; an unfiltered pull isn't supported.

Why don't I see every field for every product?

Open Food Facts is community-maintained — not every product has a filled-in nutriscore, ecoscore, or ingredients list. Missing fields come back as null, never a crash.

Is this legal?

We only fetch data Open Food Facts already publishes through its own public search API. Respect Open Food Facts' own terms before reusing the data commercially.

How do I export to Sheets?

After the run finishes, click Storage → Dataset → Export and pick CSV — Google Sheets imports it directly.

💬 Your feedback

Spotted a bug, hit a weird edge case, or need a new field? Open an issue on the Actor's Issues tab on Apify Console — we ship fixes weekly and we read every report.