Looking for the overview — what this API returns, what it costs, and a call you can run without a key? See the Coolblue API page →
E-commerce & Marketplaces

Coolblue API & Scraper

The Coolblue API turns coolblue.nl, coolblue.be and coolblue.de into clean JSON in six actions.

6 actionsLive JSON1,000 free credits$0.67–$1.50 / 1,000 creditsMCP-ready
Get a free keyOpen in playground

🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.

Coolblue is a retailer, not a marketplace, so there is one seller, one price and one stock state per product, and the value is what that seller publishes. search takes a keyword, a Coolblue product number or a manufacturer code and returns grid rows with the product id, the name, the product URL, the price in euro, the delivery promise the site prints beside the product, the review count and the key specs; when the keyword names a whole category Coolblue answers with that category instead of a result list, and the API follows that and tells you so in resolved_as, so a search for headphones returns headphones. browse walks any of the 403 categories and returns the richer row: price including and excluding VAT, brand, the typed delivery promise, the review average, how many stores hold the item, the refurbished Second Chance price when there is one and the colour variants of the same product. product/detail returns one full record with the complete manufacturer specification table, measured at 112 rows across 19 groups on a laptop, 85 on a television and 81 on a washing machine, plus the review average with its one to five star distribution, Coolblue's own pros and cons, every gallery image, and a source_check block that compares the price against the schema.org copy the same page publishes. products/batch refreshes up to 10 products in one call and names any id the storefront does not sell in missing rather than dropping it. filters returns the filter vocabulary a category accepts with Coolblue's own product count behind every value, and categories returns the 403 slugs those actions take. market selects nl, be or de and it changes the answer: on eight shared product ids, five had a different price on nl and be, by as much as 19.3 percent. No Coolblue account, no login, one ReefAPI key and the standard { ok, data, meta, error } envelope.

Live example

Real request and response JSON

Captured from the indexed primary action, search, on .

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/coolblue/v1/search",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "query": "usb c cable"
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "coolblue",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": 10495.5,
    "record_count": 24,
    "bytes": 1633343,
    "cache_hit": false,
    "stop_reason": "limit_reached",
    "fetched_at": "2026-09-25T22:35:11Z",
    "market": "nl",
    "total": 266,
    "charged_credits": 3,
    "version": "1.0.0"
  },
  "data": {
    "results": [
      {
        "product_id": "881527",
        "name": "BlueBuilt USB-C to HDMI Converter",
        "url": "https://www.coolblue.nl/en/product/881527/bluebuilt-usb-c-to-hdmi-converter.html",
        "brand": null,
        "price_eur": 34.99,
        "price_excl_vat_eur": null,
        "list_price_eur": null,
        "price_display": "34,99",
        "former_price_display": null,
        "rating_out_of_10": null,
        "review_count": 48,
        "delivery_promise": "Delivered tomorrow",
        "delivery_state": "available",
        "deliverable": null,
        "availability": null,
        "in_stock": null,
        "stores_with_stock": null,
        "second_chance_price_eur": null,
        "coolblues_choice": null,
        "highlights": [
          "Our choice for a USB-C to HDMI converter",
          "USB-C (male)",
          "HDMI (female)"
        ],
        "colour_variants": null,
        "image": "https://image.coolblue.nl/transparent/max/212x170/products/1866681",
        "product_type": null
      },
      {
        "product_id": "881526",
        "name": "BlueBuilt USB-C to Ethernet Converter (Gigabit)",
        "url": "https://www.coolblue.nl/en/product/881526/bluebuilt-usb-c-to-ethernet-converter-gigabit.html",
        "brand": null,
        "price_eur": 37.99,
        "price_excl_vat_eur": null,
        "list_price_eur": null,
        "price_display": "37,99",
        "former_price_display": null,
        "rating_out_of_10": null,
        "review_count": 57,
        "delivery_promise": "Delivered tomorrow",
        "delivery_state": "available",
        "deliverable": null,
        "availability": null,
        "in_stock": null,
        "stores_with_stock": null,
        "second_chance_price_eur": null,
        "coolblues_choice": null,
        "highlights": [
          "Our choice for a USB-C to Ethernet converter",
          "USB-C (male)",
          "Ethernet (female)"
        ],
        "colour_variants": null,
        "image": "https://image.coolblue.nl/transparent/max/212x170/products/1609234",
        "product_type": null
      },
      {
        "product_id": "943708",
        "name": "Sitecom USB-C to USB-A Mini Adapter",
        "url": "https://www.coolblue.nl/en/product/943708/sitecom-usb-c-to-usb-a-mini-adapter.html",
        "brand": null,
        "price_eur": 32.99,
        "price_excl_vat_eur": null,
        "list_price_eur": null,
        "price_display": "32,99",
        "former_price_display": null,
        "rating_out_of_10": null,
        "review_count": 3,
        "delivery_promise": "Delivered tomorrow",
        "delivery_state": "available",
        "deliverable": null,
        "availability": null,
        "in_stock": null,
        "stores_with_stock": null,
        "second_chance_price_eur": null,
        "coolblues_choice": null,
        "highlights": [
          "USB-C (male)",
          "USB-A (female)",
          "Adapter"
        ],
        "colour_variants": null,
        "image": "https://image.coolblue.nl/transparent/max/212x170/products/2004675",
        "product_type": null
      }
    ],
    "total": 266,
    "page": 1,
    "page_size": 24,
    "total_pages": null,
    "market": "nl",
    "sort": "relevance",
    "filters": [],
    "dropped_tiles": 0,
    "query": "usb c cable",
    "resolved_as": {
      "kind": "search",
      "category": null
    },
    "pages_available": 12,
    "results_reachable": 266
  }
}
Actions

What the Coolblue API does

ActionDescriptionConcrete use caseKey params
searchSearch Coolblue by keyword: product id, name, price in euro, the delivery promise the site prints beside the product, the review score and the key specs. When the keyword is a whole category Coolblue answers with that category instead of a result list — this endpoint follows that and tells you so in `resolved_as`, so a search for 'headphones' returns headphones rather than an error. `total` is Coolblue's own match count and is present on keyword result sets.Pricing teams call search to search Coolblue by keyword.query, market, filters, sort, page
browseWalk one of Coolblue's 403 categories — the catalogue view, and the richer of the two surfaces. Rows carry the typed delivery promise, the price with and without VAT, the review average, how many stores hold the item, the refurbished (Second Chance) price when there is one, and the colour variants. Use `categories` for the slugs and `filters` for the narrowing options.Marketplace operators call browse to get walk one of Coolblue's 403 categories.category, market, filters, sort, page
product/detailOne full product record by id or Coolblue URL: price including and excluding VAT, stock state, how many of Coolblue's stores hold it and how many can hand it over, the complete manufacturer specification table, the review average with its 1-5 star distribution, Coolblue's own pros and cons, and every gallery image. The answer also carries `source_check`, which compares the price against the schema.org copy the same page publishes so you can see the two agree.Catalog enrichment teams call product/detail to get one full product record by id or Coolblue URL.product_id, market, include_specs
products/batchUp to 10 products in ONE call — the shape a price tracker runs on. Each row carries price, stock, rating and the id, and any id this market does not sell is named in `missing` instead of being silently dropped. Specifications are off by default here to keep the answer readable.Retail analysts call products/batch to get up to 10 products in ONE call.product_ids, market, include_specs
filtersThe filter vocabulary a category actually accepts: every facet key, its English title, and the values behind it — each with the exact `key:value` segment to pass back into `browse` or `search` AND the number of products behind it, so you can see a filter bite before spending a call on it. This exists because the facet keys are Dutch even on the English storefront (the brand filter is `merk`), so they cannot be guessed.Pricing teams call filters to get the filter vocabulary a category actually accepts.category, filters, market
categoriesEvery Coolblue category, read from the sitemap it publishes for crawlers: the slug you pass to `browse` and `filters`, and its path on the site. One small request, and the slugs were verified against the live grid rather than assumed.Marketplace operators call categories to get every Coolblue category, read from the sitemap it publishes for crawlers.market, contains
Code samples

Call search from your stack

curl -X POST https://api.reefapi.com/coolblue/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"usb c cable"}'
MCP one-liner
Ask your MCP-connected assistant: call reefapi.coolblue.search with {"query":"usb c cable"}.
Use cases

Who uses this API and why

  • Price monitors watch a basket of products with products/batch, up to 10 ids per call, and read source_check to confirm the price matches the one Coolblue publishes in its own structured data for the same page.
  • Cross border pricing teams compare the same product id on market nl, be and de; on eight shared ids five had a different price between nl and be, and four of the eight were not sold on de at all.
  • Product data pipelines pull the manufacturer specification table from product/detail as named, grouped rows rather than a blob, measured between 19 and 112 rows per product depending on the category.
  • Availability and delivery dashboards read the delivery promise the grid prints beside each product, plus availability, in_stock and how many of Coolblue's stores hold the item and can hand it over.
  • Category researchers list the 403 categories, read the filters each one accepts with the product count behind every value, and page through browse without ever guessing a filter name.
FAQ

Questions developers ask before integrating

Which Coolblue storefronts does the API cover?

Three: coolblue.nl with market nl, coolblue.be with market be and coolblue.de with market de. The parameter is not cosmetic. On eight product ids that exist on more than one storefront, five had a different price on nl versus be, with gaps measured at 19.3 percent and 17.7 percent, and one had a different stock state. The catalogues differ too: one of those ids is sold on nl and returns NOT_FOUND on be, and four are sold on nl and be but not on de. The French language Belgian storefront is not covered.

What exactly does the delivery promise field contain?

The line Coolblue prints beside the product at the moment of the call, as it prints it. Across 203 measured rows the values were In stock 153 times, Delivered tomorrow 47 times, Temporarily sold out once and absent twice. Category rows also carry a delivery_state and a deliverable flag. It is a live promise, not a schedule, and meta.fetched_at on every response records when it was read; nothing is cached between customers. product/detail returns delivery_promise as null on purpose, because the product page does not publish a resolved promise for that product, and it gives you availability, in_stock and the store counts instead of a guess.

How complete is the specification table?

It is the manufacturer table Coolblue prints, returned as named rows with the group they belong to, plus specification_count and specification_groups. Measured across twelve products in six categories the counts were 19, 21, 32, 34, 35, 40, 77, 78, 81, 85, 112 and 112, with the 112 row laptop spread across 19 groups such as Screen, Processor, RAM and Storage. One measured product, a bundle, has no spec table at all and returns a count of 0 rather than an invented table.

Does the API give me individual customer reviews?

No, and it does not pretend to. Coolblue publishes the review average, the review count and the distribution across one to five stars, and those are what come back. It does not publish the review bodies in a form this API can read, so there is no review text here. Note that the average is on a ten point scale while the distribution is in five stars, which is why the field is called rating_out_of_10 and never rating; the star counts sum to review_count.

How do I filter a category, and how do I know a filter worked?

Call filters with a category and you get every filter key, its English title and the values behind it, each with the exact key:value segment to pass to browse or search and Coolblue's own product count for that value. The keys are Dutch even on the English storefront, so the brand filter is merk, which is precisely why this action exists rather than leaving you to guess. The counts are the source's own: on headphones, merk:apple reported 9 products and returned 9 rows on a single page, while the unfiltered category ran to 11 pages. One value per key; the multi value form is refused because the source does not accept it.

How deep can I page?

A keyword result set stops at page 20 of 24 rows. On a search returning 623 products that means 480 of the 623 are reachable, and the answer says so in results_reachable rather than letting you assume you have them all; narrowing with filters reaches the rest. A category browsed with browse returns 22 rows per page and publishes its own total_pages, so you page until that number. search also returns total, which is Coolblue's own match count for the keyword.

What is the Second Chance price?

Coolblue's refurbished or returned stock for the same product, sold at a lower price. Category rows carry it as second_chance_price_eur when one exists, kept as a separate field from price_eur so the two can never be confused; on one measured category 19 of 22 products had one. It was 374 euro against a new price of 414 on the first row measured.

Are prices inclusive of VAT?

Both are returned where the source publishes both. price_eur is the price including VAT, which is the number shown on the site, and price_excl_vat_eur is Coolblue's own excluding VAT figure. Keyword search rows carry the inclusive price and the formatted string the site prints; category rows and product/detail carry both numbers. Coolblue rarely publishes a was price, and on every product measured list_price_eur and reference_price_eur were absent, so they come back as null rather than being filled in from the current price.

What is the Coolblue API?

Coolblue API is a ReefAPI endpoint group for the dutch and belgian electronics retailer: live price, stock, delivery promise, the full spec table and review scores, per storefront. It returns live JSON through POST requests under /coolblue/v1.

Is the Coolblue API free to try?

Yes. ReefAPI starts with 1,000 free credits, no card required. Coolblue calls use the same shared credit balance as every other ReefAPI engine.

Do I need a Coolblue login or account?

No login to Coolblue is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.

How fresh is the Coolblue data?

The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.

How many credits does the Coolblue API use?

Coolblue actions currently cost 1-20 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.

Can I call Coolblue from an AI assistant or MCP client?

Yes. Connect ReefAPI once through MCP and your assistant can call coolblue actions with the same key, credit pool and JSON envelope used by normal REST requests.

docs / coolblue

Coolblue

The Dutch and Belgian electronics retailer: live price, stock, delivery promise, the full spec table and review scores, per storefront.

base /coolblue/v16 endpoints
post/coolblue/v1/browse3 credits

Walk one of Coolblue's 403 categories — the catalogue view, and the richer of the two surfaces. Rows carry the typed delivery promise, the price with and without VAT, the review average, how many stores hold the item, the refurbished (Second Chance) price when there is one, and the colour variants. Use `categories` for the slugs and `filters` for the narrowing options.

ParameterAllowed / rangeDescription
categoryrequired—A Coolblue category slug such as 'headphones', 'washing-machines' or 'laptops', or a category URL. The `categories` action lists all 403 of them.
market = nloptionalnl · be · deWhich storefront to ask. Prices and stock genuinely differ between them (measured: 5 of 7 shared products had a different price on nl vs be) and each market lists products the others do not.
filtersoptional—Facet segments in 'key:value' form, for example 'merk:apple'. One value per key (the source answers a multi-value '+' form with 404). Call the 'filters' action to list what a category accepts, with the result count behind each value.
sort = relevanceoptionalrelevance · lowest-price · highest-price · most-sold · highest-ratedResult order. All five were measured to genuinely reorder the grid. An unknown value is rejected rather than passed on, because the source accepts any string and silently ignores what it does not know.
page = 1optional1–Page of 22 results. A category publishes its own `total_pages`; asking past it returns NOT_FOUND.
Try in playground →
post/coolblue/v1/product/detail3 credits

One full product record by id or Coolblue URL: price including and excluding VAT, stock state, how many of Coolblue's stores hold it and how many can hand it over, the complete manufacturer specification table, the review average with its 1-5 star distribution, Coolblue's own pros and cons, and every gallery image. The answer also carries `source_check`, which compares the price against the schema.org copy the same page publishes so you can see the two agree.

ParameterAllowed / rangeDescription
product_idrequired—The Coolblue product number (979101) or any Coolblue product URL. The id alone is enough — no slug needed.
market = nloptionalnl · be · deWhich storefront to ask. Prices and stock genuinely differ between them (measured: 5 of 7 shared products had a different price on nl vs be) and each market lists products the others do not.
include_specs = trueoptional—Include the specification table. Turn it off for a smaller answer when you only want price and stock; it costs the same, because it is the same page.
Try in playground →
post/coolblue/v1/products/batch20 credits

Up to 10 products in ONE call — the shape a price tracker runs on. Each row carries price, stock, rating and the id, and any id this market does not sell is named in `missing` instead of being silently dropped. Specifications are off by default here to keep the answer readable.

ParameterAllowed / rangeDescription
product_idsrequired—Between 1 and 10 Coolblue product numbers or product URLs.
market = nloptionalnl · be · deWhich storefront to ask. Prices and stock genuinely differ between them (measured: 5 of 7 shared products had a different price on nl vs be) and each market lists products the others do not.
include_specs = falseoptional—Include each product's specification table. Off by default because ten full spec tables is a large answer.
Try in playground →
post/coolblue/v1/filters2 credits

The filter vocabulary a category actually accepts: every facet key, its English title, and the values behind it — each with the exact `key:value` segment to pass back into `browse` or `search` AND the number of products behind it, so you can see a filter bite before spending a call on it. This exists because the facet keys are Dutch even on the English storefront (the brand filter is `merk`), so they cannot be guessed.

ParameterAllowed / rangeDescription
categoryrequired—The category whose filters to list, for example 'headphones'.
filtersoptional—Show the filters still available after these segments are applied, with their updated counts — this is how you discover the narrowing options inside a selection.
market = nloptionalnl · be · deWhich storefront to ask. Prices and stock genuinely differ between them (measured: 5 of 7 shared products had a different price on nl vs be) and each market lists products the others do not.
Try in playground →
post/coolblue/v1/categories1 credit

Every Coolblue category, read from the sitemap it publishes for crawlers: the slug you pass to `browse` and `filters`, and its path on the site. One small request, and the slugs were verified against the live grid rather than assumed.

ParameterAllowed / rangeDescription
market = nloptionalnl · be · deWhich storefront to ask. Prices and stock genuinely differ between them (measured: 5 of 7 shared products had a different price on nl vs be) and each market lists products the others do not.
containsoptional—Only return categories whose slug contains this text.
Try in playground →
Built for volume
5M+ requests a day

Measured at 60 requests a second across the fleet, with no central bottleneck. Volume pricing is on request, and per-key limits are raised for high-volume accounts.

Missing a source?
We build it

Tell us a site we do not cover yet and it becomes an engine. A customer asked for bestprice.gr on a Sunday and it was in the catalog the next day.

Support
2 minute median reply

Median time from a question in the live chat to the first answer, measured across every answered conversation. Setup help included, no support tier to buy.

One key, one balance
Every API included

No per-site plans and no separate subscriptions. One key and one credit pool across the whole catalog, so adding a source costs nothing up front.

Planning something large? Tell us the volume and the sources and we will come back with what it costs and what we would have to build.