Bol.com MCP Tracker - NL/BE Drops + AI Briefs avatar

Bol.com MCP Tracker - NL/BE Drops + AI Briefs

Pricing

from $5.00 / 1,000 product scrapeds

Go to Apify Store
Bol.com MCP Tracker - NL/BE Drops + AI Briefs

Bol.com MCP Tracker - NL/BE Drops + AI Briefs

Watchlist Bol.com NL/BE price tracker with Retailer API fallback, price-drop alerts, AI briefs, and clean diagnostics for 403/no-result runs. Public HTML scraping is anti-bot sensitive.

Pricing

from $5.00 / 1,000 product scrapeds

Rating

0.0

(0)

Developer

Nick

Nick

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

1

Monthly active users

3 days ago

Last modified

Share

Bol.com Price Tracker - NL/BE Drop Alerts + AI Briefs

Part of the harvestlab MCP suite - 36 RAG-ready, AI-agent-payment-ready Apify actors covering ecommerce, social, travel, news, jobs, EU B2B, dev-tools, and government data. See the full suite ->

MCP-Ready - works as a tool for Claude, Cursor, ChatGPT, and other AI agents via the Apify MCP Server. Typed inputs + structured outputs (dataset_schema) deployed in Cycle 73.

Works with: LangChain - LangGraph - CrewAI - LlamaIndex - PydanticAI - Mastra AI - Bee AI - call this actor as a tool from any Apify MCP or actor-templates-backed AI framework.

Pay-per-result, not per compute unit - you know your cost BEFORE pressing Run. No surprise compute charges, no monthly minimums, no SaaS subscription. Compare to Apify's default $0.20/CU model where cost depends on actor runtime, memory, and data volume.

Apify rental alternative - Apify is sunsetting the rental pricing model in October 2026. This Actor is already 100% pay-per-event: drop in as a 1:1 replacement for any rental-based competitor without a contract or monthly minimum.

No cookies, no OAuth, no API keys (for the scraping) - runs on public data only. AI keys are optional and only needed when enableAiAnalysis: true.

Watchlist status - May 2026: Bol.com public HTML scraping remains anti-bot sensitive. For production reliability, use bolClientId + bolClientSecret to route through the official Bol.com Retailer API. Blocked or zero-result public HTML runs now write diagnostics to a separate diagnostics dataset and emit one default-dataset sentinel so users see a clear remediation path.

Track Bol.com prices across NL + BE and get alerted on 5%+ drops - the only Bol.com scraper on Apify Store with cross-run price-tier history (standard, Select, refurbished). Beats studio-amba, muhammetakkurtt, ecomscrape, and zyra (all ship single-run snapshots only) by adding persistent price deltas + 5-provider AI market briefs in one actor. Playwright-rendered (real Chromium, full JS) so you get the same data buyers see. Covers the Benelux #1 marketplace - 13M active customers, 52K+ sellers.

What it does

This actor scrapes publicly available product data from Bol.com - the dominant e-commerce platform in the Netherlands and Belgium (combined Benelux market). Playwright-based (headless Chromium) to handle JavaScript-rendered pages; auto-routes all requests to the Belgian mirror (bol.com/be) by default since the NL domain blocks scrapers with near-100% 403s as of April 2026.

It supports three modes of operation:

  • Search mode - Search Bol.com by keyword (Dutch or English) and scrape product listings across multiple pages, with six sort options (relevance, popularity, price ascending/descending, rating, newest).
  • Product URL mode - Provide specific Bol.com product URLs to scrape full product detail pages: JSON-LD structured data, EAN/barcode, specifications, full descriptions, and the complete price-tier matrix.
  • Bestsellers mode - Scrape Bol.com's bestselling products, optionally scoped to a category slug (e.g., elektronica, boeken, speelgoed).

For each product, the scraper extracts: title, price, list price (before discount), discount percentage, brand, seller, ratings, review count, availability, delivery estimate, product images, categories, EAN/barcode, specifications, description, and the full alternative-price matrix (Select member price, refurbished/tweedehands price).

The optional AI analysis generates a comprehensive market report covering price distribution, brand landscape, discount patterns, rating analysis, seller concentration, and buying recommendations.

How is this different from every other Bol.com scraper on Apify Store?

Every other Bol.com scraper (studio-amba, muhammetakkurtt, ecomscrape, zyra) returns a raw product JSON snapshot and stops. This actor adds three layers no competitor ships:

  1. Cross-run price-tier history - persists standard, Select, and refurbished prices to a named Apify KV store and emits delta fields (price_tier_trend) on every subsequent run. No other Bol.com scraper does this.
  2. Integrated LLM market analysis - plug in OpenRouter (300+ models), Anthropic, Google AI, OpenAI, or self-hosted Ollama; the actor generates a full market brief on top of the scraped catalog in the same run, no second tool needed.
  3. Retailer API bypass - pass your bolClientId + bolClientSecret to route through Bol's official Retailer Catalog API, completely bypassing the WAF, proxies, and browser overhead.

Features

  • Price-tier intelligence - only Bol.com scraper on the Store that emits the full price matrix per product. The alternative_prices array exposes the Bol.com Select member price (€14.99/year subscription, similar to Amazon Prime) and the refurbished / tweedehands buy-box price alongside the standard price, each with server-computed savings percentage. Competitor muhammetakkurtt exposes these as separate select_price / refurbished_price fields - we go further with an extensible array and first-class has_select_deal / has_refurbished boolean filters. Powers arbitrage, resale-margin, and membership-savings analysis at the brand level.
  • Cross-run price-tier history (watch mode) - turn on watchMode: true and every product carries a price_tier_trend field on subsequent runs: standard_delta_pct, select_delta_pct, refurb_delta_pct, standard_direction (up/down/flat), first_seen_at, history_sample_count. Snapshots persist to a named Apify key-value store (bol-com-price-history) with a 90-entry FIFO cap per product. Seed on run 1, get deltas on every subsequent run. Pairs with the price-drop-detected billable event ($0.005) which fires only when the standard price falls by 5% or more AND prior history exists - clean price-watch signal with no false positives on first-seen SKUs. No other Bol.com scraper on the Apify Store ships cross-run persistence.
  • Bol.com Retailer API bypass - pass bolClientId + bolClientSecret and the actor routes through Bol's official seller API instead of Playwright. No WAF, no 403s, no proxies needed.
  • BE-mirror auto-routing - Bol.com/nl aggressively blocks scraping in April 2026; Bol.com/be serves the same catalog with a much weaker WAF. The actor auto-routes all requests to be unless you explicitly pass country="nl".
  • Sponsored-listing flag - every search-card result carries a sponsored: true/false boolean so you can filter out paid-placement SKUs from organic rankings.
  • Six-way sort ordering - sortBy input (relevance, popularity, price ascending/descending, rating, newest) for targeted price-monitoring or trend discovery.
  • 5-provider AI analysis - OpenRouter (300+ models including Gemini Flash, Claude, GPT), Anthropic, Google AI, OpenAI, and Ollama (self-hosted). Each produces a full market brief: price distribution, brand landscape, discount patterns, rating outliers, seller concentration, buying recommendations.
  • Polite crawling - 2-second delays between requests, exponential backoff on 429/403, hard cap on max items.

Use Cases

  • E-commerce sellers: Monitor competitor pricing, track your own product listings, and discover market gaps on the Bol.com marketplace.
  • Price monitoring: Set up automated price tracking for products you sell or want to buy. Detect price drops, sales events, and seasonal pricing patterns using watch mode with scheduled daily runs.
  • Market research: Understand product categories, brand positioning, and consumer preferences in the Dutch and Belgian markets. Generate instant AI market briefs without manual analysis.
  • Dropshippers: Find trending products, compare supplier prices, and identify profitable product opportunities on Bol.com. Bestsellers mode surfaces trending SKUs in any category.
  • Brand monitoring: Track how your brand and products appear on Bol.com, including pricing by third-party sellers and customer ratings.
  • Arbitrage detection: Compare standard prices against Select member prices and refurbished alternatives. Identify cross-channel arbitrage between Bol.com and Marktplaats.
  • Academic research: Analyze e-commerce market dynamics, pricing strategies, and consumer behavior in the Benelux region.

Input

Search Settings

ParameterTypeDefaultDescription
modestringsearchScraping mode: search, product_url, or bestsellers
searchQuerystringSearch keywords for Bol.com (Dutch or English)
productUrlsarrayList of Bol.com product URLs to scrape
categorystringBestseller category slug (e.g., "elektronica", "boeken")
maxProductsinteger25Maximum number of products (1-200)
sortBystringrelevanceSort order: relevance, popularity, price_asc, price_desc, rating, newest
countrystringbeCountry store: be (Belgium, default - most reliable) or nl (Netherlands)
fetchDetailsbooleanfalseFetch full product detail pages (slower; enables EAN, description, specs, Select/refurb prices)

Price-Tier History (watch mode)

ParameterTypeDefaultDescription
watchModebooleanfalsePersist prices across runs in the bol-com-price-history named KV store; emit price_tier_trend deltas on every product; enable price-drop-detected billing

AI Analysis

ParameterTypeDefaultDescription
enableAiAnalysisbooleanfalseGenerate AI-powered market analysis. Requires an API key for the chosen provider.
llmProviderstringopenrouterAI provider: openrouter, anthropic, google, openai, or ollama
llmModelstringCustom model name (leave empty for provider default)
openrouterApiKeystringOpenRouter API key - get one at openrouter.ai/keys
anthropicApiKeystringAnthropic API key - get one at console.anthropic.com/settings/keys
googleApiKeystringGoogle AI (Gemini) API key - get one at aistudio.google.com/app/apikey
openaiApiKeystringOpenAI API key - get one at platform.openai.com/api-keys
ollamaBaseUrlstringhttp://localhost:11434Ollama base URL for self-hosted inference

Advanced

ParameterTypeDescription
proxyConfigurationobjectProxy settings. Residential proxy strongly recommended - Bol.com blocks datacenter IPs with near-100% 403s.
bolClientIdstringBol.com Retailer API Client ID (bypasses WAF entirely)
bolClientSecretstringBol.com Retailer API Client Secret (required together with Client ID)

Pricing

ActionCost
1 product scraped$0.01
1 price-tier detection (product with Select or refurbished offer)$0.001
1 price-drop detection (watch mode, standard price down >=5% vs prior snapshot)$0.005
25 products (default run, no AI)$0.125
100 products$0.50
AI market analysis$0.05 per analysis
25 products + AI analysis~$0.175

The price-tier-detected event is billed only when a product ships with at least one alternative price tier in alternative_prices (Select or refurbished). Products without secondary offers are never charged the extra $0.001.

The price-drop-detected event fires only when all three are true: (1) watchMode=true, (2) at least one prior snapshot exists for the product, and (3) the current standard price is at least 5% lower than the previous snapshot. First-seen products are never charged - they seed the history instead.

Apify platform costs (compute and proxy) are charged separately. A typical run scraping 25 products takes 1-2 minutes and costs approximately $0.20 total including platform fees.

vs. commercial alternatives: DataForSEO charges $50+/mo and Price2Spy $19.95+/mo for product price monitoring APIs. This actor uses pay-per-event with no subscription: $0.01/product and zero monthly fees.

Output

Each product is stored as a separate default-dataset item with the following structure. Blocked or zero-result runs emit one result_type: "no_results" sentinel in the default dataset and also write the same operational record to the separate diagnostics dataset.

{
"product_id": "9300000164927498",
"ean": "8806095350516",
"title": "Samsung Galaxy S24 Ultra 256GB - Titanium Black",
"url": "https://www.bol.com/nl/nl/p/samsung-galaxy-s24-ultra-256gb-titanium-black/9300000164927498/",
"brand": "Samsung",
"price": 1349.00,
"currency": "EUR",
"price_currency": "EUR",
"list_price": 1499.00,
"discount_percentage": 10,
"availability": "in_stock",
"delivery_text": "Morgen in huis",
"rating": 4.5,
"rating_count": 234,
"seller": "bol.com",
"sponsored": false,
"alternative_prices": [
{"tier": "select", "price": 1299.00, "savings_pct": 4, "label": "Met Select"},
{"tier": "refurbished", "price": 899.00, "savings_pct": 33, "label": "Refurbished / tweedehands"}
],
"has_select_deal": true,
"has_refurbished": true,
"categories": ["Elektronica", "Smartphones", "Samsung smartphones"],
"images": ["https://media.s-bol.com/..."],
"description": "De Samsung Galaxy S24 Ultra...",
"specifications": {
"Schermgrootte": "6.8 inch",
"Intern geheugen": "256 GB",
"Besturingssysteem": "Android 14"
},
"country": "be",
"scraped_at": "2026-04-11T12:00:00+00:00",
"price_tier_trend": {
"has_history": true,
"standard_delta_pct": -6.25,
"select_delta_pct": -5.94,
"refurb_delta_pct": null,
"standard_direction": "down",
"first_seen_at": "2026-04-08T12:00:00+00:00",
"previous_snapshot_at": "2026-04-10T12:00:00+00:00",
"previous_standard_price": 1438.90,
"previous_select_price": 1381.00,
"previous_refurb_price": null,
"history_sample_count": 3
},
"history_slot_key": "price-tier-9300000164927498"
}

The price_tier_trend block appears only when watchMode: true. On the very first run (when no prior snapshot exists yet), it emits {"has_history": false, "standard_direction": "new", ...} with all delta fields null - the product still gets stored to seed future runs. From run 2 onward, you'll see populated deltas. When watchMode is omitted or false, the block is absent entirely (fully backward-compatible).

Field compatibility note: price_currency is deprecated - use currency (ISO 4217 string, e.g., "EUR") for cross-actor consistency. Both fields are emitted in this release for backward compatibility; price_currency will be removed in a future release.

When AI analysis is enabled, a summary item is appended with the ai_analysis field containing price analysis, brand landscape, discount insights, rating analysis, seller comparison, market positioning, and buying recommendations.

Quick Start

  1. Click Try for free to open the actor in Apify Console.
  2. Enter a search query (e.g., "laptop", "koptelefoon", "wasmachine").
  3. Choose your country store (Belgium default - most reliable - or Netherlands).
  4. Set the maximum number of products to scrape.
  5. (Optional) Enable AI analysis and provide an API key.
  6. Click Start and wait for results.

Schedule a daily run with watchMode: true to track price changes and earn price-drop-detected ($0.005) and price-tier-detected ($0.001) events on top of base scraping. The price-drop-detected event fires when a tracked product's standard price falls 5% or more vs. the prior snapshot (threshold is fixed; first-seen products only seed history and are never charged). Best for resellers, MAP enforcement, and Black Friday windows.

{
"productUrls": [
"https://www.bol.com/nl/nl/p/some-product-1/9300000123456789/",
"https://www.bol.com/nl/nl/p/some-product-2/9300000123456790/"
],
"fetchDetails": true,
"watchMode": true,
"country": "be",
"maxItems": 50
}

Setup:

  1. Save & Build the actor.
  2. Paste JSON above into Input.
  3. Set Schedule -> Cron 0 7 * * * (daily 7am CET).
  4. (Optional) Add an Apify integration (Actor -> Integrations -> Webhooks) with event type ACTOR.RUN.SUCCEEDED to push the dataset to Slack, a Google Sheet, or your own endpoint after each run.
  5. After first run, subsequent runs auto-emit price-drop-detected events when standard prices fall by 5% or more.

Cost: 50 products x daily = ~$0.25/day base + price-drop bonuses. Annual cost: ~$95/yr to monitor 50 SKUs vs $99-299/mo Prisync per-store-locked.

Search for products by keyword and collect up to 50 results from the Belgian mirror (default, most reliable):

{
"mode": "search",
"searchQuery": "robot stofzuiger",
"maxProducts": 50,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

Scrape specific product URLs

Fetch full product detail pages - specifications, EAN, description, and complete image set - for a fixed list of URLs:

{
"mode": "product_url",
"productUrls": [
"https://www.bol.com/nl/nl/p/samsung-galaxy-s24-ultra-256gb-titanium-black/9300000164927498/",
"https://www.bol.com/nl/nl/p/apple-airpods-pro-2e-generatie/9300000130729116/"
],
"fetchDetails": true,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

Price monitoring with watch mode

Run on a daily schedule. Each run after the first emits price_tier_trend deltas. Pair with an Apify webhook to get notified when price-drop-detected events fire:

{
"mode": "search",
"searchQuery": "apple airpods pro",
"maxProducts": 30,
"watchMode": true,
"fetchDetails": false,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

Configure a webhook in Apify Console (Actor -> Integrations -> Webhooks) with event type ACTOR.RUN.SUCCEEDED to push results to Slack, a Google Sheet, or your own endpoint whenever prices change.

Full run with AI market analysis

Scrape 100 products and generate an automated market brief via OpenRouter (Gemini 2.0 Flash by default - cheapest option):

{
"mode": "search",
"searchQuery": "draadloze koptelefoon",
"maxProducts": 100,
"sortBy": "popularity",
"enableAiAnalysis": true,
"llmProvider": "openrouter",
"openrouterApiKey": "sk-or-...",
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

The AI summary item contains price distribution, brand landscape, discount-pattern analysis, rating outliers, seller concentration, and buying recommendations.

Tips for best results

  • Always use residential proxy: Bol.com aggressively blocks datacenter IPs. Without a residential proxy, you will likely get 403 errors or empty results.
  • Start with a small run: Test with 5-10 products first to verify the scraper works with your proxy configuration before running large batches.
  • Use BE mirror (default): As of April 2026, bol.com/nl blocks both PDP and list-mode requests with ~100% 403s even via residential proxy. The actor auto-routes to country=be (Belgium mirror) by default. Live smoke test (Cycle 71): 5/5 products extracted in 11 seconds, zero retries.
  • Prefer fetchDetails: false for bulk discovery: Search-card extraction is the reliable path - returns title, price, rating, url, image, enough for discovery and monitoring. Use fetchDetails=true only when you specifically need EAN, full description, or specifications.
  • Retailer API path: If you're a Bol.com seller/partner, provide bolClientId + bolClientSecret. This routes through Bol's official Retailer Catalog API, completely bypassing the WAF.
  • Dutch search terms work best: Since Bol.com is a Dutch platform, searching in Dutch (e.g., "draadloze koptelefoon" instead of "wireless headphones") typically returns more relevant results.
  • Combine with AI analysis: The AI market analysis feature provides instant insights without manual data processing. It works best with 15+ products to identify meaningful patterns.
  • Schedule regular runs: Use Apify's scheduling feature to run the scraper daily or hourly for consistent price tracking. Export data to Google Sheets or a database for trend analysis.
  • Contact Extractor - Enrich seller data from Bol.com with company contact details, tech stack, and social profiles for B2B outreach.
  • Shopify Scraper - Compare Bol.com marketplace prices with independent Shopify stores selling similar products.
  • Trustpilot Scraper - Check Trustpilot reviews for Bol.com sellers and competing e-commerce brands.

MCP Quickstart - call this actor from Claude / Cursor / ChatGPT

Install the Apify MCP server in your AI agent of choice:

# Claude Code
claude mcp add apify -- npx -y @apify/actors-mcp-server --token YOUR_APIFY_TOKEN
# Claude Desktop / Cursor (add to mcp.json):
{"mcpServers":{"apify":{"command":"npx","args":["-y","@apify/actors-mcp-server","--token","YOUR_APIFY_TOKEN"]}}}

Then prompt the agent:

"Use the harvestlab/bol-com-scraper actor on Apify to list current prices for top 20 noise-cancelling headphones on bol.com with NL->BE delivery and any active SELECT deals. Push the results back as JSON."

The agent will discover the actor's dataset_schema.json, generate the right input, run it, and pipe the typed output back into your conversation.

Use with AI agents

Bol-com-scraper output is agent-ready: NL/BE product + price-tier + EAN + Dutch B2B context as typed JSON, Playwright-rendered (real Chromium, full JS - most commodity Bol scrapers ship raw HTTP and miss the rendered price matrix). Wrap it as a tool for Dutch/EU e-commerce arbitrage agents, or drop it as a node in a NL/BE price-watch graph alongside the rest of the Dutch B2B Intelligence Suite. See apify/actor-templates (js-langchain, js-langgraph-agent) for the canonical templates.

LangChain tool wrapper

from langchain_core.tools import Tool
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
def _track_bol_products(args: dict) -> list:
run = client.actor("harvestlab/bol-com-scraper").call(run_input={
"mode": "product_url",
"productUrls": args["productUrls"],
"country": args.get("country", "be"),
"fetchDetails": True,
"watchMode": True,
})
return list(client.dataset(run["defaultDatasetId"]).iterate_items())
track_bol_products = Tool(
name="track_bol_products",
description="Scrape Bol.com NL/BE products with price tiers (standard, Select, refurbished) + EAN + cross-run price-drop deltas. Input: {productUrls: [str], country: 'nl'|'be'}.",
func=_track_bol_products,
)
# track_bol_products.invoke({"productUrls": ["https://www.bol.com/be/nl/p/.../9300000164927498/"], "country": "be"})

LangGraph NL/BE arbitrage node

from langgraph.graph import StateGraph, END
from typing import TypedDict
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
class BolWatchState(TypedDict):
eans: list[str]
products: list[dict]
price_drop: bool
def bol_node(state: BolWatchState) -> BolWatchState:
urls = [f"https://www.bol.com/be/nl/s/?searchtext={ean}" for ean in state["eans"]]
run = client.actor("harvestlab/bol-com-scraper").call(run_input={
"mode": "product_url", "productUrls": urls,
"country": "be", "fetchDetails": True, "watchMode": True,
})
items = list(client.dataset(run["defaultDatasetId"]).iterate_items())
drop = any((i.get("price_tier_trend") or {}).get("standard_direction") == "down" for i in items)
return {**state, "products": items, "price_drop": drop}
graph = StateGraph(BolWatchState)
graph.add_node("bol", bol_node)
graph.set_entry_point("bol")
graph.add_edge("bol", END)
# graph.compile().invoke({"eans": ["8806095350516"], "products": [], "price_drop": False})

Troubleshooting

403 errors on every request

Cause: Datacenter IP blocked by Bol.com's WAF. Fix: Enable residential proxy. If 403s persist on country: "nl", switch to the Belgian mirror (country: "be" or omit country - be is the default as of Cycle 71):

{
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

Product detail pages (PDP) return 403 while search cards work fine

Cause: Bol.com's anti-bot is path-specific and exit-country-specific. Dutch exits are heavily filtered on PDP paths. Fix: Set country: "be" (Belgium mirror) or leave at default. Alternatively set fetchDetails: false and rely on search-card data which is sufficient for most discovery and monitoring workflows.

Empty results or missing products

Cause: URL redirected, or search returned no hits for the given locale. Fix:

  • Verify product URLs use the canonical bol.com/nl/nl/p/... or bol.com/be/nl/p/... format - avoid short redirect links.
  • Try the search query in Dutch (e.g. "koptelefoon" instead of "headphones").
  • Confirm maxProducts is at least 1 and the query returns results when you search manually on the site.

Rate limiting (HTTP 429)

Cause: Too many concurrent requests hitting the same Bol.com edge node. Fix: The actor already applies a 2-second polite delay between requests. If you still hit 429s on large runs, reduce maxProducts per run or split the query into smaller batches and run them sequentially.

Variant prices or Select prices not appearing in output

Cause: Alternative price tiers (Select member price, refurbished price) are only available on product detail pages, not on search-card HTML. Fix: Set fetchDetails: true (or use mode: "product_url") to force a full PDP fetch. Note that PDP fetches occasionally 403 - use the Belgian mirror for best success rates.

Playwright timeout or actor runs out of memory

Cause: The actor uses a Playwright-based Chromium browser which requires at least 4096 MB. Fix: In Apify Console, open Settings -> Resources and set memory to 4096 MB. If you see TimeoutError, this is usually a proxy issue - confirm residential proxy is configured.

Frequently Asked Questions

Does it work for Belgium?

Yes - be is the default (Cycle 71). The Belgian mirror at bol.com/be serves the same product catalog as bol.com/nl with much weaker anti-bot protection. Set country="nl" explicitly only if you need NL-specific pricing or inventory.

Do I need a proxy?

A residential proxy is strongly recommended. Bol.com actively blocks automated requests from datacenter IP addresses. The actor is pre-configured to use Apify's residential proxy group.

How fast is the scraper?

The actor maintains a 2-second delay between requests. A typical run scraping 25 products from search results takes 1-2 minutes. Scraping individual product URLs takes 3-5 seconds per product.

Can I scrape product reviews?

The current version extracts the aggregate rating and review count for each product. Individual review text extraction is not yet supported.

How often can I run this?

You can schedule runs at any interval. For price monitoring, hourly or daily runs are common. The actor uses polite crawling practices with delays between requests.

Known limitations: Search results depend on Bol.com's search algorithm and may vary based on location, proxy IP, and personalization factors. Maximum 200 products per run. The actor does not handle CAPTCHAs. Product availability and pricing may change between scraping and viewing results.

Scheduling and webhooks

Schedule daily Bol.com price-watch runs in Apify Console to track product pricing, review scores, and stock availability for target EANs or search queries. Wire a webhookUrl in n8n or Make to push price changes into a Slack alert, Google Sheet dashboard, or repricing tool the moment a run completes. Typical pipeline: competitor product list -> daily Bol.com run -> n8n -> price-change Slack alert when delta is 5% or more.


This actor scrapes publicly available product information from Bol.com. Users are solely responsible for ensuring their use of this tool complies with:

  • Bol.com's Terms of Service: Review Bol.com's terms before using this actor for commercial purposes. Automated access may be restricted under their terms.
  • Applicable data protection laws: Including the GDPR (General Data Protection Regulation), which applies in the Netherlands and Belgium. This actor does not collect personal data; it only extracts publicly displayed product information.
  • Competition law: If using scraped data for pricing decisions, ensure compliance with applicable competition and antitrust regulations.
  • Copyright: Product descriptions and images scraped from Bol.com may be protected by copyright. Use the data responsibly and in accordance with applicable intellectual property laws.

The authors of this actor are not responsible for any misuse of the data or violations of third-party terms of service. This tool is provided for legitimate research, analysis, and monitoring purposes only.

Important: Bol.com is a private platform and may restrict automated access. Always use this actor responsibly with appropriate rate limiting and proxy configuration.

  • Amazon Scraper - extend Bol.com NL/BE pricing into US and EU retail intel across 11 Amazon marketplaces with cross-run BSR tracking.
  • eBay Scraper - add auction price discovery and sold-comp intelligence to Bol.com retail tracking across 13 country domains.