E.Leclerc Drive API & Scraper
E.Leclerc Drive prices are set per store, so every call names one: `stores` turns a postal code, a town or coordinates into Drive stores with their store_id, `search` returns up to 200 products for a term in that store (shelf price, price per kg or litre, promotions, Ticket E.Leclerc offers, stock units, Nutri-Score, rating) with the site's category and filter facets and its own match count, `category` lists a whole product family of the store, and `product` returns the full sheet with the EAN barcode, brand, ingredients, allergens, nutrition table, VAT rate and storage advice.
🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.
In one minute, three Drive stores around Marseille priced 79 of 124, 38 of 60 and 21 of 67 shared products differently, which is why a store is required and never guessed.
What an E.Leclerc Drive field actually contains
Fields that read differently from how they look. Every row was measured against live responses on 2026-10-18.
| Field | What it holds |
|---|---|
| price | The shelf price of that Drive store in euros, VAT included. Search row and product sheet agreed for 18 of 18 products across 9 stores. |
| promo_price | Only for an immediate discount ("Avantage immédiat de 34%": 13.72 shelf, 9.06 promo). Null otherwise; never 0. |
| promotions | Immediate discounts, multi-buy lots ("Le 2ème à -60%", "Le 3ème est offert") and coupons, as the site words them. A multi-buy is a basket rule, so price stays the shelf price. |
| ticket_leclerc | "Recevez 20% en Ticket E.Leclerc": credit on the E.Leclerc loyalty card, for card holders only. It is not a discount on price and is kept apart from promotions. |
| stock_units | Units the store can sell online right now (Délisse milk 6x1L: 194 in one store, 228 in another). |
| unit_price, unit | Price per litre or kg as the site prints it (1.05 per l). |
| source_total, total_capped | The site's own match count. Its search list stops at 200 products ("lait": 550 matches, 200 listed); total_capped says so and the category facets reach the rest. |
| suggested_own_brand | The "Nous vous proposons aussi" own-brand products the site adds under the results. Kept apart: they are not matches. |
| gtin, nutri_score | EAN-13 from the product sheet (check digit verified) and the Nutri-Score letter the site shows. |
Brand is on the product sheet; search rows carry only the retailer brand badge (Marque Repère, Eco+).
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/leclerc-drive/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"store_id": "031301-031301",
"query": "lait"
}
}{
"ok": true,
"meta": {
"api": "leclerc-drive",
"endpoint": "search",
"mode": "live",
"latency_ms": 6239.1,
"record_count": 200,
"bytes": 956567,
"cache_hit": false,
"upstream_requests": 1,
"warnings": [
"The source lists at most 200 products per listing (550 match); narrow with a category filter from facets.categories to reach the others."
],
"charged_credits": 3,
"version": "1.0.0",
"request_id": "ea45fd57996c43aa",
"fetched_at": "2026-10-18T17:45:40.743Z"
},
"data": {
"products": [
{
"id": "2613",
"title": "Lait demi-écrémé UHT Délisse",
"pack_size": "Bouteille - 6x1L",
"retailer_brand": "Marque repère",
"price": 6.3,
"currency": "EUR",
"unit_price": 1.05,
"unit": "l",
"promo_price": null,
"promotions": [],
"ticket_leclerc": null,
"on_promotion": false,
"available": true,
"stock_units": 193,
"nutri_score": "A",
"labels": [],
"rating": 4,
"review_count": 149,
"anti_waste": false,
"category": {
"aisle_id": 284320,
"family_id": 284370,
"subfamily_id": 284377
},
"image": "https://fd1-photos.leclercdrive.fr/image.ashx?id=2970533&use=l&cat=p&typeid=i&compatible=webp",
"url": "https://fd1-courses.leclercdrive.fr/magasin-031301-Marseille-Sormiou/fiche-produits-2613-Lait-demi-ecreme-UHT-Delisse.aspx"
},
{
"id": "32452",
"title": "Lait de montagne Délisse",
"pack_size": "UHT Bouteille - 6x1L",
"retailer_brand": "Marque repère",
"price": 6.72,
"currency": "EUR",
"unit_price": 1.12,
"unit": "l",
"promo_price": null,
"promotions": [],
"ticket_leclerc": null,
"on_promotion": false,
"available": true,
"stock_units": 16,
"nutri_score": "A",
"labels": [],
"rating": 4.5,
"review_count": 10,
"anti_waste": false,
"category": {
"aisle_id": 284320,
"family_id": 284370,
"subfamily_id": 284377
},
"image": "https://fd1-photos.leclercdrive.fr/image.ashx?id=2929937&use=l&cat=p&typeid=i&compatible=webp",
"url": "https://fd1-courses.leclercdrive.fr/magasin-031301-Marseille-Sormiou/fiche-produits-32452-Lait-de-montagne-Delisse.aspx"
},
{
"id": "2612",
"title": "Lait demi-écrémé UHT Délisse",
"pack_size": "Brique - 6x1L",
"retailer_brand": "Marque repère",
"price": 5.94,
"currency": "EUR",
"unit_price": 0.99,
"unit": "l",
"promo_price": null,
"promotions": [],
"ticket_leclerc": null,
"on_promotion": false,
"available": true,
"stock_units": 204,
"nutri_score": "A",
"labels": [],
"rating": 4,
"review_count": 335,
"anti_waste": false,
"category": {
"aisle_id": 284320,
"family_id": 284370,
"subfamily_id": 284377
},
"image": "https://fd1-photos.leclercdrive.fr/image.ashx?id=2970539&use=l&cat=p&typeid=i&compatible=webp",
"url": "https://fd1-courses.leclercdrive.fr/magasin-031301-Marseille-Sormiou/fiche-produits-2612-Lait-demi-ecreme-UHT-Delisse-.aspx"
}
],
"returned": 200,
"suggested_own_brand": [],
"source_total": 550,
"source_total_unfiltered": null,
"total_capped": true,
"has_more": false,
"sort": "relevance",
"filters": [],
"facets": {
"categories": [
{
"filter": "4-1303220",
"name": "Laitier Oeufs Végétal",
"count": 159,
"children": [
"[trimmed-depth]",
"[trimmed-depth]",
"[trimmed-depth]"
]
},
{
"filter": "4-1303445",
"name": "Charcuterie Traiteur",
"count": 2,
"children": [
"[trimmed-depth]"
]
},
{
"filter": "4-536089",
"name": "Surgelés",
"count": 5,
"children": [
"[trimmed-depth]"
]
}
],
"filters": [
{
"group": "En ce moment",
"values": [
"[trimmed-depth]"
]
},
{
"group": "Marques",
"values": [
"[trimmed-depth]",
"[trimmed-depth]",
"[trimmed-depth]"
]
},
{
"group": "Labels qualité",
"values": [
"[trimmed-depth]",
"[trimmed-depth]",
"[trimmed-depth]"
]
}
]
},
"currency": "EUR",
"query": "lait",
"store": {
"store_id": "031301-031301",
"name": "Marseille Sormiou",
"store_defaulted": false
}
}
}What the E.Leclerc Drive API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| stores | Find E.Leclerc Drive stores near a point, a French postal code or a town. Give latitude+longitude, or postal_code, or town. The store_id it returns is what search, category and product take. | Pricing teams call stores to find E.Leclerc Drive stores near a point, a French postal code or a town. | latitude, longitude, postal_code, town |
| search | Search one E.Leclerc Drive store catalogue: shelf price, unit price, promotions, Ticket E.Leclerc offers, stock units, Nutri-Score, rating. Prices are those of that store. | Marketplace operators call search to search one E.Leclerc Drive store catalogue. | store_id, query |
| category | List one category (family) of an E.Leclerc Drive store: all its products with store prices. Family ids come from category.family_id of any product row, or from facets. | Catalog enrichment teams call category to list one category (family) of an E.Leclerc Drive store. | store_id, category_id |
| product | Full E.Leclerc Drive product sheet in one store: price, promotions, EAN, brand, Nutri-Score, ingredients, allergens, nutrition table, storage, VAT rate, images. | Retail analysts call product to get full E.Leclerc Drive product sheet in one store. | store_id, product_id |
Call search from your stack
curl -X POST https://api.reefapi.com/leclerc-drive/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"store_id":"031301-031301","query":"lait"}'import requests
r = requests.post(
"https://api.reefapi.com/leclerc-drive/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"store_id": "031301-031301",
"query": "lait"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/leclerc-drive/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"store_id": "031301-031301",
"query": "lait"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.leclerc-drive.search with {"store_id":"031301-031301","query":"lait"}.Who uses this API and why
- Compare E.Leclerc Drive prices between stores of one town or region.
- Track shelf prices, immediate discounts and multi-buy lots on a basket of 300 products.
- Watch Ticket E.Leclerc loyalty offers by product and store.
- Collect EAN, Nutri-Score, ingredients and nutrition tables for French grocery products.
- Check online stock of a product across nearby Drive stores.
Questions developers ask before integrating
Why do I have to give a store?
Because E.Leclerc Drive prices differ by store: in the same minute, Marseille Sormiou and Les Pennes-Mirabeau priced 79 of 124 shared products differently. Use the stores action to find the store_id.
How do I find a Drive store?
Call stores with a postal code (13001), a town (Vitrolles) or coordinates. Each store comes with its store_id, address postal code, distance and whether it also delivers.
Do I need an E.Leclerc account or card?
No. Prices are read as a visitor sees them. Ticket E.Leclerc offers are reported as information because they only apply to card holders.
How many products does a search return?
Up to 200, which is where the site's own list stops; source_total gives the full match count ("lait": 550). Filter by a category from facets.categories, or use category, to get the rest.
Do the filters really filter?
Yes. On "lait" in one store: promotions 26 products (all promoted), Marque Repère 132 of 132, Bio 89 of 89, Nutri-Score A 32 of 32, Nutri-Score A + Bio 11.
Is the barcode included?
Yes, on the product sheet: gtin is the EAN printed by the site, kept only when its check digit is valid.
How fresh is the data?
Every call reads the store live; nothing is cached.
What is the E.Leclerc Drive API?
E.Leclerc Drive API is a ReefAPI endpoint group for e.leclerc drive store prices as json: shelf and unit price per drive store, promotions, ticket e.leclerc offers, stock, ean, nutri-score and nutrition. It returns live JSON through POST requests under /leclerc-drive/v1.
Is the E.Leclerc Drive API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. E.Leclerc Drive calls use the same shared credit balance as every other ReefAPI engine.
Do I need an E.Leclerc Drive login or account?
No login to E.Leclerc Drive is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the E.Leclerc Drive data?
The page example is captured from a live stores call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the E.Leclerc Drive API use?
E.Leclerc Drive actions currently cost 1-3 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.
Can I call E.Leclerc Drive from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call leclerc-drive actions with the same key, credit pool and JSON envelope used by normal REST requests.
Is the E.Leclerc Drive API an E.Leclerc Drive scraper?
It is the managed alternative to a DIY E.Leclerc Drive scraper. Instead of building and maintaining your own scraper — proxies, headless browsers, captcha and constant breakage — you call one ReefAPI endpoint and get the same e.leclerc drive store prices as json: shelf and unit price per drive store, promotions, ticket e.leclerc offers, stock, ean, nutri-score and nutrition back as clean JSON.