Skip to content
    ↑↓ to choose · Enter to open

    · 13 min read

    Open Food Facts Scraper: 37 Data Fields per Record (2026)

    By CrawlerBros Engineering Team

    Each record carries 37 output fields covering per-100 g nutriments, Nutri-Score, NOVA groups, ingredients, and allergen tags. The dataset provides structured food catalog information at the free-plan price of $5.00 per 1,000 results, while paid Apify tiers pay less. The Actor routes country-filtered queries directly through regional API hosts for localized data. Apify also bills the platform usage each run consumes on top of these charges. This tool is built for teams conducting nutritional analyses or catalog enrichment, but not for anyone who needs live retail pricing, which the records do not include.

    Try it: open Open Food Facts Scraper on Apify, sign in on the free plan and run the prefilled example.

    Can you try Open Food Facts Scraper before paying?

    Yes. Apify's free plan includes $5.00 of prepaid usage every month and asks for no credit card. At $0.005 per result, that covers up to 1,000 results of Open Food Facts Scraper a month, before run-start charges and platform usage.

    The example request further down caps maxItems at 15, so a first run returns at most 15 results and costs at most $0.075 in result charges. That is enough to see the real shape of the data before deciding anything.

    Open Food Facts Scraper was last updated on 2026-05-26. It is one of 1,724 Actors CrawlerBros publishes on Apify, which together have 728,502 lifetime public runs and an average rating of 4.63 out of 5 across 416 reviews.

    What does it cost to run Open Food Facts Scraper?

    Each result costs $0.005 on Apify's free plan, which is $5.00 per 1,000 results. Starting a run is charged separately at $0.005 per GB of Actor memory. Apify also bills the platform usage each run consumes, at the rates of your Apify plan, on top of these charges.

    Apify plan Per result Per 1,000 results
    FREE $0.005 $5.00
    BRONZE $0.00433 $4.33
    SILVER $0.00367 $3.67
    GOLD $0.003 $3.00
    PLATINUM $0.003 $3.00
    DIAMOND $0.003 $3.00

    The maxItems setting has the direct influence on your bill because result charges apply solely to records written to the dataset. To avoid incurring charges for sparse entries, filter out incomplete data using minProductCompleteness. The example input caps maxItems at 15, so a test run returns at most 15 results and costs at most $0.075 in result charges.

    How do you run Open Food Facts Scraper from the API?

    The schema marks 1 of its 19 controls as required: mode. Every value in the payload below comes from the published schema's own prefills, which means you can paste it, swap the token, and get a real result.

    Call the synchronous endpoint to start a run and receive dataset items in one request:

    curl -X POST "https://api.apify.com/v2/acts/crawlerbros~openfoodfacts-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
      -H "Content-Type: application/json" \
      -d '{"mode":"search","maxItems":15}'
    

    The same run from Python, using the official client:

    from apify_client import ApifyClient
    
    client = ApifyClient("<YOUR_APIFY_TOKEN>")
    
    run_input = {
      "mode": "search",
      "maxItems": 15
    }
    
    run = client.actor("crawlerbros~openfoodfacts-scraper").call(run_input=run_input)
    
    for item in client.dataset(run["defaultDatasetId"]).iterate_items():
        print(item)
    

    And from Node.js:

    import { ApifyClient } from 'apify-client'
    
    const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' })
    
    const input = {
      "mode": "search",
      "maxItems": 15
    }
    
    const run = await client.actor('crawlerbros~openfoodfacts-scraper').call(input)
    const { items } = await client.dataset(run.defaultDatasetId).listItems()
    console.log(items)
    

    That endpoint blocks until the run completes. Fine while you are testing a handful of records, risky once a run takes minutes: a dropped connection loses the response even though the run itself finished. Switch to an asynchronous start with polling or a webhook before you schedule anything.

    Which Open Food Facts Scraper inputs matter, and which can you skip?

    The mode selector determines which lookup strategy the scraper executes, with byBarcodes, byCategory, and search altering the result set most significantly. For initial tests, leave complex multi-select arrays empty and set country to your primary market. Configure minProductCompleteness to drop items that lack basic fields.

    • mode (string): What to fetch. Default: "search".
    • maxItems (integer): Hard cap on emitted records. Default: 50.
    • searchQuery (string): Free-text query - searches name / brand / ingredients. Default: "chocolate".
    • barcodes (array): EAN-13 / EAN-8 / UPC-A barcode strings (digits only after normalization). Default: [].
    • categorySlug (string): Open Food Facts category slug. Spaces / commas are normalized to hyphens.
    • brandSlug (string): Brand name slug - e.g. nutella, danone, coca-cola, kelloggs.
    • storeSlug (string): Retailer slug. Choose a known store or type a custom slug.
    • labelSlug (string): Food label slug (organic, vegan, fair-trade, etc.).
    • manufacturerSlug (string): Manufacturing place / country (e.g. france, italy, germany).
    • productUrls (array): Direct product URLs like https://world.openfoodfacts.org/product/3017620422003. Default: [].
    • country (string): Restrict results to products sold in a specific country (also drives the country API host). Default: "any".
    • language (string): Preferred language for productName / ingredientsText (ISO 639-1). Default: "any".

    The other 7 controls, with their defaults, are listed in the input schema on Open Food Facts Scraper on Apify.

    Fixed-choice controls: mode accepts 9 values (default search), including search (Text search), byBarcodes (Lookup by barcode (EAN/UPC)), byCategory (Browse by category (e.g. chocolates, cereals)), byBrand (Browse by brand (e.g. nutella, danone)); categorySlug accepts 41 values, including beverages, snacks, dairies, cereals-and-potatoes (Cereals and potatoes); storeSlug accepts 38 values, including carrefour, walmart, tesco, lidl; labelSlug accepts 22 values, including organic, eu-organic (EU Organic), usda-organic (USDA Organic), vegan; country accepts 31 values (default any), including any, united-states (United States), united-kingdom (United Kingdom), france; language accepts 31 values (default any), including any, en (English), fr (French), de (German).

    What does Open Food Facts Scraper return?

    Output records supply standardized nutritional values, ingredients lists, and environmental scores for consumer goods research. They conspicuously lack historical supermarket prices and real-time inventory counts.

    • code - barcode (EAN-13 / EAN-8 / UPC-A)
    • productName, primaryBrand, brands[], brandsTags[]
    • quantity, packaging, packagingTags[]
    • manufacturingPlaces
    • stores[], storesTags[]
    • countries[], countriesTags[]
    • language - ISO 639-1
    • categoryHierarchy[], categoriesTags[], mainCategory
    • nutriments - per-100 g object: energyKcal, energyKj, fat, saturatedFat, carbohydrates, sugars, addedSugars, fiber, proteins, salt, sodium, transFat, cholesterol, iron, calcium, vitaminA, vitaminC, vitaminD, alcohol
    • servingSize, servingQuantity
    • nutriscore - A / B / C / D / E / unknown
    • ecoscore - A / B / C / D / E / unknown
    • novaGroup - 1 (unprocessed) → 4 (ultra-processed)
    • additivesTags[], allergensTags[], labelsTags[], ingredientsTags[], tracesTags[]
    • ingredientsText
    • ingredientsAnalysis - palmOilStatus, veganStatus, vegetarianStatus
    • imageUrls - front, ingredients, nutrition
    • productCompleteness - 0.0-1.0
    • createdAt, lastModifiedAt
    • productUrl
    • recordType: "product", scrapedAt

    These are the documented fields. Optional ones can be empty on a given record, so measure how often each field your deliverable depends on is populated across a real sample before automating the handoff.

    How do you build the workflow end to end?

    Open Open Food Facts Scraper and work through these in order. Each step ends with something to check, so a bad configuration surfaces on a small run rather than a scheduled one.

    1. Set mode to search, byBarcodes, or byCategory depending on whether you are querying terms, specific EAN codes, or product groups.
    2. Populate the corresponding selector, such as adding UPC strings to the barcodes array or setting categorySlug to chocolates.
    3. Select a specific regional market using the country filter, such as united-states or france, to route queries to localized API endpoints.
    4. Filter processing classifications or dietary requirements directly using the multi-select novaGroup, nutriscore, or containsLabels controls.
    5. Set minProductCompleteness to a threshold like 50 to drop sparse entries that lack basic nutritional panels.
    6. Assign a small integer like 15 to maxItems on your initial run to verify field coverage before committing to full ingestion.
    7. Inspect output records to confirm that the nutriments object and ingredientsText contain the necessary attributes for your application.
    8. Increase maxItems to your desired batch size and schedule recurring jobs.

    How do you apply it? Three worked playbooks

    These are Open Food Facts Scraper's own documented use cases, each worked through as an operating pattern rather than a description.

    Use case 1: CPG market research

    Outcome: Track product launches, brand portfolios, packaging trends, NOVA-classification shifts across markets

    Configure: mode="byBrand", brandSlug="kelloggs", country="united-states", maxItems=100

    Working method: Execute a targeted query against a single manufacturer slug within a regional market. Inspect the packagingTags and novaGroup arrays across returned items to assess material choices and ultra-processing distribution. Schedule quarterly runs to capture catalog expansions and portfolio adjustments over time.

    Deliverable: A structured dataset of products for a single brand containing packaging types, processing classifications, and brand tags.

    Stop condition: The dataset contains zero returned items for an established corporate brand slug.

    Use case 2: Retailer / pricing intelligence

    Outcome: Discover the catalog footprint of major retailers (Walmart, Carrefour, Aldi, Lidl, Tesco) in each country

    Configure: mode="byStore", storeSlug="carrefour", country="france", maxItems=500

    Working method: Target a specific retailer slug filtered by country to pull items tagged to that merchant network. Compare brandsTags against store private labels to map catalog composition. Cross-reference the resulting barcode code list with downstream price monitors.

    Deliverable: A retailer-specific catalog export containing product barcodes, brand arrays, and category paths.

    Stop condition: The storesTags field in returned records does not contain the queried store identifier.

    Use case 3: Diet & health research

    Outcome: Segment products by Nutri-Score / Eco-Score / NOVA group; quantify additive prevalence by category

    Configure: mode="byCategory", categorySlug="chocolates", nutriscore=["A","B"], novaGroup=["1","2"]

    Working method: Isolate a high-volume food classification using categorySlug and constrain results to top-tier health and processing grades. Tabulate additivesTags across the extracted records to evaluate preservative and stabilizer presence in the cleanest formulation segment. Compare these tallies against broader category baselines.

    Deliverable: A categorized export of items filtered by nutritional score and minimal processing with additive tallies.

    Stop condition: Over half of the returned records lack populated entries in additivesTags and ingredientsText.

    What breaks, and how do you design around it?

    Large country-wide scans that cause HTTP 503 throttle responses should be narrowed using a specific categorySlug, brandSlug, or searchQuery. In regions where volunteer data is uneven, raise the minProductCompleteness value to ensure you only download records containing usable nutritional panels. Barcodes arrive canonicalized to 13 digits, so prepare downstream systems to match left-padded UPC strings.

    When should you not use Open Food Facts Scraper?

    Do not use this Actor when your application requires store shelf prices, promotional history, or localized inventory levels. Open Food Facts is a collaborative packaging and nutrition archive, not a commercial price aggregator. When crowdsourced pricing intelligence is strictly required, run the Open Food Facts Prices Scraper instead. Teams needing catalog dumps restricted exclusively to the United Kingdom or Brazil should evaluate the Open Food Facts UK Scraper or Open Food Facts Brazil Scraper. If your team only needs verified manufacturer data directly from retailer APIs, this crowd-sourced database is the wrong choice.

    What should you check before trusting the output?

    • The code field must contain an 8, 12, or 13-digit barcode string rather than an empty value.
    • The nutriments object must contain energyKcal when processing data for calorie calculations.
    • The productCompleteness value must exceed 0.0 to prevent ingestion of placeholder records.
    • The language field must match the expected ISO 639-1 code for localized text processing.
    • Stop the scheduled run if ingredientsText is completely absent across ten consecutive records.

    None of this proves a record is correct. It gives a scheduled Open Food Facts Scraper run defined points where it should stop instead of quietly passing bad data downstream.

    Frequently asked questions

    What is the result charge on the free tier?

    Result charges are $0.005 per result, which equals $5.00 per 1,000 results on the free plan. That is the highest tier, and paid Apify plans pay less. The run-start fee is charged every time a run starts, whether or not it returns results. Apify also bills platform usage on top of these charges.

    Why do some records lack nutritional values?

    Open Food Facts is a crowd-sourced catalog contributed by volunteers and brands, meaning completeness varies across products. To avoid sparse items, set the minProductCompleteness input filter to an integer between 0 and 100 to drop products below your desired threshold.

    How does the scraper handle regional API domains?

    Setting the country filter causes the Actor to route requests directly to regional hosts like us.openfoodfacts.org or fr.openfoodfacts.org. This approach ensures localized product information and avoids broad world API scans that can trigger CDN throttles.

    Can I retrieve product packaging images?

    Yes, every product entry contains an imageUrls object. It provides direct URLs pointing to photographs of the product front, ingredients list, and nutrition facts panel as uploaded to the Open Food Facts catalog.

    Can this Actor track retail supermarket prices?

    No, Open Food Facts does not store retail pricing history. It tracks product specifications, ingredients, and nutritional scores. For crowdsourced price tracking, use an alternative data collection tool dedicated to store pricing.

    Where to go next

    When you are ready to run it, open Open Food Facts Scraper on Apify; the free plan covers up to 1,000 results a month.

    Start with the Open Food Facts Scraper Actor page for the current input schema, pricing tier, and run history.

    Other Actors we maintain for related data:

    Related guides:

    Resources

    • Actor documentation, input schema, and pricing: verified against the published Actor on 2026-10-03.

    • Actor last updated by its maintainers on 2026-05-26.

    • Run outcome figures cover the 30 day public window ending 2026-10-03.

    • Open Food Facts Scraper on Apify

    Featured actors

    Open Food Facts Scraper

    Scrape Open Food Facts (3M+ grocery products). Search or filter by barcode, brand, category, store, label, country, manufacturer, URL. Returns nutrition, Nutri-Score, Eco-Score, NOVA group, ingredients, allergens, packaging, images

    Run on Apify ↗