LeroyMerlin.es Scraper: Products, Prices, Sellers & Reviews avatar

LeroyMerlin.es Scraper: Products, Prices, Sellers & Reviews

Pricing

from $1.00 / 1,000 product results

Go to Apify Store
LeroyMerlin.es Scraper: Products, Prices, Sellers & Reviews

LeroyMerlin.es Scraper: Products, Prices, Sellers & Reviews

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.

Pricing

from $1.00 / 1,000 product results

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

0

Bookmarked

8

Total users

2

Monthly active users

13 days ago

Last modified

Share

Leroy Merlin Spain Scraper: Prices, Discounts, Seller Offers & Reviews

Leroy Merlin Spain Scraper turns leroymerlin.es into a clean product data feed. Get the current price, the strike-through original price and discount when a product is genuinely on promotion, marketplace seller identity with every competing offer, stock and delivery time, rating, and individual customer reviews for tools, appliances and home-improvement products. Search by keyword, a real site category, or paste any product or listing link directly, then export to JSON, CSV or Excel, or pull results straight into your app through the API.

Why This Scraper?

  • 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.
  • Optional export to your apps. Send results into Notion, Linear, Airtable, or any Apify MCP connector alongside the dataset.

Use Cases

  • 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.

Data You Get

Sample shape: values below are illustrative placeholders, not from a live product.

FieldExample
productId / sku"123456"
name"Sample Cordless Drill 18V"
brand"SAMPLE BRAND"
category / categoryPath"Cordless drills" / ["Tools", "Power tools", "Drilling & screwing", "Drills", "Cordless drills"]
url"https://www.leroymerlin.es/productos/sample-cordless-drill-18v-123456.html"
price / priceExclTax / currency99.99 / 82.64 / "EUR"
originalPrice / discountAmount / discountPercent129.99 / 30.0 / 23.1
isOnSpecialtrue
rating4.7
sellerId / sellerName / sellerType"002" / "Sample Retailer" / "1P"
totalOfferCount / sellersComposition12 / "1P_3P"
offerType"NEW"
sponsoredfalse
ean"4000000000000"
descriptionfull product description text
image / numberOfImages"https://media.example.com/sample.jpg" / 5
stock / stockStatus / deliveryTime19 / "ONSITE" / "1 OPENING_DAY"
otherOffers[][{"sellerName": "Sample Marketplace Seller", "sellerType": "3P", "price": 105.40, "stock": 3, "deliveryTime": "3 OPENING_DAY"}]
numberOfReviews275
reviews.averageRating / reviews.totalReviewCount4.7 / 275
reviews.items[][{"rating": 5, "body": "Sample review text.", "author": "Sample Customer", "date": "2026-07-15"}]
searchMode"search" (also "category" or "url")

otherOffers lists every competing marketplace offer visible on the product page at fetch time, price, stock and delivery per seller; a product sold exclusively by Leroy Merlin with no marketplace competition simply omits the field rather than returning an empty placeholder. reviews.items[] holds the product page's own most recent reviews (the page itself only ever surfaces a handful), while reviews.averageRating and reviews.totalReviewCount reflect the product's full review history, not just the reviews included in items[].

How to Use

  1. Pick a mode: search (keyword and/or category, with filters and sort) or url (paste product or listing links).
  2. For search mode, fill in a keyword and/or a category path, and set any price, rating, promotion or seller filters plus a sort order. For url mode, paste one or more product or listing links.
  3. Leave Fetch product detail and Fetch reviews on for full records, or turn them off for a lighter listing-only run. Set Max products and Max pages to control run size and cost.
  4. Click Start. Download the dataset as JSON, CSV or Excel, or read it through the API.

Keyword search, first page, with detail and reviews (default):

{
"mode": "search",
"searchTerm": "taladro",
"maxItems": 20
}

Category browse, only products on promotion, sorted by price:

{
"mode": "search",
"category": "herramientas/herramientas-electricas-portatiles/herramientas-electricas-para-taladrar-atornillar/taladros/taladros-de-bateria",
"onPromotionOnly": true,
"sortBy": "price_asc",
"maxItems": 50,
"maxPages": 5
}

Only Leroy Merlin's own offers, minimum 4-star rating:

{
"mode": "search",
"searchTerm": "grifo cocina",
"sellerFilter": "leroymerlin",
"minRating": 4,
"maxItems": 30
}

Full detail and reviews for a pasted product link:

{
"mode": "url",
"urls": ["https://www.leroymerlin.es/productos/sample-cordless-drill-18v-123456.html"],
"fetchDetails": true,
"fetchReviews": true
}

Run it from your code

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("abotapi/leroymerlin-es-scraper").call(run_input={"mode": "search", "searchTerm": "taladro", "maxItems": 20})
for product in client.dataset(run["defaultDatasetId"]).iterate_items():
print(product["name"], product["price"], product["currency"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('abotapi/leroymerlin-es-scraper').call({ mode: 'search', searchTerm: 'taladro', maxItems: 20 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.

How filters narrow the page walk

Price, rating, promotion and seller filters are checked as each result page is read, not only after the whole batch is collected. That means Max products means "N products that actually pass your filters", so a run with onPromotionOnly on and a small maxItems keeps walking pages (up to Max pages) until enough promoted products are found, instead of stopping early on a page where none happened to qualify.

Price sort after enrichment

With Fetch product detail on (the default), each product's price can refresh to the detail page's own value after the listing page was already sorted. The run re-applies your chosen sort on that final price immediately before the dataset is written, so sortBy always matches the price values you actually see in the output.

Send results into your apps (MCP connectors)

Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape: the Apify dataset is never changed.

What gets written to the connector: a condensed, human-readable summary of each product, not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.

  1. Authorize a connector once under Apify, Settings, Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the "Pipe results into your apps" input field. If the picker is empty, you haven't authorized a connector yet.
  3. For Notion, also set notionParentPageUrl to the page where item pages should be created.

Leave the field empty to skip. A connector error never fails the run or changes the dataset; it is logged as a warning and the run continues.

Input Parameters

ParameterTypeDefaultDescription
modestringsearchsearch or url.
searchTermstringnone (prefill: taladro)Free-text keyword (search mode). Leave empty and use Category only to browse without a keyword.
categorystringnoneA real leroymerlin.es catalog category path (search mode only). Ignored when searchTerm is set.
sortBystringrelevancerelevance, price_asc, or price_desc. Applies to keyword/category search and pasted listing URLs alike.
minPricenumbernoneOnly return products priced at or above this amount, in EUR.
maxPricenumbernoneOnly return products priced at or below this amount, in EUR.
minRatingnumbernoneOnly return products whose average rating is at least this many stars (0-5).
onPromotionOnlybooleanfalseKeep only products currently showing the site's own strike-through original price and discount.
sellerFilterstringanyany, leroymerlin, or marketplace.
urlsarraynone (prefill: ["https://www.leroymerlin.es/search?q=taladro"])Product or listing links to scrape (url mode only). Pagination continues forward automatically from any ?p= already present.
fetchDetailsbooleantrueFetch EAN, description, image, breadcrumb category path, stock/delivery, and every competing marketplace offer.
fetchReviewsbooleantrueFetch the product's own reviews. Shares the same page fetch as fetchDetails.
maxReviewsPerProductinteger8Cap on reviews returned per product, up to the site's own page limit.
maxPagesintegernone (an empty or zero value behaves as an internal cap of 100 pages per search, category, or URL entry)Stop after this many result pages per search, category, or pasted listing URL.
maxItemsinteger20Hard cap on total products returned across the whole run. 0 = unlimited (still bounded by Max pages).
proxyobjectApify Proxy, residential, country ESConnection settings. leroymerlin.es answers only on a Spanish residential connection.
mcpConnectorsarraynoneOptional: send a summary of each product to apps you authorized under Integrations.
notionParentPageUrlstringnoneNotion connector only: page under which item pages are created.
maxNotifyListingsinteger50Cap on items exported to each connector per run. Does not affect the dataset.

Output Example

Sample shape: values below are illustrative placeholders, not from a live product.

{
"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.0,
"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.40, "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"
}

Plan Requirement

The default connection works out of the box: Apify Proxy with residential access in Spain, already selected for you. leroymerlin.es answers only on that kind of connection, a datacenter connection or a residential exit outside Spain is refused before any page content loads, and this actor does not fall back to a different connection tier. If the account running this actor is not entitled to a residential connection, the run fails immediately with a clear message instead of returning an empty dataset.

FAQ

How much does it cost?

This actor uses Apify's pay-per-event pricing. You are charged for each product returned in the dataset, plus a separate, smaller charge only for products where detail and/or review enrichment actually ran, plus the standard per-run actor-start charge. The Pricing tab on the actor page shows the current rates. Use Max products and Max pages to cap the size, and cost, of any run.

This actor collects only publicly available product data, prices, offers, ratings and reviews, shown on leroymerlin.es. You are responsible for how you use it: follow Leroy Merlin's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Product names, descriptions and images may carry third-party rights.

Can I schedule it, or get only new or changed products?

Yes, schedule the actor from the Schedules tab for recurring runs. Each run returns the current, full snapshot of whatever matches your search, category or links; the actor does not keep state between runs, so there is no built-in mode that emits only new or changed products since the last run. Narrow the search or category, and use Max products, to keep repeated runs small.

Why does a product's price sometimes differ from what I saw on the search results page?

When Fetch product detail is on (the default), the product's own detail page is the final source for its price, was-price and discount, and it can legitimately disagree with the listing card's price shown a moment earlier (VAT-inclusive versus exclusive display, or a real price change between the two page loads). The dataset always reflects the detail page's value once detail is fetched, and the run's price sort is re-applied after that refresh within each search or pasted listing link, so sort order and the price you see never disagree there.

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

Three different situations can look similar but are not the same. A page that genuinely does not exist, a bad category path, a mistyped product slug, a delisted listing, comes back as a normal "not found" response and is accepted right away: it is not treated as a block, and the run does not retry it. A listing page or pasted link that instead gets a temporary check page instead of real content is retried automatically with a fresh session, up to 3 attempts; if a product's detail page still can't be read after that, the product is kept with its listing-card data only and is not charged for enrichment, and the run itself does not fail. Separately, a run that produces zero products because the proxy refused this account's residential access, so not a single page could be read, fails loudly with a clear connection-related message instead of silently succeeding with an empty dataset; other connection problems that are not an outright access refusal instead end the run successfully with zero items and a status message. A run that genuinely found nothing, every request succeeded but no product matched your keyword, category or filters, also ends normally with zero items 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 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.

πŸ”— Want more e-commerce data?

Pair this actor with these related scrapers from the same team:

πŸ”Œ MediaMarkt.es Scraper
Scrape MediaMarkt Spain (mediamarkt.es) products: current price, strike-through original...
πŸ›’ Decathlon.es
Scrape Decathlon Spain (decathlon.es) sporting goods: current price plus strike-through...
πŸ›’ OBI.de Scraper
Scrape OBI (obi.de) DIY/home-improvement products: current + strike-through original...
πŸ›’ druni.es
Scrape Druni beauty, cosmetics and perfume products. Search by keyword, category, Ofertas...
πŸ₯¦ Mercadona Scraper
Scrape Mercadona products by delivery-area postal code. Search by keyword or category, or...
πŸ›’ Castorama.fr
Scrape Castorama.fr DIY and home-improvement products by keyword, category, or URL...

πŸ‘‰ Browse all abotapi scrapers

πŸ’¬ Support & custom scrapers

  • 🐞 Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
  • πŸ› οΈ Need another site, extra fields or a private build? Email contact@abotapi.com or message Telegram @abotapi.
  • ⭐ Enjoying it? A quick review on the actor page helps other users find it.