Coolblue API

Coolblue prices, stock and full spec tables as JSON

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

no credit card1,000 free credits · instant API key · pay by card or crypto
Missing a Coolblue endpoint, or need a source we don't have yet?Contact us real people · same-day reply.
C
/coolblue/v1

6 active endpoints, on 1, 2, 3 and 20 credit tiers.

  • POST/coolblue/v1/search
  • POST/coolblue/v1/browse
  • POST/coolblue/v1/product/detail
  • POST/coolblue/v1/products/batch
  • POST/coolblue/v1/filters
  • POST/coolblue/v1/categories

What Coolblue endpoints does ReefAPI ship?

6 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.

6 endpoints

search

3 cr

Search Coolblue by keyword.

required
query
optional
market, filters, sort, page

browse

3 cr

Walk one of Coolblue's 403 categories.

required
category
optional
market, filters, sort, page

product/detail

3 cr

One full product record by id or Coolblue URL.

required
product_id
optional
market, include_specs

products/batch

20 cr

Up to 10 products in ONE call.

required
product_ids
optional
market, include_specs

filters

2 cr

The filter vocabulary a category actually accepts.

required
category
optional
filters, market

categories

1 cr

Every Coolblue category, read from the sitemap it publishes for crawlers.

required
optional
market, contains

Every parameter, every allowed value →

Coolblue API

4 of 6 endpoints, ready to run

View docs ↗

Products for a keyword: product id, name, URL, price in euro, the delivery promise the site prints beside the product, the review count, the key specs and the image. When the keyword names a whole category Coolblue answers with that category, and resolved_as tells you it did.

3 credits1 required · 3 optional
POST/coolblue/v1/search
idle
// Press "Try it" and this pane shows exactly what the
// live site returned this second — including an empty
// result, if that is the truth. No key, no account.

How the Coolblue API works

Coolblue is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.

01
Authenticate
x-api-key header

No OAuth app, no request signing, no per-site account. One key covers all 280 engines.

02
Call
POST /coolblue/v1/…

Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.

03
Pay
1 or 2 or 3 or 20 credits per call

Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.

04
Read
{ ok, data, meta, error }

One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.

Watch a basket of Coolblue products across the Dutch and Belgian storefronts

Find the ids once, then keep two calls in your daily job: one batch call per storefront. The two answers are not copies of each other, which is the whole point of running both.

01search
POST/coolblue/v1/search
{"query": "usb c cable", "market": "nl"}

Grid rows with product_id, name, url, price_eur, the printed delivery_promise and review_count, plus total, which is Coolblue's own match count. Store product_id once; every other action takes it, and the same id works on the other storefronts.

02batch
POST/coolblue/v1/products/batch
{"product_ids": ["881526", "968677", "914294"], "market": "nl"}

Up to 10 products in one call with price_eur, price_excl_vat_eur, availability, in_stock and the review figures. missing names any id this storefront does not sell, so a product that leaves the catalogue is reported rather than freezing at its last price.

03batch
POST/coolblue/v1/products/batch
{"product_ids": ["881526", "968677", "914294"], "market": "be"}

The same ids against the Belgian storefront. On eight shared ids measured this way, five came back with a different price, so one storefront's number is not a proxy for the other's.

04detail
POST/coolblue/v1/product/detail
{"product_id": "968677", "market": "nl"}

The full record for anything that moved: the specification table as named grouped rows, the review average with its star distribution, the store counts, and source_check so you can see the price matches the one Coolblue publishes in its own structured data for that page.

A daily price and stock series per product per storefront, a basket that reports its own attrition, and a spec table you can diff when a model is quietly replaced.

request
curl -X POST https://api.reefapi.com/coolblue/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{}'
response envelope
{
  "ok": true,
  "data": { … },
  "meta": {
    "api": "coolblue",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": …,
    "record_count": …
  },
  "error": null
}

What Coolblue publishes, what it does not, and what a price here means

One retailer, three storefronts, prices in euro. The lines below describe the engine's measured surface as of 2026-09-23 and the limits it enforces. Several of them go against us, starting with the two a price monitor has to know first.

Against us: paging stops at 20 pages on a keyword search

A keyword result set returns 24 rows per page and stops at page 20. On a search that reports 623 matches, 480 of them are reachable and the rest are not; the answer returns results_reachable so you can see the shortfall instead of assuming you have the whole set. Narrowing with filters, or browsing the category directly, reaches the rest. A browsed category returns 22 rows per page and publishes its own total_pages.

Against us: no individual review text

Coolblue publishes the review average, the review count and the distribution across one to five stars, and that is exactly what comes back. It does not publish the review bodies in a form this API can read, so there is no review text here and none is invented. If you need review text, that is a different source.

Against us: two surfaces, two column sets

A keyword result set and a browsed category are not the same page on Coolblue's side and do not publish the same columns. Keyword rows carry the formatted price string but no brand, stock state, VAT split or rating; category rows carry all of those but no formatted string. The row shape is identical either way, the missing fields come back as null rather than disappearing, and resolved_as tells you which surface answered. product/detail fills every gap for any single id.

The price is checked against Coolblue's own structured data

Every product/detail answer carries source_check, comparing price_eur with the price Coolblue publishes in the schema.org block on the same page, plus that block's availability. Across twelve products in six categories the two agreed 12 times out of 12, and the search row price matched the detail price on all twelve as well. Both numbers are returned, so a future divergence is visible rather than quietly resolved in our favour.

Three storefronts, and they disagree

market takes nl, be or de. On eight shared product ids, five had a different price between nl and be, with measured gaps of 19.3 and 17.7 percent, and one had a different stock state. Catalogues differ too: one id was sold on nl and returned NOT_FOUND on be, and four were sold on nl and be but not on de. The French language Belgian storefront is not covered by this API.

The delivery promise is the line the site prints, at the moment you ask

Grid rows carry delivery_promise exactly as the site prints it beside the product. Across 203 measured rows the values were In stock 153 times, Delivered tomorrow 47 times, Temporarily sold out once and absent twice; category rows add delivery_state and a deliverable flag. meta.fetched_at records when it was read and nothing is cached between customers. product/detail returns delivery_promise as null, because the product page does not publish a resolved promise for that product, and returns availability, in_stock and the store counts instead.

The specification table is the reason to use product/detail

Named rows with the group they belong to, plus specification_count and specification_groups. Measured across twelve products: 19, 21, 32, 34, 35, 40, 77, 78, 81, 85, 112 and 112 rows, the largest spread across 19 groups. One measured product, a bundle, has no table and returns 0 rather than an invented one.

The rating is out of ten, and the field says so

Coolblue scores products out of 10 while showing a one to five star distribution beside it. The field is called rating_out_of_10, never rating, and review_distribution_stars carries the star counts, which sum to review_count. Nothing is rescaled here, so an 8.7 is Coolblue's 8.7.

Store stock and store pickup are two different numbers

product/detail returns stores_listed, stores_with_stock and stores_available_for_pickup as separate fields, because they genuinely disagree: on one measured product none of the 24 listed stores held the item while 23 could still hand it over. Collapsing them into one in stores number would be wrong in both directions, so they are kept apart.

Filters carry their own product count

filters returns every facet key, its English title and its values, each with Coolblue's own count. The keys are Dutch even on the English storefront: the brand filter is merk. On headphones, merk:apple reported 9 products and returned 9 rows on one page against 11 pages unfiltered. One value per key. An unknown sort or an unknown filter value is refused with a message naming the problem, rather than accepted and silently ignored.

Prices are euro, and the was price is usually absent

price_eur includes VAT and price_excl_vat_eur is Coolblue's own excluding VAT figure where it publishes one. Nothing is converted, so no exchange rate of ours sits between you and the shelf price. Coolblue rarely publishes a former price: on every product measured, list_price_eur and reference_price_eur were absent and come back as null rather than being filled in from the current price. Where a refurbished unit exists, second_chance_price_eur is a separate field.

403 categories, and the slugs are checked

categories returns Coolblue's own category list, 403 entries, each with the slug browse and filters take. Every slug was checked against the live catalogue rather than assumed to work.

What people build with Coolblue

The jobs this data is most often used for.

6

endpoints

1/2/3/20

credits per call

01

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.

02

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.

03

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.

04

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.

What Coolblue data costs

The cheapest call here is 1 credit, so $15/mo (Pro) buys 10,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.

Full pricing →
$0.67–$1.50 / 1,000 credits
  • 1,000 free credits on signup, no card
  • One key, all 280 APIs, one credit pool
  • Failed and blocked calls are never charged
  • Credits roll over and never expire

Call it in two lines

Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.

curl
curl -X POST https://api.reefapi.com/coolblue/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{}'
python
import requests

r = requests.post(
    "https://api.reefapi.com/coolblue/v1/search",
    headers={"x-api-key": REEF_KEY},
    json={},
)
print(r.json()["data"])
FAQ

Have a question? We got answers.

The questions people actually ask before wiring up Coolblue.

Get a free key →
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.

116 E-commerce & Marketplaces APIs on the same key

One key, one credit pool, one response envelope. If you are pulling Coolblue, you are one call away from the rest of the category — no second contract, no second integration.

Need something this API does not do?

Name the endpoint, the field, or a source we do not carry yet. We ship new APIs every week and you would be first to get the key. Real people read every message and reply the same day.

0/4000

No account needed · we reply from [email protected]

Try it on your own data before you pay anything

The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 279 APIs, and the same envelope everywhere.

Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts. Field notes were captured on 2026-09-23.