Cdiscount Scraper: Products, Marketplace Sellers & Reviews
Pricing
from $1.80 / 1,000 product results
Cdiscount Scraper: Products, Marketplace Sellers & Reviews
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.
Pricing
from $1.80 / 1,000 product results
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
1
Bookmarked
18
Total users
9
Monthly active users
8 hours ago
Last modified
Categories
Share
Cdiscount Scraper: Products, Prices, Sellers & Reviews
Cdiscount Scraper turns Cdiscount into structured product data. Search by keyword and category with the site's own filters and sort, or paste your own product, category or search links. Every product comes with marketplace seller identity, and an optional enrichment step adds the full description, characteristics table, variants and customer reviews. Export to JSON, CSV or Excel, pull results through the API, or run it on a schedule with incremental mode to get only what changed.
Why This Scraper?
- 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, and the full set of customer reviews (a per-criterion rating breakdown plus every individual review) 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.
- Send results straight into your apps. Pipe scraped products into Notion, Linear, Airtable or Apify through MCP connectors, no extra step needed.
Use Cases
- 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 mining: pull the full customer review set and rating breakdown for a product line.
- Deal and flash-sale monitoring: filter for discounted, sponsored or promo-labelled products.
Data You Get
Sample shape: values are illustrative placeholders, not from a live record.
| Field | Example |
|---|---|
id | "14404-AABQN14352" |
productId / offerId | "14404" / "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" (also seen: used, refurbished) |
price / currency | 89.99 / "EUR" |
originalPrice | 109.99 |
discountPercent / discountAmount | 18.2 / 20.0 |
promoLabel | "Vente flash" |
isAvailable | true |
sponsored | false |
freeShipping | true |
media / previewImage | array of image URLs / the first one |
rating / reviewCount | 4.3 / 128 |
characteristics | {"Couleur": "Noir", "Memoire": "32 Go"} |
sellerId / sellerName | "334455" / "TopMobileShop" |
sellerRating / sellerRatingsCount | 92.5 / 3400 |
sellerSalesCount / sellerCountry | 18000 / "FR" |
hasDetail | true (detail enrichment ran for this row) |
sourceMode / searchWord | "search" / "telephone" |
ean | "6975760890123" (detail enrichment only) |
When Fetch product details is on, each product can also carry description (plain text), the full characteristics table (every attribute that product's page shows, not a fixed list), variants (colour, size or capacity combinations), breadcrumb (category path with names and links), ratingBreakdown (per-criterion averages) and reviews (author, date, rating, title and body for every individual review). In Incremental mode, every returned product also carries changeType (NEW, UPDATED, UNCHANGED, REAPPEARED or EXPIRED), changedFields, firstSeenAt and lastSeenAt.
How to Use
- Pick a mode:
search(keyword, category and filters) orurl(paste your own product, category or search links). - Fill in the fields for that mode, and turn on Fetch product details if you need the full description, characteristics, variants and reviews.
- Set Max items and, optionally, Max pages to control run size and cost, then click Start.
- Download the dataset as JSON, CSV or Excel, or read it through the API. Four ready-made views are available: Overview, Full detail, Marketplace sellers and Reviews.
Search by keyword:
{"mode": "search","searchWord": "aspirateur","maxItems": 30}
Search scoped to a category, sorted by price, with detail enrichment:
{"mode": "search","searchWord": "telephone","departmentId": "10","sortBy": "priceAsc","fetchDetails": true,"maxItems": 50}
Paste a category link:
{"mode": "url","urls": ["https://www.cdiscount.com/telephonie/telephone-mobile/l-14404.html"],"maxPages": 3,"maxItems": 100}
Recurring monitoring of the same search, only what changed:
{"mode": "search","searchWord": "telephone","departmentId": "10","incrementalMode": true,"maxItems": 200}
Run it from your code
Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("abotapi/cdiscount-scraper").call(run_input={"mode": "search", "searchWord": "telephone", "maxItems": 30})for product in client.dataset(run["defaultDatasetId"]).iterate_items():print(product["name"], product["price"], product["sellerName"])
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('abotapi/cdiscount-scraper').call({ mode: 'search', searchWord: 'telephone', maxItems: 30 });const { items } = await client.dataset(run.defaultDatasetId).listItems();
Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.
Filter IDs (advanced)
filterIds takes raw facet ids exactly as Cdiscount's own filter sidebar uses them, for example a brand, a price band, a condition, a seller or a colour. These ids are specific to Cdiscount's own filter system and vary by category; the sidebar on the live site is the source of truth for which ids apply to a given search.
Resume and recurring updates
- Resume (
resumeFromRunId) continues one interrupted crawl. Paste its run or dataset id and the actor skips every search or listing result that run already collected, so you don't pay twice (individually pasted product links are always re-read and returned). - Incremental mode (
incrementalMode) is for running the same search or URL set again and again on a schedule. State is kept per mode, search/URL and filter setup (or under your ownstateKey), so two differently-configured runs never mix baselines. By default (withemitExpiredandemitUnchangedoff) a run after the first one returns onlyNEWandUPDATEDproducts; unchanged products are tracked internally but not returned or billed. Turning onemitExpiredalso returns products that vanished, markedEXPIRED, but only once a run has completed a full scan of every tracked search or URL, never when Max items or Resume cut it short. A product is only ever classifiedREAPPEAREDif an earlier completed run withemitExpiredon had already marked itEXPIRED; without that prior tombstone, a product that comes back simply looksUPDATEDorUNCHANGEDlike any other rescrape, neverREAPPEAREDby default. - Combining
incrementalModewithresumeFromRunIdon the very first run for a state key bootstraps that baseline from the resumed crawl's results. If a baseline already exists for that state key, the run fails immediately instead of mixing the two.
Send results into your apps (MCP connectors)
Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape: the Apify dataset is never changed.
- Authorize a connector once under Apify -> Settings -> Integrations (Notion, Linear, Airtable, or Apify).
- Select it in the "Pipe results into your apps" input field. If the picker is empty, you haven't authorized a connector yet.
- For Notion, also set
notionParentPageUrlto the page where item pages should be created.
Notion gets one page per product, with a title and the product's key fields flattened to text. Other connectors get a best-effort write of one record per product, or a short digest message if no create-style tool is available. maxNotifyListings caps how many products are sent to each connector per run; it never changes what is written to the dataset. The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | search | search (keyword/category + filters) or url (your own URLs). |
searchWord | string | none (prefill: telephone) | Keyword to search for. Used in search mode. |
departmentId | string | none | Numeric category id to scope the search. Leave empty to search all categories. |
filterIds | array | [] | Raw facet filter ids, exactly as the site's own filter sidebar uses them (search mode, advanced). |
sortBy | string | relevance | relevance, bestsales, priceAsc, priceDesc, or rating. |
urls | array | none (prefill: one sample category URL) | Product, category or search URLs (url mode). Category and search URLs are forward-paginated. |
fetchDetails | boolean | false | Add full description, characteristics, variants, seller detail and reviews per product. |
maxItems | integer | 20 | Maximum number of products to return. The run stops once this many items are collected. |
maxPages | integer | none (omitted or 0 means no page limit; the run stops at Max items instead) | Maximum number of result pages to read per search or URL. |
resumeFromRunId | string | none | Continue one interrupted crawl without re-returning or re-charging products it already collected. |
incrementalMode | boolean | false | Recurring monitoring of the same search/URL set: return only new and changed products against a remembered baseline. |
stateKey | string | none (auto-derived from mode, search/URL and filter settings) | Name a monitoring campaign, or deliberately share state across differently-configured runs. |
emitUnchanged | boolean | false | Also return (and bill) UNCHANGED products. Off by default. |
emitExpired | boolean | false | Also return (and bill) EXPIRED products once a run fully scans every tracked search or URL. Off by default. |
proxyConfiguration | object | Apify Proxy, residential group, France | Connection settings. |
mcpConnectors | array | none | Optionally send a summary of each product to apps you authorized under Integrations. |
notionParentPageUrl | string | none | Notion connector only: page under which item pages are created. |
maxNotifyListings | integer | 20 | Cap on items written to each MCP connector per run. Does not affect the dataset. |
Output Example
Sample shape: values are illustrative placeholders, not from a live record.
{"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.0,"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." }]}
Plan Requirement
The default connection setting already targets France and uses the proxy group that tends to work most reliably for this site, so it works out of the box. For large or sustained runs, keep that group selected; you can change the country or group under Connection if needed.
FAQ
How much does it cost?
You pay per product returned, plus a detail-enrichment charge for each returned product that was enriched: every product when Fetch product details is on, and always for product links pasted in URL mode (a product page is always read in full). The Pricing tab shows current rates. Use Max items to cap the cost of any run.
Is it legal to scrape Cdiscount?
This actor collects only publicly available marketplace listings. You are responsible for how you use the data: follow Cdiscount's terms and the laws that apply to you, and get legal advice before any commercial redistribution. Product images, brand names and customer reviews may carry their own rights separate from the underlying facts.
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.
π Want more e-commerce data?
Pair this actor with these related scrapers from the same team:
| π OTTO.de Scraper Scrape OTTO.de products by search or URL. Extract prices, discounts, variants... | π Fnac Scraper Scrape Fnac (fnac.com) products: current price plus strike-through discount, colour/model... |
| π Ozon.ru Scraper Extract structured product data from Ozon.ru, Russiaβs largest marketplace. Search by... | π Boulanger.com Scrape Boulanger (boulanger.com) electronics and home-appliance products: current price... |
| π Castorama.fr Scrape Castorama.fr DIY and home-improvement products by keyword, category, or URL... | π Idealo.de Scrape Idealo.de products with identity details, GTIN, price ranges, specifications... |
π Browse all abotapi scrapers
π¬ Support & custom scrapers
- π Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
- π οΈ Need another site, extra fields or a private build? Email abotapi@proton.me or message Telegram @abotapi.
- β Enjoying it? A quick review on the actor page helps other users find it.