Coolblue Products Scraper — NL Electronics Catalog avatar

Coolblue Products Scraper — NL Electronics Catalog

Pricing

from $1.50 / 1,000 products

Go to Apify Store
Coolblue Products Scraper — NL Electronics Catalog

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

Noah Adler

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

5 hours ago

Last modified

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

StepAction
1Accept query and/or searchUrl, optional sort / maxItems
2Build https://www.coolblue.nl/zoeken?query=… (+ sorteren= / pagina=)
3GET with curl_cffi impersonate chrome124
4Parse SSR product-card js-product blocks
5Normalize price / listPrice / rating / reviews / brand → Dataset
6Paginate until maxItems or empty page

Input

FieldRequiredDescription
queryOne of query/URLKeyword (e.g. headphones)
searchUrlOne of query/URLFull Coolblue /zoeken URL (keeps filters)
sortNorelevance, price_asc, price_desc, rating_desc, popularity
maxItemsNo1–200 (default 40)
proxyConfigurationNoDefault 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-products
python smoke_test.py