Coolblue Price Scraper (Product Price and Stock Changes)
Pricing
from $3.00 / 1,000 product snapshot delivereds
Coolblue Price Scraper (Product Price and Stock Changes)
Returns public Coolblue product prices, stock, delivery estimates and ratings as JSON by product URL or category: id, title, price, list price, stock, delivery days, rating, review count and price/stock changes versus the previous run. For NL price tracking and restock monitoring. No login.
Pricing
from $3.00 / 1,000 product snapshot delivereds
Rating
0.0
(0)
Developer
Steadfetch
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Monitor public Coolblue product prices, stock, delivery estimates and ratings by product URL or public category page. Get one clean, schema-validated snapshot per product.
What it does
- Reads public Coolblue product pages (Schema.org
ProductJSON-LD) and public category pages with HTTP + Cheerio. No browser, no login, no paywall and no CAPTCHA bypass. - Accepts up to 500 explicit
productUrlsand an optionalcategoryUrl. A category page is followed through its public?page=Npagination up to 500 products in total. - Returns product id, title, current price, list price when published, stock status, delivery estimate in days, rating (normalised to a 5-point scale) and review count.
- Monitor mode: each run compares every product with the snapshot stored by
the previous run for the same product and adds a
price_changeobject with the previous price, the price delta and whether stock status changed. The first run for a product returnsprice_change: null; nothing is invented. - Only product data: review text and reviewer identities are never parsed or emitted (RGPD).
- Pushes only items that pass the dataset output schema. 404s, errors and retries never produce billable results.
- Respects Coolblue's published robots.txt rules: it reads public category and
/product/<id>/pages only. Review pages (/product-reviews/,/productreviews/), account, cart and checkout pages are not requested. - Uses low concurrency and 120 requests per minute.
Check the source terms before using the Actor commercially. If Coolblue starts requiring a login or serving a CAPTCHA, stop the run and escalate; this Actor does not bypass either.
Legal and compliance
- Source: public
coolblue.nlproduct and category pages. Re-checked on 2026-10-19 againsthttps://www.coolblue.nl/robots.txtandhttps://www.coolblue.nl/en/c/terms-and-conditions.html: product and category pages are not disallowed (robots.txt only restricts review, account, cart and similar paths) and the Terms and Conditions contain no anti-scraping clause. Prices are public and visible without an account. - No bypass: no login, paywall or CAPTCHA bypass. If Coolblue starts blocking public requests, the run fails visibly; the fix is to stop and escalate, never to evade the block.
- RGPD: product data only. Review text and reviewer identities are never
emitted, and the disallowed review pages (
/product-reviews/,/productreviews/) are not requested. - Only aggregate rating value and review count are included.
Input
{"productUrls": ["https://www.coolblue.nl/en/product/986764/smeg-klf03nbeu-navy-blue.html"],"categoryUrl": "https://www.coolblue.nl/en/electric-kettles"}
productUrls is required (max 500). Pass an empty array together with
categoryUrl when you only want to monitor a category. categoryUrl is
optional and its discovered products count towards the same 500-product cap.
Example output
{"product_id": "986764","title": "SMEG KLF03NBEU Navy Blue","price_eur": 179.0,"list_price_eur": null,"in_stock": true,"delivery_days": 1,"rating_average": 4.65,"review_count": 191,"product_url": "https://www.coolblue.nl/en/product/986764/smeg-klf03nbeu-navy-blue.html","captured_at": "2026-10-20T16:00:00.000Z","price_change": {"previous_price_eur": 199.0,"price_eur_delta": -20.0,"previous_in_stock": true,"in_stock_changed": false,"previous_captured_at": "2026-10-19T16:00:00.000Z"},"url": "https://www.coolblue.nl/en/product/986764/smeg-klf03nbeu-navy-blue.html","scrapedAt": "2026-10-20T16:00:00.000Z"}
url is the common Steadfetch envelope and mirrors product_url;
scrapedAt mirrors captured_at. rating_average is normalised to a 5-point
scale because Coolblue publishes ratings out of 10. list_price_eur is null
when the page does not publish a comparison price. delivery_days is null
when no public delivery estimate is shown.
Monitor mode
The Actor persists one small snapshot per product (price_eur, in_stock and
captured_at) in a named key-value store. On every following run it compares
the fresh item with that snapshot:
price_change.price_eur_deltais the current price minus the previous price. A negative value is a price drop;0means the price did not change.price_change.in_stock_changedistrueonly when stock status flipped.previous_price_eur,previous_in_stockandprevious_captured_atshow what the comparison was based on, so a change can always be audited.- On the first run for a product,
price_changeisnull(no previous data). - Monitoring only a subset of products in a later run keeps the snapshots of the products that were not requested.
Snapshots live in the Actor's named key-value store by user, so they persist
between runs (including apify run --purge); no account, login or external
database is involved. The comparison is included in the per-result price.
Pricing
- 3.00 USD per 1,000 results (products) (
apify-default-dataset-item= 0.003 USD per product), plus the Apify-recommendedapify-actor-startevent (0.00005 USD per run, first 5 seconds of compute included). - Measured cost per 1,000: below 0.10 USD. Local fixture run (real saved product pages, no platform credit spent): 2 products in about 1.2 s of request time, ~1.4 MB of HTML per page. At the 256 MB minimum memory that extrapolates to roughly 0.002 USD of compute per 1,000 products (0.25 GB x ~122 s / 3600 x 0.20 USD per GB-hour); the rest of the budget is headroom for transfer and variance. HTTP/HTML only, no browser, no proxy. Margin is above 90%.
- 404s, errors, retries and rejected items are not charged.
FAQ
Does it need a Coolblue account or API key? No. It reads public product and category pages anonymously.
Does it include reviews or reviewer names? No. It only emits the aggregate rating value and review count. Review text and identities are deliberately excluded, and review pages are not requested.
Why normalise ratings to 5 points?
Coolblue shows ratings out of 10. Downstream price-monitoring tools usually
expect 5 points; the Actor divides by the published bestRating and rounds to
two decimals. The raw scale is not invented.
How do I see what changed since the last run?
Check price_change on each result: it carries the previous price and stock
status plus the price delta. The first run for a product has
price_change: null.
How is list price obtained?
From the product page's public embedded product data when Coolblue publishes a
comparison price. If there is no list price, the field is null.
What are the usage limits? The Actor uses low concurrency and 120 requests per minute, reads public category and product pages only, and stops at 500 products per run.
Maintenance
This Actor is tested daily: fixture-based tests and a minimal public run keep the parser and the output schema honest. If Coolblue changes its page layout or starts blocking public requests, the run fails visibly instead of delivering bad data.
Local fixture run
The committed HTML fixtures under test/fixtures/ are real public pages. To run
the Actor locally with apify run and spend no platform credit:
node test/fixtures/serve.mjs & # serves the fixtures on 127.0.0.1:8799STEADFETCH_FIXTURE_ORIGIN=http://127.0.0.1:8799 \npx -y apify-cli run --purge --input-file test/fixtures/input.json
Use test/fixtures/input-category.json to exercise category pagination.
STEADFETCH_FIXTURE_ORIGIN only rewrites the fetch host; emitted URLs remain
canonical Coolblue URLs.