Bol.com Scraper
Pricing
from $1.80 / 1,000 product listings
Bol.com Scraper
Scrape bol.com (NL/BE) products: prices, EAN-13, ratings, sellers, variants, full specifications, complete reviews and every seller offer.
Pricing
from $1.80 / 1,000 product listings
Rating
0.0
(0)
Developer
Unfenced Group
Maintained by CommunityActor stats
1
Bookmarked
3
Total users
2
Monthly active users
6 days ago
Last modified
Categories
Share

Extract products from bol.com at scale, in a clean, consistent structure ready for price monitoring, market research, catalogue analysis and resale tooling. No API key required.
Why this scraper?
๐ฏ Built for bol.com
A dedicated Dutch scraper tuned for bol.com โ its categories, price formats and currency (EUR), not a generic tool pointed at it.
๐ถ Structured pricing
Current price as a clean number in EUR, plus discounts and previous prices where the source shows them. Items without a published price return null, never a guess.
๐ฆ Stock status
Availability on every record, so you can monitor stock and catch restocks.
๐ค Seller and condition
Seller details and item condition in structured fields, ready for filtering.
โญ Review signals
Average rating and review count for every item that has them.
๐ผ๏ธ Photos
Photo URLs for every product where the source publishes them.
๐ Full item content
Complete description and title for every record, with a direct link back to the source.
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
searchQuery | string | "koffie" | A single keyword to search on bol.com (e.g. 'koffie', 'lego', 'airpods'). Becomes a /s/?searchtext= URL on the selected shop. |
searchQueries | array | (empty) | Several keywords to search in one run. Each becomes its own search. |
startUrls | array | (empty) | Bol.com URLs to crawl. Supported: search (/s/), category (/l/), brand (/pb/), series (/serie/) and product detail (/p/) pages, on either www.bol.com/nl/nl/ or www.bol.com/be/nl/. |
country | string | "nl" | Which bol.com shop to use for keyword searches. Also pins the residential proxy country when fallback is needed. Start URLs keep their own /nl/ or /be/ path. |
maxResults | integer | 50 | Overall ceiling on items pushed across all sources (search queries + start URLs combined). Use 0 for unlimited. |
maxResultsPerUrl | integer | 0 | Optional per-source cap. Each search query and each start URL stops after this many items, while 'Max results' still applies as the overall ceiling. Use 0 to apply no per-source limit. Useful when crawling several URLs in one run so the first source does not consume the whole budget. |
minPrice | number | (empty) | Only return products at or above this price. Applied as a post-fetch filter. |
maxPrice | number | (empty) | Only return products at or below this price. Applied as a post-fetch filter. |
soldByBol | boolean | false | Only return products sold directly by bol.com, excluding marketplace sellers. |
minRating | number | (empty) | Only return products with an average rating at or above this value (1โ5). Products with no reviews are excluded when this filter is active. |
condition | string | "any" | Filter by product condition. 'New' excludes refurbished and secondhand listings; 'Refurbished' and 'Secondhand' return only those offer types. |
inStockOnly | boolean | false | Only return products that can be delivered within 48 hours (bol.com's in-stock signal at listing level). |
sponsoredOnly | boolean | false | Only return products that have a sponsored (advertised) placement on the results page. |
includeVariantPrices | boolean | false | Add the per-variant list (each variant's EAN-13, price, condition and availability) to every product, without pulling the full detail enrichment. Visits the product detail page. Ignored when 'Fetch product detail pages' is already on, since variants are included there. |
fetchDetails | boolean | false | Visit each product's detail page to add per-variant EAN-13, brand, weight, condition, buy-box price range, full image set, specifications and a review sample. Slower and billed at the higher detail rate. |
fetchReviews | boolean | false | Collect the full customer review list per product (rating, title, body, date, helpful count) plus the rating distribution. Visits the detail page; billed per product that returns reviews. |
fetchOffers | boolean | false | Collect every seller's offer for each product (seller, price, condition, delivery), not just the buy-box winner. Visits the detail page; billed per product that returns offers. |
maxReviewsPerProduct | integer | 50 | Cap on reviews collected per product when 'Fetch full reviews' is on. |
proxyConfiguration | object | {"useApifyProxy": false} | Optional. Leave empty to start without a proxy โ the scraper escalates to Apify Residential (country-pinned) automatically only if bol.com blocks the request. Set this to force a proxy from the start. |
Output schema
Every field below is present on every record. Fields the source does not publish for a given item are returned as null rather than omitted.
| Field | Type | Description |
|---|---|---|
type | string | "listing" or "detail". |
productId | string | Bol.com product ID. |
title | string | Product title. |
url | string | Full product URL. |
price | number | Current selling price in EUR. |
priceCurrency | string | Always "EUR". |
selectPrice | string | null |
unitPrice | number | null |
referencePrice | number | null |
discountPercentage | number | null |
rating | number | null |
reviewCount | number | null |
seller | string | null |
condition | string | null |
availability | string | null |
deliveredWithin48h | boolean | null |
sponsored | boolean | Whether the placement is sponsored. |
sustainable | boolean | Whether the product carries a sustainability label. |
imageUrl | string | null |
description | string | null |
descriptionMarkdown | string | Description in Markdown/plain text. |
category | array | Category path, broadest first. |
sourcePage | number | Result page the item came from. |
sourceUrl | string | The listing URL it was found on. |
domain | string | www.bol.com. |
scrapedAt | string | ISO timestamp. |
bestRating | number | null |
lowPrice | number | null |
highPrice | number | null |
offerCount | number | null |
images | array | All product images. |
variants | array | Per-variant objects (see below). |
gtin13 | string | null |
brand | string | null |
reviewSample | array | Up to 10 reviews: rating, title, body, date. |
specifications | array | Structured product specs as { name, value } pairs. |
ratingDistribution.__typename | string | typename. |
ratingDistribution.fiveStarCount | number | Five star count. |
ratingDistribution.fourStarCount | number | Four star count. |
ratingDistribution.oneStarCount | number | One star count. |
ratingDistribution.threeStarCount | number | Three star count. |
ratingDistribution.twoStarCount | number | Two star count. |
Example record
{"type": "detail","productId": "9000000012512898","title": "Lavazza Crema e Aroma Koffiebonen - Koffie Blend van Robusta en Arabica Bonen - Intensiteit 8/10 - 1 kg","url": "https://www.bol.com/nl/nl/p/lavazza-crema-e-aroma-koffiebonen/9000000012512898/","price": 16.12,"priceCurrency": "EUR","selectPrice": null,"unitPrice": null,"referencePrice": 21.49,"discountPercentage": 25,"rating": 4.9,"reviewCount": 91,"seller": "bol","condition": "New","availability": "Op voorraad. Voor 23:59 uur besteld, morgen in huis","deliveredWithin48h": true,"sponsored": true,"sustainable": false,"imageUrl": "https://media.s-bol.com/kkNyVD78pjLX/ERV7qWN/493x840.jpg","description": "De Lavazza Crema e Aroma is een prachtige melange van de beste arabica en robusta koffiebonen. Deze licht geroosterde bonen geven een aromatische espresso met een verleidelijke, aanhoudende crema. Erv โฆ","descriptionMarkdown": "**De Lavazza Crema e Aroma is een prachtige melange van de beste arabica en robusta koffiebonen. Deze licht geroosterde bonen geven een aromatische espresso met een verleidelijke, aanhoudende crema.** โฆ","category": ["Eten & Drinken","Frisdrank, sap, koffie en thee","Koffie","Koffiebonen"],"sourcePage": 1,"sourceUrl": "https://www.bol.com/nl/nl/s/?searchtext=koffie","domain": "www.bol.com","scrapedAt": "2026-07-02T15:31:04.616Z","bestRating": 4.9,"lowPrice": 16.12,"highPrice": 79.96,"offerCount": 2,"images": [{"@type": "ImageObject","url": "https://media.s-bol.com/Jkx8oZ7ZwOQg/pYBOKly/585x1200.jpg","width": 585,"height": 1200}],"variants": [{"productId": "9000000012512898","name": "Lavazza Crema e Aroma Koffiebonen - Koffie Blend van Robusta en Arabica Bonen - Intensiteit 8/10 - 1 kg","url": "https://www.bol.com/nl/nl/p/lavazza-crema-e-aroma-koffiebonen/9000000012512898/","gtin13": "8000070025400","brand": "Lavazza","weightGrams": 1030,"price": 16.12,"priceCurrency": "EUR","availability": "InStock","condition": "NewCondition","seller": "bol","imageUrl": null},{"productId": "9300000236875514","name": "Lavazza Crema e Aroma Koffiebonen - Koffie Blend van Robusta en Arabica Bonen - Intensiteit 8/10 - 4 x 1 kg","url": "https://www.bol.com/nl/nl/p/lavazza-crema-e-aroma-koffiebonen-koffie-blend-van-robusta-en-arabica-bonen-intensiteit-8-10 โฆ","gtin13": "8714500010125","brand": "Lavazza","weightGrams": 1000000,"price": 79.96,"priceCurrency": "EUR","availability": "InStock","condition": "NewCondition","seller": "Profeco.be","imageUrl": null}],"gtin13": "8000070025400","brand": "Lavazza","reviewSample": [{"rating": 5,"title": "Heerlijke koffie!","body": "Deze gekocht voor mijn nieuwe volautomaat. Echt heerlijke koffie. Of ik nou kies voor een gewone koffie, espresso of cap โฆ","date": "2024-05-20"},{"rating": 5,"title": "Heerlijke smaak","body": "Zeer vreemd dat een individuele verpakking per kilo, goedkoper is dan een verpakking van 6 stuks samen. Die zijn duurder โฆ","date": "2025-05-17"},{"rating": 5,"title": "Zachtste koffie","body": "De enige koffie zacht genoeg om heerlijk sterk te zetten.","date": "2017-02-10"},{"rating": 5,"title": "Goede koffie, uitstekend en sterk van smaak!","body": "Een heel lekkere koffie , voor herhaling vatbaar !","date": "2025-12-04"}],"specifications": [{"name": "Compatibiliteit koffiezetapparaat","value": "Compatibel met Espressomachine"},{"name": "Soort koffie","value": "Koffiebonen"},{"name": "Branding","value": "Donker gebrand"},{"name": "Smaakintensiteit","value": "8 - Krachtig"}],"ratingDistribution": {"__typename": "ProductReviewsRatingDistribution","fiveStarCount": 83,"fourStarCount": 6,"oneStarCount": 0,"threeStarCount": 1,"twoStarCount": 1}}
Examples
Search for koptelefoon:
{"searchQuery": "koptelefoon","maxResults": 100}
Cap the price:
{"searchQuery": "koptelefoon","maxResults": 100,"maxPrice": 24.5}
Scrape a specific search URL:
{"startUrls": [{"url": "https://www.bol.com/be/nl/l/koffie/13302/"}],"maxResults": 200}
Daily monitoring (run on a schedule):
{"searchQuery": "koptelefoon","maxResults": 500}
Schedule this input to run once a day in the Apify Scheduler to track prices, stock and new items over time.
๐ฐ Pricing
$2 per 1,000 results โ you only pay for successfully retrieved products. Failed retries are never charged.
| Results | Cost |
|---|---|
| 100 | ~$0.2 |
| 1,000 | ~$2 |
| 10,000 | ~$20 |
| 100,000 | ~$200 |
Flat-rate alternatives typically charge $29โ$49/month regardless of usage.
Subscription tiers lower the rate further, down to $1.6 per 1,000 at the highest tier. Use the Max results cap in the input to control your spend exactly.
Performance
| Run size | Typical time |
|---|---|
| 100 results | under 1 minute |
| 1,000 results | 2โ4 minutes |
| 10,000 results | 20โ35 minutes |
Known limitations
- Some fields (brand, condition, shipping) are only returned when the seller or source publishes them โ expect
nullon a share of records. - Prices and stock change constantly; records reflect the moment of scraping.
- Very large result sets are bounded by the source's own paging limits.
- Items can sell or be withdrawn at any time, so a small share of URLs may expire shortly after scraping.
Technical details
- Source: bol.com
- Coverage: everything the public search exposes, filterable via the input parameters above
- Retry: automatic retry on network errors with exponential backoff
Need a custom scraper?
Unfenced Group builds Apify actors for any website โ for free.
If the site you need isn't in our portfolio yet, just ask. We scope, build, and publish it at no cost to you. You only pay for results โ we absorb the compute and proxy costs ourselves. Same pay-per-result pricing, same quality, same standards as every actor in this portfolio.
Get in touch: www.unfencedgroup.nl