Cdiscount Scraper at a glance
Cdiscount Scraper is a ready-to-run Apify actor from abotapi for collecting ecommerce data. Its documented output includes id, name, change type (incremental mode), brand and image, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $2.60 per 1,000 results on the Apify Free plan and from $1.80 on paid plans, with smaller per-run or optional feature charges listed on Apify.
- Runs on
- Apify cloud: console, API, schedules and integrations
- Data type
- Ecommerce, Developer Tools, Automation
- Pricing
- $2.60 per 1,000 results (Free plan), from $1.80 on paid plans
- Output
- Documented below · JSON, CSV, Excel
- Inputs
- 19 options
- Run success
- 98.9% of completed public runs in the last 30 days
Scrape product data from Cdiscount.com by keyword, category, or URL. Apply filters and sorting, then enrich results with full product details, marketplace seller information, pricing, availability, specifications, ratings, and customer reviews.
What Cdiscount Scraper: Products, Marketplace Sellers & Reviews can do
- Two ways to find products. Search by keyword and category with Cdiscount's own filters and sort, or paste your own product, category or search links.
- Marketplace seller identity on every result. Cdiscount is mostly a marketplace, so each product carries the actual seller's id, name, rating, rating count and sales count, not just "sold by Cdiscount".
- Optional detail enrichment. Switch on the full description, the complete characteristics table, variants, shipping and energy details, the customer rating breakdown and the reviews shown on the product page (a handful, not the full set) for the products you actually need it on.
- Built for schedules. Incremental mode returns only new and updated products against a remembered baseline on recurring runs, and a genuinely blocked run fails loudly instead of quietly returning an empty dataset.
- Resume one interrupted crawl. Continue a large pull from its own previous run or dataset id without paying again for search or listing results it already collected.
- Resilient enrichment. If detail-page fetches start failing at a high rate mid-run, the actor stops retrying and falls back to base listings instead of spending the rest of the run on retries.
Choose what to collect
These inputs let you configure Cdiscount Scraper: Products, Marketplace Sellers & Reviews. Open the actor on Apify to enter your values and review the current options.
| Input | What it controls |
|---|---|
modestring · required | Choose Search to use a keyword, category and filters. Choose URLs to paste Cdiscount product, category or search links. Only the chosen mode is used: in Search mode the Start URLs are ignored, in URL mode the keyword, category and filters are ignored. |
searchWordstring | Keyword to search for, e.g. "telephone" or "aspirateur". Used in search mode. |
departmentIdstring | Numeric Cdiscount department id to scope the search to one category (e.g. "10" for Téléphonie). You can also paste a category link (.../l-NNNN.html) or search link and the id is taken from it; anything else stops the run with a clear error. Copy it from a Cdiscount category URL (the number after /l- or /search/). Leave empty to search all categories. |
filterIdsarray | Raw Cdiscount facet filter ids to narrow results, exactly as the site's own filter sidebar uses them (e.g. "Neuf ou occasion/\"neuf\"", "Marque/\"samsung\"", "categorycodepath/\"07/0703\""). Run once with maxItems=1 and read the facets debug field logged at INFO level to discover the ids for your category, then pass the ones you want here. |
sortBystring | Order in which search results are returned. Used in search mode. |
urlsarray | Cdiscount product URLs (.../f-NNNNN-XXXXXXXX.html), category/listing URLs (.../l-NNNNN.html, or a page-2+ link .../l-NNNNN-P.html), brand/hub listing URLs (.../v-N-N.html), or search URLs (/search/{department}/{word}.html). Listing/search URLs are forward-paginated. |
fetchDetailsboolean | Open each product's page to add the full description, complete characteristics table, variants, marketplace seller detail, shipping and energy details, the rating breakdown and the reviews shown on the product page (a handful, not the full set). Adds one detail request per product. |
Show 12 more inputs
| Input | What it controls |
|---|---|
maxItemsinteger | Maximum number of products to return. The run stops once this many items are collected. |
maxPagesinteger | Maximum number of result pages to read per search/listing URL. Leave empty (0) to read until the results end or Max items is reached; the run never reads more than 100 pages per search or URL. |
includeSponsoredboolean | Keep sponsored (advertised) placements in search and listing results. Turn off to drop them before they are returned or billed. |
resumeFromRunIdstring | Paste a previous run ID or dataset ID to continue a large crawl of products without returning or charging for products already collected there. Use this after an interrupted run, or when continuing a product pull in another run. For recurring monitoring of the same search, use Incremental mode below instead. |
incrementalModeboolean | Turn this on for daily or recurring monitoring. The first run returns all matching products as NEW. Later runs normally return only NEW, UPDATED, and REAPPEARED products. A product is UPDATED when a tracked field changes: price, original price and discount, promotion labels, availability, seller, name, brand, rating and review count, and (with Fetch product details) description, characteristics, variants and reviews. Never counted as a change (still returned): image lists (media, previewImage), the sponsored flag, and page, rankOnPage, scrapedAt (extend the list with Ignore fields below). Turn on "Emit unchanged" or "Emit expired" only when you also want those products returned (and billed). State is kept separately for each mode/search-or-URL/filter setup; use State key when you want to name or deliberately share a monitoring campaign. To continue one specific interrupted run instead, use Resume from a previous run above. |
stateKeystring | Optional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently-configured runs. Leave empty to let the actor derive a key automatically from the mode, search/URL and filter settings -- different searches then never mix state with each other. |
emitUnchangedboolean | Off by default. Turn on to also return products that have not changed since the last run, marked UNCHANGED. This returns -- and bills -- extra rows you already have, so leave it off unless you specifically want the full snapshot every run. |
emitExpiredboolean | Off by default. Turn on to also return products that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned every tracked search/URL -- not when Max items capped it or when Resume was used. This returns -- and bills -- extra synthetic rows, so leave it off unless you need expiry tracking. |
ignoreFieldsForChangesarray | Output field names that should NOT make a product count as UPDATED. Always ignored: media and previewImage (the same photos are served from rotating image-server addresses), sponsored (an ad-slot flag), and page, rankOnPage, scrapedAt and fetchedAt (where and when this run saw the product). Add fields such as description or reviews here if changes to them are not relevant to you. Use a dotted path (for example variants.price) to ignore a field inside a list of objects. Ignored fields are still returned in the output. |
mcpConnectorsarray | Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. Leave empty to skip. |
notionParentPageUrlstring | URL or id of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors. |
maxNotifyListingsinteger | Cap on items written to each MCP connector per run. Does not affect the dataset. |
Fields in the output
The documented dataset includes the fields below. Availability can depend on the source page and selected mode.
idID (text)nameName (text)changeTypeChange type (incremental mode) (text)brandBrand (text)previewImageImage (image)pricePrice (number)currencyCurrency (text)originalPriceWas price (number)discountPercentDiscount % (number)promoLabelPromo (text)isAvailableAvailable (boolean)ratingRating (number)Show 28 more fields
reviewCount# Reviews (number)sellerNameSeller (text)urlURL (link)changedFieldsChanged fields (incremental mode) (array)firstSeenAtFirst seen (incremental mode) (date)lastSeenAtLast seen (incremental mode) (date)categoryPathCategory path (text)descriptionDescription (text)characteristicsCharacteristics (object)variantsVariants (object)eanEAN (text)manufacturerModelNumberManufacturer model no. (text)maxOrderQuantityMax quantity per order (number)energyClassEnergy class (text)isTradeInEligibleTrade-in eligible (boolean)isFreeShippingFree shipping (boolean)shippingLabelShipping label (text)shippingOriginShipped from (text)questionsCountQuestions asked (number)sellerIdSeller ID (text)sellerRatingSeller rating (number)sellerRatingsCountSeller ratings (number)sellerSalesCountSeller sales (number)reviewsreviewsauthorAuthor (text)dateDate (text)titleTitle (text)bodyReview text (text)Example output
An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.
{
"id": "14404-AABQN14352",
"productId": "14404",
"offerId": "AABQN14352",
"name": "DOOGEE Note56 Pro Smartphone 6.56\" 36Go 4+32",
"brand": "DOOGEE",
"url": "https://www.cdiscount.com/telephonie/telephone-mobile/doogee-note56-pro-smartphone-6-56-36go-4-32-12/f-14404-aabqn14352.html",
"categoryPath": "07/0703",
"condition": "Neuf",
"price": 89.99,
"currency": "EUR",
"originalPrice": 109.99,
"discountPercent": 18.2,
"discountAmount": 20,
"promoLabel": "Vente flash",
"isAvailable": true,
"sponsored": false,
"freeShipping": true,
"media": [
"https://example.com/img/p1.jpg",
"https://example.com/img/p2.jpg"
],
"previewImage": "https://example.com/img/p1.jpg",
"rating": 4.3,
"reviewCount": 128,
"characteristics": {
"Couleur": "Noir",
"Memoire": "32 Go"
},
"sellerId": "334455",
"sellerName": "TopMobileShop",
"sellerRating": 92.5,
"sellerRatingsCount": 3400,
"sellerSalesCount": 18000,
"sellerCountry": "FR",
"hasDetail": true,
"sourceMode": "search",
"searchWord": "telephone",
"ean": "6975760890123",
"description": "Smartphone with a 6.56 inch display, 32GB storage and 4GB RAM.",
"variants": [
{
"name": "Noir 32Go",
"url": "https://example.com/f-14404-variant.html"
}
],
"ratingBreakdown": [
{
"criterion": "Qualite",
"average": 4.1
}
],
"reviews": [
{
"author": "M. Dupont",
"date": "2026-06-01",
"rating": 5,
"title": "Tres bien",
"body": "Rapide et fiable."
}
]
}Ways to use this data
- Price and promotion tracking: watch a keyword or category's prices, discounts and promo labels over time with Incremental mode.
- Marketplace seller research: see who is actually selling a listing, and compare seller ratings and sales volume across competing offers of the same product.
- Catalog and assortment analysis: build category-level datasets of products, brands, pricing and availability.
- Review sampling: pull the rating breakdown, the total review count and the reviews shown on each product page for a product line.
- Deal and flash-sale monitoring: filter for discounted, sponsored or promo-labelled products.
Before you run
Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.
Questions about this actor
What data does Cdiscount Scraper return?
The documented output for Cdiscount Scraper includes id, name, change type (incremental mode), brand, image, price, currency and was price. Availability of each field depends on the source page and the selected mode.
How much does Cdiscount Scraper cost?
It costs $2.60 per 1,000 results on the Apify Free plan and from $1.80 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.
Can I get only new or changed products on a schedule?
Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new and updated products against a remembered baseline for that search or URL set, and unchanged products are neither returned nor billed unless you turn on Emit unchanged. Emit expired marks products that vanished, but only once a run has completed a full scan of every tracked search or URL, not when Max items or Resume cut it short; and a product only comes back as REAPPEARED after one of those completed runs already marked it EXPIRED, not on every reappearance by default.
What's the difference between Resume and Incremental mode?
Resume from a previous run continues one specific interrupted crawl, skipping products that run already collected, and is meant to be used once. Incremental mode is for running the same search or URL set again and again and getting a diff every time. Combining Incremental mode with Resume on the first run for a state key bootstraps the baseline from that resumed crawl; if a baseline already exists for that state key, the run fails immediately instead of silently mixing the two.
Why did my run fail instead of returning an empty dataset?
If the actor could not establish a working connection to the site, or every page it tried came back blocked, the run fails with a message that says so, so "no products found" is never confused with "nothing could be read". A genuinely empty search (a keyword with no matches) still finishes successfully with zero rows. An invalid resumeFromRunId, or combining Incremental mode with Resume when a baseline already exists for that state key, also fails the run immediately rather than mixing data.
Can I use it with AI agents or MCP?
Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.
