Heureka
Heureka
/heureka/v1/search1 creditSearch Heureka by keyword and get the matching products: Heureka product id and address, title, image, the PRICE BAND across all shops (both ends when Heureka prints both — see `price_kind`), how many shops sell it, the customer score and review count, the category, and how many colour/size variants the card lists. Feed the returned `product` or `url` straight into `product/offers` or `product/detail` to get every shop's price for that product. Check `row_type` first: only rows with row_type 'product' carry an address, and the other three kinds return `product` as null rather than a handle that would not work.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| query | required | — | What to look for on Heureka. Czech (or Slovak, with market=sk) keywords match best, but brands and model numbers work directly — 'iphone 15', 'bosch vrtacka', 'dyson v15'. Heureka matches loosely, so a two-word query also returns accessories for the product, not only the product. |
| page = 1 | optional | 1–1000 | Result page, 1-BASED (1, 2, 3…). 24 products per page. Heureka publishes no result total, so `total_results` is null by design; `last_page` in the response is the highest page its own pager offers, and `meta.pagination.has_more` tells you whether to ask for the next one. |
| sort = relevance | optional | relevance · price_asc · price_desc · most_reviewed | Result ordering. Only orderings heureka.cz actually honours are accepted; anything else is rejected rather than silently ignored, so you never receive a relevance list believing it was sorted. |
| market = cz | optional | cz · sk | Which Heureka storefront to read. The two are separate catalogues with separate shops and currencies: a product URL from one market is not valid in the other. |
/heureka/v1/product/detail1 creditThe full Heureka product record for one product address: title, brand, description, image gallery, the price BAND across all shops (price_min and price_max, both from Heureka's own AggregateOffer) with its offer count, the customer score and review count, the category breadcrumb with URLs, the complete Heureka parameter sheet, and the sibling variants of the product.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| product | required | — | The product address, either as the full Heureka URL (https://mobilni-telefony.heureka.cz/apple-iphone-15-128gb-black/) or as the 'category/slug' shorthand (mobilni-telefony/apple-iphone-15-128gb-black). Every `search` row hands you both, as `url` and `product`. A bare slug is not accepted: www.heureka.cz/<slug>/ answers 404 — the category subdomain is part of the address, and guessing it would return a confident wrong product. |
| market = cz | optional | cz · sk | Which Heureka storefront to read. The two are separate catalogues with separate shops and currencies: a product URL from one market is not valid in the other. |
/heureka/v1/product/offers2 creditsEvery shop offer Heureka lists for one product — the price comparison itself. One row per merchant: shop name, Heureka shop score and how many ratings it rests on, the price (numeric and formatted), the stock line, the delivery line and whether delivery is free, the merchant's own listing title, and a working click-through. Rows are de-duplicated (Heureka repeats promoted offers above the list) and ordered cheapest first, with the product's own price band alongside.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| product | required | — | The product address, either as the full Heureka URL (https://mobilni-telefony.heureka.cz/apple-iphone-15-128gb-black/) or as the 'category/slug' shorthand (mobilni-telefony/apple-iphone-15-128gb-black). Every `search` row hands you both, as `url` and `product`. A bare slug is not accepted: www.heureka.cz/<slug>/ answers 404 — the category subdomain is part of the address, and guessing it would return a confident wrong product. |
| market = cz | optional | cz · sk | Which Heureka storefront to read. The two are separate catalogues with separate shops and currencies: a product URL from one market is not valid in the other. |
curl -X POST https://api.reefapi.com/heureka/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"iphone 15"}'{
"ok": true,
"data": { /* the result */ },
"meta": {
"latency_ms": 240,
"record_count": 12,
"completeness_pct": 100
},
"error": null
}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.
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.
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.
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.