Leroy Merlin Scraper — French DIY & Home Improvement avatar

Leroy Merlin Scraper — French DIY & Home Improvement

Pricing

from $5.00 / 1,000 result scrapeds

Go to Apify Store
Leroy Merlin Scraper — French DIY & Home Improvement

Leroy Merlin Scraper — French DIY & Home Improvement

Scrape products, prices, specifications, ratings, and availability from leroymerlin.fr. France's largest home improvement retailer with 140+ stores. Supports search queries and category browsing.

Pricing

from $5.00 / 1,000 result scrapeds

Rating

0.0

(0)

Developer

Studio Amba

Studio Amba

Maintained by Community

Actor stats

0

Bookmarked

30

Total users

2

Monthly active users

2 days ago

Last modified

Categories

Share

Leroy Merlin Scraper -- France's #1 DIY & Home Improvement Store

Scrape products, prices, brands, SKUs, and (optionally) full specifications from leroymerlin.fr -- France's dominant home improvement retailer with 140+ stores and the deepest online catalog in the French DIY market.

What is Leroy Merlin Scraper?

Leroy Merlin is France's largest home improvement chain and a heavyweight in the European DIY market. Owned by the Adeo group (also behind Bricoman and Weldom), it carries everything from tiles and paint to plumbing fixtures, power tools, kitchen cabinets, and outdoor furniture. The breadth of its catalog makes it a primary data source for anyone tracking the French renovation and construction supply market.

Leroy Merlin protects its site with DataDome anti-bot and geo-IP filtering. This actor fetches pages through Bright Data Web Unlocker (already built in -- you do not need your own proxy or Bright Data account) and extracts product data from the server-rendered HTML and the structured JSON embedded in each listing page. You just provide a category URL or a search keyword.

Typical uses:

  • Price monitoring for the French market -- Track pricing on France's largest DIY platform to benchmark against Castorama, Brico Depot, or your own catalog
  • Supplier and brand intelligence -- Analyze which brands dominate specific categories (e.g., Bosch in power tools, Grohe in bathroom fixtures)
  • Building materials research -- Extract specs on tiles, flooring, insulation, and structural materials
  • E-commerce competitive analysis -- Study Leroy Merlin's product positioning, promotional patterns, and assortment depth
  • Renovation project costing -- Pull current prices for materials lists to estimate project budgets at scale

What data does Leroy Merlin Scraper extract?

Two levels, depending on the fetchDetails toggle:

Listing mode (default, fastest -- one page fetch covers 20-50 products):

FieldNotes
nameFull French product title
brandManufacturer name (Bosch, Makita, Dexter, Karcher, ...)
price, currencyCurrent price in EUR
originalPrice, discountWhen the product is on promotion
sku, productIdLeroy Merlin internal reference
urlCanonical product page URL (always the full ...-<id>.html form)
imageUrlPrimary product image, when the listing exposes it
rating, reviewCountWhen the listing exposes them
inStocknull in listing mode -- listing pages do not expose reliable availability
scrapedAtISO 8601 timestamp

Detail mode (fetchDetails: true -- one extra page fetch per product):

Everything above, plus ean (EAN/GTIN barcode), description, specs (technical attribute table), categories (breadcrumb path), imageUrls (full gallery), and a real inStock value from the product page's structured data (still null if the page doesn't state availability).

How to scrape Leroy Merlin data

FieldTypeDescription
categoryUrlStringCategory page URL (recommended) -- e.g., https://www.leroymerlin.fr/produits/outillage/. The actor follows pagination and descends into subcategories until maxResults.
searchQueryStringFrench keyword -- e.g., "perceuse", "carrelage", "peinture". See "How search works" below.
startUrlsArraySpecific URLs to scrape: category pages, search result pages, or product pages ending in -<id>.html.
maxResultsIntegerMaximum products to return (default: 100, max: 10,000).
fetchDetailsBooleanOFF by default. ON adds EAN, description, specs, categories, and stock status at one extra page fetch per product.
brightDataApiKeyStringOptional. The actor ships with a built-in Bright Data integration; only set this to bill traffic to your own Bright Data account.

Input priority: startUrls > categoryUrl > searchQuery. Exactly one mode runs and the log states which. To run a search, leave categoryUrl and startUrls empty.

How search works

The actor first scrapes the site's own /search results page for your query -- the same results a visitor sees, in the site's relevance order. The unlock route this actor uses intermittently enforces leroymerlin.fr's robots.txt on that page; when it is unavailable, the actor falls back to the closest official product category, matched via the site's own autocomplete API, and scrapes that category instead. In practice:

  • When direct search is available you get the site's real search results for your exact query.
  • In fallback mode, broad French keywords ("perceuse", "peinture", "carrelage") map cleanly to a category. Multi-word queries fall back word by word ("peinture murale blanche""peinture murale""peinture") until a category matches. The log names the mode used and the matched categories.
  • If both routes come up empty, the run fails with a clear message instead of returning unrelated products. Use categoryUrl for precise targeting.

How category scraping works

Deep category pages (e.g. /produits/outillage/outillage-electroportatif/perceuse/perceuse-filaire/) list up to ~50 products per page with pagination; the actor walks all pages up to maxResults. Top-level category hubs (e.g. /produits/outillage/) only showcase 12-24 highlighted products, so the actor automatically descends into their subcategories to fill your requested count. If a category genuinely holds fewer products than maxResults, the run succeeds and logs a warning naming the real count -- it never silently under-delivers.

Output

Each product is a structured JSON object. Listing mode example:

{
"name": "Nettoyeur vapeur blanc KARCHER SC3 + lingettes, 1900 W",
"brand": "KARCHER",
"price": 151,
"currency": "EUR",
"url": "https://www.leroymerlin.fr/produits/nettoyeur-vapeur-blanc-karcher-sc3-lingettes-1900-w-91294768.html",
"scrapedAt": "2026-08-17T10:30:00.000Z",
"sku": "91294768",
"productId": "91294768",
"inStock": null,
"imageUrl": "https://media.adeo.com/media/2853799/media.jpg"
}

With fetchDetails: true:

{
"name": "Nettoyeur vapeur blanc KARCHER SC3 + lingettes, 1900 W",
"brand": "KARCHER",
"price": 151,
"currency": "EUR",
"url": "https://www.leroymerlin.fr/produits/nettoyeur-vapeur-blanc-karcher-sc3-lingettes-1900-w-91294768.html",
"scrapedAt": "2026-08-17T10:30:00.000Z",
"sku": "91294768",
"ean": "4054278966588",
"inStock": true,
"rating": 4.5,
"reviewCount": 231,
"imageUrl": "https://media.adeo.com/media/2853799/media.jpg",
"description": "Le nettoyeur vapeur SC3 de Karcher elimine 99,99% des bacteries sans produit chimique.",
"specs": {
"Puissance": "1900 W",
"Surface conseillee": "75 m²",
"Temps de chauffe": "30 s"
},
"category": "Nettoyeur vapeur",
"categories": ["Electromenager", "Entretien des sols", "Nettoyeur vapeur"]
}

inStock is true/false only when the site states availability; it is null when unknown (listing mode). It is never guessed.

How much does it cost?

Pricing is pay-per-event: $0.01 per run start + $0.005 per result (per product returned). No proxy or compute add-ons -- the built-in unlocker traffic is included.

ScenarioProductsPrice
Quick test50$0.26
Category deep dive200$1.01
Brand analysis500$2.51
Large catalog export1,000$5.01

A run's usage cost only settles after the run reports SUCCEEDED -- reading the dataset mid-run shows a partial count. A failed run charges only the events it emitted before failing. fetchDetails: true does not change the price per product -- it only makes runs slower (one extra page fetch per product, roughly 2-5 s each).

Can I integrate?

Export data in any format Apify supports:

  • JSON, CSV, Excel -- Download directly from the dataset
  • Google Sheets -- Automatic sync via Apify integration
  • Webhooks -- Trigger your pipeline when a run completes
  • API -- Fetch results programmatically
  • Zapier / Make -- Connect to thousands of downstream apps
  • Amazon S3, Google Cloud Storage -- Push to cloud storage buckets

Can I use it as an API?

Python:

from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("studio-amba/leroymerlin-scraper").call(run_input={
"categoryUrl": "https://www.leroymerlin.fr/produits/revetement-sol-et-mur/peinture-interieure/",
"maxResults": 100,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(f"{item['name']} - EUR {item['price']}")

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('studio-amba/leroymerlin-scraper').call({
searchQuery: 'perceuse',
maxResults: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

FAQ

Do I need proxies or a Bright Data account? No. The actor ships with a built-in Bright Data Web Unlocker integration that handles DataDome and geo-IP restrictions. The proxyConfiguration input is not used (it is kept only so old saved tasks keep validating). The optional brightDataApiKey field is for users who want unlock traffic billed to their own Bright Data account.

Why does my search return products from a broader category than my exact phrase? When the site's /search page is temporarily unavailable through the unlock route, the actor maps your query to the closest official Leroy Merlin category (see "How search works"). A very specific phrase may resolve to its parent category. For exact scoping, pass a categoryUrl.

Why is inStock null on my results? Listing pages don't expose reliable availability, so listing-mode rows report null (unknown) rather than a guess. Run with fetchDetails: true to read availability from each product page.

Can I scrape specific store inventory? No. The scraper extracts online catalog data. Store-level stock varies by location and is not available through the public website in a structured way.

What categories does Leroy Merlin cover? The full range: outillage (tools), peinture (paint), carrelage (tiles), salle de bain (bathroom), cuisine (kitchen), jardin (garden), electricite, plomberie, chauffage, isolation, and more. Use categoryUrl to target specific departments.

Is the data in French only? Yes. Leroy Merlin France (leroymerlin.fr) is a French-language site. All product names, descriptions, and specs are in French.

How long does a typical scrape take? Listing mode covers 20-50 products per page fetch, so a 100-product run typically finishes in 1-2 minutes. With fetchDetails: true, add roughly 2-5 seconds per product: a 100-product detail run takes about 5-10 minutes.

Limitations

  • The site's /search results page is intermittently unavailable through the unlock route (robots.txt enforcement); in those periods searches are resolved to the nearest official category via the site's autocomplete API
  • ean, description, specs, categories, and inStock require fetchDetails: true (one extra page fetch per product)
  • Store-level stock is not available; inStock reflects the online shop only, and is null when the site doesn't state it
  • Product URLs must match Leroy Merlin's pattern (ending with a reference number like -12345678.html)
  • The site occasionally updates its page structure, which may temporarily affect extraction accuracy

Other DIY & home improvement scrapers

Track the full European home improvement market with these companion scrapers:

Your feedback

Found a bug? Need a feature? Open an issue on the actor's page or contact us through Apify. Your feedback helps us keep this scraper running smoothly.

Need this data on a schedule, or a custom version?

We run this scraper as a managed service for businesses: scheduled runs, deduplication, delta detection, and delivery to your inbox, Google Sheets, or API — maintenance included. We can also build a custom version with your exact fields and filters, or combine multiple sources into one feed.

See studioamba.dev/services or email hello@studioamba.dev for a free data sample. We maintain 300+ European web scrapers and answer within one business day.