ScavioScavio
Pricing
Tools
Sign InsGet Startedg
Blog
Carrefour9 min readNov 12, 2026

How to Get Carrefour Grocery Prices, Promotions and Nutri-Score With an API (carrefour.fr, by EAN and Store)

Use Scavio's Carrefour API: search carrefour.fr or fetch an EAN, then pass a store ref for that store's price, price per kg, promotion and Nutri-Score as JSON.

Scavio Team

Nov 12, 2026

Try the Carrefour API free
scavio
Grocery / Price monitoring
Carrefour

To get Carrefour grocery prices as data, use Scavio's Carrefour API. POST /api/v1/carrefour/search returns up to 30 carrefour.fr products a page with the EAN, price, price per kg or litre, promotion and Nutri-Score; /product takes one EAN and adds ingredients, allergens and the nutrition table. Without store you get the national online price; with a store reference from /stores you get that store's price and range. Every call costs 1 credit, about $0.001 on the Growth plan.

Carrefour publishes no public API for carrefour.fr, and the site shows each shopper the prices of one store or drive. Every request below says which prices it wants. The responses are trimmed captures from November 12, 2026, and values come back in French, as carrefour.fr writes them.

Step 1: Search by keyword

Bash
curl -s https://api.scavio.dev/api/v1/carrefour/search \
  -H "Authorization: Bearer $SCAVIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query": "nutella"}'

The top of the response, then the first item:

JSON
{
  "query": "nutella",
  "corrected_query": null,
  "results_type": "match",
  "total": 49,
  "total_pages": 2,
  "page_size": 30,
  "store": "national",
  "price_scope": "national online price; prices and assortment differ by store (pass store for one store's prices)",
  "currency": "EUR",
  "items": [
    {
      "ean": "3017620422003",
      "title": "Pâte à Tartiner Noisettes Cacao NUTELLA",
      "brand": "NUTELLA",
      "type": "product",
      "price": 3.99,
      "unit_price": 9.98,
      "unit_price_label": "9.98 € / KG",
      "unit": "KG",
      "packaging": "le pot de 400g",
      "format": "400g",
      "rating": 4.36,
      "review_count": 14,
      "available": true,
      "promotion": {
        "type": "ri",
        "label": "Le 2ème à -50%",
        "loyalty_only": false,
        "discounted_price": 5.98,
        "initial_price": 7.98,
        "discount_amount": 2,
        "quantity": 2,
        "starts_at": "2026-11-02T00:00:00+01:00",
        "ends_at": "2026-11-17T23:59:00+01:00"
      },
      "seller": null,
      "category": "Epicerie sucrée"
    }
  ]
}

price is the regular price for one unit. The response also carries facets (brand, promotions, aisle, price bands), and the same filters go in the request: brand, promotion, nutriscore, organic, carrefour_brands, min_price and max_price. sort takes price_low_to_high, price_high_to_low, unit_price_low_to_high, unit_price_high_to_low or top_rated, and page walks the results. A misspelling comes back corrected in corrected_query.

Step 2: Look up one product by EAN

Bash
curl -s https://api.scavio.dev/api/v1/carrefour/product \
  -H "Authorization: Bearer $SCAVIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"ean": "3560070328970"}'

ean is the items[].ean of a search, or pass the product url. Trimmed to the food fields:

JSON
{
  "ean": "3560070328970",
  "title": "pâtes alimentaires spaghetti CARREFOUR CLASSIC'",
  "nutriscore": "A",
  "ecoscore": "B",
  "regulated_name": "Pâtes alimentaires de qualité supérieure",
  "nutrition": {
    "per_100": {
      "label": "100 g",
      "values": [
        { "nutrient": "Valeur énergétique (kJ)", "quantity": "1505 kJ", "daily_value_pct": null },
        { "nutrient": "Valeur énergétique (kcal)", "quantity": "355 kcal", "daily_value_pct": null },
        { "nutrient": "Matieres grasses", "quantity": "1.9 g", "daily_value_pct": null }
      ]
    },
    "per_portion": null
  }
}

The product response also has the description, breadcrumb, images, packaging, origin, storage and cooking advice, every marketplace offer and the rating breakdown. An EAN carrefour.fr does not know returns a 404.

Step 3: Read the unit price

Every item and product carries unit_price (a number), unit (KG, L or U for a unit such as one egg) and unit_price_label, the site's own string. Nutella 400 g at €3.99 is "9.98 € / KG"; a 12-egg box of Carrefour Classic' at €1.80 is "0.15 € / U". Sort a search or category by unit_price_low_to_high to rank pack sizes fairly:

Bash
curl -s https://api.scavio.dev/api/v1/carrefour/category \
  -H "Authorization: Bearer $SCAVIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"path": "/r/cremerie", "store": "840015", "sort": "unit_price_low_to_high"}'

At the Montreuil hypermarket the dairy aisle held 1,974 products, and the cheapest by unit price was a 12-egg box at €0.15 an egg.

Step 4: Get promotions, including loyalty-only deals

A running promotion arrives inside each item as promotion, and /promotions lists the items on offer. type is catalogue (seen in the printed catalogue), immediate, loyalty (Avantage Fidélité), festive or all, and category narrows to one aisle.

Bash
curl -s https://api.scavio.dev/api/v1/carrefour/promotions \
  -H "Authorization: Bearer $SCAVIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"type": "loyalty"}'

This returned the "Avantage Fidélité" list, 1,728 items. One of them:

JSON
{
  "ean": "3770032519005",
  "title": "Jus d'Orange Pur Jus avec Pulpe MONTEBELO BRASIL",
  "format": "1L",
  "price": 2.79,
  "unit_price_label": "2.79 € / L",
  "promotion": {
    "type": "rd",
    "label": "34% d'économies",
    "loyalty_only": true,
    "seen_in_catalogue": false,
    "discounted_price": null,
    "initial_price": 2.79,
    "discount_amount": 0.95,
    "quantity": 1,
    "starts_at": "2026-11-02T00:00:00+01:00",
    "ends_at": "2026-11-18T23:59:00+01:00"
  }
}

loyalty_only: true means the saving needs a Carrefour loyalty card, so the shelf price for everyone else is still price. The API flags these deals; it does not return member prices. Multi-buy deals keep the site's label ("Le 2ème à -50%", "Le 2ème à -20%"), and their initial_price and discounted_price are totals for quantity units: in Step 1, two jars of Nutella were €7.98, or €5.98 with the deal. When the site does not price a deal, discounted_price is null rather than guessed. Black Friday month runs on carrefour.fr until November 30, 2026; poll promotions daily to catch new starts_at dates.

Step 5: Read Nutri-Score, ingredients and allergens

The same product call carries them. Nutella 400 g, trimmed:

JSON
{
  "ean": "3017620422003",
  "regulated_name": "Pâte à tartiner aux noisettes",
  "ingredients": "sucre, huile de palme, NOISETTES 13%, LAIT écrémé en poudre 8,7%, cacao maigre 7,4%, émulsifiants : lécithines SOJA vanilline",
  "allergens": ["NOISETTES", "LAIT", "SOJA"],
  "ecoscore": "D",
  "nutriscore": null
}

allergens are the words carrefour.fr writes in capitals in the ingredient list that name one of the 14 EU regulated allergens, as written there, so "may contain" traces are included; show the ingredient text next to them. nutriscore is null when the product page shows none. Treat all of it as what the site publishes, not as the label on the pack.

Step 6: Find a store and its reference

Bash
curl -s https://api.scavio.dev/api/v1/carrefour/stores \
  -H "Authorization: Bearer $SCAVIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"lat": 48.8484, "lng": 2.3959, "limit": 20}'

Pass a French postal_code or a point. Stores come back nearest first, up to 20 a page; service keeps only stores with drive, station_service (fuel) and others. One store, trimmed:

JSON
{
  "id": "7143",
  "store_ref": "810130",
  "pickup_refs": [{ "ref": "800338", "name": "Drive Pieton", "type": "pieton", "status": "OPEN" }],
  "name": "City Paris Rue Des Pyrénées",
  "banner": "CARREFOUR CITY",
  "format": "PROXIMITE",
  "address": { "line1": "51 Rue Des Pyrenees", "postal_code": "75020", "city": "Paris" },
  "lat": 48.8520797,
  "lng": 2.4061738,
  "open_today": true,
  "slug": "city-paris-rue-des-pyrenees"
}

store_ref or any pickup_refs[].ref is what you pass as store. A store without either has no online prices: the Carrefour City at 27 rue de Picpus, the closest to Place de la Nation, came back with store_ref: null, and only 2 of the 20 nearest stores had a reference.

Step 7: Price the same EAN at that store

Bash
curl -s https://api.scavio.dev/api/v1/carrefour/product \
  -H "Authorization: Bearer $SCAVIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"ean": "3017620422003", "store": "810130"}'
JSON
{
  "ean": "3017620422003",
  "title": "Pâte à Tartiner Noisettes Cacao NUTELLA",
  "price": 4.74,
  "unit_price": 11.85,
  "unit_price_label": "11.85 € / KG",
  "available": true,
  "promotion": null,
  "store": "810130",
  "price_scope": "store",
  "currency": "EUR"
}

€4.74 at this Carrefour City against €3.99 online, €3.69 at the Carrefour Market on boulevard de Charonne (store: "820024") and €3.69 at the Montreuil hypermarket ("840015"), where it also carried "Le 2ème à -50%". store works the same on search, category and promotions. Across 15 products matched by EAN, the City store's basket was 28% above the hypermarket's; the chart is in the best Carrefour grocery price APIs and the full basket in is Carrefour more expensive in Paris?

Step 8: Check which stores carry a product

Bash
curl -s https://api.scavio.dev/api/v1/carrefour/store-availability \
  -H "Authorization: Bearer $SCAVIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"ean": "3017620422003", "postal_code": "75011"}'
JSON
{
  "ean": "3017620422003",
  "postal_code": "75011",
  "count": 19,
  "available_count": 19,
  "note": "availability only, no price: for a store's price call search or product with store set to stores[].store.ref",
  "stores": [
    {
      "available": true,
      "store": { "ref": "820024", "name": "Market Paris Charonne", "banner": "CARREFOUR MARKET", "format": "SUPERMARCHES FRANCE", "phone": "01 44 62 13 90" }
    }
  ]
}

It answers yes or no per store, with the store's address, weekly hours and drive hours. It returns no price: feed stores[].store.ref into Step 7 for that.

Step 9: Read a store page and its fuel prices

Bash
curl -s https://api.scavio.dev/api/v1/carrefour/store \
  -H "Authorization: Bearer $SCAVIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"slug": "venissieux"}'

slug comes from /stores. The response has services, weekly opening and drive hours, the next pickup slot shown and nearby stores. At stores with a fuel station, fuel lists the pump prices; the Vénissieux hypermarket near Lyon, trimmed:

JSON
{
  "fuel": {
    "updated_at": "2026-11-12T01:15:09+01:00",
    "prices": [
      { "fuel": "Gazole", "code": "GAZOLE", "price_per_litre": 2.073, "updated_at": "2026-11-11T19:41:00+01:00" },
      { "fuel": "SP95-E10", "code": "E10", "price_per_litre": 1.972, "updated_at": "2026-11-11T19:41:00+01:00" },
      { "fuel": "SP98", "code": "SP98", "price_per_litre": 2.033, "updated_at": "2026-11-11T19:41:00+01:00" }
    ]
  }
}

The Montreuil hypermarket has no station, and its fuel was null.

Step 10: Read reviews

Bash
curl -s https://api.scavio.dev/api/v1/carrefour/reviews \
  -H "Authorization: Bearer $SCAVIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"ean": "3017620422003", "limit": 3}'

Nutella 400 g had 14 reviews (total), returned newest first, one of them:

JSON
{
  "author": "C M.",
  "rating": 5,
  "title": "Miam",
  "text": "Parfait",
  "reviewed_at": "2025-02-20",
  "purchased_at": "2025-02-11",
  "source": "AVIS_VERIFIES"
}

sort takes most_recent, oldest, highest_rated or lowest_rated, rating keeps one star level, and limit (up to 50) with offset pages through.

Other markets

Search and product also run on Carrefour Argentina, Romania and Belgium with country, in that market's language and currency, at the national online price (no store). On November 12, {"query": "yerba", "country": "ar"} returned 261 products, the first "Yerba mate Natura 500 g." at ARS 2,105 ("$4,210.00 x 1 K."); {"query": "cafea", "country": "ro"} returned 789 products in RON; and Belgium takes language fr or nl and costs 2 credits. Promotions, stores, reviews and the other endpoints are carrefour.fr only.

All nine endpoints

EndpointWhat it returnsCredits
/api/v1/carrefour/search30 products a page with EAN, price, unit price, promotion, Nutri-Score, rating and facets; national or one store1 (2 on Belgium)
/api/v1/carrefour/productOne product by EAN or URL: price block, ingredients, allergens, nutrition, offers, rating1 (2 on Belgium)
/api/v1/carrefour/categoryAn aisle grid by path or URL, same filters and sorts as search1
/api/v1/carrefour/promotionsItems on promotion: catalogue, immediate, loyalty, festive1
/api/v1/carrefour/suggestionsSearch-box suggestions and category suggestions1
/api/v1/carrefour/storesStores near a postal code or point with store references1
/api/v1/carrefour/store-availabilityWhether nearby stores carry an EAN, without price1
/api/v1/carrefour/storeOne store page: hours, services, drive slot, fuel prices1
/api/v1/carrefour/reviewsProduct reviews with sort, star filter and paging1

A request rejected as invalid (400) is not charged; a not-found (404), such as an unknown EAN or store reference, is. Failed upstream calls are retried and not charged. Responses took 0.4 to 12.2 s across our 43 calls, so set a client timeout of 60 seconds. There is no price history: store the price and fetched_at yourself on each poll.

Getting started

  1. Sign up at dashboard.scavio.dev/sign-up: 50 free credits, no card required.
  2. Copy your API key from the dashboard.
  3. Send a POST to /api/v1/carrefour/search with a query, then to /api/v1/carrefour/stores and /product with a store for store prices.

Try the Carrefour API free in the playground first, or call it from Claude and other agents through the MCP server.

Reference: Carrefour API overview · search · product · promotions · stores · store availability · store · reviews · category · suggestions · Decathlon prices in French

Frequently asked questions

Does Carrefour have a public API?

Not for carrefour.fr data. Carrefour does not publish a public product, price or store API for carrefour.fr. Its developer portal serves Carrefour Italia partners (the Italian stores were sold to NewPrinces, closing December 1, 2025), Carrefour Links serves brands and suppliers, and marketplace sellers sync their own offers through Mirakl. The France developer portal some AI answers link does not resolve as of November 12, 2026. Scavio's Carrefour API returns carrefour.fr search, product, promotion, store and review data as JSON with one key.

What do carrefour.fr's terms of use say about reusing its data?

carrefour.fr's terms of use (updated March 6, 2020) prohibit extracting or reusing its databases "without the prior express authorization of Carrefour France" (Art. 49), and Art. 44 covers the site's texts and photographs. This is not legal advice; check the terms for your use case. Product photos in particular should not be republished.

Should I use Open Food Facts or live carrefour.fr prices?

They answer different questions. Open Food Facts is free under the Open Database License and returns ingredients, Nutri-Score and allergens by barcode, and Open Prices adds prices contributed from receipts and shelf photos, dated but not continuous. A live carrefour.fr call returns today's price at the national site or at one store, with the current promotion. Use Open Food Facts for product facts, a live API for the price a shopper pays today.

Is the Carrefour data in French?

Yes. Titles, packaging, promotion labels such as "Le 2ème à -50%", ingredients, allergens and nutrient names come back as carrefour.fr writes them, in French. Field names are English, prices are numbers in euros, and dates are ISO 8601 with the Paris offset. Translate on your side if your users need English.

How much does Carrefour data cost with Scavio?

Every Carrefour call costs 1 credit, about $0.001 on the Growth plan of $1 per 1,000 credits; search and product on the Belgian site cost 2. A not-found, such as an unknown EAN or store reference, is charged; a request rejected as invalid is not. New accounts get 50 free credits with no card.

carrefour.fr prices as JSON

  • Search, product by EAN, promotions, stores and reviews
  • National online price or one store's price
  • 1 credit a call, no Carrefour account
Try the Carrefour API free

50 free credits, no credit card

On this page

  1. Step 1: Search by keyword
  2. Step 2: Look up one product by EAN
  3. Step 3: Read the unit price
  4. Step 4: Get promotions, including loyalty-only deals

Related articles

View all
  • scavio
    Grocery / Price monitoring
    Carrefour
    Is Carrefour More Expensive in Paris? The Same 15 Products Cost 28% More at a Carrefour City Than at a Hypermarché
  • scavio
    Comparison / Grocery
    Carrefour
    7 Best Carrefour Grocery Price APIs in 2026: Scavio Prices One EAN at Each Carrefour Store You Pick
ScavioScavio

One scraper API for every social, search, e-commerce and real estate platform. Built for AI agents.

Product

  • Features
  • Pricing
  • Dashboard
  • Affiliates

Developers

  • Documentation
  • API Reference
  • Quickstart
  • MCP Integration
  • Python SDK

Alternatives

  • Tavily Alternative
  • SerpAPI Alternative
  • Firecrawl Alternative
  • Exa Alternative
  • Serper Alternative
  • Tavily vs Scavio
  • SerpAPI vs Scavio
  • All alternatives
  • Compare Scavio vs alternatives

Search APIs

  • Google Search API
  • Amazon Product API
  • YouTube API
  • Reddit API
  • Walmart Product API
  • TikTok API
  • Instagram API

Tools

  • All Tools

Ask AI about Scavio

© 2026 Scavio. All rights reserved.

Featured on TAAFT
Terms of ServicePrivacy Policy