LeroyMerlin.es Scraper at a glance
LeroyMerlin.es Scraper is a ready-to-run Apify actor from abotapi for collecting ecommerce data. Its documented output includes product id, sku, product, brand and category, 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.00 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.00 on paid plans
- Output
- Documented below · JSON, CSV, Excel
- Inputs
- 24 options
Scrape Leroy Merlin Spain (leroymerlin.es) DIY and home-improvement products: price, strike-through original price and discount, seller identity (Leroy Merlin vs marketplace) with every competing offer, stock, rating and individual reviews. Search by keyword/category or paste product/listing links.
What LeroyMerlin.es Scraper: Products, Prices, Sellers & Reviews can do
- Was-price and discount, structured, not scraped from a badge. When a product is marked down, both the current and original price come back plus the discount amount and percentage. Full-price products carry null, never a fabricated discount.
- Marketplace transparency. Leroy Merlin sells both directly and through third-party sellers on the same product page. Every record identifies the seller (Leroy Merlin vs marketplace) and, with detail on, lists every competing offer for that product, price, stock and delivery time per seller.
- Reviews straight from the product page. Overall rating, review count, and individual customer reviews (author, date, rating, body) come from the page itself, not a third-party review vendor.
- Two ways in. Keyword or category search with the site's own price, rating, promotion and seller filters and sort, or paste any product or listing link and let pagination continue automatically.
- Filters that actually narrow, not just trim afterward. Price, rating, promotion and seller filters are checked while pages are walked, so a small item cap still finds enough matching products instead of stopping on an unlucky first page.
- A sort you can trust. Price sort is re-applied after detail enrichment on the exact price that ships, so within each search or pasted listing link, row order and price values never disagree.
Choose what to collect
These inputs let you configure LeroyMerlin.es Scraper: Products, Prices, Sellers & Reviews. Open the actor on Apify to enter your values and review the current options.
| Input | What it controls |
|---|---|
modestring · required | 'search' finds products by keyword and/or a leroymerlin.es category path, with price/rating/promotion/seller filters and the site's own sort. 'url' scrapes any product or listing (search/category) page URL you paste, walking pagination forward automatically. |
searchTermstring | Free-text keyword, e.g. 'taladro' or 'grifo cocina'. Leave empty and use Category only below to browse a category without a keyword. |
categorystring | A leroymerlin.es catalog category path (copy it from the site's own breadcrumb links or a category URL), a plain category name such as 'Taladros de batería' also works but only if it matches the site's own slug; a name that matches no listing logs a warning. Example path: 'herramientas/herramientas-electricas-portatiles/herramientas-electricas-para-taladrar-atornillar/taladros/taladros-de-bateria'. Ignored when Search keyword is set -- fill in exactly one of the two. |
sortBystring | leroymerlin.es's own sort, applied whether you run a keyword/category search or paste a listing URL. The site keeps one sponsored slot pinned regardless of sort; every other item comes back correctly ordered by your chosen sort. |
minPricenumber | Only return products priced at or above this amount, in euros. |
maxPricenumber | Only return products priced at or below this amount, in euros. |
minRatingnumber | Only return products whose average rating is at least this many stars (0-5). Rating is already present on every listing card, no detail fetch required. |
Show 17 more inputs
| Input | What it controls |
|---|---|
onPromotionOnlyboolean | Keep only products currently showing the site's own strike-through original price and discount. |
sellerFilterstring | Narrow to products sold directly by Leroy Merlin, or only marketplace (third-party) offers. 'Any' keeps both. |
urlsarray | Only used when mode = url -- ignored in every other mode. Paste one or more product pages (under /productos/-.html), category listing pages (under /productos//), or search result pages (/search?q=...). Pagination continues forward automatically from any ?p= already present. Left untouched, this field scrapes one example of each shape (a keyword search, a category listing and a product page). |
fetchDetailsboolean | Adds EAN, description, hero image, breadcrumb category path, stock/delivery, and every competing marketplace offer (price, stock, delivery per seller) from the product page. Current price, was-price/discount, rating and seller identity are already included without this toggle. |
fetchReviewsboolean | Fetch the product's own reviews (not a third-party vendor): overall rating, total review count, and the page's most recent individual reviews (rating, body, author, date). leroymerlin.es itself only ever surfaces its most recent ~8 reviews per product; the rating and total count reflect the full history. Shares the same page fetch as 'Fetch product detail' -- turning both on costs no extra request. Products with no reviews return an empty list. |
maxReviewsPerProductinteger | Cap on reviews returned per product when 'Fetch reviews' is on, up to the site's own page limit (the product page embeds only its most recent ~8 reviews; no paginated review endpoint is exposed). |
maxPagesinteger | Stop after this many result pages per search, category, or pasted listing URL. Leave empty for no page limit -- the run stops at Max products. |
maxItemsinteger | Hard cap on products returned across the whole run. With incremental mode on it caps products scanned: unchanged products that are not returned still count toward it. 0 = unlimited (still bounded by Max pages). |
resumeFromRunIdstring | Paste a previous run ID or dataset ID to continue an interrupted pull without returning or charging for products already collected there. For recurring monitoring of the same search, use Incremental changes below instead. |
incrementalModeboolean | Turn this on for daily or recurring monitoring. The first run returns every matching product as NEW. Later runs return only NEW, UPDATED and REAPPEARED products (a price cut, a stock change, a new seller offer). Each row gets changeType, changedFields, firstSeenAt and lastSeenAt. Compared are all returned fields except the scrape timestamp, the review texts (a new review still moves the rating and review count) and the live stock and delivery-time counters. State is kept separately for each search, filter and detail setup; use State key to name or share a campaign. Turn on Emit unchanged or Emit expired only if you also want those rows returned (and billed). |
stateKeystring | Optional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently configured runs. Leave empty to derive a key automatically from the search, filters and detail settings. |
emitUnchangedboolean | Off by default. Turn on to also return products that have not changed since the last run, marked UNCHANGED. This returns, and bills, rows you already have. |
emitExpiredboolean | Off by default. Turn on to also return products that were present in a previous run but are no longer found, marked EXPIRED. Only produced after a run fully scanned the tracked search, so never when Max products or Max pages cut it short, or when Resume was used. This returns, and bills, synthetic rows. |
ignoreFieldsForChangesarray | Field names (for example sponsored) that must not make a product count as UPDATED. They are still returned in the row. Dotted paths such as otherOffers.stock are allowed. |
mcpConnectorsarray | Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify -> Settings -> Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON; the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com). |
notionParentPageUrlstring | URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors. |
maxNotifyListingsinteger | Cap 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.
productIdProduct ID (text)skuSKU (text)nameProduct (text)brandBrand (text)categoryCategory (text)pricePrice (number)currencyCurrency (text)originalPriceOriginal price (number)discountPercentDiscount % (number)isOnSpecialOn promotion (boolean)ratingRating (number)numberOfReviewsReviews (number)Show 11 more fields
sellerNameSeller (text)sellerTypeSeller type (text)totalOfferCountOffers (number)sponsoredSponsored (boolean)urlURL (link)otherOffersotherOffersreviewsreviewschangeTypeChange (text)changedFieldsChanged fields (array)firstSeenAtFirst seen (text)lastSeenAtLast seen (text)Example output
An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.
{
"productId": "123456",
"sku": "123456",
"name": "Sample Cordless Drill 18V",
"brand": "SAMPLE BRAND",
"url": "https://www.leroymerlin.es/productos/sample-cordless-drill-18v-123456.html",
"price": 99.99,
"priceExclTax": 82.64,
"currency": "EUR",
"originalPrice": 129.99,
"discountAmount": 30,
"discountPercent": 23.1,
"isOnSpecial": true,
"rating": 4.7,
"sellerId": "002",
"sellerName": "Sample Retailer",
"sellerType": "1P",
"totalOfferCount": 12,
"sellersComposition": "1P_3P",
"offerType": "NEW",
"sponsored": false,
"ean": "4000000000000",
"description": "Sample product description as shown on the site.",
"image": "https://media.example.com/sample.jpg",
"numberOfImages": 5,
"categoryPath": [
"Tools",
"Power tools",
"Drilling & screwing",
"Drills",
"Cordless drills"
],
"category": "Cordless drills",
"stock": 19,
"stockStatus": "ONSITE",
"deliveryTime": "1 OPENING_DAY",
"otherOffers": [
{
"sellerName": "Sample Marketplace Seller",
"sellerType": "3P",
"price": 105.4,
"stock": 3,
"deliveryTime": "3 OPENING_DAY"
}
],
"numberOfReviews": 275,
"reviews": {
"averageRating": 4.7,
"totalReviewCount": 275,
"items": [
{
"rating": 5,
"body": "Sample review text.",
"author": "Sample Customer",
"date": "2026-07-15"
}
]
},
"searchMode": "search"
}Ways to use this data
- Price and promotion tracking: watch was-price, discount percentage and stock across a keyword or category to catch sales as they go live.
- Competitive repricing: compare Leroy Merlin's own price against every third-party marketplace offer on the same product page.
- Marketplace share research: track seller composition and total offer count to see how many sellers compete for a given product line.
- Reputation research: pull rating history and individual review text for products you are sourcing, reviewing or comparing.
- Catalog audits: walk a full category to check assortment, stock status and delivery promises.
- Deal-alert bots: filter to on-promotion products only and feed the results into your own alerting tool.
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 LeroyMerlin.es Scraper return?
The documented output for LeroyMerlin.es Scraper includes product id, sku, product, brand, category, price, currency and original price. Availability of each field depends on the source page and the selected mode.
How much does LeroyMerlin.es Scraper cost?
It costs $2.00 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.
Why did my run fail instead of returning an empty dataset?
A page that genuinely does not exist (bad category path, mistyped product slug, delisted listing) comes back as a normal "not found" and is accepted right away. A page that returns the site's placeholder check page instead of content is treated as a refusal, not as an empty result, and is retried with a fresh session, then on the alternate connection lane, then on the backup connection when one is available to your run. If a product's detail page still cannot be read, the product is kept with its listing data only and is not charged for enrichment. If no page at all could be read, the run fails with one of the three messages quoted in the Plan Requirement section rather than ending as an empty success. A run where every request succeeded but nothing matched your keyword, category or filters ends normally with zero items and the status message "No products matched".
Can I use it with AI agents or MCP?
Yes. Call it from any Apify integration or MCP client, and use the Pipe results into your apps field to push a summary of each product into Notion, Linear, Airtable or another Apify MCP connector, alongside the full dataset.
