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
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:
{
"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
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:
{
"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:
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.
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:
{
"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:
{
"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
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:
{
"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
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"}'{
"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
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"}'{
"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
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:
{
"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
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:
{
"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
| Endpoint | What it returns | Credits |
|---|---|---|
/api/v1/carrefour/search | 30 products a page with EAN, price, unit price, promotion, Nutri-Score, rating and facets; national or one store | 1 (2 on Belgium) |
/api/v1/carrefour/product | One product by EAN or URL: price block, ingredients, allergens, nutrition, offers, rating | 1 (2 on Belgium) |
/api/v1/carrefour/category | An aisle grid by path or URL, same filters and sorts as search | 1 |
/api/v1/carrefour/promotions | Items on promotion: catalogue, immediate, loyalty, festive | 1 |
/api/v1/carrefour/suggestions | Search-box suggestions and category suggestions | 1 |
/api/v1/carrefour/stores | Stores near a postal code or point with store references | 1 |
/api/v1/carrefour/store-availability | Whether nearby stores carry an EAN, without price | 1 |
/api/v1/carrefour/store | One store page: hours, services, drive slot, fuel prices | 1 |
/api/v1/carrefour/reviews | Product reviews with sort, star filter and paging | 1 |
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
- Sign up at dashboard.scavio.dev/sign-up: 50 free credits, no card required.
- Copy your API key from the dashboard.
- Send a POST to
/api/v1/carrefour/searchwith a query, then to/api/v1/carrefour/storesand/productwith astorefor 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.