# Cdiscount Listings Scraper (`piotrv1001/cdiscount-listings-scraper`) Actor

The Cdiscount Listings Scraper extracts product listings from Cdiscount category pages — names, prices, currency, stock status, ratings, review counts, images, SKUs, and category breadcrumbs, with optional deep details — ideal for price monitoring, market research, and competitive analysis.

- **URL**: https://apify.com/piotrv1001/cdiscount-listings-scraper.md
- **Developed by:** [FalconScrape](https://apify.com/piotrv1001) (community)
- **Categories:** E-commerce, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 product listings

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

### 🛒 Cdiscount Listings Scraper

Easily extract **product listings from Cdiscount**, one of France's largest online marketplaces. The **Cdiscount Listings Scraper** turns any category page into clean, structured data — **product names, prices, ratings, stock status, images, and more** — ready for price monitoring, market research, and competitive analysis.

Just paste a Cdiscount category URL, set how many products you want, and run. You can download the results as **JSON, CSV, Excel, or HTML**, pull them through the [Apify API](https://docs.apify.com/api/v2), or connect them to Google Sheets, Make, Zapier, and hundreds of other [integrations](https://apify.com/integrations). Schedule runs, rotate proxies, and monitor everything from the Apify platform.

### ✨ Features

-   🏷️ **Comprehensive product data** — names, prices, currency, stock status, ratings, review counts, images, SKUs, and category breadcrumbs.
-   📄 **Automatic pagination** — the scraper walks through category pages automatically until your item limit is reached.
-   🔬 **Optional deep details** — enable detail mode to enrich every product with brand, EAN/GTIN, color, condition, full description, and weight.
-   ⚡ **Fast & reliable** — extracts straight from each page's structured data, so output stays clean and consistent.
-   💸 **Pay only for what you scrape** — transparent pay-per-result pricing with no monthly subscription.

### 🛠️ How It Works

1. **Add category URLs** — open a category on [cdiscount.com](https://www.cdiscount.com), copy the page URL, and paste it into **Category / listing URLs**.
2. **Set your limit** — choose how many products to collect with **Max items**.
3. **(Optional) Go deeper** — turn on **Scrape product detail pages** to add brand, EAN, color, condition, description, and weight to each product.
4. **Run the scraper** — start the run and download structured product data in seconds.

### 📥 Input

| Field | Description |
|-------|-------------|
| **Category / listing URLs** (`startUrls`) | One or more Cdiscount category/listing page URLs to scrape. |
| **Max items** (`maxItems`) | Maximum number of products to collect across all URLs. Default: `50`. |
| **Scrape product detail pages** (`scrapeDetails`) | When enabled, visits each product page for extra fields. Default: `false`. |
| **Proxy configuration** (`proxyConfiguration`) | Optional proxy settings for larger runs. |

#### Example input

```json
{
    "startUrls": [
        { "url": "https://www.cdiscount.com/informatique/ordinateurs-pc-portables/ordinateur-portable/l-1070992.html" }
    ],
    "maxItems": 50,
    "scrapeDetails": false
}
````

### 📊 Sample Output Data

The scraper provides structured JSON output with key product details. Example:

```json
[
    {
        "name": "PC portable Gamer LENOVO Legion 5 15IRX10 - 15,3\" 165 Hz - Core i7-13650HX - RTX 5070 - 32 Go - 512 Go",
        "sku": "83ly007hfr",
        "price": 1479.99,
        "currency": "EUR",
        "inStock": true,
        "availability": "InStock",
        "imageUrl": "https://www.cdiscount.com/pdt2/h/f/r/9/300x300/83ly007hfr/rw/pc-portable-gamer-lenovo-legion-5.jpg",
        "productUrl": "https://www.cdiscount.com/informatique/ordinateurs-pc-portables/.../f-10709-83ly007hfr.html",
        "ratingValue": 4.5,
        "reviewCount": 77,
        "breadcrumbs": ["Informatique", "Ordinateur Portable"],
        "category": "Ordinateur Portable",
        "position": 1,
        "listingUrl": "https://www.cdiscount.com/informatique/ordinateurs-pc-portables/ordinateur-portable/l-1070992.html"
    }
]
```

With **Scrape product detail pages** enabled, each item also includes:

```json
{
    "brand": "LENOVO",
    "gtin": "0198158801072",
    "color": "Eclipse Black",
    "condition": "New",
    "description": "PC portable Gamer LENOVO Legion 5 15IRX10 ...",
    "weightKg": 2.1,
    "bestRating": 5
}
```

### 🧾 Output Data Fields

| Field | Description |
|-------|-------------|
| `name` | Product title |
| `sku` | Cdiscount product SKU |
| `price` | Current price |
| `currency` | Price currency (e.g. `EUR`) |
| `inStock` / `availability` | Stock status |
| `imageUrl` | Main product image |
| `productUrl` | Link to the product page |
| `ratingValue` / `reviewCount` | Average rating and number of reviews |
| `breadcrumbs` / `category` | Category path and leaf category |
| `position` | Position on the listing page |
| `brand`, `gtin`, `color`, `condition`, `description`, `weightKg` | Extra fields (detail mode only) |

### 💰 How Much Does It Cost to Scrape Cdiscount?

This Actor uses a **pay-per-event** pricing model, so you only pay for the data you collect — no monthly fee.

| Event | Price (USD) |
|-------|-------------|
| Actor start | $0.001 per run |
| Product listing item | $0.0015 per product |
| Product detail item | $0.004 per product (detail mode) |

For example, scraping **1,000 product listings** costs about **$1.50**. New Apify accounts include free monthly usage credits, so you can start testing for free.

### 💡 Tips

- **Start small** — keep `maxItems` low for a quick test, then scale up once you're happy with the output.
- **Skip detail mode for bulk price tracking** — listing pages already include price, rating, and stock, which is all you need for most monitoring use cases.
- **Enable detail mode for catalog enrichment** — when you need EAN/GTIN, brand, condition, and full descriptions.
- **Combine multiple categories** — add several category URLs in one run to build a broad dataset.

### ❓ FAQ

**Is web scraping legal?**
Scraping publicly available data is generally legal. This Actor only collects publicly accessible product information and does not gather personal data. You are responsible for how you use the scraped data and for complying with Cdiscount's Terms of Service and applicable laws.

**Why are some fields empty?**
Not every product lists every attribute. Fields that aren't published for a given product are returned as `null`.

**Can I scrape search results?**
This Actor is optimized for category/listing pages, which provide the cleanest structured data. Paste category URLs for best results.

**Something not working?**
Report issues or request features via the **Issues** tab on the Actor page — feedback is welcome, and custom solutions are available.

# Actor input Schema

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

Cdiscount category or listing page URLs to scrape. Open a category on cdiscount.com, copy the page URL, and paste it here. The scraper paginates automatically until it reaches the item limit.

## `maxItems` (type: `integer`):

Maximum number of products to scrape across all start URLs.

## `scrapeDetails` (type: `boolean`):

When enabled, the scraper also collects extra fields for each product (brand, EAN/GTIN, color, condition, description, weight). This is slower as it loads one extra page per product.

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

Proxy settings. Cdiscount works without a proxy, but a proxy helps with larger runs and rate limiting.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.cdiscount.com/informatique/ordinateurs-pc-portables/ordinateur-portable/l-1070992.html"
    }
  ],
  "maxItems": 50,
  "scrapeDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# 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 = {
    "startUrls": [
        {
            "url": "https://www.cdiscount.com/informatique/ordinateurs-pc-portables/ordinateur-portable/l-1070992.html"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/cdiscount-listings-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 = { "startUrls": [{ "url": "https://www.cdiscount.com/informatique/ordinateurs-pc-portables/ordinateur-portable/l-1070992.html" }] }

# Run the Actor and wait for it to finish
run = client.actor("piotrv1001/cdiscount-listings-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://www.cdiscount.com/informatique/ordinateurs-pc-portables/ordinateur-portable/l-1070992.html"
    }
  ]
}' |
apify call piotrv1001/cdiscount-listings-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=piotrv1001/cdiscount-listings-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Cdiscount Listings Scraper",
        "description": "The Cdiscount Listings Scraper extracts product listings from Cdiscount category pages — names, prices, currency, stock status, ratings, review counts, images, SKUs, and category breadcrumbs, with optional deep details — ideal for price monitoring, market research, and competitive analysis.",
        "version": "0.0",
        "x-build-id": "hioZd2b4TfqiJAbdI"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/piotrv1001~cdiscount-listings-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-piotrv1001-cdiscount-listings-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/piotrv1001~cdiscount-listings-scraper/runs": {
            "post": {
                "operationId": "runs-sync-piotrv1001-cdiscount-listings-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/piotrv1001~cdiscount-listings-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-piotrv1001-cdiscount-listings-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "startUrls"
                ],
                "properties": {
                    "startUrls": {
                        "title": "Category / listing URLs",
                        "type": "array",
                        "description": "Cdiscount category or listing page URLs to scrape. Open a category on cdiscount.com, copy the page URL, and paste it here. The scraper paginates automatically until it reaches the item limit.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxItems": {
                        "title": "Max items",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of products to scrape across all start URLs.",
                        "default": 50
                    },
                    "scrapeDetails": {
                        "title": "Scrape product detail pages",
                        "type": "boolean",
                        "description": "When enabled, the scraper also collects extra fields for each product (brand, EAN/GTIN, color, condition, description, weight). This is slower as it loads one extra page per product.",
                        "default": false
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy settings. Cdiscount works without a proxy, but a proxy helps with larger runs and rate limiting.",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
