# bol.com Offers API Documentation

Scrappa's `GET /api/bol/offers` returns the offers of bol and other sellers for one bol.com product, cheapest first.

## Credits

One successful request with offers costs 3 credits. An empty list, a `404` and every failure cost nothing.

## What you get

Each offer has `offer_id`, `seller` (`id`, `name`, `is_bol`, `rating` from 0 to 10, `rating_percent`, `top_seller`), `price` and `currency` (EUR), `original_price` and `discount`, `condition` (`new` or `refurbished`) and `grade` for refurbished offers, `delivery_text`, `delivery_date` (ISO 8601), `shipping_cost`, `is_select`, `is_scarce`, `delivered_within_48h` and `promo_labels`. bol itself is seller id 0 and has no rating. `counts` shows how many offers exist per condition and `total` the count for the asked condition.

## Condition

`condition=new` (default) or `refurbished`. Second-hand offers are not available. Offers are sorted by price, lowest first. bol.com sends the first page of offers; `returned` says how many came back.

## Buy Box

The offer that bol.com shows first on the product page is `buy_box` in the product endpoint.

## Notes

Take `id` from search or product. An id that does not exist returns `404`.

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

## 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. |
| `condition` | string | No | new (default) or refurbished. |

## Example request

```bash
#!/bin/bash

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

## Example response

```json
{
    "success": true,
    "product_id": "9300000171550609",
    "locale": "nl/nl",
    "condition": "refurbished",
    "total": 9,
    "returned": 1,
    "counts": {
        "new": 0,
        "refurbished": 9,
        "secondhand": 0
    },
    "offers": [
        {
            "offer_id": "4c1e7e0a-8a3a-4c4c-9a53-0f2d3c5f6a11",
            "seller": {
                "id": "1190928",
                "name": "Forza Refurbished B.V.",
                "is_bol": false,
                "rating": 8.1,
                "rating_percent": 88,
                "top_seller": false
            },
            "price": 126.55,
            "currency": "EUR",
            "original_price": null,
            "discount": null,
            "select_price": null,
            "is_select": false,
            "condition": "refurbished",
            "grade": "C",
            "delivery_text": "Uiterlijk 11 november in huis",
            "delivery_date": "2026-11-11",
            "shipping_cost": 0,
            "is_scarce": false,
            "delivered_within_48h": false,
            "promo_labels": []
        }
    ],
    "meta": {
        "endpoint_family": "offers",
        "billable": true,
        "credits": 3,
        "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)
