# Bol Product Scraper (`agentx/bol-product-scraper`) Actor

Search Bol.com product listings for the Netherlands and Belgium marketplace. Designed for Benelux retail and sales-partner assortment analysis, returning normalized titles, prices, currency, images, seller signals, availability, URLs, query, and rank.

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

## Pricing

from $4.86 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Bol Product Scraper — Belgium and Netherlands Product Search API

> **Affiliate disclosure:** Apify links on this page may include referral parameters. If you sign up through them, AgentX may receive a commission at no extra cost to you.

Search Bol.com by keyword in Belgium or the Netherlands, then export normalized product records with current EUR price signals, discounts, ratings, reviews, images, sponsored status, rank, source links, and optional seller or fulfillment details.

[![Open Actor](https://img.shields.io/badge/Open_Bol_Product_Scraper-ffd700?style=for-the-badge)](https://apify.com/agentx/bol-product-scraper?fpr=aiagentapi) [![All APIs](https://img.shields.io/badge/Explore_AgentX_APIs-ffd700?style=for-the-badge)](https://apify.com/agentx?fpr=aiagentapi)

[Run a minimum 10-result test](https://apify.com/agentx/bol-product-scraper?fpr=aiagentapi) for one market, inspect seller and fulfillment context, then repeat the same keyword in the other market if comparison is required.

***

### Why Choose This API

#### Two localized Bol.com routes

The `country` input selects the Belgian or Dutch Bol.com market. Results preserve source-controlled differences in ranking, availability, partner offers, and result counts.

#### Verifiable marketplace observations

Records keep the original query, rank, product URL, source URL, market code, and processing timestamp. Optional price, seller, shipping, delivery, return, and specification fields remain empty when the source does not disclose them.

#### Verifiable records without fabricated values

Delivered records retain source links and leave unavailable optional values empty. This provides consistent product rows without inventing seller, fulfillment, price, or identifier data.

#### Shared shopping contract

Every record uses the 58-field AgentX shopping schema, making Bol.com results easier to compare with datasets from related product Actors.

***

### Quick Start Guide

1. [Open Bol Product Scraper](https://apify.com/agentx/bol-product-scraper?fpr=aiagentapi).
2. Enter a product `keyword`, choose `Belgium` or `Netherlands`, and set `max_results`.
3. Click **Start**.
4. Inspect and export the default dataset.

```json
{
  "keyword": "Smart TV",
  "country": "Belgium",
  "max_results": 10
}
```

`max_results` is an upper bound. Bol.com may expose fewer usable public product rows for a particular keyword and market.

***

### Input Parameters

| Parameter | Type | Required | Limits | Description |
| --- | --- | --- | --- | --- |
| `keyword` | string | Yes | Non-empty | Product, brand, category, or search phrase to extract Bol.com product data |
| `country` | string | Yes | `Belgium`, `Netherlands` | Bol.com country/site setting to query |
| `max_results` | integer | Yes | 10–10,000 | Maximum number of Bol.com product records to return |

This Actor is fixed to Bol.com and does not expose a `platforms` input. Use [All Shopping Scraper](https://apify.com/agentx/all-shopping-scraper?fpr=aiagentapi) when you need a supported multi-platform search.

***

### Output Data Schema

The default dataset contains 58 fields. Source-dependent fields are nullable.

| Group | Fields |
| --- | --- |
| Images and identity | `main_image`, `image_urls`, `title`, `brand`, `badges`, `category`, `breadcrumbs`, `description`, `features`, `product_id`, `sku`, `gtin`, `mpn`, `model` |
| Product details | `specifications`, `manufacturer`, `origin`, `energy_class`, `included`, `condition`, `release_date`, `variant_group`, `variants` |
| Price and promotions | `price`, `was_price`, `unit_price`, `currency`, `price_text`, `discount_pct`, `discount_text`, `promo_text`, `installment_text` |
| Availability and demand | `stock_status`, `stock_text`, `sales_text`, `buy_limit`, `rating`, `review_count` |
| Seller and fulfillment | `seller`, `seller_url`, `seller_score`, `shipping_text`, `shipping_cost`, `delivery_text`, `pickup_text`, `return_text`, `return_days`, `warranty_text` |
| Traceability | `platform`, `site`, `country`, `product_url`, `source_url`, `query`, `rank`, `sponsored`, `processor`, `processed_at` |

Example schema record:

```json
{
  "main_image": "https://media.s-bol.com/example.jpg",
  "title": "55 Inch 4K Smart TV",
  "brand": "Example Brand",
  "product_id": "9300000000000000",
  "price": 499.0,
  "was_price": 549.0,
  "currency": "EUR",
  "price_text": "€ 499.00",
  "discount_text": "Save €50.00",
  "stock_text": "Op voorraad",
  "rating": 4.6,
  "review_count": 1248,
  "seller": "Example seller",
  "platform": "bol",
  "site": "www.bol.com",
  "country": "BE",
  "product_url": "https://www.bol.com/be/nl/p/example/9300000000000000/",
  "source_url": "https://www.bol.com/be/nl/s/?searchtext=Smart+TV",
  "query": "Smart TV",
  "rank": 1,
  "sponsored": false,
  "processor": "https://apify.com/agentx/bol-product-scraper",
  "processed_at": "2026-07-20T00:00:00.000Z"
}
```

This is a documentation example, not a live offer or inventory guarantee.

***

### Integration Examples

#### Dataset export workflow

Run the Actor from its Store page, review the default dataset, and use the export options made available by Apify. The completed run exposes its dataset reference for downstream workflows.

#### Repeated market comparison

Keep the keyword and result limit stable, run once for Belgium and once for the Netherlands, then compare records by `product_id` or `product_url`. Retain `query`, `rank`, `source_url`, and `processed_at` so comparisons remain auditable.

#### Actor API and MCP

```json
{
  "actorId": "qSDgjQniFvlx4XARW",
  "input": {
    "keyword": "Smart TV",
    "country": "Belgium",
    "max_results": 10
  }
}
```

Use the [Actor API tab](https://apify.com/agentx/bol-product-scraper/api?fpr=aiagentapi) for account-specific examples. For agent clients, follow the official [Apify MCP guide](https://docs.apify.com/integrations/mcp) and provide the same explicit input. Required fields are not silently defaulted.

***

### Pricing & Cost Calculator

Each Actor start has an `apify-actor-start` event price of $0.01. Delivered dataset records use the `result` event:

| Account tier | Actor start | Price per delivered result | Total for 10 delivered results |
| --- | ---: | ---: | ---: |
| FREE | $0.01000 | $0.00540 | $0.06400 |
| BRONZE | $0.01000 | $0.00522 | $0.06220 |
| SILVER | $0.01000 | $0.00504 | $0.06040 |
| GOLD | $0.01000 | $0.00486 | $0.05860 |
| PLATINUM | $0.01000 | $0.00486 | $0.05860 |
| DIAMOND | $0.01000 | $0.00486 | $0.05860 |

Billing follows delivered result events, not the requested maximum. Check the live Store pricing panel before large production runs.

***

### Compared with alternatives

| Option | Best fit | Important trade-off |
| --- | --- | --- |
| Bol Product Scraper | Repeatable public Bol.com snapshots for Belgium and the Netherlands | Current observations; optional partner and delivery fields can be sparse |
| All Shopping Scraper | Compatible multi-platform product comparisons | Broader output needs more identity matching |
| Manual Bol.com browsing | A few offer checks with direct human review | Slow to repeat and difficult to audit at scale |
| Authorized Bol partner tools | Managing a merchant's own offers and catalog | Requires partner credentials and serves a different scope |

Choose this Actor for structured public search collection. Use direct product-page review when seller, buy-box, delivery, warranty, or purchase decisions matter.

***

### Use Cases & Applications

- Compare Bol.com search rankings between Belgium and the Netherlands.
- Monitor current EUR prices, original prices, discounts, and stock text over time.
- Research public seller, delivery, shipping, and return signals when available.
- Match Bol.com products to internal catalogs with identifiers, titles, brands, images, and URLs.
- Build auditable marketplace research datasets without inventing missing values.

The output does not verify seller identity, stock, delivery performance, future price availability, or product authenticity.

***

### FAQ

#### What does each delivered record represent?

Each record represents a usable public Bol.com result collected during that run. Use `query`, `rank`, `product_url`, `source_url`, and `processed_at` to review its source context.

#### Can a run return fewer records than `max_results`?

Yes. `max_results` is an upper bound, while the delivered count depends on the usable public products available for the selected keyword and country during that run.

#### Why can Belgium and Netherlands results differ?

Bol.com controls offer availability, partner mix, ordering, and returned result counts separately for its Belgian and Dutch markets.

#### Why are some seller or fulfillment fields empty?

Bol.com does not expose every seller or fulfillment field for every result. Missing values remain empty rather than being inferred.

#### Is the data historical?

No. A record represents the source response processed during that run. Save successive datasets to create a history.

#### Can I request more than 10,000 products?

No. The public input accepts 10 through 10,000, and the source may return fewer usable rows.

***

### Legal & Compliance

Use the Actor and exported data only when permitted by applicable law, Bol.com's current [customer terms](https://www.bol.com/nl/nl/klantenservice/a/5678927947235328/voorwaarden), and your own compliance requirements. The Actor does not grant intellectual-property, resale, privacy, or marketplace usage rights. Users remain responsible for their inputs, retention, and downstream use.

***

### Related Tools

#### Related product scrapers

- [AliExpress Product Scraper](https://apify.com/agentx/aliexpress-product-scraper?fpr=aiagentapi)
- [Hepsiburada Product Scraper](https://apify.com/agentx/hepsiburada-product-scraper?fpr=aiagentapi)
- [Rakuten Product Scraper](https://apify.com/agentx/rakuten-product-scraper?fpr=aiagentapi)

#### Enrich with AgentX

- [All Shopping Scraper](https://apify.com/agentx/all-shopping-scraper?fpr=aiagentapi)
- [All Jobs Scraper](https://apify.com/agentx/all-jobs-scraper?fpr=aiagentapi)
- [All Property Scraper](https://apify.com/agentx/all-property-scraper?fpr=aiagentapi)

***

### Support & Community

- [Open the Actor](https://apify.com/agentx/bol-product-scraper?fpr=aiagentapi)
- [Explore AgentX APIs](https://apify.com/agentx?fpr=aiagentapi)
- Telegram community: [@Apify\_Actor](https://t.me/Apify_Actor)
- Direct support: [@AiAgentApi](https://t.me/AiAgentApi)

When reporting an issue, include the input, run identifier, affected `source_url`, and a small sample. Never publish private tokens.

*Last updated: July 21, 2026. Maintained by AgentX.*

# Actor input Schema

## `keyword` (type: `string`):

Product, brand, category, or search phrase to extract Bol.com product data

## `country` (type: `string`):

Bol.com country/site setting to query.

## `max_results` (type: `integer`):

Maximum number of Bol.com product records to return

## Actor input object example

```json
{
  "keyword": "Smart TV",
  "country": "Belgium",
  "max_results": 10
}
```

# Actor output Schema

## `results` (type: `string`):

Product records returned by this actor with normalized fields and source URLs.

# 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 = {
    "keyword": "Smart TV",
    "country": "Belgium",
    "max_results": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("agentx/bol-product-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 = {
    "keyword": "Smart TV",
    "country": "Belgium",
    "max_results": 10,
}

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

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

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

```

## CLI example

```bash
echo '{
  "keyword": "Smart TV",
  "country": "Belgium",
  "max_results": 10
}' |
apify call agentx/bol-product-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=agentx/bol-product-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/qSDgjQniFvlx4XARW/builds/TpCMHbVBY8HRWBGA7/openapi.json
