Bol Reviews Scraper avatar

Bol Reviews Scraper

Pricing

from $3.99 / 1,000 results

Go to Apify Store
Bol Reviews Scraper

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

Coding Frontned

Maintained by Community

Actor 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; default coffee.
  • searchQuery and searchKeywords — compatibility aliases for query.
  • 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.
  • sourceUrls and urls — compatibility aliases for startUrls.
  • url — compatibility alias for one source URL.
  • startPage — first 1-based search page, from 1 to 100; default 1.
  • maxPages — maximum search pages per source, from 1 to 10; default 1. Product URLs are fetched once.
  • maxProducts — maximum product links followed from each search page, from 1 to 25; default 5.
  • maxReviews — global maximum individual review rows, from 1 to 200; default 25.

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; default 30.
  • maxRetries — bounded retries for transient statuses and timeouts, from 0 to 2; default 1. Access-control responses are not retried indefinitely.
  • useSitemapFallback — when a page is blocked, collect bounded public sitemap URL evidence in OUTPUT; default true. Sitemap URLs are provenance counters only and are never emitted as review records.
  • includeDiagnostics — emit blocked, failed, and empty-response diagnostics; default true.

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

{
"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.