E.Leclerc Scraper icon

E.Leclerc Scraper

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…

Start using this actor on Apify ↗Need a custom scraper?Contact us ↗

E.Leclerc Scraper at a glance

E.Leclerc Scraper is a ready-to-run Apify actor from abotapi for collecting ecommerce data. Its documented output includes title, change type (incremental mode), brand, price and was, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $2.00 per 1,000 results on the Apify Free plan and from $1.20 on paid plans, with smaller per-run or optional feature charges listed on Apify.

Runs on
Apify cloud: console, API, schedules and integrations
Data type
Ecommerce, Automation, Developer Tools
Region
Europe
Pricing
$2.00 per 1,000 results (Free plan), from $1.20 on paid plans
Output
Documented below · JSON, CSV, Excel
Inputs
25 options

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.

What E.Leclerc Scraper can do

  • Two ways to find products. Search by keyword and/or category, then filter and sort the results, or paste product, category and search-result links, or bare EAN barcodes (an EAN lookup, one barcode per line, no link needed), mixed freely in one list.
  • One flat record, one batched call. Title, description, images, price, promotion and stock all come from a single price call per product, always included, never gated behind an extra fetch. Unit price and brand come from search and category result pages, so a pasted product link or bare EAN does not carry them.
  • Genuine promotions only. A "Ticket E.Leclerc" loyalty cashback, paid in full now and credited back later on the loyalty card, is reported separately and never disguised as a discounted price.
  • Reproducible store attribution. Choose a store by postal code or an exact store sign code, and every record is stamped with it, so a run's results stay attributable and repeatable. Price and stock do not change by store, see the FAQ for how that was measured.
  • Built for schedules. Incremental mode returns only new and changed products on recurring runs, and a run fails loudly instead of silently returning nothing when a store cannot be resolved.
  • Resume and checkpoint protection. Continue one interrupted crawl with a pasted run id, and a long run picks up after the last completed keyword, category or link on a platform migration.

Choose what to collect

These inputs let you configure E.Leclerc Scraper - Local Prices, Stock & Promotions. Open the actor on Apify to enter your values and review the current options.

Supported input fields
InputWhat it controls
modestring · requiredChoose 'search' for keywords and/or category links with filters, or 'url' to scrape pasted E.Leclerc links -- product links, category links, search-result links and bare product barcodes (EAN) are all accepted.

Choices: search, url

postalCodestringA French postal code (e.g. 75014). The run picks the nearest Hyper/Super/Express E.Leclerc store to this postal code and stamps it onto every result. Note: price, promotion and stock are the storefront's national values and do NOT change with the store (measured live 2026-09-04). Ignored if Store sign code is also set.
storeSignCodestringOptional. Pin an exact E.Leclerc store by its 4-digit sign code instead of resolving one from a postal code -- useful to reproduce a previous run exactly (every result carries its store's sign code as storeSignCode, so you can copy it from there). It changes the stamp and the incremental baseline, not the price/stock values. Overrides Postal code when set.
queriesarrayOne or more keywords to search, for example 'lait' (milk) or 'lessive' (laundry detergent). Each keyword is searched separately. A keyword that matches one of the storefront's own categories is served that category's full listing automatically (e.g. 'lessive' resolves to the Laundry detergents category).
categoriesarrayOne or more E.Leclerc category page links, each walked separately across its result pages. To get one: open e.leclerc, browse to the category you want, and copy the address -- a category address looks like https://www.e.leclerc/cat/lessives-marque-repere .
urlsarrayOnly used when mode = url -- ignored in search mode. Mix freely: product pages under /fp/-, category pages under /cat/, search-result pages under /recherche?q=..., or bare EAN barcodes such as 3518646124167 (EAN lookup: one barcode per entry, no link needed). Multiple entries supported.
sortBystringHow to order the collected products. Applied over the products gathered in the run before they are returned.

Choices: relevance, price_asc, price_desc, unit_price_asc, unit_price_desc, name

Show 18 more inputs
More input fields
InputWhat it controls
minRatingstringOptional. Only keep products whose average rating is at least this many stars. Products with no rating are excluded when this is set.

Choices: 0, 3, 4, 5

onPromotionOnlybooleanOptional. Keep only products with a genuine reduced price versus a real prior price. A "Ticket E.Leclerc" loyalty cashback (paid back later on your card, not a price cut) never counts as a promotion here.
inStockOnlybooleanOptional. Keep only products the storefront reports as currently in stock.
minPriceintegerOptional. Only keep products priced at or above this amount.
maxPriceintegerOptional. Only keep products priced at or below this amount.
fetchDetailsbooleanFetch each product's detail page for a human-readable category breadcrumb. Title, description, images, price, unit price, promotion, stock and rating are always included regardless of this toggle -- they come from the same call as price, at no extra cost. Turn on for the friendlier breadcrumb; turn off for a faster run when you don't need it.
maxReviewsPerProductintegerCustomer reviews to collect for each product that has reviews (reviewer, rating, date, title, text, shop replies, helpful votes), 10 per page. 0 turns reviews off. Capped at 1000 per product to bound run time.
maxItemsintegerMaximum number of products to return across the whole run. This is the run's cap. Use 0 for unlimited. Capped at 100000.
maxPagesintegerMaximum result pages walked per keyword / category / link. 0 = unlimited (walk all pages) -- the run then stops only at Max products or when a page repeats no new products.
resumeFromRunIdstringPaste a previous run ID or dataset ID to continue a large crawl of products without returning or charging for products already collected there. Use this after an interrupted run, or when continuing a product catalogue pull in another run. For recurring daily monitoring of the same search, use Incremental mode below instead.
incrementalModebooleanTurn this on for daily or recurring monitoring. The first run returns all matching products as NEW. Later runs normally return only NEW, UPDATED, and REAPPEARED products. A product is UPDATED when any returned field changed (price, was-price, promotion, stock, title, brand, images, description and so on); the Changed fields column names which. These fields are returned but never compared: the scrape timestamp (scrapedAt), the catalogue metadata lastUpdateDate, logisticClassCode, color, creationDate and publicationDate, the seller-offer count offersTotal, and promotionStartDate (a promotion change still shows through promotionEndDate, price and was-price); also any field names you list in "Ignore fields when detecting changes" below. Turn on "Emit unchanged" or "Emit expired" only when you also want those products returned (and billed). State is kept separately per store, search/category/URL and detail-mode setup -- use State key to name or deliberately share a monitoring campaign. To continue one specific interrupted run instead, use Resume from a previous run above.
stateKeystringOptional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently-configured runs. Leave empty to let the actor derive a key automatically from the store/search/category/URL and detail settings -- different stores or searches then never mix state with each other.
emitUnchangedbooleanOff by default. Turn on to also return products that have not changed since the last run, marked UNCHANGED. This returns -- and bills -- extra rows you already have, so leave it off unless you specifically want the full snapshot every run.
emitExpiredbooleanOff by default. Turn on to also return products that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked search -- not when Max products capped it or when Resume was used. This returns -- and bills -- extra synthetic rows, so leave it off unless you need expiry tracking.
ignoreFieldsForChangesarrayOptional. Field names to leave out of change detection, so a field that moves without the product really changing does not mark it UPDATED. Always ignored: the scrape timestamp (scrapedAt), the catalogue metadata lastUpdateDate, logisticClassCode, color, creationDate and publicationDate, the seller-offer count offersTotal, and promotionStartDate (a promotion change still shows through promotionEndDate, price and was-price). Use a top-level name such as reviewCount or rating, or a dotted path (name.key) for a key nested inside an object or list. Ignored fields are still returned in the output; they just never trigger UPDATED or appear in Changed fields.
mcpConnectorsarrayOptionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify, Settings, API & Integrations, then select it here. Notion gets a rich page-per-item export; other connectors get a best-effort write/digest. Leave empty to skip; never changes the dataset output. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com).
notionParentPageUrlstringURL or id of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors.
maxNotifyListingsintegerCap on items written to each connector per run. Does not affect the dataset.

Fields in the output

The documented dataset includes the fields below. Availability can depend on the source page and selected mode.

titleTitle
changeTypeChange type (incremental mode) (text)
brandBrand
pricePrice
wasPriceWas
unitPriceDisplayUnit price
onPromotionOn promotion (boolean)
inStockIn stock (boolean)
eanEAN
ratingRating
reviewCountReviews
storeNameStore
Show 27 more fields
storeSignCodeStore sign code
productIdProduct ID (EAN)
canonicalUrlURL (link)
changedFieldsChanged fields (incremental mode) (array)
firstSeenAtFirst seen (incremental mode) (date)
lastSeenAtLast seen (incremental mode) (date)
discountAmountdiscountAmount
discountPercentdiscountPercent
currencycurrency
unitPriceunitPrice
unitPriceUnitunitPriceUnit
promotionLabelPromotion
promotionStartDatePromotion starts (date)
promotionEndDatePromotion ends (date)
loyaltyCashbackPercentCashback %
loyaltyCashbackLabelCashback
availabilityStatusavailabilityStatus
descriptionDescription
imagesImages (array)
categoryPathCategory path
reviewIdreviewId
reviewerReviewer
reviewRatingRating
reviewDateDate
reviewTitleReview title
reviewTextReview
reviewVerifiedBuyerVerified buyer (boolean)

Example output

An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.

{
  "productId": "3661112223334",
  "ean": "3661112223334",
  "title": "Lessive liquide 40 lavages",
  "brand": "Marque Repere",
  "description": "Lessive liquide concentree pour un lavage efficace au quotidien.",
  "descriptionHtml": "<p>Lessive liquide concentree pour un lavage efficace au quotidien.</p>",
  "images": [
    "https://media.e.leclerc/3661112223334_1"
  ],
  "categoryPath": "Entretien > Lessives > Lessives liquides",
  "price": 8.49,
  "currency": "EUR",
  "unitPrice": 0.21,
  "unitPriceUnit": "lavage",
  "unitPriceDisplay": "0.21 EUR / lavage",
  "wasPrice": 9.99,
  "discountAmount": 1.5,
  "discountPercent": 15,
  "onPromotion": true,
  "availabilityStatus": "in-stock",
  "inStock": true,
  "stock": 214,
  "rating": 4.3,
  "reviewCount": 112,
  "reviews": [],
  "storeSignCode": "1375",
  "storeName": "Montparnasse",
  "storePostalCode": "75014",
  "canonicalUrl": "https://www.e.leclerc/fp/lessive-liquide-40-lavages-3661112223334",
  "searchMode": "search",
  "source": "listing",
  "scrapedAt": "2026-09-15T08:00:00Z"
}

Ways to use this data

  • Grocery price monitoring: track price, promotion and stock changes for a shopping list of products on a recurring schedule.
  • Category and catalogue research: pull a full category listing, for example laundry detergents, with ratings and unit prices for assortment analysis.
  • Promotion tracking: filter for products currently on a genuine promotion, kept separate from loyalty cashback offers.
  • Competitive and market intelligence: compare E.Leclerc's national price and promotion for a list of EANs against other retailers.
  • Product catalogue enrichment: pull title, description, images and a category breadcrumb for a list of EANs to enrich an existing catalogue.

Before you run

Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.

Questions about this actor

What data does E.Leclerc Scraper return?

The documented output for E.Leclerc Scraper includes title, change type (incremental mode), brand, price, was, unit price, on promotion and in stock. Availability of each field depends on the source page and the selected mode.

How much does E.Leclerc Scraper cost?

It costs $2.00 per 1,000 results on the Apify Free plan and from $1.20 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.

Can I get only new or changed products on a schedule?

Yes. Schedule the actor from the Schedules tab and turn on Incremental changes for scheduled runs. Each run then returns only new and updated products, and unchanged ones are not billed. A product only comes back as REAPPEARED if an earlier run had Emit expired products on and had already marked it EXPIRED; turning emitExpired on for the first time will not retroactively produce REAPPEARED rows.

Why did my run fail instead of returning an empty dataset?

If the postal code or store sign code you provided cannot be resolved to a real E.Leclerc store, the run stops with a clear message instead of silently returning nothing. Check the code and try again. If the store resolves but no products match your keywords, links or filters, the run finishes normally with an empty dataset and a status message explaining why.

Can I use it with AI agents or MCP?

Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.

Ready to collect with E.Leclerc Scraper?

Run it on Apify with your own input and export the results as JSON, CSV or Excel.