# Coolblue Scraper \[Only $2] | NL/BE/DE | Price Monitoring (`ahmed_jasarevic/coolblue-nl-scraper`) Actor

Scrape Coolblue product data from Netherlands, Belgium and Germany. Get prices, discounts, stock status, ratings, reviews, pros/cons, specifications and images. Built for price monitoring, competitor analysis, catalog building and reseller research across three European markets.

- **URL**: https://apify.com/ahmed\_jasarevic/coolblue-nl-scraper.md
- **Developed by:** [Ahmed Jasarevic](https://apify.com/ahmed_jasarevic) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.17 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Coolblue Scraper — NL / BE / DE Product Data & Price Monitoring

Scrape **Coolblue** product data from the Netherlands (`coolblue.nl`), Belgium (`coolblue.be`) and Germany (`coolblue.de`): **prices, discounts, stock & delivery status, ratings, review counts, pros/cons, specifications and images**. Built for price monitoring, competitor analysis, catalog building, and reseller research.

### Track Coolblue Prices, Stock & Discounts Across Three Countries

Coolblue has no public API — this actor extracts product intelligence from their Next.js site using CheerioCrawler (pure HTTP, no browser). Switch between NL, BE, and DE with a single input field.

### Key Use Cases

- **Price monitoring** — track current prices, list prices, and discount percentages across product categories
- **Competitor analysis** — compare Coolblue pricing against bol.com, Amazon.nl, MediaMarkt, and Idealo
- **Catalog building** — extract full product catalogs with specs, images, and availability data
- **Reseller research** — identify discounted products, open-box (Tweedekans) deals, and stock availability
- **Market intelligence** — analyze product ratings, review counts, and pros/cons across categories
- **E-commerce analytics** — build pricing datasets for Dutch, Belgian, and German electronics markets

### How It Works

1. You provide **search queries**, **category URLs**, or **direct product URLs** and pick a country (NL/BE/DE)
2. The actor fetches pages using CheerioCrawler (plain HTTP) — no browser rendering required
3. Product data is extracted from Next.js RSC flight data and embedded JSON-LD blobs
4. With `scrapeDetails: true`, each product page is visited for full specs, pros/cons, and discount data
5. Results are saved as structured JSON with 30+ fields per product

### Build E-commerce Databases Without Official API Access

#### Input

| Field | Type | Required | Default | Notes |
|-------|------|----------|---------|-------|
| `searchQueries` | array | No | `["iphone"]` | Search terms that resolve to Coolblue category pages |
| `categoryUrls` | array | No | `[]` | Full Coolblue category URLs (e.g. `https://www.coolblue.nl/smartphones/apple`) |
| `productUrls` | array | No | `[]` | Direct Coolblue product page URLs |
| `country` | string | No | `nl` | `nl`, `be`, or `de` |
| `maxItems` | integer | No | `100` | Maximum products to scrape (1–1000) |
| `maxPagesPerCategory` | integer | No | `5` | Max pagination pages per category/search |
| `includeSpecs` | boolean | No | `true` | Include specification table (detail mode only) |
| `includeProsCons` | boolean | No | `true` | Include pros/cons lists (detail mode only) |
| `scrapeDetails` | boolean | No | `false` | Visit each product page for full specs/pros/cons. Off = fast listing cards |
| `proxyConfiguration` | object | No | Apify proxy ON | Residential group recommended for detail mode |

#### Output

Each dataset item contains:

| Field | Description |
|-------|-------------|
| `productId` | Coolblue product ID (SKU) |
| `name` | Product name |
| `url` | Product page URL |
| `brand` | Manufacturer brand |
| `description` | Product description (detail mode) |
| `price` | Current sales price (EUR) |
| `listPrice` | Former/reference price before discount |
| `discountAmount` | Absolute discount in EUR |
| `discountPercent` | Relative discount in % |
| `availability` | Schema.org availability value |
| `deliveryPromise` | Delivery promise text (e.g. "Op voorraad") |
| `storeAvailability` | Per-store stock states |
| `rating` | Customer rating |
| `reviewCount` | Number of reviews |
| `images` | Product image URLs (1000x1000) |
| `specs` | Key/value specification table (detail mode) |
| `pros` / `cons` | Expert pros/cons lists (detail mode) |
| `country` | NL, BE, or DE |
| `source` | `category` (fast mode) or `product_detail` (full mode) |

#### Example Input

```json
{
  "searchQueries": ["iphone", "samsung galaxy", "sony tv"],
  "country": "nl",
  "maxItems": 50,
  "scrapeDetails": true,
  "includeSpecs": true,
  "includeProsCons": true
}
```

#### Example Output (Detail Mode)

```json
{
  "source": "product_detail",
  "country": "nl",
  "productId": "977094",
  "name": "Sony Bravia 3 II Led 55\" (2026)",
  "url": "https://www.coolblue.nl/product/977094/sony-bravia-3-ii-led-55-2026.html",
  "brand": "Sony",
  "price": 799,
  "currency": "EUR",
  "listPrice": 999,
  "discountAmount": 200,
  "discountPercent": 20,
  "availability": "https://schema.org/InStock",
  "deliveryPromise": "Op voorraad",
  "storeAvailability": [{"location": "Amsterdam", "state": "Op voorraad"}],
  "rating": 8.5,
  "reviewCount": 7,
  "images": ["https://image.coolblue.nl/.../1000x1000/..."],
  "specs": { "Merk": "Sony", "Schermdiagonaal": "55 inch", "..." : "..." },
  "pros": ["Uitstekende beeldkwaliteit", "Slimme tv-functies"],
  "cons": ["Geen OLED", "Beperkte kijkhoek"]
}
```

#### Example Output (Fast Mode)

```json
{
  "source": "category",
  "country": "nl",
  "productId": "974937",
  "name": "HP Pavilion SE 15-fd2957nd",
  "url": "https://www.coolblue.nl/product/974937/hp-pavilion-se-15-fd2957nd.html",
  "price": 819,
  "currency": "EUR",
  "availability": "OnStock",
  "rating": null,
  "reviewCount": null,
  "images": ["https://image.coolblue.nl/.../1000x1000/products/..."]
}
```

### Integrations & Automation

- **Webhooks** — get notified when prices change or products go out of stock
- **Zapier / Make** — pipe results into Google Sheets, price alert tools, or your own dashboards
- **API** — access results programmatically via the Apify API

**Recommended schedule:** Run daily for price monitoring; weekly for catalog snapshots; monthly for trend analysis. Schedule recurring runs to improve Apify Store recommendation signals.

### Related Actors

- [Bol.com Scraper](https://apify.com/apify/bol-com-scraper) — Dutch/Belgian marketplace product data
- [Amazon Product Scraper](https://apify.com/apify/amazon-product-scraper) — Amazon product data for price comparison
- [Idealo Scraper](https://apify.com/apify/idealo-scraper) — German price comparison engine
- [MediaMarkt Scraper](https://apify.com/apify/mediamarkt-scraper) — German electronics retailer
- [Google Shopping Scraper](https://apify.com/apify/google-shopping-scraper) — Cross-retailer price comparison

### FAQ

#### Why use this actor instead of the official API?

Coolblue has **no public API** — no Algolia, Meilisearch, or GraphQL endpoint is exposed. This actor reads product data from the same Next.js RSC flight data and JSON-LD blobs the website uses, giving you structured access without browser automation.

#### What's the difference between fast mode and detail mode?

- **Fast mode** (`scrapeDetails: false`, default): Scrapes product cards directly from category/search pages. Returns name, price, availability, rating, and image. Much faster, far fewer 403 errors. Ideal for price monitoring.
- **Detail mode** (`scrapeDetails: true`): Visits each product page for full description, specification table, pros/cons, discount data, and per-store availability. Slower but comprehensive.

#### Can I scrape all three Coolblue countries in one run?

Set `country` to `nl`, `be`, or `de` for a single run. For multi-country monitoring, schedule three separate runs with different country settings.

#### How do I monitor price drops?

Schedule daily runs with `scrapeDetails: false` and compare the `price` and `listPrice` fields across runs. Products where `discountPercent` > 0 are currently on sale.

#### Is scraping Coolblue legal?

Scraping publicly available product data is generally permitted, but you are responsible for complying with Coolblue's Terms of Service and applicable law. This actor is not affiliated with or endorsed by Coolblue.

#### How much does it cost?

The actor uses pay-per-event pricing: $0.002 per category card (fast mode), $0.006 per full product detail. A 1,000-product fast-mode run costs $2.00; full details cost $6.00. Free accounts get a 10-item preview.

### SEO Keywords

coolblue scraper, coolblue product data, coolblue price tracking, coolblue api, coolblue.nl scraper, coolblue.be scraper, coolblue.de scraper, coolblue price scraper, coolblue stock availability api, coolblue reviews scraper, dutch e-commerce scraper, netherlands product data scraping, belgium electronics scraper, german electronics price comparison, euro product pricing scraper, coolblue price monitor, coolblue vs bol.com price, dutch electronics price tracking, coolblue data extraction, coolblue tweedekans scraper, coolblue pros cons scraper, benelux e-commerce data

### For AI Agents & LLM Apps

**Purpose:** Extract product data from Coolblue (NL/BE/DE) including prices, discounts, stock status, ratings, specs, and pros/cons — no public API available.

**Minimal working input:**

```json
{
  "searchQueries": ["iphone"],
  "country": "nl",
  "maxItems": 20
}
```

**Variant inputs:**

- Category scrape: `{ "categoryUrls": ["https://www.coolblue.nl/smartphones"], "maxItems": 100 }`
- Direct products: `{ "productUrls": ["https://www.coolblue.nl/product/977094/..."], "scrapeDetails": true }`

**Output fields:** productId, name, url, brand, description, price, currency, listPrice, discountAmount, discountPercent, availability, deliveryPromise, storeAvailability, rating, reviewCount, images, specs, pros, cons, country, source

**Behaviors an agent should know:**

- `scrapeDetails: false` (default) returns listing cards only — no specs/pros/cons/description
- `scrapeDetails: true` visits each product page — 10x slower but returns full data
- `country` accepts `nl`, `be`, or `de` — each is a separate Coolblue store
- Category URLs are the most reliable entry point for full catalog coverage
- Fast mode reads from Next.js RSC data — far fewer 403 errors than detail mode
- Residential proxy recommended for detail mode; optional for fast mode

**Billing model:** Pay-per-event ($0.002 per fast-mode card, $0.006 per full detail, $0.00005 per actor start)

### Legal & Compliance Disclaimer

This actor is independent and not affiliated with, endorsed by, or sponsored by Coolblue B.V. It accesses only publicly available product listing and detail pages on coolblue.nl, coolblue.be, and coolblue.de — no login bypass, no CAPTCHA solving, no private API exploitation. Users are responsible for their own compliance with Coolblue's Terms of Service and applicable data-protection law (including GDPR for EU personal data).

# Actor input Schema

## `searchQueries` (type: `array`):

Search terms to look up on Coolblue (e.g. "iphone", "sony tv"). Each query resolves to the matching category page.

## `categoryUrls` (type: `array`):

Coolblue category/search page URLs to scrape (e.g. https://www.coolblue.nl/smartphones/apple). All products on the category (including pagination) are scraped.

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

Direct Coolblue product page URLs to scrape (e.g. https://www.coolblue.nl/product/935188/apple-iphone-15-128gb-zwart.html).

## `country` (type: `string`):

Which Coolblue store to scrape. NL = coolblue.nl, BE = coolblue.be (Dutch), DE = coolblue.de.

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

Maximum number of products to scrape (0-1000).

## `maxPagesPerCategory` (type: `integer`):

Maximum number of pagination pages to crawl per category.

## `includeSpecs` (type: `boolean`):

Extract the full specifications table from product pages.

## `includeProsCons` (type: `boolean`):

Extract the specialist pros/cons list from product pages.

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

When enabled, each product's page is visited to extract full description, specifications and pros/cons. When disabled (default), products are scraped directly from category/search pages as listing cards (name, price, availability, rating) - much faster and far fewer 403 errors.

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

Proxy settings. Apify proxy is used by default to keep the client IP hidden.

## Actor input object example

```json
{
  "searchQueries": [
    "iphone"
  ],
  "country": "nl",
  "maxItems": 100,
  "maxPagesPerCategory": 5,
  "includeSpecs": true,
  "includeProsCons": true,
  "scrapeDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "proxyGroups": [
      "BUYPROXIES94952"
    ]
  }
}
```

# 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 = {
    "searchQueries": [
        "iphone"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("ahmed_jasarevic/coolblue-nl-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 = { "searchQueries": ["iphone"] }

# Run the Actor and wait for it to finish
run = client.actor("ahmed_jasarevic/coolblue-nl-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "searchQueries": [
    "iphone"
  ]
}' |
apify call ahmed_jasarevic/coolblue-nl-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ahmed_jasarevic/coolblue-nl-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

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