Sbazar.cz
Sbazar.cz
/sbazar/v1/search1 creditSearch Sbazar classifieds by keyword and/or category, with a CZK price band, seller/shop filter, buyer-protection and orderable flags, four sorts and paging. At least one of query, category_id, user_id or premise_id must be given (the source would otherwise return its entire catalogue). Every narrowing filter is checked against an unfiltered control in the same call and the effect is reported in meta.filters_verified, because Sbazar drops filter names it does not know without saying so. Paid 'topped' ads are returned where Sbazar puts them and flagged `promoted: true` rather than hidden.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| query | optional | — | Keyword Sbazar matches against ad titles and bodies (its own `phrase` filter). Optional when `category_id`, `user_id` or `premise_id` is given — at least ONE of those four is required, because an unfiltered search returns the whole ~1.9 M-ad catalogue. |
| category_id | optional | — | Sbazar category, given either as its numeric id (237) or as its SEO slug ('237-iphone', or plain 'iphone'). A parent category includes every descendant (measured: id 1 'Auto-moto' returns ads filed under its child categories). Call `categories` for the live list. At least one of query, category_id, user_id or premise_id is required. |
| price_min | optional | 0– | Lowest price to include, a whole number of CZK. Sbazar's own price field is a whole number of koruna. 🔴 A price band does NOT exclude 'Dohodou' (price on request) ads — the source keeps them inside any band (measured: 4 of 20 rows in a 20 000-25 000 CZK band). They come back with `price: null` and `price_kind: "by_agreement"`, so drop them on that flag if you need a priced-only list. |
| price_max | optional | 0– | Highest price to include, a whole number of CZK. Sbazar's own price field is a whole number of koruna. 🔴 A price band does NOT exclude 'Dohodou' (price on request) ads — the source keeps them inside any band (measured: 4 of 20 rows in a 20 000-25 000 CZK band). They come back with `price: null` and `price_kind: "by_agreement"`, so drop them on that flag if you need a priced-only list. |
| sort = relevance | optional | relevance · newest · price_asc · price_desc | Result order. These four are the ONLY orders Sbazar actually applies — it answers HTTP 200 to any other sort string and then returns its default order, so an unknown value is rejected here rather than silently ignored. There is no oldest-first: ascending by creation date does not work at the source. |
| user_id | optional | 1– | Return only ads of this Sbazar user (the `seller.user_id` every search row carries). One of the four filters that can stand alone. |
| premise_id | optional | 1– | Return only ads of this business/shop account (the `seller.business_id` on rows posted by a registered premise). |
| buyer_protection_only = false | optional | — | True returns only ads sold with Sbazar's buyer protection. A small slice of the catalogue (measured 28 ads site-wide on 2026-09-30). |
| orderable_only = false | optional | — | True returns only ads that can be ordered and paid through Sbazar rather than arranged with the seller (26 ads site-wide, measured). |
| page = 1 | optional | 1–500 | 1-based page. Sbazar's paging window is 10 000 rows, so page x page_size must stay at or below that; beyond it the source answers HTTP 422 and this engine rejects the request. |
| page_size = 20 | optional | 1–100 | Ads per page, 1-100. |
/sbazar/v1/listing1 creditFull detail of one Sbazar ad: complete description, every photo, price, locality, category, status and the seller's public shop identity. Accepts the ad URL or the numeric listing_id. Seller phone and e-mail are never fetched and never returned; a phone typed into the ad body is removed.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| listing_id | optional | — | Numeric ad id, as `search` returns it in `listing_id`. Give this OR `url` — at least one is required. |
| url | optional | — | Full Sbazar ad address, exactly as `search` returns it. The ad id is read out of it. Give this OR `listing_id`. |
/sbazar/v1/categories1 creditSbazar's live category tree — 451 categories over 3 levels, each with the number of ads currently filed under it. This is the resolver `search` needs: a numeric category_id is what the search filter takes. With a `category_id` it returns that category plus its direct children.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| category_id | optional | — | Sbazar category, given either as its numeric id (237) or as its SEO slug ('237-iphone', or plain 'iphone'). A parent category includes every descendant (measured: id 1 'Auto-moto' returns ads filed under its child categories). Call `categories` for the live list. Omit to get the whole 451-node tree. |
curl -X POST https://api.reefapi.com/sbazar/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{}'{
"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.