Coolblue Products Scraper — NL Electronics Catalog
Pricing
from $1.50 / 1,000 products
Coolblue Products Scraper — NL Electronics Catalog
Scrape Coolblue Netherlands catalog search: title, EUR price, rating, reviews, brand, availability, product URL and image. List/adviesprijs only when Coolblue shows a discount. HTTP SSR cards — PPE product rows.
Pricing
from $1.50 / 1,000 products
Rating
0.0
(0)
Developer
Noah Adler
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
5 hours ago
Last modified
Categories
Share
Coolblue Netherlands catalog search: title, EUR price, rating, review count, brand, availability, product URL and image — one clean Dataset row per listing. Former list price (listPrice / adviesprijs) is filled only when Coolblue shows a strikethrough discount.
HTTP-only (curl_cffi + Chrome TLS). Parses Coolblue’s public SSR product-card HTML on /zoeken (no __NEXT_DATA__ / public JSON search API in v0.1).
Proxy: Default Apify RESIDENTIAL with country NL. Bare IPs sometimes get 403 — soft-fail error row (honest), not fake empty success.
Why this Actor: NL ecom cluster · Clean PPE schema · Keyword or search URL · No Playwright · Honest antibot limits
What this Actor does
| Step | Action |
|---|---|
| 1 | Accept query and/or searchUrl, optional sort / maxItems |
| 2 | Build https://www.coolblue.nl/zoeken?query=… (+ sorteren= / pagina=) |
| 3 | GET with curl_cffi impersonate chrome124 |
| 4 | Parse SSR product-card js-product blocks |
| 5 | Normalize price / listPrice / rating / reviews / brand → Dataset |
| 6 | Paginate until maxItems or empty page |
Input
| Field | Required | Description |
|---|---|---|
query | One of query/URL | Keyword (e.g. headphones) |
searchUrl | One of query/URL | Full Coolblue /zoeken URL (keeps filters) |
sort | No | relevance, price_asc, price_desc, rating_desc, popularity |
maxItems | No | 1–200 (default 40) |
proxyConfiguration | No | Default RESIDENTIAL; Actor injects NL if country empty |
Example
{"query": "headphones","sort": "relevance","maxItems": 40,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "NL"}}
Output example
{"productId": "936048","title": "Bose QuietComfort Headphones Zwart","price": 230.0,"listPrice": null,"currency": "EUR","rating": 4.5,"reviewCount": 64,"brand": "Bose","detailUrl": "https://www.coolblue.nl/product/936048/bose-quietcomfort-headphones-zwart.html","imageUrl": "https://image.coolblue.nl/transparent/max/212x170/products/1969950","availability": "Morgen bezorgd","query": "headphones","scrapedAt": "2026-09-22T20:00:00Z","error": false,"errorMessage": null}
Limits
- SSR HTML layout can change (selectors:
product-card,sales-price__current,review-rating__reviews). - No public Coolblue JSON search API found in probe — HTTP HTML only.
- Rating is estimated from SVG star icons when no numeric score is in the card.
- Brand is taken from the first title token when Coolblue does not expose a brand string.
Soft-fail
On 403 / challenge: one Dataset row with error=true and a message citing RESIDENTIAL + NL.
Local smoke
cd actors/44-coolblue-productspython smoke_test.py