# Castorama Scraper — French DIY & Home Improvement (`studio-amba/castorama-scraper`) Actor

Scrape products from Castorama.fr, the French DIY giant (Kingfisher group, alongside B\&Q and Brico Depot). Tools, materials, kitchen, and bathroom supplies.

- **URL**: https://apify.com/studio-amba/castorama-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** E-commerce
- **Stats:** 5 total users, 0 monthly users, 96.6% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 result scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Castorama Scraper -- French DIY & Home Improvement (Kingfisher Group)

Scrape products, prices, ratings, specifications, and availability from castorama.fr -- France's second-largest DIY retailer and a key brand in the Kingfisher group (alongside B\&Q and Brico Depot). Full product detail extraction with EAN codes, image galleries, and category data.

### What is Castorama Scraper?

Castorama is a major force in French home improvement retail, operating over 90 stores across France. As part of the Kingfisher group (the third-largest home improvement retailer worldwide), Castorama shares several private-label brands with B\&Q (UK) and Brico Depot -- including GoodHome, Erbauer, and Magnusson. This makes Castorama data particularly valuable for anyone tracking the Kingfisher group's pan-European pricing and product strategy.

The scraper extracts data primarily from JSON-LD structured data embedded in Castorama's pages, with HTML fallback for product links and pricing. It visits individual product detail pages for the richest data extraction including full specs, descriptions, and stock status.

- **French DIY market competitive analysis** -- Monitor Castorama alongside Leroy Merlin to understand the pricing dynamics of France's two dominant home improvement retailers
- **Kingfisher group brand intelligence** -- Track how private-label brands (GoodHome, Erbauer, Magnusson, Diall) are positioned and priced across the Kingfisher portfolio
- **Renovation cost estimation** -- Pull current prices on paint, flooring, tiles, plumbing, and electrical supplies for project budgeting at scale
- **Product launch tracking** -- Monitor new product introductions across Castorama's key departments to stay ahead of market trends
- **Supplier shelf-share analysis** -- Measure how brands like Bosch, Makita, Grohe, Dulux Valentine, and V33 are represented in Castorama's catalog compared to competitors

### What data does Castorama Scraper extract?

- 🪛 **Product name** -- Full French product title
- 💰 **Price & promotions** -- Current price, original/crossed price when discounted
- 🏷️ **Brand** -- Manufacturer name (Bosch, Makita, GoodHome, Erbauer, V33, Grohe, etc.)
- 📦 **Stock availability** -- InStock, InStoreOnly, OnlineOnly, or PreOrder status
- ⭐ **Ratings & reviews** -- Customer rating and review count
- 🖼️ **Product images** -- Primary image and complete image gallery
- 📐 **Technical specifications** -- Specs from product attribute tables
- 📋 **Product description** -- Full description text (HTML stripped)
- 🔗 **Product URL** -- Canonical URL on castorama.fr
- 📂 **Category breadcrumbs** -- Navigation path from homepage to product
- 🏗️ **Product identifiers** -- EAN/GTIN barcode and SKU reference
- 🌐 **Language** -- Always `fr` (French)

### How to scrape Castorama

| Field | Type | Description |
|-------|------|-------------|
| `searchQuery` | String | Search keyword -- e.g., `"perceuse"`, `"peinture"`, `"parquet"`, `"robinet"` |
| `categoryUrl` | String | Category page URL from castorama.fr |
| `startUrls` | Array | List of product or category URLs to scrape directly |
| `maxResults` | Integer | Maximum products to return (default: 100, max: 50,000) |
| `proxyConfiguration` | Object | Proxy settings (Apify proxy used automatically when running on platform) |

**Tips:**

- `searchQuery` is the simplest entry point -- the actor converts it to a search URL automatically
- Castorama product URLs end with `.prd` -- the actor recognizes these as product detail pages
- Category pagination works automatically up to 20+ products per page
- Proxy is enabled by default on Apify platform. No special geo-IP requirements (unlike Leroy Merlin)
- The actor enqueues product detail pages from listing results for full data extraction

### Output

```json
{
    "name": "Perceuse-visseuse sans fil Erbauer EXT 18V - 2 batteries 4.0Ah",
    "brand": "Erbauer",
    "price": 149.00,
    "currency": "EUR",
    "url": "https://www.castorama.fr/perceuse-visseuse-sans-fil-erbauer-ext-18v-2-batteries/3663602856214.prd",
    "scrapedAt": "2026-04-03T16:00:00.000Z",
    "sku": "3663602856214",
    "ean": "3663602856214",
    "inStock": true,
    "rating": 4.4,
    "reviewCount": 93,
    "imageUrl": "https://media.castorama.fr/is/image/Castorama/perceuse-erbauer-ext.jpg",
    "imageUrls": [
        "https://media.castorama.fr/is/image/Castorama/perceuse-erbauer-ext.jpg",
        "https://media.castorama.fr/is/image/Castorama/perceuse-erbauer-ext-2.jpg"
    ],
    "description": "Perceuse-visseuse sans fil de la gamme Erbauer EXT, avec moteur brushless et 2 batteries Li-Ion 4.0 Ah.",
    "category": "Perceuse visseuse sans fil",
    "categories": ["Outillage", "Outillage electroportatif", "Perceuse visseuse sans fil"],
    "language": "fr"
}
```

A bathroom fixture example:

```json
{
    "name": "Mitigeur lavabo Grohe Eurosmart bec haut chrome",
    "brand": "Grohe",
    "price": 79.90,
    "originalPrice": 99.90,
    "currency": "EUR",
    "url": "https://www.castorama.fr/mitigeur-lavabo-grohe-eurosmart-bec-haut-chrome/3614514783456.prd",
    "scrapedAt": "2026-04-03T16:00:00.000Z",
    "sku": "3614514783456",
    "ean": "3614514783456",
    "inStock": true,
    "rating": 4.6,
    "reviewCount": 215,
    "imageUrl": "https://media.castorama.fr/is/image/Castorama/grohe-eurosmart.jpg",
    "description": "Le mitigeur lavabo Grohe Eurosmart avec bec haut offre un debit genereux et une technologie ceramique pour un fonctionnement fluide.",
    "category": "Robinetterie lavabo",
    "categories": ["Salle de bains", "Robinetterie", "Robinetterie lavabo"],
    "language": "fr"
}
```

### How much does it cost?

Castorama Scraper visits product detail pages for full extraction, using CheerioCrawler (no browser).

| Scenario | Products | Est. cost |
|----------|----------|-----------|
| Quick search | 50 | ~$0.25 |
| Category export | 200 | ~$0.70 |
| Department scan | 500 | ~$1.50 |
| Large catalog | 1,000 | ~$3.00 |

Standard Apify proxy is included. No residential proxy required.

### Can I integrate?

- **JSON, CSV, Excel** -- Direct dataset download
- **Google Sheets** -- Auto-sync via Apify
- **Webhooks** -- Trigger downstream actions on completion
- **API** -- Programmatic access (see below)
- **Zapier / Make** -- 5,000+ integrations
- **Amazon S3, Google Cloud Storage** -- Cloud export

### Can I use it as an API?

**Python:**

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run = client.actor("studio-amba/castorama-scraper").call(run_input={
    "searchQuery": "peinture murale",
    "maxResults": 100
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"{item['name']} - EUR {item['price']}")
```

**JavaScript:**

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });

const run = await client.actor('studio-amba/castorama-scraper').call({
    searchQuery: 'peinture murale',
    maxResults: 100,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### FAQ

**What is the Kingfisher group and why does it matter?**
Kingfisher is the world's third-largest home improvement retailer, owning Castorama (France), B\&Q (UK), and Brico Depot (France/Iberia). They develop shared private-label brands like GoodHome, Erbauer, and Magnusson sold across all their banners. Tracking Castorama gives you insight into Kingfisher's pricing strategy and brand positioning across Europe.

**How does Castorama compare to Leroy Merlin?**
Leroy Merlin is larger (140+ stores vs. Castorama's 90+) and generally has a deeper catalog. Castorama differentiates with strong private-label brands (GoodHome for kitchens/bathrooms, Erbauer for power tools) and competitive promotional pricing. For full French DIY market coverage, scrape both.

**Which private-label brands does Castorama carry?**
Key Kingfisher own brands include: GoodHome (kitchen, bathroom, decorating), Erbauer (power tools, accessories), Magnusson (hand tools), Diall (consumables, fixings), and Colours (paint, wallpaper). The scraper's brand detection covers all of these.

**Can I scrape Brico Depot with this?**
No. Brico Depot (bricodepot.fr) is a separate Kingfisher banner with its own website and structure. This scraper is built specifically for castorama.fr.

**Does Castorama have anti-bot protection?**
Castorama does not use the aggressive DataDome protection that Leroy Merlin employs. Standard Apify proxy works well. No French residential proxies are needed.

**Are the product descriptions in HTML or plain text?**
The scraper strips HTML from descriptions and returns clean plain text. Original HTML formatting (lists, bold text) is converted to readable text.

### Limitations

- Targets castorama.fr (France) only
- Product specs extraction depends on how individual product pages are structured; not all products have detailed attribute tables
- Some products may only have listing-level data if the detail page fails to load (the scraper uses listing data as fallback)
- Pagination is heuristic-based (continues if 20+ products on a page) -- very small categories may not trigger pagination
- Product URLs must contain `.prd` to be recognized as product detail pages

### Other DIY & home improvement scrapers

Complete your French and European DIY market analysis:

- **[Leroy Merlin Scraper](https://apify.com/studio-amba/leroymerlin-scraper)** -- France's #1 DIY retailer (Castorama's main competitor)
- **[GAMMA Scraper](https://apify.com/studio-amba/gamma-scraper)** -- Belgium, Intergamma group
- **[Brico Scraper](https://apify.com/studio-amba/brico-scraper)** -- Belgium's largest DIY chain
- **[Hubo Scraper](https://apify.com/studio-amba/hubo-scraper)** -- Belgian neighborhood DIY
- **[Praxis Scraper](https://apify.com/studio-amba/praxis-scraper)** -- Netherlands, Maxeda DIY Group
- **[OBI Scraper](https://apify.com/studio-amba/obi-scraper)** -- Germany's leading DIY chain
- **[Hornbach Scraper](https://apify.com/studio-amba/hornbach-scraper)** -- German/EU DIY megastore
- **[Bauhaus Scraper](https://apify.com/studio-amba/bauhaus-scraper)** -- German/EU professional hardware
- **[Toom Scraper](https://apify.com/studio-amba/toom-scraper)** -- Germany, REWE group DIY

### Your feedback

Questions, bugs, or feature requests? Open an issue on the actor's page or contact us through Apify. We keep this scraper updated based on community feedback.

# Actor input Schema

## `startUrls` (type: `array`):

Castorama product or category URLs to scrape directly.

## `searchQuery` (type: `string`):

Search for products by keyword (e.g., 'perceuse', 'peinture', 'parquet').

## `categoryUrl` (type: `string`):

A Castorama category page URL to scrape. Example: https://www.castorama.fr/outillage/outillage-electroportatif/perceuse-visseuse-perceuse-a-percussion-et-tournevis-sans-fil/cat\_id\_3796.cat

## `maxResults` (type: `integer`):

Maximum number of products to return.

## `proxyConfiguration` (type: `object`):

Proxy settings for better reliability.

## Actor input object example

```json
{
  "searchQuery": "perceuse",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "FR"
  }
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchQuery": "perceuse",
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "FR"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/castorama-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchQuery": "perceuse",
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "FR",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/castorama-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQuery": "perceuse",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "FR"
  }
}' |
apify call studio-amba/castorama-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,studio-amba/castorama-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/cvQYfjqc0eNYfFzE6/builds/l8u89GqNH38ZWzxlc/openapi.json
