# bol.com Product Details API Documentation

Scrappa's `GET /api/bol/product` returns the full record of one bol.com product by `id` or `url`.

## Credits

One successful request costs 7 credits. A `404`, a validation error and every failure cost nothing.

## What you get

`title`, `brand`, `ean` (GTIN), `description` as text and as HTML, `price`, `currency` (EUR), `original_price` and `discount`, `condition`, `availability` (`in_stock`, `out_of_stock`, `pre_order` and so on), `delivery_text`, `delivery_date` (ISO 8601) and `shipping_cost`. `buy_box` names the offer that bol.com shows first, with its seller, seller rating (0 to 10, and as a percent) and `top_seller` flag. `images` are full size, `specifications` are grouped, and `dimensions` hold size and weight when bol.com has them. `rating`, `review_count`, `rating_distribution` and `review_topics` summarise the reviews; the first 6 reviews are in the reviews endpoint. `refurbished` lists the cheapest offer per grade when it exists, and `locale_urls` gives the product URL per storefront.

## Ids

Take `id` from search. The slug is optional and any slug works. A product URL from any bol.com storefront also works and sets the storefront.

## Not available

bol.com publishes no stock count. Other sellers' offers are in the offers endpoint.

## Notes

An id that does not exist returns `404`.

- **Documentation:** [https://scrappa.co/docs/bol-api/bol_product](https://scrappa.co/docs/bol-api/bol_product)
- **API group:** bol.com API
- **Endpoint:** `GET https://scrappa.co/api/bol/product`

## Authentication

Send your Scrappa API key in the `X-API-KEY` request header. Paid endpoints also support accountless x402 payments when called without an API key.

## Parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | string | No | Product id from search, for example 9300000171550609. Send id or url. |
| `url` | string | No | A bol.com product URL. The storefront comes from the URL. Send id or url. |
| `slug` | string | No | Optional product slug. Any slug works, bol.com looks the product up by id. |
| `country` | string | No | nl (default) or be. |
| `language` | string | No | nl (default) or fr. fr needs country=be. |

## Example request

```bash
#!/bin/bash

curl -X GET \
    -H "x-api-key: YOUR_API_KEY_HERE" \
    "https://scrappa.co/api/bol/product?id=9300000171550609"
```

## Example response

```json
{
    "success": true,
    "product": {
        "id": "9300000171550609",
        "title": "Philips 3000 Series Dual Airfryer - NA351/00 - Dubbele Mand",
        "subtitle": null,
        "url": "https://www.bol.com/nl/nl/p/philips-3000-series-dual-airfryer-na351-00/9300000171550609/",
        "brand": {
            "id": "4978545",
            "name": "Philips"
        },
        "ean": "8720389033001",
        "description": "Ontdek de Philips 3000-serie Dual Basket Airfryer.",
        "description_html": "<p>Ontdek de Philips 3000-serie Dual Basket Airfryer.</p>",
        "price": 109,
        "currency": "EUR",
        "original_price": 199.99,
        "discount": {
            "amount": 90.99,
            "percent": 45
        },
        "select_price": null,
        "is_select": false,
        "condition": "new",
        "availability": "in_stock",
        "delivery_text": "Op voorraad. Voor 23:59 uur besteld, dinsdag in huis",
        "delivery_date": "2026-11-10",
        "shipping_cost": 0,
        "is_scarce": false,
        "delivered_within_48h": true,
        "promo_labels": [
            "Black Friday deal"
        ],
        "buy_box": {
            "offer_id": "139984bd-6267-4d69-bac8-c0992e256154",
            "seller": {
                "id": "0",
                "name": "bol",
                "is_bol": true,
                "rating": null,
                "rating_percent": null,
                "top_seller": null
            }
        },
        "offer_count": 6,
        "images": [
            "https://media.s-bol.com/Qr0jNQGR24Q0/zp9Z668/1200x989.jpg"
        ],
        "image_url": "https://media.s-bol.com/Qr0jNQGR24Q0/zp9Z668/1200x989.jpg",
        "specifications": [
            {
                "group": "Afmetingen",
                "attributes": [
                    {
                        "key": "Capacity",
                        "name": "Inhoud",
                        "values": [
                            "9 l"
                        ]
                    }
                ]
            }
        ],
        "dimensions": {
            "depth_cm": 31.4,
            "height_cm": 44.4,
            "width_cm": 38.5,
            "weight_g": 10500
        },
        "color": "Zwart",
        "categories": [
            [
                {
                    "id": "3136",
                    "name": "Elektronica"
                },
                {
                    "id": "18336",
                    "name": "Airfryers"
                }
            ]
        ],
        "rating": 4.6,
        "review_count": 200,
        "rating_distribution": {
            "1": 5,
            "2": 4,
            "3": 6,
            "4": 28,
            "5": 157
        },
        "review_topics": [
            {
                "label": "gebruiksgemak",
                "review_count": 145,
                "positive": 143,
                "neutral": 1,
                "negative": 1,
                "summary": null
            }
        ],
        "refurbished": null,
        "locale_urls": {
            "nl-NL": "https://www.bol.com/nl/nl/p/philips-3000-series-dual-airfryer-na351-00/9300000171550609/"
        },
        "locale": "nl/nl"
    },
    "meta": {
        "endpoint_family": "product",
        "billable": true,
        "credits": 7,
        "attempts": 1
    }
}
```

## Errors

| Status | Error | Description |
| --- | --- | --- |
| 404 | Not Found | No product exists on bol.com with that id (`not_found`). Non-billable. |
| 422 | Validation Error | A query parameter is missing, unknown or unusable. Unknown parameters and unknown values are rejected, never ignored. Non-billable. |
| 503 | Upstream Unavailable | bol.com could not be reached after retries, answered with an error or changed its format (`upstream_unavailable`, `upstream_blocked`, `parser_drift`). Retryable and never billed. Clients are never rate limited. |

## More Scrappa resources

- [API documentation](https://scrappa.co/docs)
- [Full LLM-readable API reference](https://scrappa.co/llms-full.txt)
- [OpenAPI specification](https://scrappa.co/docs/api.json)
- [Pricing](https://scrappa.co/pricing)
