E.Leclerc Scraper: Local Prices, Stock & Promotions avatar

E.Leclerc Scraper: Local Prices, Stock & Promotions

Pricing

from $1.20 / 1,000 product results

Go to Apify Store
E.Leclerc Scraper: Local Prices, Stock & Promotions

E.Leclerc Scraper: Local Prices, Stock & Promotions

Scrape E.Leclerc France (e.leclerc) grocery and retail products. Search by keyword or category, or paste product and category links. Pick a store by postal code so prices and stock are the real ones for that store. Returns price, unit price, stock, promotions, rating and images.

Pricing

from $1.20 / 1,000 product results

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

an hour ago

Last modified

Share

E.Leclerc Product Scraper

Scrape products from E.Leclerc France (e.leclerc) — the grocery / general retail catalogue. Search by keyword/category, or paste product / category / search links. Every product comes back as one flat record with title, description, images, store-scoped price, unit price, a genuine promotion (never a loyalty cashback disguised as one), stock and — where the storefront has one — an aggregate rating.

⚠️ E.Leclerc is store-scoped — read this first

Every E.Leclerc store prices, promotes and stocks its own catalogue independently. This actor requires you to choose one store — by postal code or by an exact store sign code — and every result in a run reflects that one store. There is no "national price": two different stores can (and often do) show a different price, promotion, or stock level for the exact same product. Every record also carries storeSignCode, storeName and storePostalCode so results are always traceable to a specific store.

What you can do

  • Search by keyword or category — e.g. lait (milk), lessive (laundry detergent) — with price, promotion, stock and rating filters, plus sorting. A keyword that matches one of the storefront's own categories is served that category's full listing automatically. You can also paste one or more category links directly.
  • Paste links or EANs — mix product links, bare EAN barcodes, category links and search-result links in one list and let the actor route each entry.
  • Resume & recurring updates — turn on Incremental mode to get only NEW, UPDATED, and REAPPEARED products on every scheduled run, or resume one specific interrupted crawl with resumeFromRunId.

Input

FieldDescription
Postal codeA French postal code. The run picks the nearest Hyper/Super/Express E.Leclerc store to it.
Store sign codeOptional exact-store override (e.g. copy storeSignCode from a previous run's output to reproduce it exactly). Wins over Postal code when both are set.
Modesearch or url.
Search keywordsKeywords to search (search mode).
Category linksE.Leclerc category page links to browse, e.g. https://www.e.leclerc/cat/lessives-marque-repere (search mode).
E.Leclerc links or EANsProduct links, bare EAN barcodes, category links, and search-result links to scrape directly, mixed freely (url mode).
Sort byRelevance, price ↑/↓, unit price ↑/↓, or name. Applied over the collected products.
Minimum average ratingKeep only products rated at least N stars.
Only on promotionKeep only products with a genuine reduced price at your store (never a loyalty cashback).
Only in stockKeep only products currently in stock at your store.
Min / Max price (EUR)Keep only products within a price range, at your store.
Fetch product detailsFetch each product's page for a human-readable category breadcrumb. Title, description, images, price, unit price, promotion, stock and rating are always included regardless of this toggle. On by default.
Max productsThe run's cap on how many products to return. Default 20; 0 = unlimited.
Max pages per keyword / category / linkResult pages walked per keyword / category / link. Default 0 = unlimited — walks every page until Max products is hit or a page repeats no new products.
Resume from a previous runContinue one specific previous run/dataset: products already collected there are skipped. For recurring daily monitoring, use Incremental mode instead — see "Resume & recurring updates" below.
Incremental changes for scheduled runsDaily/recurring monitoring of this same store + search. First run returns everything as NEW; later runs return only NEW/UPDATED/REAPPEARED by default. See "Resume & recurring updates" below.
State keyOptional name for a monitoring campaign. Auto-derived from your store/search/detail settings when left empty.
Emit unchanged productsIncremental mode only. Also return products unchanged since the last run, marked UNCHANGED. Adds and bills extra rows.
Emit expired productsIncremental mode only. Also return products from a previous run no longer found, marked EXPIRED, once a run has fully scanned the search. Adds and bills extra synthetic rows.
ProxyApify Proxy — a datacenter exit by default, which is the cheaper tier.
mcpConnectorsOptional MCP connectors to export results into (Notion, Linear, Airtable, Apify).
notionParentPageUrlNotion connector only: page under which item pages are created.
maxNotifyListingsCap on items exported to each connector per run. Does not affect the dataset.

Output

One record per product, scoped to your chosen store. Example (illustrative values):

{
"productId": "3700281702286",
"ean": "3700281702286",
"title": "ULTRA-HYDRATANT Lait Corps 500 ml",
"brand": "Topicrem",
"description": "L'Ultra-Hydratant lait corps Topicrem est une émulsion onctueuse...",
"images": ["https://media.e.leclerc/3700281702286_1"],
"categoryPath": "Crèmes hydratantes/nourrissantes > Topicrem > Les Essentiels",
"price": 11.04,
"currency": "EUR",
"unitPrice": null,
"wasPrice": null,
"onPromotion": false,
"loyaltyCashbackPercent": 30.0,
"loyaltyCashbackLabel": "Ticket E.Leclerc avec la carte",
"inStock": true,
"stock": 537,
"rating": 4.8,
"reviewCount": 28,
"reviews": [],
"storeSignCode": "1375",
"storeName": "Montparnasse",
"storePostalCode": "75014",
"canonicalUrl": "https://www.e.leclerc/fp/ultra-hydratant-lait-corps-500-ml-3700281702286",
"searchMode": "search",
"scrapedAt": "2026-08-03T00:00:00Z"
}

Was-price, discounts and loyalty cashback. wasPrice/discountAmount/ discountPercent are populated only when the storefront itself carries a genuine prior price for that exact item — they are never derived from a "Ticket E.Leclerc avec la Carte" style loyalty cashback (paid in full now, a percentage credited back later on your loyalty card, not a price cut) or from the storefront's own original-price field, which was observed to be an unreliable reference value (not a genuine prior price on the products checked). A genuine loyalty cashback still surfaces — separately, as loyaltyCashbackPercent / loyaltyCashbackLabel — but never sets onPromotion or a was-price. On the products sampled while building this actor, no genuine was-price/markdown was found live; this is reported honestly (wasPrice: null) rather than fabricated.

Nutrition / ingredients / specifications. E.Leclerc's product data does not expose a dedicated nutrition table, ingredients list, or specifications block anywhere in the routes this actor uses (verified across multiple product categories). Composition text, when a product's description mentions it, is part of the free-text description field.

Ratings & reviews. Products carry a genuine aggregate rating (rating, reviewCount) where the storefront has one. Individual customer review text is served by a client-side widget this actor does not drive, so the reviews array is present but empty on rated products, and rating fields are simply absent on products with no rating (never fabricated zeros).

Incremental mode only. When incrementalMode is on, every returned record also carries:

FieldDescription
changeTypeNEW | UPDATED | UNCHANGED | REAPPEARED | EXPIRED
changedFieldsTop-level fields that changed since last seen; non-empty only for UPDATED
firstSeenAtWhen this product was first observed by this monitoring campaign
lastSeenAtWhen this product was last observed

Resume & recurring updates

There are two different things here — pick the one that matches what you're doing:

NeedUse
A crawl stopped and should continueresumeFromRunId / automatic checkpoint recovery
Run the same store + search every day and receive only changesincrementalMode
Keep separate daily campaigns for similar searchesdistinct stateKey values
Run a normal full snapshotleave both off

Resume (resumeFromRunId) continues one specific interrupted or previous large crawl: paste a run ID or dataset ID and this run skips products already collected there, returning only the remaining new products. An automatic same-run checkpoint also protects against platform migrations/Resurrects without any input needed.

Incremental mode (incrementalMode) is for a schedule (for example, daily): the actor remembers the previous run of the same store + search by itself, so you never paste a run ID. The first run returns everything as NEW. Later runs return only NEW, UPDATED, and REAPPEARED products by default — duplicates and unchanged products are suppressed (and not charged). A different store, even with the identical search, always gets its own state — prices/stock at one store never look like a "change" at another. Set stateKey to name or deliberately share a monitoring campaign.

Scheduled-run example — same store + search, run daily:

Day 1 (first run ever for this search):

{ "postalCode": "75014", "mode": "search", "queries": ["lait"], "incrementalMode": true }

→ every product comes back with "changeType": "NEW".

Day 2 (the schedule fires again, identical input):

{ "postalCode": "75014", "mode": "search", "queries": ["lait"], "incrementalMode": true }

→ products whose price/promotion/stock/etc. changed at that store come back as "changeType": "UPDATED" with changedFields listing what changed, brand-new products come back as "changeType": "NEW", products that vanished and came back come back as "changeType": "REAPPEARED" — and products that are still there, unchanged, are not returned at all (suppressed, not charged) unless emitUnchanged is on.

Proxy & connection

Apify Proxy is optional. A datacenter connection is the default because it is the cheaper tier and is sufficient here — you do not need to enable residential for this actor.

Send results into your apps (MCP connectors)

Optionally pipe results into the apps you already use through Model Context Protocol (MCP) connectors. Authorize a connector once under Apify, Settings, Integrations, then select it in the mcpConnectors field. Each connector receives a condensed, human-readable summary per product (title plus key fields), while the complete record always stays in the Apify dataset. For Notion, set notionParentPageUrl to the page the item pages should be created under. Supported connectors: Notion, Linear, Airtable, and Apify. Leave the field empty to skip; it never changes the dataset output.

Notes

  • Search and category result pages are walked forward one page at a time until Max products is reached, the storefront runs out of pages, or (with the default unlimited Max pages) a page repeats no new products.
  • A search keyword that the storefront recognizes as a category is followed to that category's own listing automatically (the storefront's own behavior); the returned searchMode still reports how you asked for it.
  • Long runs survive an Apify server migration or a manual Resurrect: progress is checkpointed, so a resumed run continues without re-scraping or double-charging products already collected.
  • searchMode on each record reports how it was found: search, category, or product when it came from a pasted product link or EAN.
  • Prices are in EUR. Duplicate products (same EAN) are returned once per run.