Leroy Merlin APIleroymerlin.fr ↗
Access LeroyMerlin.fr product catalog, prices, seller info, and category hierarchy via 4 endpoints. Search products, fetch details, and browse sitemaps.
What is the Leroy Merlin API?
The Leroy Merlin France API exposes 4 endpoints to query the leroymerlin.fr product catalog, covering search, detailed product records, bulk sitemap enumeration, and category hierarchy. The get_product_details endpoint returns fields including price, brand, seller identity, currency, and a boolean flag distinguishing Leroy Merlin direct listings from third-party marketplace sellers. Combined, the sitemap endpoints give access to roughly 2.4 million indexed products across 99 partitioned sitemap files.
curl -X GET 'https://api.parse.bot/scraper/b6e2c583-ae27-47dd-a002-ee51c04500cf/search_products?limit=5&query=peinture' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace leroymerlin-fr-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: LeroyMerlin SDK — browse categories and product sitemaps."""
from parse_apis.leroy_merlin_france_product_api import LeroyMerlin, Product, Category, Sitemap, NotFoundError
lm = LeroyMerlin()
# List product categories from the sitemap, capped at 5
for category in lm.categories.list(limit=5):
print(category.name, category.depth, category.url)
# Construct a sitemap by number and browse its products
sitemap = lm.sitemap(1)
for product in sitemap.products(limit=3):
print(product.product_id, product.name, product.url)
# Drill into a single product from a different sitemap
product = lm.sitemap(2).products(limit=1).first()
if product:
try:
detail = lm.sitemap(2).products(limit=1).first()
print(detail.product_id, detail.name)
except NotFoundError as exc:
print(f"product not found: {exc}")
print("exercised: categories.list / sitemap.products")
Search for products on LeroyMerlin.fr by keyword. Returns product listings with prices and seller info.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination |
| limit | integer | Maximum number of products to return |
| queryrequired | string | Search keyword (e.g., 'peinture', 'perceuse') |
{
"type": "object",
"fields": {
"page": "integer",
"query": "string",
"products": "array",
"product_count": "integer",
"total_results": "integer"
},
"sample": {
"page": 1,
"query": "peinture",
"products": [
{
"url": "https://www.leroymerlin.fr/produits/peinture-blanche-82501694.html",
"name": "Peinture blanche",
"brand": "Luxens",
"price": 29.9,
"seller": "Leroy Merlin",
"currency": "EUR",
"product_id": "82501694",
"is_marketplace": false
}
],
"product_count": 1,
"total_results": 1500
}
}About the Leroy Merlin API
Search and Product Detail
The search_products endpoint accepts a required query string (e.g. peinture, perceuse) and returns a paginated list of matching products including prices and seller information. Pagination is controlled via the page and limit parameters, and the response includes total_results so you can calculate how many pages to walk. get_product_details accepts either a product_id (numeric string such as 82862131) or a full product_url, and returns granular fields: name, brand, price, currency, seller, description, and the is_marketplace boolean that identifies whether the listing is fulfilled by a third-party online partner rather than Leroy Merlin directly.
Bulk Catalog Enumeration via Sitemaps
The list_products_from_sitemap endpoint exposes the full product index across 99 sitemap files, each containing approximately 25,000 products. You specify a sitemap_number (1–99) and an optional limit. The response returns an array of product objects with product_id, name (derived from the URL slug, title-cased with hyphens converted to spaces), and url, alongside total_urls_in_sitemap so you can track coverage. This is useful for building a full product index without issuing repeated searches.
Category Hierarchy
The list_categories endpoint returns the full category tree sourced from the leroymerlin.fr category sitemap. Each category object includes url, path, name, and depth, where depth of 1 indicates a top-level category and higher values indicate nested subcategories. The response also provides total_categories_in_sitemap so you know the full scope of what's available. An optional limit parameter lets you sample the tree before processing all records.
The Leroy Merlin API is a managed, monitored endpoint for leroymerlin.fr — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when leroymerlin.fr changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official leroymerlin.fr API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a price-monitoring tool that tracks leroymerlin.fr product prices over time using
get_product_details - Identify which products are sold by third-party marketplace partners versus Leroy Merlin directly via the
is_marketplaceflag - Enumerate the full leroymerlin.fr catalog across all 99 sitemap partitions to seed a product database
- Power a category navigation interface using the depth-annotated hierarchy from
list_categories - Run competitive analysis by searching for specific product types with
search_productsand comparing returned pricing - Generate a structured product feed for a home improvement comparison site using sitemap-derived IDs and URLs
- Detect new product listings by periodically diffing sitemap results against a stored snapshot
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Leroy Merlin France have an official public developer API?+
How does `get_product_details` distinguish between Leroy Merlin listings and third-party sellers?+
seller string field naming the seller and an is_marketplace boolean. When is_marketplace is true, the product is listed by an online partner rather than Leroy Merlin itself. Both the direct and marketplace cases return the same set of fields including price, brand, and description.Are product reviews or stock/availability data included?+
What is the coverage of the sitemap-based product listing, and are product names always accurate?+
list_products_from_sitemap endpoint covers 99 sitemap files with roughly 25,000 products each, giving approximately 2.4 million indexed URLs. Product names are derived from URL slugs — hyphens are replaced with spaces and the result is title-cased — so names may not exactly match the display name on the product page. Use get_product_details on a specific product to retrieve the canonical name field.Can I filter `list_products_from_sitemap` results by category or price range?+
limit. Category-scoped browsing is covered separately by list_categories, and price data is only available via get_product_details on individual products. You can fork this API on Parse and revise it to add filtered or category-scoped product listing endpoints.