bol.com Product Scraper

bol.com is the online price the Netherlands and Belgium buy against, the number your own listing gets compared to.

bol.com is the online price the Netherlands and Belgium buy against, the number your own listing gets compared to. Rows carry price in cents, rating, review count, delivery promise, and a bol.com-vs-partner flag; details add EAN, brand and condition. No seller identity or reviewer data collected.

$3.00 / 1,000 · 92.2% success over 51 public runs in the last 30 days.

Run it on Apify → Free to try - runs bill per result on your own account.

What you give it

Every field is optional unless marked; sensible defaults do the rest.

FieldTypeWhat it doesDefault
searchQuery string What to search for on bol.com, exactly as you would type it in the site's search box, e.g. "iphone 16 hoesje" or "lego technic". Leave it out when you only re-check products through listingIds. lego technic
listingIds array Re-check products you already know instead of searching: one product number per line (the digits at the end of every bol.com product address, and the productId of every dataset item), or the product's full address. Each one is read from its own page on the storefront chosen below - title, price, rating, seller type, main image - with the detail fields (brand, EAN, colour, material, condition, availability) whether or not Scrape details is on. A product that is gone from the site is skipped, named in the log and not billed. When given, the search fields of this form are ignored and the run status says which. Up to 50. []
storefront string Which bol.com storefront to search: bol.com/nl (Netherlands) or bol.com/be (Belgium, Dutch). Assortment and prices can differ slightly. bol.com/nl
priceMinEur integer Only include products costing at least this many euros. Products without a readable price are excluded when a price filter is set. -
priceMaxEur integer Only include products costing at most this many euros. Products without a readable price are excluded when a price filter is set. -
scrapeDetails boolean Also open each product page for brand, EAN barcode, colour, material, condition, availability and variant count. Slower: one extra request per product. The same page carries every photo of the product, delivered as imageUrls. False
maxItems integer Stop after this many products. Free-plan runs are capped at 5 items. The form starts at 25 for a cheap first run - that is the form's prefill, not a cap on your plan; clear it to use the default of 200. 200
reportFailures boolean When a run fails, send the developer the actor name and build, an error category, the error message (truncated) and a one-way hash of your input - so a bug can be fixed without anyone asking you to reproduce it. Your input itself, your results and your identity are never sent, and successful runs send nothing at all. Switch this off and the actor behaves exactly the same. True

What you get back

One JSON object per result, with exactly these fields - no seller identities, no contact data, ever.

A real result row from a recent run:

{
  "currency": "EUR",
  "deliveryText": "",
  "imageUrl": "https://media.s-bol.com/l3KZkNovgK95/N9O9Gwv/550x550.jpg",
  "priceCents": 7998,
  "productId": "9300000272078194",
  "ratingValue": 3.4,
  "reviewCount": 8,
  "snippet": "Realistische AK-47 bouwervaring met mechanische functies De Reobrix AK-47 bouwset brengt een iconisch...",
  "thirdPartySeller": true,
  "title": "Reobrix 7 7005 AK-47 Assault Rifle bouwset | WW2 army ops pistool modelbouw | Creator classic battlefield guns bouwpakket | Technische Educa...",
  "url": "https://www.bol.com/nl/nl/p/reobrix-7-7005-ak-47-assault-rifle-bouwset-ww2-army-ops-pistool-modelbouw-creator-classic-battlefield-guns-bouwp..."
}
FieldTypeMeaning
productId string bol.com product ID from the product URL.
url string Direct link to the product page.
title string Product title as listed.
priceCents ['integer', 'null'] Current price in euro cents as shown on the search page. Null when the tile shows no readable price.
currency string Always EUR.
ratingValue ['number', 'null'] Average customer rating, 0-5. Null when the product has no reviews.
reviewCount ['integer', 'null'] Number of customer reviews. Review text and reviewer identities are never collected.
snippet string Product description snippet from the search page.
deliveryText string Stock and delivery promise as displayed, e.g. 'Op voorraad. Voor 21:00 uur besteld, morgen in huis'.
thirdPartySeller boolean True when the offer comes from a marketplace partner instead of bol.com itself. The seller's name is never collected.
imageUrl string Main product image.
brand ['string', 'null'] Brand name. Only present with scrapeDetails enabled.
ean ['string', 'null'] EAN-13 / GTIN-13 barcode. Only present with scrapeDetails enabled.
color ['string', 'null'] Variant colour. Only present with scrapeDetails enabled.
material ['string', 'null'] Product material. Only present with scrapeDetails enabled.
condition ['string', 'null'] Offer condition from structured data, e.g. NewCondition. Only present with scrapeDetails enabled.
availability ['string', 'null'] Offer availability from structured data, e.g. InStock. Only present with scrapeDetails enabled.
variantCount integer Number of product variants (colours, sizes) on the product page. Only present with scrapeDetails enabled.
imageUrls array Every photo of the product, 550 px wide, in the site's order (up to 8). Present when the product's own page was read: with scrapeDetails on, or through listingIds. The search tile carries one thumbnail (imageUrl).

Health

92.2% success over 51 public runs in the last 30 days. Live record, failures included: status page.

Full documentation, examples and the AI-assistant prompt live on the store page.

The history behind this tool

This tool answers what a source shows today. Its output also feeds a series recorded every day and kept: Retail price and stock availability over time. A run gives you the current market; the series is the part that cannot be reconstructed afterwards, because the source overwrites it.