# Bol Reviews Scraper (`ecomscrape/bol-reviews-scraper`) Actor

Extract detailed customer reviews from Bol.com, Netherlands' largest e-commerce platform with 13.6 million users. Get structured review data for market research.

- **URL**: https://apify.com/ecomscrape/bol-reviews-scraper.md
- **Developed by:** [ecomscrape](https://apify.com/ecomscrape) (community)
- **Categories:** E-commerce, Automation, Developer tools
- **Stats:** 63 total users, 0 monthly users, 100.0% runs succeeded, 6 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-usage

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Contact

If you encounter any issues or need to exchange information, please feel free to contact us through the following link:
[My profile](https://apify.com/ecomscrape)

## Bol.com Review Scraper - Automated Review Extraction

### Introduction

Bol.com stands as the Netherlands' largest e-commerce platform, serving 13.6 million active customers across the Netherlands and Belgium with over 41 million unique products. As a major marketplace where 47,000 partners sell their items, Bol.com hosts thousands of valuable customer reviews that provide crucial insights into product performance, customer satisfaction, and market trends.

The Bol.com Review Scraper addresses the challenge of manually collecting and analyzing customer feedback at scale. Whether you're conducting market research, monitoring competitor products, or analyzing customer sentiment, manually browsing through hundreds of product reviews is time-consuming and inefficient. This scraper automates the entire process, delivering structured review data that can be immediately analyzed and utilized.

### Scraper Overview

The Bol.com Review Scraper is a specialized tool designed to extract comprehensive customer review data from product pages on Bol.com. This powerful scraper automatically navigates through product listings, collects detailed review information, and organizes the data into a structured format for easy analysis.

**Key Features:**

- Extracts complete review datasets including ratings, text, and reviewer information
- Handles multiple product URLs simultaneously
- Processes verified purchase indicators and review feedback metrics
- Supports proxy rotation to avoid detection
- Configurable retry mechanisms for reliable data collection

**Target Users:**

- E-commerce businesses monitoring competitor reviews
- Market researchers analyzing customer sentiment
- Product managers tracking product performance
- Digital marketers studying customer behavior
- Data analysts requiring structured review datasets

### Input and Output Details

#### Input Configuration

Example url 1: https://www.bol.com/nl/fr/p/apple-earpods-casque-avec-fil-ecouteurs-appels-musique-blanc/9200000065666274/?bltgh=pHNcX54Z30Jl58Jngh9PlA.6_30.35.ProductTitle

Example url 2: https://www.bol.com/nl/nl/p/conway-living-kledingrek-op-wieltjes-heavy-duty-verrijdbaar-kledingrek-garderoberek-verstelbare-kledingstang-uitschuifbare-kledingstang-verstelbare-hangstang-stabiel-tot-150-kg-zilver/9300000232699440/?bltgh=vcfGPk5-sc-pLhcV0U1Evw.6_31.33.ProductTitle

Example url 3: https://www.bol.com/nl/nl/p/kledingkast-schuine-wand-zolder-slaapkamer-opbergkast-geschikt-voor-schuine-wanden/9300000143669196/?bltgh=vcfGPk5-sc-pLhcV0U1Evw.6_31.34.ProductTitle

Example Screenshot of review information page:

![](https://i.ibb.co/fGMVy9s6/Screenshot-from-2025-07-18-11-15-57.png)

The scraper accepts a JSON configuration with the following parameters:

```json
{
  "max_retries_per_url": 2, // Maximum waiting time when accessing the links you provided.
  "proxy": { // Add a proxy to ensure that during the data collection process, you are not detected as a bot.
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL" 
    ],
    "apifyProxyCountry": "SG" // You should choose an Country that coincides with the Country you want to collect data from
  },
  "max_items_per_url": 20, // Total page you want scrape
  "urls": [ // Links to detail pages.
    "https://www.bol.com/nl/fr/p/apple-earpods-casque-avec-fil-ecouteurs-appels-musique-blanc/9200000065666274/?bltgh=pHNcX54Z30Jl58Jngh9PlA.6_30.35.ProductTitle",
    "https://www.bol.com/nl/nl/p/conway-living-kledingrek-op-wieltjes-heavy-duty-verrijdbaar-kledingrek-garderoberek-verstelbare-kledingstang-uitschuifbare-kledingstang-verstelbare-hangstang-stabiel-tot-150-kg-zilver/9300000232699440/?bltgh=vcfGPk5-sc-pLhcV0U1Evw.6_31.33.ProductTitle",
    "https://www.bol.com/nl/nl/p/kledingkast-schuine-wand-zolder-slaapkamer-opbergkast-geschikt-voor-schuine-wanden/9300000143669196/?bltgh=vcfGPk5-sc-pLhcV0U1Evw.6_31.34.ProductTitle"
  ]
}
```

**Input Parameters Explained:**

- **max_retries_per_url**: Sets retry attempts when accessing URLs (recommended: 2-3)
- **proxy settings**: Essential for avoiding bot detection; residential proxies recommended
- **apifyProxyCountry**: Should match your target market (NL for Netherlands, BE for Belgium)
- **max_items_per_url**: Controls how many reviews to scrape per product page
- **urls**: Array of Bol.com product page URLs to scrape

**Output:**

The scraper delivers structured data with the following fields:

```json
[ // List of review information
  {
    "id": "review-f5c5baf8-6411-5b52-8f6b-676e63f7f83f",
    "title": "Oreilles d'imitation",
    "description": "<div class=\"review__body\">\n    \n    <p class=\"mb-4\" data-test=\"review-body\">Rarement senti aussi trompé. Ce sont des oreilles d'imitation. Mon iPhone ne les reconnaît pas non plus comme originaux. Les écouteurs sont annoncés comme réels et livrés dans une boîte Apple qui ne peut pas être distinguée des vrais. Différence de son à gauche et à droite. Dommage que cela soit vendu par Bol.</p>\n</div>",
    "author_name": "Marsman1980",
    "author_age": "40-49 ans",
    "review_date": "27 décembre 2020",
    "verified_buy": "Achat vérifié",
    "pros": "<ul class=\"review-pros-and-cons__list review-pros-and-cons__list--pros m-none\" data-test=\"review-pros\">\n          \n            <li class=\"review-pros-and-cons__attribute review-pros-and-cons__attribute--pro\">rien\n              \n            </li>\n          \n            <li class=\"review-pros-and-cons__attribute review-pros-and-cons__attribute--pro\">sera retourné immédiatement\n              \n            </li>\n          \n          \n          </ul>",
    "cons": "<ul class=\"review-pros-and-cons__list review-pros-and-cons__list--cons m-none\" data-test=\"review-cons\">\n          \n          <li class=\"review-pros-and-cons__attribute review-pros-and-cons__attribute--con\">faux que faux\n            \n          </li>\n          \n          \n        </ul>",
    "review_feedback": {
      "positive": 14,
      "negative": null
    },
    "from_url": "https://www.bol.com/nl/fr/p/apple-earpods-casque-avec-fil-ecouteurs-appels-musique-blanc/9200000065666274/?bltgh=pHNcX54Z30Jl58Jngh9PlA.6_30.35.ProductTitle"
  }, // ... Many other review details
]
```

**Output Fields Explained:**

- **ID**: Unique identifier for each review entry, enabling database storage and duplicate prevention
- **Title**: Review headline or summary, crucial for quick sentiment assessment and categorization
- **Description**: Full review text containing detailed customer feedback, the primary source for sentiment analysis
- **Author Name**: Reviewer's display name, useful for identifying repeat customers or influence patterns
- **Author Age**: Demographic data helping segment feedback by age groups for targeted insights
- **Review Date**: Timestamp enabling trend analysis and tracking review patterns over time
- **Verified Buy**: Boolean indicator showing if reviewer actually purchased the product, crucial for authenticity validation
- **Pros**: Structured positive feedback points, perfect for identifying product strengths
- **Con(s)**: Organized negative feedback, essential for pinpointing improvement areas
- **Review Feedback**: Helpfulness metrics showing how other users rated the review's usefulness

### How to Use the Scraper

**Step 1: Prepare URLs**
Navigate to Bol.com and collect the full URLs of product pages you want to analyze. Ensure URLs are complete and accessible.

**Step 2: Configure Settings**

- Set appropriate proxy country (NL/BE for best results)
- Adjust max_items_per_url based on your needs
- Configure retry settings for stability

**Step 3: Execute Scraping**
Submit your configuration and monitor progress. The scraper will automatically handle pagination and data extraction.

**Best Practices:**

- Use residential proxies to avoid IP blocking
- Don't exceed 100 reviews per product to maintain reasonable execution time
- Allow sufficient time between requests to respect rate limits
- Regularly update your proxy configuration for optimal performance

**Common Issues & Solutions:**

- **Blocked requests**: Switch to residential proxy or change country
- **Missing data**: Increase retry count or adjust delay settings
- **Incomplete reviews**: Some products may have limited review data available

### Benefits and Applications

**Time Efficiency**: Manually collecting 100 reviews would take hours; this scraper completes the task in minutes while maintaining accuracy and completeness.

**Real-World Applications:**

- **Competitive Analysis**: Monitor competitor product reviews to identify market gaps and opportunities
- **Product Development**: Analyze customer feedback to guide feature improvements and new product development
- **Market Research**: Understanding customer sentiment trends across different product categories
- **Quality Monitoring**: Track your own product reviews for reputation management and customer satisfaction insights
- **Pricing Strategy**: Correlate review sentiment with pricing to optimize pricing decisions

**Business Value**: Access to structured review data enables data-driven decision making, improves product positioning, and helps identify emerging market trends before competitors.

### Conclusion

The Bol.com Review Scraper transforms time-consuming manual review collection into an automated, scalable process. By providing structured access to Netherlands' largest e-commerce platform's review data, this tool empowers businesses to make informed decisions based on real customer feedback.

Ready to unlock valuable customer insights from Bol.com? Start extracting structured review data today and gain a competitive edge through data-driven market intelligence.

## Related Actors

[**Bol product page details scraper**](https://apify.com/ecomscrape/bol-product-page-details-scraper): Extract detailed product information from Bol.com effortlessly with this powerful scraping tool

[**Bol product search scraper**](https://apify.com/ecomscrape/bol-product-search-scraper): Extract detailed product information from Bol.com effortlessly with this powerful scraping tool

## Your feedback

We are always working to improve Actors' performance. So, if you have any technical feedback about Bol.com Review Query Scraper or simply found a bug, please create an issue on the Actor's Issues tab in Apify Console.

# Actor input Schema

## `urls` (type: `array`):

Add the URLs of the Detail page urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.

## `max_items_per_url` (type: `integer`):

Limit the number of items per URL you want to scrape

## `max_retries_per_url` (type: `integer`):

Limit the number of retries for each URL if the scrape is detected as a bot or the page fails to load

## `proxy` (type: `object`):

Select proxies to be used by your scraper.

## Actor input object example

```json
{
  "urls": [
    "https://www.bol.com/nl/fr/p/apple-earpods-casque-avec-fil-ecouteurs-appels-musique-blanc/9200000065666274/?bltgh=pHNcX54Z30Jl58Jngh9PlA.6_30.35.ProductTitle"
  ],
  "max_items_per_url": 20,
  "max_retries_per_url": 2,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "NL"
  }
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "urls": [
        "https://www.bol.com/nl/fr/p/apple-earpods-casque-avec-fil-ecouteurs-appels-musique-blanc/9200000065666274/?bltgh=pHNcX54Z30Jl58Jngh9PlA.6_30.35.ProductTitle"
    ],
    "max_items_per_url": 20,
    "max_retries_per_url": 2,
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "NL"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("ecomscrape/bol-reviews-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "urls": ["https://www.bol.com/nl/fr/p/apple-earpods-casque-avec-fil-ecouteurs-appels-musique-blanc/9200000065666274/?bltgh=pHNcX54Z30Jl58Jngh9PlA.6_30.35.ProductTitle"],
    "max_items_per_url": 20,
    "max_retries_per_url": 2,
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "NL",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("ecomscrape/bol-reviews-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "urls": [
    "https://www.bol.com/nl/fr/p/apple-earpods-casque-avec-fil-ecouteurs-appels-musique-blanc/9200000065666274/?bltgh=pHNcX54Z30Jl58Jngh9PlA.6_30.35.ProductTitle"
  ],
  "max_items_per_url": 20,
  "max_retries_per_url": 2,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "NL"
  }
}' |
apify call ecomscrape/bol-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ecomscrape/bol-reviews-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/aIbAnFOCXI4k5Z3NC/builds/ZYHaL9tqRihXKQkdu/openapi.json
