Bol Reviews Scraper
Pricing
from $3.99 / 1,000 results
Bol Reviews Scraper
Extract detailed customer reviews from Bol.com, Netherlands' largest e-commerce platform with 13.6 million users. Get structured review data for market research.
Pricing
from $3.99 / 1,000 results
Rating
0.0
(0)
Developer
Coding Frontned
Maintained by CommunityActor stats
0
Bookmarked
6
Total users
6
Monthly active users
12 days ago
Last modified
Categories
Share
What this Actor does
This Actor extracts publicly visible customer reviews and product-level rating information from Bol.com product pages and search pages for the Netherlands and Belgium. It is useful for bounded review research, product quality comparisons, sentiment samples, and rating snapshots.
The Actor uses direct HTTPS requests to public bol.com pages, parses Product JSON-LD and review markup, and follows a bounded number of public product links from search pages. It does not sign in, submit forms, solve CAPTCHAs, bypass WAFs, use stealth or fingerprint evasion, or access private customer data. A blocked or unusable response becomes an explicitly typed diagnostic row when diagnostics are enabled.
Input
All inputs are optional. Defaults preserve the original Actor behavior: query coffee, one generated search URL, maxProducts: 5, maxReviews: 25, 30-second timeouts, one transient retry, and sitemap evidence enabled.
Search and traversal
query— search term used when no source URL is supplied; defaultcoffee.searchQueryandsearchKeywords— compatibility aliases forquery.startUrls— up to 20 public Bol.com search or product URLs. String URLs are supported for backward compatibility; request-style{ "url": "..." }values are also accepted by the runtime.sourceUrlsandurls— compatibility aliases forstartUrls.url— compatibility alias for one source URL.startPage— first 1-based search page, from 1 to 100; default1.maxPages— maximum search pages per source, from 1 to 10; default1. Product URLs are fetched once.maxProducts— maximum product links followed from each search page, from 1 to 25; default5.maxReviews— global maximum individual review rows, from 1 to 200; default25.
Search pagination preserves the source query and sets the observed page parameter. Sources and pages are processed in order, repeated URLs are skipped, and the Actor stops when the review limit or page bound is reached.
Requests and fallbacks
timeoutSecs— per-page timeout from 5 to 120 seconds; default30.maxRetries— bounded retries for transient statuses and timeouts, from 0 to 2; default1. Access-control responses are not retried indefinitely.useSitemapFallback— when a page is blocked, collect bounded public sitemap URL evidence inOUTPUT; defaulttrue. Sitemap URLs are provenance counters only and are never emitted as review records.includeDiagnostics— emit blocked, failed, and empty-response diagnostics; defaulttrue.
Local deterministic QA
fixture— local-only{ "url": "...", "body": "..." }response fixture.fixtureFile— one repository-relative HTML fixture.fixtureFiles— up to 10 repository-relative fixtures consumed in page order.
Fixture content is limited to 4 MiB. Paths must stay inside the Actor directory and outside node_modules. Fixtures are used only when explicitly supplied and never silently replace a failed live response.
Output
Review and summary records
Normal rows contain only consumer-facing review, product, and provenance fields. Individual review rows are identified by their review fields such as reviewText, reviewTitle, rating, author, and reviewDate. A product summary row has reviewsFound: 0 and may contain averageRating and reviewCount.
Possible normal fields are deterministic reviewId for individual reviews, productId, productTitle, productUrl, productImageUrl, brand, price, currency, averageRating, reviewCount, reviewsFound, reviewTitle, reviewText, rating, author, reviewDate, verifiedPurchase, source, sourceUrl, query, sourceDomain, and scrapedAt.
Normal dataset rows do not contain request instrumentation such as recordType, httpStatus, fetchStatus, elapsedMs, attempts, actor metadata, or retry/debug wrappers. Diagnostic rows use exactly recordType: "diagnostic", diagnosticType, url, error, errorCode, and scrapedAt.
Diagnostic records
When includeDiagnostics is true, a blocked or unusable response produces these seven typed fields:
{"url": "https://www.bol.com/nl/nl/p/example-product/9300000000000000/","recordType": "diagnostic","diagnosticType": "access_blocked","sourceUrl": "https://www.bol.com/nl/nl/p/example-product/9300000000000000/","error": "Bol returned an access-control or challenge page; no review data was collected.","errorCode": "ACCESS_BLOCKED","scrapedAt": "2026-09-10T08:47:00.737Z"}
Diagnostic codes include ACCESS_BLOCKED, REDIRECT_BLOCKED, HTTP_ERROR, REQUEST_FAILED, and NO_DATA.
Key-value summary
The OUTPUT and compatibility-alias OUTPUT_SUMMARY key-value records contain status, runStatus, requestedUrls, pagesFetched, productsSeen, reviewRecords, summaryRecords, blocked, errors, diagnostics, droppedRecordCount, dropReasons, sitemapRequests, sitemapFallbacks, sitemapProductsDiscovered, and completedAt. Operational counters stay here instead of entering dataset rows.
Examples
Generated search
{"query": "coffee","maxProducts": 5,"maxReviews": 25,"includeDiagnostics": true}
Direct product URL
{"url": "https://www.bol.com/nl/nl/p/example-product/9300000000000000/","maxReviews": 10,"useSitemapFallback": false}
Deterministic local verification
{"query": "coffee","maxReviews": 25,"fixtureFile": "test/fixtures/synthetic-bol-review.html"}
Cost and performance
Runtime grows with the number of search pages, followed product pages, retries, and sitemap requests. Defaults are bounded at one page per source, five product pages per search page, 25 review rows, a 30-second request timeout, and one retry. Increase limits only when the additional public requests are justified.
Responsible use and limitations
Use only publicly accessible data and comply with Bol.com’s terms, robots guidance, copyright, privacy, and applicable laws. Do not use the Actor to collect private customer data or defeat access controls. Direct HTTPS requests may be blocked by Bol.com or the execution environment; a diagnostic is an honest result, not a workaround. No proxy, browser automation, CAPTCHA solving, or stealth transport is provided.
You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.