# Maisons du Monde Scraper — Furniture & Home Decor Data (`studio-amba/maisonsdumonde-scraper`) Actor

Scrape furniture, home decor, and lighting products, prices, discounts, ratings, and stock status from maisonsdumonde.com. Search any keyword across 11 European storefronts (FR, BE, DE, ES, IT, NL, AT, PT, CH, LU, UK) and export clean structured catalogue data.

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

## Pricing

from $5.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

## Maisons du Monde Scraper

Pull furniture, home decor, and lighting data from maisonsdumonde.com —
prices, discounts, stock status, ratings, and images — without touching a
browser yourself. Search any keyword and get clean, structured product data
back as JSON or CSV, ready to feed into a price tracker, a market comparison,
or a sourcing list.

Maisons du Monde runs the same catalogue platform across 11 European
storefronts (France, Belgium, Germany, Spain, Italy, the Netherlands,
Austria, Portugal, Switzerland, Luxembourg, and the UK), so this one actor
covers all of them — just switch the `country` input.

### Why this actor

- **No manual copy-pasting.** Point it at a keyword, get every matching
  product with price, discount, and stock status in one dataset.
- **11 countries, one actor.** France is the default, but Germany, Spain,
  Italy, and the rest of the storefronts are a single input field away —
  useful for comparing furniture pricing across markets.
- **Handles the anti-bot wall for you.** maisonsdumonde.com is protected by
  DataDome — both the website and its internal product API. This actor
  routes through a Bright Data Scraping Browser session that clears the
  challenge automatically, so you never see a CAPTCHA or a blocked request.
- **Marketplace-aware.** Maisons du Monde sells both its own products and
  third-party marketplace items in the same search results — every item is
  flagged so you can tell which is which.

### How to scrape Maisons du Monde data

1. Open this actor on the Apify Store and click **Try for free**.
2. Set **Search Query** to whatever you're looking for — `canape` (sofa),
   `table basse` (coffee table), `luminaire` (lighting), or any other French
   keyword. If you're scraping a non-French storefront, use that language's
   term instead (e.g. `sofa` for the German store).
3. Pick the **Country storefront** — France is the default, but you can
   switch to any of the other 10 markets.
4. Set **Max Results** to how many products you want (the actor paginates
   automatically until it hits this number or runs out of matches).
5. Click **Start** and download the results as JSON, CSV, or Excel once the
   run finishes.

No login, no cookies, no anti-bot configuration needed on your end — the
actor ships with a working Bright Data Scraping Browser connection built in.

### Input

| Field | Type | Description |
|---|---|---|
| `searchQuery` | string | Keyword to search for, in the storefront's language. Default: `canape`. |
| `country` | string | Which storefront to scrape: `FR`, `BE`, `DE`, `ES`, `IT`, `NL`, `AT`, `PT`, `CH`, `LU`, or `UK`. Default: `FR`. |
| `maxResults` | integer | Maximum number of products to return. Default: `100`. |
| `sbrWsCdp` | string | Bright Data Scraping Browser endpoint. Optional — the actor has one preconfigured; only needed if you want to use your own Bright Data account. |
| `proxyConfiguration` | object | Kept for compatibility. Page fetching goes through the Bright Data Scraping Browser regardless of this setting. |

Example input:

```json
{
  "searchQuery": "canape",
  "country": "FR",
  "maxResults": 100
}
```

### Output

Each item in the dataset looks like this (real output from a test run):

```json
{
  "name": "Canapé nuage 3/4 places beige sable",
  "brand": "Maisons du Monde",
  "line": "Lilo",
  "price": 1199,
  "currency": "EUR",
  "productId": "223233",
  "inStock": true,
  "isMarketplace": false,
  "sponsored": false,
  "rating": 4.8,
  "reviewCount": 307,
  "imageUrl": "https://medias.maisonsdumonde.com/images/f_auto,q_auto,w_350/v1/img/223233_0/canape-nuage-3-4-places-beige-sable.jpg",
  "searchQuery": "canape",
  "country": "FR",
  "language": "fr",
  "url": "https://www.maisonsdumonde.com/FR/fr/p/canape-nuage-3-4-places-beige-sable-lilo-223233.htm",
  "scrapedAt": "2026-08-27T09:42:10.313Z"
}
```

And a discounted marketplace item, for comparison:

```json
{
  "name": "Canapé droit convertible 3 places en tissu bouclette marron",
  "brand": "Best Mobilier",
  "line": "Silvia",
  "price": 849,
  "currency": "EUR",
  "originalPrice": 1231,
  "discount": "-31%",
  "productId": "M26123033",
  "inStock": true,
  "isMarketplace": true,
  "sponsored": true,
  "url": "https://www.maisonsdumonde.com/FR/fr/p/canape-droit-convertible-3-places-en-tissu-bouclette-marron-silvia-M26123033.htm?offer=24416695",
  "country": "FR",
  "language": "fr",
  "scrapedAt": "2026-08-27T09:42:10.313Z"
}
```

#### Field reference

| Field | Description |
|---|---|
| `name` | Product name |
| `brand` | Brand — "Maisons du Monde" for first-party items, or the marketplace seller's brand |
| `line` | Collection/range name, when the product belongs to one |
| `price` | Current selling price (the sale price when discounted) |
| `currency` | Price currency, exactly as the storefront returns it — never converted |
| `originalPrice` | Pre-discount price, only present when the item is on sale |
| `discount` | Discount percentage (e.g. `-31%`) |
| `productId` | Maisons du Monde's internal product ID |
| `inStock` | `true`/`false`, or `null` when the storefront's stock signal is ambiguous (e.g. store-only) — never guessed |
| `isMarketplace` | `true` when sold by a third-party marketplace seller |
| `sponsored` | `true` when the item was a sponsored/ad placement in the results |
| `rating` / `reviewCount` | Customer rating (0–5) and review count, when available |
| `imageUrl` | Main product image |
| `searchQuery`, `country`, `language` | The parameters this item was scraped under |
| `url` | Full product page URL |
| `scrapedAt` | ISO timestamp of the scrape |

### Cost estimate

This actor runs on Apify's Pay-Per-Event pricing. One search page (up to 100
products) costs a single Bright Data Scraping Browser page load, reused for
every following page in the same run — the underlying cost works out to well
under $0.005 per result. Your Apify usage cost only settles once the run
finishes with **SUCCEEDED** status; a run that fails partway through is
billed for what it actually used, not a per-result estimate.

### Notes

- This actor scrapes **search results**, not individual product detail
  pages — full descriptions, EAN/SKU codes, and per-size stock ladders
  aren't included. Everything shown in the search results (price, stock
  status, rating, brand, image) is captured.
- `inStock` reflects the storefront's own online purchase status. A product
  marked `false` may still be available in physical stores.
- Prices and currency are always shown exactly as the storefront quotes
  them for the country you selected — no currency conversion is applied.

### Related Scrapers

- [Wayfair UK Scraper](https://apify.com/studio-amba/wayfair-uk-scraper) — furniture and home products from the UK's Wayfair storefront
- [Carrefour Scraper](https://apify.com/studio-amba/carrefour-fr-scraper) — French grocery prices, same DataDome anti-bot family
- [CDiscount Scraper](https://apify.com/studio-amba/cdiscount-scraper) — French general e-commerce products, prices, and deals

# Actor input Schema

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

Search maisonsdumonde.com for products by keyword, in the storefront's language (e.g. 'canape', 'table basse', 'luminaire'). Each search page returns up to 100 products; the scraper paginates until it reaches Max Results.

## `country` (type: `string`):

Which of Maisons du Monde's European storefronts to scrape. Prices and currency come from the storefront itself.

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

Maximum number of products to return.

## `sbrWsCdp` (type: `string`):

Bright Data Scraping Browser WebSocket CDP endpoint. Required to bypass Maisons du Monde's DataDome anti-bot protection — the product catalogue loads via a protected API call that only a real, DataDome-cleared browser session can reach. Can also be set as the SBR\_WS\_CDP environment variable.

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

Kept for compatibility — page fetching is handled by the Bright Data Scraping Browser, so this does not affect scraping.

## Actor input object example

```json
{
  "searchQuery": "canape",
  "country": "FR",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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": "canape",
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/maisonsdumonde-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": "canape",
    "maxResults": 20,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/maisonsdumonde-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": "canape",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call studio-amba/maisonsdumonde-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,studio-amba/maisonsdumonde-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/QXyeqZkVLza8AtHSt/builds/ws0dBFgNZaJAVeZJX/openapi.json
