Bol.com Scraper - Prices, Price History & AI Analysis
Pricing
Pay per usage
Bol.com Scraper - Prices, Price History & AI Analysis
The complete Bol.com intelligence toolkit: track competitor prices, monitor price drops, analyze market trends with AI. Supports Netherlands & Belgium storefronts with cross-run price history and real-time market analysis.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Nick
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
15 hours ago
Last modified
Categories
Share
Scrape product listings from Bol.com, the largest e-commerce platform in the Netherlands and Belgium. Extract prices, list prices, ratings, review counts, seller information, specifications, images, and availability data. Optionally track price tiers across runs (standard / Select / refurbished deltas with price-drop alerts) via a named key-value store, and generate AI-powered price and market analysis for competitive intelligence and e-commerce research.
How is this different from the other Bol.com scrapers on Apify Store?
Every other Bol.com scraper in the Apify Store (studio-amba, muhammetakkurtt, ecomscrape, zyra) returns raw product JSON and stops there. This actor is the only Bol.com scraper that ships an integrated LLM analyst layer — plug in any of OpenRouter (Gemini / Claude / GPT via one key), Anthropic, Google AI, OpenAI, or self-hosted Ollama, and the actor generates a full market brief on top of the scraped catalog: price distribution, brand landscape, discount-pattern detection, seller concentration, rating outliers, and buying recommendations — in one run, no second tool needed.
Other differentiators:
- Price-tier intelligence — only Bol.com scraper on the Store that emits the full price matrix per product. The
alternative_pricesarray 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 separateselect_price/refurbished_pricefields — we go further with an extensible array and first-classhas_select_deal/has_refurbishedboolean filters. Powers arbitrage, resale-margin, and membership-savings analysis at the brand level. - Cross-run price-tier history (watch mode) — turn on
watchMode: trueand every product carries aprice_tier_trendfield 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 newprice-drop-detectedbillable 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+bolClientSecretand 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
beunless you explicitly passcountry="nl". - Sponsored-listing flag — every search-card result carries a
sponsored: true/falseboolean so you can filter out paid-placement SKUs from organic rankings. - Six-way sort ordering —
sortByinput (relevance, popularity, price ascending/descending, rating, newest) for targeted price-monitoring or trend discovery.
What does Bol.com Scraper do?
This actor scrapes publicly available product data from Bol.com. It supports three modes of operation:
- Search mode - Search Bol.com by keyword and scrape product listings across multiple pages.
- Product URL mode - Provide specific Bol.com product URLs to scrape detailed product information including JSON-LD structured data, specifications, and full descriptions.
- Bestsellers mode - Scrape bestselling products from Bol.com, optionally filtered by category.
For each product, the scraper extracts: title, price, list price (before discount), discount percentage, brand, seller name, ratings, review count, availability status, delivery information, product images, categories, EAN/barcode, specifications, and description.
The optional AI analysis generates a comprehensive market report covering price distribution, brand landscape, discount patterns, rating analysis, seller comparison, and buying recommendations.
Why scrape Bol.com?
Bol.com is the dominant e-commerce marketplace in the Benelux region, with over 13 million active customers and 52,000+ sellers. It is essentially the Amazon of the Netherlands and Belgium.
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.
- Market research: Understand product categories, brand positioning, and consumer preferences in the Dutch and Belgian markets.
- Dropshippers: Find trending products, compare supplier prices, and identify profitable product opportunities on Bol.com.
- Brand monitoring: Track how your brand and products appear on Bol.com, including pricing by third-party sellers and customer ratings.
- Academic research: Analyze e-commerce market dynamics, pricing strategies, and consumer behavior in the Benelux region.
How much does it cost to scrape Bol.com?
| Action | Cost |
|---|---|
| 1 product scraped | $0.005 |
| 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 actually ships with at least one alternative price tier in the alternative_prices array (Select or refurbished). Products without secondary offers are never charged the extra $0.001.
The price-drop-detected event is billed only when all three are true: (1) watchMode=true, (2) at least one prior snapshot exists for the product in the bol-com-price-history named KV store, and (3) the current standard price is at least 5 % lower than the previous snapshot's standard price. First-seen products are never charged — they seed the history instead.
Apify platform costs (compute and proxy) are charged separately. Residential proxy is recommended for reliable results. A typical run scraping 25 products takes 1-2 minutes and costs approximately $0.20 total including platform fees.
Quick Start
- Click Try for free to open the actor in Apify Console.
- Enter a search query (e.g., "laptop", "koptelefoon", "wasmachine").
- Choose your country store (Netherlands or Belgium).
- Set the maximum number of products to scrape.
- (Optional) Enable AI analysis and provide an API key.
- Click Start and wait for results.
Example input for search mode
{"mode": "search","searchQuery": "draadloze koptelefoon","maxProducts": 25,"enableAiAnalysis": false,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Note: country is omitted — the actor defaults to be (Belgium mirror) for anti-bot reliability. Set "country": "nl" explicitly if you specifically need the Dutch store.
Example input for product 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-iphone-15-pro-128-gb-natural-titanium/9300000149075693/"],"enableAiAnalysis": true,"llmProvider": "openrouter","openrouterApiKey": "sk-or-...","proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Example input for price-history watch mode
Pair watchMode: true with the Apify scheduler (e.g. once every 24 hours) and every run after the first will carry price_tier_trend deltas on every product:
{"mode": "search","searchQuery": "apple iphone 15 pro","maxProducts": 50,"watchMode": true,"fetchDetails": false,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Run 1 seeds the bol-com-price-history named KV store with one snapshot per product. Run 2 (and every subsequent run) returns each product with a price_tier_trend object comparing today's prices to the previous snapshot, and bills the price-drop-detected event only when the standard price has fallen by 5 % or more. 90 snapshots per product are retained FIFO, so you can eyeball ~3 months of history at a daily cadence.
Input Parameters
Search Settings
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | search | Scraping mode: search, product_url, or bestsellers |
searchQuery | string | Search keywords for Bol.com | |
productUrls | array | List of Bol.com product URLs to scrape | |
category | string | Bestseller category slug (e.g., "elektronica", "boeken") | |
maxProducts | integer | 25 | Maximum number of products (1-200) |
sortBy | string | relevance | Sort order for search mode: relevance, popularity, price_asc, price_desc, rating, newest. Ignored in product_url and bestsellers modes. |
country | string | be | Country store: be (Belgium, default — most reliable) or nl (Netherlands). See "Anti-bot status" below. |
AI Analysis
| Parameter | Type | Default | Description |
|---|---|---|---|
enableAiAnalysis | boolean | false | Enable AI-powered market analysis. Set to true to generate an AI market report. Requires an API key. |
llmProvider | string | openrouter | AI provider: openrouter, anthropic, google, openai, or ollama |
llmModel | string | Custom model name (leave empty for default) | |
openrouterApiKey | string | OpenRouter API key (get one at openrouter.ai) | |
anthropicApiKey | string | Anthropic API key (get one at console.anthropic.com) |
Price-Tier History (watch mode)
| Parameter | Type | Default | Description |
|---|---|---|---|
watchMode | boolean | false | When true, persist each product's standard / Select / refurbished prices across runs in the bol-com-price-history named KV store, emit a price_tier_trend field on every product, and enable the price-drop-detected billable event. No extra HTTP calls; no extra charges on the first run. |
Advanced
| Parameter | Type | Description |
|---|---|---|
proxyConfiguration | object | Proxy settings. Residential proxy strongly recommended. |
Output Format
Each product is stored as a separate dataset item with the following structure:
{"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": "nl","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 with Amazon, eBay, Walmart, Shopify, Marktplaats, Booking, and App Store scrapers. Both fields are emitted in this release for backward compatibility; price_currency will be removed in a future release. Migrate scripts and filters to currency now.
When AI analysis is enabled, a summary item is included with the ai_analysis field containing price analysis, brand landscape, discount insights, rating analysis, seller comparison, market positioning, and buying recommendations.
Frequently Asked Questions
Does it work for Belgium?
Yes — in fact, be is now the default (Cycle 71). The Belgian mirror at bol.com/be serves the same product catalog as bol.com/nl (Bol.com's inventory is unified) with much weaker anti-bot protection, so the actor auto-routes to country=be by default. Product pricing, availability windows, and delivery options can differ between stores, but the underlying SKUs are overwhelmingly shared. 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 for reliable results.
How fast is the scraper?
The actor maintains a 2-second delay between requests to avoid rate limiting. A typical run scraping 25 products from search results takes 1-2 minutes. Scraping individual product URLs takes 3-5 seconds per product due to the polite delay.
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.
What about product variants (sizes, colors)?
The scraper extracts data for the specific product variant shown on the page. If a product URL points to a specific variant (e.g., a particular color or size), that variant's data is returned.
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 to minimize impact on Bol.com's servers.
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. The actor is pre-configured to use Apify's RESIDENTIAL proxy group.
- Start with a small run: Test with 5-10 products first to verify the scraper works with your proxy configuration before running large batches.
- Anti-bot status — BE-mirror is the default for everything (Cycle 71): Bol.com's anti-bot is path-specific AND exit-country-specific. As of April 2026, bol.com/nl aggressively blocks both PDP fetches AND list-mode requests, returning 403 on ~100% of runs even through residential proxy with
apifyProxyCountry=NL(verified Cycles 69–70). The Belgian mirror bol.com/be serves the same catalog with a substantially weaker WAF. The actor auto-routes EVERY request tocountry=beunless you explicitly passcountry="nl". Live smoke test (Cycle 71): 5/5 "tas" products extracted in 11 seconds on first try, zero retries. Users who need NL-specific inventory (rare — most SKUs are shared) can forcecountry=nland accept the 403 risk. - Prefer
fetchDetails: falsefor bulk discovery: Even on the BE mirror, individual PDP fetches can occasionally 403 due to Bol's rate-limiter. Search-card extraction is the reliable path (live-tested ~64% price coverage on card-only runs — we extracted 5/5 cards with prices in the Cycle 71 smoke test) and returns title, price, rating, url, image — enough for discovery, competitive monitoring, and most price-tracking workflows. UsefetchDetails=trueor product-URL mode only when you specifically need PDP-only fields (EAN, full description, specifications). - Retailer API path — the nuclear option for production: If you're a Bol.com seller/partner, provide
bolClientIdandbolClientSecret. This routes through Bol's official Retailer Catalog API, completely bypassing the WAF, and is the recommended integration for production-grade workflows. Web scraping (Playwright) remains the fallback for users without API credentials. - Use product URL mode for detailed data: Search results contain basic information (title, price, rating). For complete data including specifications, EAN codes, full descriptions, and all images, use product URL mode which fetches each product's detail page. See the note above about occasional PDP throttling.
- Schedule regular runs for price monitoring: 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.
- 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. English terms also work for many product categories.
- 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.
Related Actors
- Marktplaats Scraper -- Compare Bol.com retail prices with second-hand prices on Marktplaats, the largest Dutch classifieds platform. Useful for price arbitrage and reseller margin analysis.
- Contact Extractor -- Enrich seller data from Bol.com with company contact details, tech stack, and social profiles for B2B outreach and partnership research.
- Shopify Scraper -- Compare Bol.com marketplace prices with independent Shopify stores selling similar products. Useful for cross-channel pricing analysis and identifying direct-to-consumer alternatives.
- Trustpilot Scraper -- Check Trustpilot reviews for Bol.com sellers and competing e-commerce brands. Combine product data with reputation insights for sourcing and purchasing decisions.
- Grocery Price Monitor -- Track grocery and household product prices alongside Bol.com listings to compare pricing across supermarkets and e-commerce for consumer goods research.
Limitations
- Search results depend on Bol.com's search algorithm and may vary based on location, proxy IP, and personalization factors. Results may differ from what you see in a regular browser session.
- Some product pages may have different HTML structures that the parser cannot handle. The actor uses multiple fallback strategies (JSON-LD structured data, Open Graph meta tags, CSS selectors) to maximize extraction success across different page layouts.
- Bol.com may change their website structure at any time, which could temporarily affect scraping accuracy. The actor is designed to degrade gracefully, returning partial data rather than failing completely.
- Maximum 200 products per run to prevent excessive resource usage and ensure reasonable run times.
- The actor does not handle CAPTCHAs or JavaScript challenges. If Bol.com serves a CAPTCHA, the request will fail and be retried with exponential backoff.
- Product availability and pricing may change between the time of scraping and when you view the results. Always verify critical pricing decisions with the live Bol.com website.
Legal and Compliance
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.