Bazoš API: inzeráty z bazos.cz jako JSON
Inzeráty z Bazoše tu dostanete ve stejném rozsahu, jaký vidí nepřihlášený návštěvník: titulek, cenu v Kč, lokalitu s PSČ, počet zobrazení, datum vložení, fotky a celý text inzerátu. Hledat se dá v celém Bazoši, v jedné rubrice (auto, deti, reality, mobil…) i v podrubrice, a hlavně v okruhu kolem PSČ: tedy „kočárek do 25 km od Brna“, ne kočárky z celé republiky. Nejde o nástroj na hromadné vkládání ani správu vlastních inzerátů (moje inzeráty): čte se jen to, co je na Bazoši veřejně vidět. Slovenský bazos.sk obslouží stejný engine s `market: "sk"`, s cenami v eurech.
Endpointy
| endpoint | Co se vrací | Povinné |
|---|---|---|
| search | Hledání podle slova a/nebo rubriky, s podrubrikou, okruhem kolem PSČ, cenovým rozmezím, pěti řazeními (nejnovější, cena vzestupně a sestupně, nejvíc a nejméně zobrazení) a stránkováním po 20 inzerátech. Placené TOP inzeráty zůstávají tam, kam je Bazoš dal, a mají `promoted: true`. Musí být zadáno slovo nebo rubrika. | vše volitelné |
| listing | Celý inzerát: titulek, kompletní popis, cena, lokalita, počet zobrazení, datum vložení, drobečková navigace a všechny fotky. Stačí adresa inzerátu z `search`; jinak `listing_id` spolu s rubrikou, protože na Bazoši je rubrika součástí adresy. | vše volitelné |
| categories | Strom rubrik pro daný trh: bez parametru 20 rubrik s aktuálními počty inzerátů, s `category` podrubriky dané rubriky. Český a slovenský Bazoš používají jiné názvy (dum / dom, zvirata / zvierata), proto `categories` volejte vždy pro ten trh, na kterém hledáte. | vše volitelné |
Každé volání se účtuje v kreditech. Neúspěšná a blokovaná volání jsou zdarma.
Funkční příklad
Okruh 25 km kolem PSČ 602 00 (Brno) zúžil výsledky hledání „kočárek“ z 8 724 na 666. Engine k tomu pošle i stejný dotaz bez PSČ a obě čísla vrátí ve `filters_verified`. Důvod: neznámé PSČ Bazoš bez varování přeskočí a vrátí celou republiku, takže filtr je potřeba ověřit. Prvních 6 řádků z 20 tvoří placené TOP inzeráty (`promoted_label` „TOP 5x Platí do 13.11. 2026“). Do průměrné ceny je buď započítejte vědomě, nebo je vyřaďte.
curl -X POST https://api.reefapi.com/bazos/v1/search \
-H "x-api-key: VAS_KLIC" \
-H "content-type: application/json" \
-d '{"market": "cz", "query": "kočárek", "postal_code": "60200", "radius_km": 25}'{
"ok": true,
"data": {
"market": "cz",
"currency": "CZK",
"query": "kočárek",
"sort": "newest",
"total_results": 666,
"page": 1,
"page_size": 20,
"has_more": true,
"listings": [
{
"listing_id": "225312502",
"url": "https://deti.bazos.cz/inzerat/225312502/kocarek-cybex.php",
"title": "Kočárek CYBEX Priam",
"price": 17500,
"price_currency": "CZK",
"price_kind": "fixed",
"price_text": "17 500 Kč",
"locality": "Vyškov",
"postal_code": "684 01",
"views": 437,
"posted_date": "2026-10-24",
"promoted": true,
"promoted_label": "TOP 5x Platí do 13.11. 2026",
"category": "deti"
},
...
{
"listing_id": "225510171",
"url": "https://deti.bazos.cz/inzerat/225510171/inglesina-aptica-xt.php",
"title": "Inglesina Aptica XT",
"description_excerpt": "Prodám kočárek značky Inglesina Aptica XT zakoupený v březnu 2023, po jednom dítěti. ...",
"price": 12500,
"price_currency": "CZK",
"price_kind": "fixed",
"price_text": "12 500 Kč",
"locality": "Brno",
"postal_code": "639 00",
"views": 11,
"posted_date": "2026-10-24",
"promoted": false,
"promoted_label": null,
"category": "deti"
},
...
]
},
"meta": {
"record_count": 20,
"promoted_count": 6,
"sort_drops_unpriced_ads": false,
"filters_verified": { "postal_code": { "control_total": 8724, "filtered_total": 666, "applied": true } },
"next_page": 2,
"cache_hit": false,
"mode": "live"
}
}Scraping Bazoše: co stránka neřekne sama
Bazoš je obyčejné HTML a na ochranu proti robotům jsme při stavbě enginu nenarazili, takže první scraper vznikne rychle. Potíž je v tom, co stránka zamlčí. Neexistující PSČ se bez varování ignoruje: dotaz s PSČ 99999 vrátil 7 041 výsledků, přesně tolik jako bez PSČ. Řazení na adrese search.php s konkrétní rubrikou se zahodí: tři různé hodnoty `order` vrátily bajt po bajtu stejnou stránku jako dotaz bez řazení. A podrubrika, kterou Bazoš nezná, vrátí celou rubriku s kódem 200.
Stavové kódy u inzerátů platí obráceně. Smazaný inzerát odpoví HTTP 200 s větou „Inzerát byl vymazán.“ a mřížkou úplně jiných inzerátů. Živý inzerát s chybným slugem v adrese naopak vrátí 404 a přitom celý správný obsah. Kdo věří stavovému kódu, uloží místo smazaného inzerátu třeba cizí chytré hodinky z doporučené mřížky a platný inzerát zahodí.
Engine proto rozhoduje podle textu stránky, ne podle kódu: smazaný inzerát vrací NOT_FOUND, neznámé PSČ, podrubrika nebo řazení INVALID_PARAM (u podrubriky i se seznamem platných). Na jedno hledání stačí prohlížeč. Pokud ale chcete týden co týden sledovat ceny v rubrice, právě tyhle tiché odchylky rozhodují, jestli se na čísla dá spolehnout.
Omezení a poctivé poznámky
- Jde o neoficiální přístup: Bazoš za ním nestojí a nemáme s ním uzavřenou žádnou dohodu.
- Telefon prodejce engine nikdy nenačítá. Běžně zapsaná telefonní čísla a e-maily, které prodejce napíše do popisu, se v každé odpovědi nahrazují značkou „[phone removed]“ nebo „[email removed]“. Z údajů o prodejci se vrací jen veřejně zobrazené jméno.
- Cena napsaná slovem není nula: „Dohodou“, „Nabídněte“ a „V textu“ vrací `price: null` s původním textem v `price_text`; „Zdarma“ je 0 s `price_kind: "free"`. Řazení podle ceny takové inzeráty vyřadí (to dělá sám Bazoš) a celkový počet se zmenší; `meta.sort_drops_unpriced_ads` to oznámí.
- Bazoš nemá pole pro stav zboží, dopravu ani hodnocení prodejce, takže je nevracíme. Desetinné ceny Bazoš nezná.
- Řádky z hledání napříč Bazošem nesou jen rubriku (je součástí adresy), ne podrubriku. Podrubriku zjistíte z drobečkové navigace v `listing`.
- Stránkovat jde nejvýš do 500. stránky: dál Bazoš sice odpovídá, ale jen opakuje konec výpisu.
- Odkaz na inzerát zestárne, jakmile ho prodejce smaže. Pak `listing` vrátí NOT_FOUND.