# Cdiscount Price Tracker — Monitor Prices & Detect Discounts (`apikiy/cdiscount-price-tracker`) Actor

Track product prices, ratings, availability, and deals on Cdiscount (France's largest e-commerce platform) with automated browser scraping. Works \*\*without prox

- **URL**: https://apify.com/apikiy/cdiscount-price-tracker.md
- **Developed by:** [Julien ApiKiy](https://apify.com/apikiy) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 0 monthly users, 96.8% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 results

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 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

## Cdiscount Price Tracker

Track product prices, ratings, availability, and deals on Cdiscount (France's largest e-commerce platform) with automated browser scraping. Works **without proxy** using advanced anti-detection techniques.

### Features

- **French Marketplace Focus**: Optimized for Cdiscount.fr with support for Belgian, German, Italian, and Spanish marketplace sellers
- **Multi-URL Tracking**: Track unlimited product URLs in a single run
- **Keyword Search Mode**: Search Cdiscount by keyword and extract top results with prices
- **Smart Price Parser**: Handles French price format (29,99 €) with non-breaking spaces
- **Discount Detection**: Automatically detects and calculates discount percentages
- **Rating & Reviews**: Star rating and review count extraction
- **Seller Information**: Extract seller name from product pages
- **Stock Monitoring**: Availability status on every product
- **Anti-Detection**: Random delays, user-agent rotation, stealth scripts, navigator overrides
- **Price Alerts**: Check if price drops below threshold with webhook notifications
- **Price History**: Store price data points in KV store for trend tracking

### Use Cases

- **Price comparison** across Cdiscount marketplace sellers
- **Deal hunting** — find the lowest price for any product
- **Competitive intelligence** — monitor competitor pricing on Cdiscount
- **Price history tracking** — run periodically to build price datasets
- **Price alerts** — get notified when a product drops below your target price
- **Stock alerts** — monitor availability across marketplace sellers

### Input

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `productUrls` | `string[]` | Yes\* | Cdiscount product page URLs to track |
| `searchKeywords` | `string[]` | Yes\* | Keywords to search for on Cdiscount |
| `maxResults` | `number` | No | Max results per keyword (default: 10, max: 50) |
| `marketplaces` | `string[]` | No | Marketplaces: FR, BE, DE, IT, ES (default: FR) |
| `maxConcurrency` | `number` | No | Concurrent browsers (default: 2) |
| `delayMin` | `number` | No | Min delay ms between requests (default: 2000) |
| `delayMax` | `number` | No | Max delay ms between requests (default: 5000) |
| `priceAlerts` | `string` | No | JSON array of alert rules |
| `webhookUrl` | `string` | No | Webhook URL for price alert notifications |

\*at least one of `productUrls` or `searchKeywords` required

#### Price Alerts Format

```json
[
  {
    "email": "user@example.com",
    "maxPrice": 50.00,
    "productUrl": "https://www.cdiscount.com/...",
    "keywords": ["iphone", "samsung"]
  }
]
```

### Output

Each result includes:

```json
{
  "productId": "iphone-15-pro-128go",
  "name": "Apple iPhone 15 Pro 128 Go - Titane Noir",
  "marketplace": "FR",
  "price": 1099.00,
  "currency": "EUR",
  "originalPrice": 1229.00,
  "discountPercentage": 10.6,
  "rating": 4.5,
  "reviewCount": 1234,
  "seller": "Amazon Marketplace",
  "inStock": true,
  "availability": "En stock",
  "url": "https://www.cdiscount.com/le-monde/iphone-15-pro.html",
  "imageUrl": "https://img.cdiscount.com/...",
  "scrapedAt": "2025-01-15T10:30:00.000Z"
}
```

### Anti-Detection Measures

This actor is designed to work **without proxy** by implementing:

1. **Random delays** between requests (2-5 seconds by default)
2. **User-agent rotation** across 8 different browser profiles
3. **Navigator overrides** to hide webdriver detection
4. **Plugin and language faking** to appear as a real browser
5. **Chrome runtime object injection** to bypass fingerprinting
6. **French language preference** for realistic Cdiscount browsing

### Setup

```bash
## Install dependencies
npm install

## Run locally (requires Apify account)
npm start

## Run tests
npm test
```

### Docker

```bash
docker build -t cdiscount-price-tracker .
docker run -e APIFY_TOKEN=your_token cdiscount-price-tracker
```

### 💰 Pricing

Pay-per-use, no monthly fees:

| | Price |
|---|---|
| **Actor start** | $0.01 |
| **Per result** | $0.01 |

> 💡 Example: A run returning 500 results costs **$5.01** total ($0.01 start + 500 × $0.01).

### Notes

- Works **without proxy** thanks to anti-detection measures
- Respects rate limits with configurable delays (default 2-5s)
- Supports both direct URL tracking and keyword search discovery
- Results are stored in Apify Dataset — export as JSON, CSV, or Excel
- Price history is stored in KV store for trend tracking

### Keywords

Cdiscount, price tracker, France, e-commerce, price comparison, deals, Cdiscount.fr, marketplace, shopping, deal finder, price alert, French marketplace, product tracker, price monitor

# Actor input Schema

## `productUrls` (type: `array`):

Cdiscount product page URLs to track

## `searchKeywords` (type: `array`):

Keywords to search for on Cdiscount

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

Maximum number of search results per keyword

## `marketplaces` (type: `array`):

Cdiscount marketplaces to search

## `priceAlerts` (type: `string`):

Alert when price drops below threshold. JSON format: \[{"email":"user@example.com","maxPrice":50,"productUrl":"...","keywords":\["iphone"]}]

## `webhookUrl` (type: `string`):

URL to send price alert notifications to (POST request)

## `maxConcurrency` (type: `integer`):

Max concurrent browser pages

## `maxRetries` (type: `integer`):

Max retries per failed request

## `delayMin` (type: `integer`):

Minimum delay between requests in milliseconds

## `delayMax` (type: `integer`):

Maximum delay between requests in milliseconds

## `debugMode` (type: `boolean`):

Enable verbose logging

## Actor input object example

```json
{
  "searchKeywords": [
    "iPhone 15"
  ],
  "maxResults": 10,
  "marketplaces": [
    "FR"
  ],
  "maxConcurrency": 2,
  "maxRetries": 3,
  "delayMin": 2000,
  "delayMax": 5000,
  "debugMode": 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 = {
    "searchKeywords": [
        "iPhone 15"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("apikiy/cdiscount-price-tracker").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 = { "searchKeywords": ["iPhone 15"] }

# Run the Actor and wait for it to finish
run = client.actor("apikiy/cdiscount-price-tracker").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 '{
  "searchKeywords": [
    "iPhone 15"
  ]
}' |
apify call apikiy/cdiscount-price-tracker --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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