Custom scraper

Bol.com Scraper

Bol dominates Dutch and Belgian ecommerce, and its Retailer API is scoped to your own seller account: your listings, your orders, your stock. It will not tell you who took the buy block off you this morning. The AI scraper reads the public offer page instead.

  • bol.com
Three stages of a bol.com run: paste a bol URL billed on the render plus super tier at EUR 3.75 per 1,000 pages; declare seller_name and has_buy_block in the Custom Schema builder; and get back the fourteen declared columns, one row per seller offer.

How to scrape bol.com

Bol works much like Amazon does: many sellers can offer the same product, one of them wins the buy block, and that seller takes the overwhelming majority of the sales. Bol's Retailer API is a genuinely good API, but it authenticates as your seller account and answers questions about your side of the marketplace. Competitor pricing, the full seller list on a listing, and who currently holds the buy block are not things it hands you, and there is no public read API that does. Scrapewise carries no dedicated Bol endpoint either. What works is the offer page. You paste bol.com product URLs into the AI scraper, declare the columns you want, and set a daily schedule. Every run comes back over REST, CSV or Excel, and you pay per page from a prepaid wallet.

What the AI scraper does with a bol.com link

Three steps, same as any other site. The bol-specific part is that the interesting data is in the other-sellers block, not the headline price.

  1. Paste the link

    A product page, the other-sellers view for that product, a seller's page, or a category URL with the filters applied. Bol runs one site serving both the Netherlands and Belgium, so unlike most marketplaces here there is no country-domain matrix to manage.

  2. You declare the columns

    A bol pricing job usually wants the buy block price, delivery cost and window, the seller holding the block, every other seller and their price, plus condition and whether the offer is fulfilled by bol. You name those fields yourself in a Custom Schema, or start from the ready Product List schema and add to it.

  3. Schedule it and take the data out

    Run it once or daily. Pull each run by REST API or download it as CSV or Excel. Because the columns stay stable, the run-over-run table is what shows you how often the buy block actually changes hands, which a single snapshot never will.

Set it up once. The data keeps coming.

Save your search once and it runs by itself. Every run lands in your own Scrapewise database, and you pick how to read it.

  1. Set it up once

    Add your ASINs, keywords, places or apps to a scraper in the web app. New accounts get 5 free requests.

  2. Runs on your schedule

    Pick daily, weekly on the days you choose, every few days, or the first or last day of the month. Scheduled runs start at night, European time. Need it more often? Start runs from your own code.

  3. Saved in your database

    Each run adds dated rows, so this week sits next to last week. Rows are kept for 90 days.

  4. Use it your way

    Open the table in the web app and download the latest run as an Excel file. Ask your own AI assistant about it. Or pull the rows into your code with an API key.

Ask your AI assistant about your own data

Connect Claude Desktop or Claude Code with a read-only key. The assistant reads the rows you've already collected, at no extra cost on Scrapewise. With a full-access key it can start a run for you too.

  • Which of my ASINs lost the Buy Box this week?
  • Which competitor cut prices the most since Monday?
  • Show the keywords where I dropped out of the top 10.

What you send and what you get

You send a link and a column list. Who holds the buy block, and what every other seller is asking underneath it, comes from the page itself.

You give
  • Link to a bol.com product or other-sellers pagerequired

    The other-sellers view is the one worth pasting: it carries every competing offer, not just the winning one.

    https://www.bol.com/nl/nl/p/{product-slug}/{product-id}/
  • Your column listrequired

    Start from the ready Product List schema or name your own fields in a Custom Schema. The AI fills the fields you declared.

    Custom Schema, 14 fields
  • How often it runsoptional
    • On demand
    • Daily
    • Weekly
    • Monthly

    Daily is the fastest cadence available. The run-over-run table is what shows how often the buy block changes hands.

You get

One row per seller offer on the product, 14 columns each

  • offer_rank
  • seller_name
  • has_buy_block
  • seller_rating
  • offer_price
  • delivery_cost
  • total_price
  • delivery_promise
  • condition
  • fulfilment
  • product_title
  • brand
  • +2 more, see all columns

REST API, CSV or Excel. The column set stays the same between runs, so the history builds up without a transformation step.

The columns a bol.com run gives you

We are not going to print a table of invented seller offers and call it real output. Bol refuses both a plain fetch and an ordinary browser, so a run has to go through the residential tier. This is the column list you declare before the run, and the column list every run comes back with.

offer_rankPosition of the offer on the page, buy block first
seller_nameMerchant behind this offer
has_buy_blockWhether this seller currently holds the buy block
seller_ratingSeller rating, when bol displays one
offer_priceHeadline price, before delivery
delivery_costDelivery cost as the page states it
total_priceOffer price plus delivery
delivery_promiseDelivery promise shown with the offer
conditionNew or second hand, as the offer states it
fulfilmentFulfilled by bol or shipped by the seller
product_titleProduct title as bol writes it
brandBrand shown on the product
eanEAN, only when the page prints it
checked_atWhen this run collected the page (UTC)

The columns are yours, not ours. Add, rename or drop any of them in a Custom Schema and every future run returns exactly your set.

What a bol.com page costs

Pay-as-you-go from your wallet. No plan, no monthly fee, no seat count.

Render plus residential tier€3.75per 1,000 pages

Measured on 24 September 2026, not assumed. A plain fetch of a bol.com search URL is refused, and loading the same URL in a real browser returned a stub page with no listings in it. A browser alone is not enough here, so budget for a rendered page coming out of a residential exit.

Worked example

250 bol.com product pages checked once a day for a month is 7,500 pages.

about EUR 28.13 for the month at this tier

You are charged for the tier a run actually used, not the tier it was expected to need, and your balance never expires.

See the full price list →

What this page is not promising

We would rather say this here than in a support ticket.

  • No dedicated bol endpoint

    There is no bol data API in our catalogue and no pre-built bol schema. The AI scraper reads the page you point it at, and that is the whole mechanism.

  • No seller-account data

    Your own buy block share, orders, stock and performance score live behind the seller login. A scraper reading public pages cannot reach them, and bol's Retailer API is the right tool for that job.

  • Not a live buy block feed

    Daily is the fastest schedule. The buy block can change several times between two runs, so treat the output as a daily observation rather than a real-time signal.

  • No guaranteed delivery

    Automated traffic gets challenged. We escalate to higher tiers, but we cannot promise every bol page returns data on every run.

  • No price-history database

    We store nothing about bol prices on our side. A price curve is something you build by scheduling the scraper, starting from the day you switch it on.

  • No SKU matching or selling tools

    You get bol's rows as bol presents them. Mapping them to your catalogue is a separate job, we do not push prices to bol, and we are not lawyers, so check bol's terms before you run anything.

Typical fields the AI scraper extracts from a bol.com page

A starting point, not a fixed schema. What comes back is whatever the page actually shows on the day of the run.

Buy block and price

The buy block is the whole game on bol. Everything else on the page is context for it.

  • Buy block price
  • Delivery cost and delivery window
  • Total delivered price
  • Which seller holds the buy block
  • Strikethrough or reference price, when shown

The other sellers

The block underneath the buy block is where you find out how much room there actually is, and who is standing in it.

  • Seller name for each competing offer
  • Price and delivery cost per offer
  • Condition, new or second hand
  • Fulfilled by bol or shipped by the seller
  • Seller rating, when displayed
  • Delivery promise per offer

Product identity

What you match your own catalogue against. Bol carries identifiers more often than a comparison site does, but not universally.

  • Product title
  • Brand
  • EAN, when the page prints it
  • Category breadcrumb
  • Rating and review count
  • Product image URL

The column list is one you write: name each field, give it a type and a line telling the AI what to look for. The schema belongs to your account, so a bol field set can be pointed at the next marketplace without rebuilding it. How Custom Schema works →

What it cannot give you The scraper cannot invent a field the page does not render. The competing-seller list sits behind its own view, so if the full list is what you need, that is the URL to scrape rather than the main product page. EAN comes back only when bol prints it. Anything behind the seller login, your own buy block share, your orders, your performance score, is out of reach, and bol's Retailer API is the correct tool for that.

What people use bol.com data for

01

Tracking who holds the buy block

On bol the buy block takes nearly all the sales, so whether you hold it is the number that decides your week. Scraping it daily across your catalogue tells you which SKUs you lost and to whom, instead of finding out from the sales report a fortnight later.

02

Seeing how thin the gap really is

Losing the block by two cents and losing it by four euros are completely different problems. Capturing every competing offer alongside the winner tells you which one you have, and therefore whether a price move is worth making at all.

03

Finding unauthorised sellers in Benelux

For brands, the seller list on a bol listing is a roster of everyone moving your SKU in the Netherlands and Belgium, including the ones you never appointed. That is what a MAP or channel case is built from.

04

Entering the Dutch market with real numbers

Before you list on bol, scraping the category tells you the going delivered price, how many sellers are already on each product, and where the crowding actually is. That is a cheaper way to find out than listing and watching nothing sell.

05

Watching second-hand undercut your new stock

Bol lists used offers next to new ones. If you do not capture condition, a used offer quietly drags your competitive picture down and your pricing logic reacts to a product that is not really yours.

06

Feeding your own repricing rules

The export is a normal REST API or CSV, so it drops into whatever repricing logic you already run. Scrapewise supplies the observation; your rules decide what to do with it.

What makes bol.com harder than an ordinary storefront

The structure is the difficulty. A snapshot of the headline price tells you almost nothing useful.

Access

  • A plain fetch returns a page missing the offer and seller blocks
  • An ordinary browser gets a stub page with no listings in it, so runs have to go out rendered through a residential exit
  • Success is high but not guaranteed on any individual run

The buy block model

  • One listing, many sellers, one winner, and the winner can change several times a day
  • The competing sellers sit in a separate view that has to be scraped as its own URL
  • Second-hand offers appear alongside new ones and will distort a price average if you do not capture condition
  • A single daily snapshot cannot show how often the block changed hands, only where it sat at that moment

Two markets, one site

  • bol.com serves both the Netherlands and Belgium from one domain
  • Delivery promises and availability can differ by destination country even on the same listing
  • Assortment is Benelux-specific, so a product that exists on a German marketplace may simply not be listed here

Scheduling and delivery

  • Daily is the fastest cadence, so treat the output as a daily observation, not a live buy block feed
  • Every run is retrievable by REST API, or downloadable as CSV or Excel
  • Columns stay stable between runs, so downstream jobs do not need to re-map fields
FAQ

Bol.com scraping — questions

What people ask before pointing the scraper at bol.com.

Because the Retailer API is scoped to you. It authenticates as your seller account and answers questions about your listings, your orders and your stock. It does not return the competing sellers on a listing, their prices, or who currently holds the buy block, and there is no public read API that does. That is the gap a scraper fills.

Ready to pull Bol data into your stack?

Start free — or talk to our team about your exact fields, refresh cadence and volume.