Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Start by choosing the right access route. If you operate Cdiscount listings, use the documented Octopia Marketplace API from your seller account. It is designed for listing, offer, order, customer-service and financial workflows—not as a general, public read-only product API. If you have another authorized analytical use, inspect the page response, look for structured data such as JSON-LD, and build a parser that tolerates missing fields and markup changes. The available public material does not establish whether independent scraping, particular request rates or downstream reuse are permitted, so check the current Cdiscount conditions and obtain appropriate authorization before collecting data.

Choose the access route before writing code

For sellers: use the Octopia Marketplace API

Cdiscount’s English Marketplace API documentation describes an Octopia-provided API for sellers. It covers listing creation, offer updates, orders, customer relations and financial statements. Seller API credentials are obtained from the Seller Area settings after registration. Cdiscount’s seller FAQ also describes catalogue integration and stock updates through the Seller Space or API.

This is the official route evidenced for seller operations. It should not be represented as a public, read-only API for arbitrary Cdiscount product pages. If your objective is to manage your own offers, synchronize stock or process orders, an API integration gives you a documented seller workflow instead of depending on page markup.

For authorized research or analysis: inspect pages cautiously

When your use is separately authorized, a page-by-page inspection workflow can extract fields that are actually present in each response. This is a different access model from the seller API: the page is the source, and its HTML or embedded data can change without notice.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Question Seller API Authorized page inspection
Primary purpose Listings, offers, orders, customer relations and financial statements Extracting fields rendered or embedded in product pages
Access model Seller account credentials and documented API operations Individual page responses and a parser
Data contract Documented seller operations Markup and structured data that may change
Operational issues Seller workflow and account controls Possible JavaScript rendering, consent pages, blocks or refusals
Permission and reuse Follow seller agreement and current conditions Verify authorization, terms, rate limits and reuse rights before collection

Check permission and privacy first

Public visibility is not proof that automated collection or reuse is allowed. A successful HTTP response, a robots file copied into a third-party test fixture, or a vendor’s scraping recipe does not settle your rights. Cdiscount’s current conditions landing page includes a version history, including a 6 July 2026 version, but the material available here does not specify rules for independent scraping, request rates or dataset reuse. Read the conditions that apply to your account and purpose, and obtain written authorization when required.

Cdiscount’s privacy notice describes consent-dependent advertising and tracking contexts that can include pages viewed, product references, searches and cart contents. Limit your collection to the product fields you need. Do not collect account information, identifiers, cart data or tracking events merely because they are technically observable, and do not treat the privacy notice as permission to scrape.

Inspect a representative product page

Before scaling, examine a small, authorized sample and document what the response really contains. Crawlbase reports that Cdiscount product pages usually include JSON-LD with a product name, price, currency and availability. That is a vendor observation, not a guaranteed Cdiscount schema, so make every field optional and retain provenance.

  1. Define the allowed scope. List the domains, URLs, fields, collection frequency, retention period and permitted uses covered by your authorization.
  2. Fetch conservatively. Request only pages you are allowed to access, use a modest rate, identify your client where appropriate, and stop when the site or your authorization says to stop.
  3. Inspect the raw response. Search for <script type="application/ld+json"> blocks before depending on visual CSS selectors.
  4. Parse only present values. Keep missing price, currency or availability as missing; never silently infer a value from another field.
  5. Store provenance. Save the source URL and retrieval timestamp with every record because price and stock are time-dependent.
  6. Classify failures. Distinguish a normal product page from a consent page, block page, CAPTCHA, timeout, empty result or server error.
  7. Recheck regularly. Compare samples after layout changes and stop rather than escalating around a refusal.

A defensive Python extractor for JSON-LD

The following illustrative script is intentionally conservative. It parses JSON-LD already returned in an authorized response; it does not bypass a block, solve a CAPTCHA or attempt to defeat consent controls. Run it only against URLs and fields covered by your permission.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
import json
from datetime import datetime, timezone
from decimal import Decimal, InvalidOperation
from urllib.parse import urlparse

import requests
from bs4 import BeautifulSoup


def as_list(value):
    if isinstance(value, list):
        return value
    return [value]


def first_product(value):
    for item in as_list(value):
        if isinstance(item, dict):
            if item.get("@type") == "Product":
                return item
            # Some graphs nest Product objects in @graph.
            graph = item.get("@graph")
            if isinstance(graph, list):
                found = first_product(graph)
                if found:
                    return found
    return None


def parse_product(url):
    parsed = urlparse(url)
    if parsed.scheme not in {"https"}:
        raise ValueError("Use an HTTPS URL in your authorized scope")

    response = requests.get(
        url,
        headers={"User-Agent": "AuthorizedProductResearch/1.0"},
        timeout=30,
    )
    response.raise_for_status()
    soup = BeautifulSoup(response.text, "html.parser")

    products = []
    for node in soup.select('script[type="application/ld+json"]'):
        try:
            products.append(json.loads(node.string or node.get_text()))
        except json.JSONDecodeError:
            continue

    product = None
    for candidate in products:
        product = first_product(candidate)
        if product:
            break
    if not product:
        return {
            "url": url,
            "retrieved_at": datetime.now(timezone.utc).isoformat(),
            "status": "no_product_jsonld",
        }

    offers = product.get("offers")
    offer = offers[0] if isinstance(offers, list) and offers else offers
    if not isinstance(offer, dict):
        offer = {}

    price = offer.get("price")
    if price is not None:
        try:
            price = str(Decimal(str(price)))
        except (InvalidOperation, ValueError):
            price = None

    return {
        "url": url,
        "retrieved_at": datetime.now(timezone.utc).isoformat(),
        "name": product.get("name"),
        "price": price,
        "currency": offer.get("priceCurrency"),
        "availability": offer.get("availability"),
        "status": "ok",
    }


if __name__ == "__main__":
    print(json.dumps(parse_product("https://www.cdiscount.com/"), ensure_ascii=False, indent=2))

Replace the example URL with an authorized product URL. The script records a timestamp, reports when no product JSON-LD is found and avoids treating malformed prices as valid numbers. In production, add your approved queue, rate limits, retry policy and storage layer; do not add logic that evades a refusal.

Rendering, consent pages and failed requests

Crawlbase reports that, in its own observed August 2026 sample, all successful Cdiscount calls used its JavaScript token. It also reports 403 refusals and consent or block responses among failures. Those are provider-specific observations, not a universal success rate or a recommendation to evade access controls. The vendor additionally reports 99.5% success across requests from its accounts in that period; that figure applies only to its traffic and stated sample.

Recognize a non-product response

  • Consent or privacy page: the expected JSON-LD is absent and the body contains consent language. Follow your authorization and consent requirements; do not automatically click through for unrelated data.
  • Bot check or CAPTCHA: stop and record the refusal. Do not attempt to solve or circumvent it unless you have explicit, appropriate authorization and a compliant process.
  • 403 or other denial: treat it as a refusal, reduce activity if your terms require it, and contact the site or data owner rather than escalating.
  • JavaScript shell: the initial HTML may lack product data. If browser rendering is expressly authorized, use an approved renderer and still parse only the resulting fields.
  • Timeout or server error: apply bounded retries with backoff, preserve the error and timestamp, and avoid turning retries into a high-rate crawl.

Normalize prices and availability without inventing facts

Keep the original value alongside any normalized value. Store currency as a separate field, preserve decimal precision, and record whether a value came from JSON-LD, visible text or another authorized source. Do not convert currencies unless you also store the exchange-rate source and time. Availability labels can be localized or represented as schema URLs; retain the original representation and map it to an internal vocabulary only when the mapping is documented.

Prices and stock can change between retrievals. A timestamped record is a snapshot, not a timeless offer. If you publish or compare results, show the retrieval time and source URL and explain that later visits may differ.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Operational design for a reliable, authorized collector

Rate and scheduling controls

Use a queue with a defined maximum concurrency, per-host delay and exponential backoff for transient failures. Cache responses for the shortest period compatible with your purpose, and schedule rechecks according to the business need rather than polling continuously. A 403, CAPTCHA or explicit refusal should remove the URL from automatic retries until an authorized decision is made.

Data quality checks

  • Require an HTTPS source URL and retrieval timestamp.
  • Flag records missing a product name, currency or price instead of filling them from guesses.
  • Keep raw structured-data fragments or a hash when your retention policy permits, so parser changes can be audited.
  • Track parser version and response classification.
  • Run a small regression set after page-template changes.

Security and retention

Keep API keys, cookies and authorization headers out of logs. Encrypt stored data where appropriate, restrict access, and delete personal or tracking information that is outside the approved scope. Separate operational credentials from the dataset and rotate them according to your organization’s policy.

When a screenshot is useful—and when it is not

A screenshot can preserve visual evidence of an authorized page state, but it is not a substitute for structured product data. Images do not reliably provide machine-readable price, currency or availability, and a screenshot may include personal or tracking content. Use one only when your purpose and authorization cover visual capture.

Or skip the browser setup

ScreenshotNeo provides a website screenshot API and MCP server for developers. A single request can capture an authorized URL as PNG, JPEG, WebP or PDF. Before capture, it accepts the cookie or consent banner like a visitor and removes more than 60 known consent platforms, newsletter popups and chat widgets; each cleanup step can be turned off. Only clean shots are billed: bot checks or CAPTCHAs, blank pages, timeouts, failed loads and cache hits cost nothing, and the response identifies the result with X-Page-Verdict and X-Billed headers.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

For an authorized Cdiscount page, the basic call is:

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp

Replace the example target with the URL you are allowed to capture. See the complete option reference in the ScreenshotNeo documentation.

Python:

import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"}, timeout=90)
r.raise_for_status()
open("shot.webp", "wb").write(r.content)

Node.js:

const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const data = Buffer.from(await res.arrayBuffer());
await Bun.write('shot.webp', data);

ScreenshotNeo also supports full-page capture with lazy images loaded, CSS-selector element capture, dark mode, 12 device presets plus custom viewports, retina scale, PDF paper sizes and page ranges, custom CSS and JavaScript, clicks, selector or network-idle waits, request and resource blocking, headers, cookies, user agents, Authorization, timezone, geolocation, transparent backgrounds, resizing, chosen cache TTLs, signed links, asynchronous jobs with signed webhooks, up to 100 URLs per bulk call, a usage API and an OpenAPI specification. Its parameter names are compatible with those used by other screenshot APIs, which can simplify migration. An MCP server exposes take_screenshot, get_page_info and capture_pdf to Claude, Cursor and other MCP clients.

Plan Included shots Price
Free 1,000 per month $0, no card
Starter 3,000 $5
Growth 15,000 $15
Pro 60,000 $39
Scale 250,000 $99
Business 1,000,000 $249

Yearly billing provides two months free, and every feature is available on every plan. Start with 1,000 free screenshots a month with no card; paid plans start at $5 for 3,000.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Troubleshooting checklist

“The API response has no product data”

Confirm that you are using the seller API for a seller operation, or that the page-inspection authorization covers the target. For page parsing, inspect the raw body for JSON-LD and classify consent, block, shell and error pages before changing selectors.

“The price is present but unusable”

Check whether the value is a string, whether the currency is separate, and whether an offer array contains multiple entries. Preserve the original value and flag malformed or missing data; do not guess a decimal separator or currency.

“Requests receive 403 responses”

Stop automatic retries, record the response and consult the applicable conditions or data owner. A denial is not an invitation to rotate identities, bypass controls or increase concurrency.

“Results changed between runs”

Compare retrieval timestamps, URL variants, localization settings and response classifications. Product prices, availability, consent state and page templates can all change; retain provenance and parser versions.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

“Screenshots include a banner or widget”

With an authorized ScreenshotNeo capture, ensure the relevant cleanup options are enabled and use a wait condition when the page needs time to settle. If the page is a bot check, blank result or failed load, the response verdict identifies that outcome; do not treat it as product evidence.

Bottom line

Use Cdiscount’s documented seller API for your own marketplace operations. For any other collection, obtain authorization, inspect a representative response, parse optional structured data defensively, preserve timestamps and provenance, minimize privacy-sensitive fields, and stop on refusals. A page parser can extract what an authorized response contains; it cannot turn an undocumented or prohibited use into an approved data source.

Frequently Asked Questions

Does Cdiscount provide a public product-data API for anyone?

The documented material describes an Octopia Marketplace API for seller operations. It does not establish a general public, read-only API for arbitrary product-page lookups.

Can I treat JSON-LD as a permanent Cdiscount contract?

No. JSON-LD is a useful inspection starting point, but the reported fields are a vendor observation and page markup can change. Keep fields optional and regression-test your parser.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Should I use screenshots to extract prices?

Not as a primary data source. Screenshots preserve appearance, while JSON-LD or other authorized response data is more suitable for machine-readable prices and availability.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.