Sauto API: inzeráty aut a motorek ze sauto.cz v JSON
Na sauto.cz bylo v září 2026 kolem 121 000 inzerátů v devíti sekcích (osobní, užitková, nákladní, motorky, čtyřkolky, přívěsy, obytné, pracovní stroje, autobusy). Tohle API z nich vrací údaje, které má kupující na očích i bez přihlášení: značku, model, verzi, cenu v Kč, najeté kilometry, palivo, převodovku, rok výroby, kraj a okres, a v detailu VIN, datum STK, servisní knížku a celou výbavu. Prodejcům a autobazarům ale neposlouží: inzerát přes něj nevložíte, sklad z bazarového systému nenaimportujete a s ceníkem inzerce nijak nesouvisí. Slouží jen ke čtení veřejných nabídek.
Endpointy
| endpoint | Co se vrací | Povinné |
|---|---|---|
| search | Hledání v jedné sekci (výchozí osobní): značka a model, volný text, stav, palivo, převodovka, karoserie, barva, pohon, soukromník nebo autobazar, cena, nájezd, výkon v kW, objem motoru, počet míst, kraj nebo okres. Sedm řazení, až 100 inzerátů na stránku. Pořadí odpovídá webu včetně topovaných inzerátů, které poznáte podle `promoted: true`. | vše volitelné |
| listing | Celý inzerát podle `id` nebo adresy: popis, karoserie, barva, pohon, výkon a objem motoru, VIN, platnost STK, servisní knížka, první majitel, země původu, cena bez DPH a možnost odpočtu DPH, výbava rozdělená do kategorií a všechny fotky. | vše volitelné |
| filters | Číselníky Sauta pro danou sekci: značky, modely jedné značky, karoserie, barvy nebo výbava, každá hodnota se slugem, který přijímá `search`. Karoserie se mezi sekcemi liší (kombi a SUV u aut, skútr a enduro u motorek). | vše volitelné |
Každé volání se účtuje v kreditech. Neúspěšná a blokovaná volání jsou zdarma.
Funkční příklad
Výchozí řazení je „nejnovější“, ale na první stránce bylo 16 z 20 řádků topovaných, nejstarší z nich vložený 11. 8. 2025. Běžné inzeráty z 25. 10. se objevily až na 5., 15., 17. a 20. místě. Pro čerstvé nabídky tedy topované řádky vyřaďte nebo řaďte podle `created_at`. V `meta.filters_verified` je vidět, že značka i model opravdu zabraly: bez značky by dotaz dal 16 690 inzerátů, se samotnou Škodou 3 725, s Octavií 2 215.
curl -X POST https://api.reefapi.com/sauto/v1/search \
-H "x-api-key: VAS_KLIC" \
-H "content-type: application/json" \
-d '{"category": "osobni", "make": "skoda", "model": "octavia", "fuel": "nafta", "price_max": 300000, "page_size": 20}'{
"ok": true,
"data": {
"category": "osobni",
"total_results": 2215,
"page": 1,
"page_size": 20,
"has_more": true,
"listings": [
{
"id": 209495180,
"title": "Škoda Octavia, Style 2.0 TDI 110 kW",
"price": 273990,
"price_currency": "CZK",
"price_kind": "fixed",
"mileage_km": 199880,
"fuel": { "value": 2, "name": "Nafta", "seo_name": "nafta" },
"gearbox": { "value": 1, "name": "Manuální", "seo_name": "manualni" },
"manufacturing_date": "2017-01-01",
"locality": { "region": "Středočeský kraj", "region_id": 11, "district": "Nymburk", "district_id": 55 },
"seller_type": "dealer",
"promoted": true,
"cebia_verified": true,
"created_at": "2025-11-18T10:21:23"
},
...
{
"id": 211340262,
"title": "Škoda Octavia, Škoda Octavia III 2.0 TDI",
"price": 189000,
"price_currency": "CZK",
"price_kind": "fixed",
"mileage_km": 198690,
"fuel": { "value": 2, "name": "Nafta", "seo_name": "nafta" },
"gearbox": { "value": 1, "name": "Manuální", "seo_name": "manualni" },
"manufacturing_date": "2013-08-01",
"locality": { "region": "Královéhradecký kraj", "region_id": 6, "district": "Hradec Králové", "district_id": 28, "municipality": "Hradec Králové" },
"seller_type": "private",
"promoted": false,
"created_at": "2026-10-25T11:38:22"
},
...
]
},
"meta": {
"record_count": 20,
"promoted_count": 16,
"priced_count": 20,
"filters_verified": {
"make": { "control_total": 16690, "filtered_total": 2215, "applied": true },
"model": { "control_total": 3725, "filtered_total": 2215, "applied": true }
},
"next_page": 2,
"max_reachable_page": 500,
"cache_hit": false,
"mode": "live"
}
}Scraper na Sauto: filtr, který tiše vypadne
Sauto filtr, kterému nerozumí, neodmítne. Vrátí HTTP 200 se správně vypadající odpovědí, jen bez toho filtru. Při stavbě enginu v září 2026 jsme to změřili: značka poslaná bez sekce vrátila 121 040 inzerátů, tedy celý web; vymyšlená značka uvnitř osobních aut 106 975, což je celá sekce; a BMW s vymyšleným modelem 6 414, přesně tolik jako samotné BMW. Kdo podle takové odpovědi počítá průměrnou cenu modelu, počítá ve skutečnosti průměr celé značky.
Podobně se chovaly i jiné vstupy. Parametr `seats_cb` (počet míst) Sauto přijme, ale nikdy ho neuplatní; řazení zadané čísly 1 až 8 nechalo pořadí beze změny, protože Sauto chce názvy polí. A za hranicí 10 000 inzerátů přijde prázdná stránka, ze které zmizí i informace o stránkování.
Engine proto u značky, modelu, kraje a okresu pošle v rámci téhož volání kontrolní dotaz bez daného filtru a porovná součty, které uvádí Sauto. Když se nepohnou, vrátí INVALID_PARAM s odkazem na `filters`. Tak to dopadlo i 25. 10. u modelu „zzznope“: samotná Škoda dala stejný součet 26 636. Chyba se našla i u nás: číselník modelů má přes dva tisíce hodnot seřazených podle značek a první verze četla jen jeho začátek. BMW pak mělo 27 modelů místo 37 a Volkswagen žádný místo 55.
Jednou si stáhnout ceny Octavií se dá i ručně. Když ale každý týden srovnáváte trh ojetin, musíte vědět, že číslo v tabulce opravdu patří k modelu, který jste zadali.
Omezení a poctivé poznámky
- Neoficiální rozhraní: nevzniklo ve spolupráci se Sautem ani se Seznam.cz, který Sauto provozuje, a žádná smlouva nás s nimi neváže.
- Hledání v okruhu ani podle PSČ tu není. Lokalitu zúžíte jen krajem (`region_id`) nebo okresem (`district_id`), a to vždy jen jedním z nich.
- Karoserie, barva, výkon, objem motoru, VIN ani výbava ve výsledcích hledání nejsou; ty vrací až `listing`.
- Cena „dohodou“ přijde jako `price: null`, ne jako nula, a z hledání s cenovým rozmezím takové inzeráty vypadnou (dělá to samo Sauto).
- Slevu napsanou v textu inzerátu strukturovaná pole neukážou: Octavia za 289 000 Kč měla `price_original` také 289 000, přestože popis začínal větou „Aktuálně zlevněno o 6.000Kč“.
- Telefon ani údaje soukromého prodávajícího API nevrací nikdy. U autobazaru přichází jeho firemní profil (`dealer`).
- Hledání se značkou nebo modelem trvá déle (u příkladu 2,8 s): kontrolní dotazy běží v tomtéž volání a Sauto se pokaždé čte znovu, bez mezipaměti (v každém našem pokusu `cache_hit: false`).
- Dál než na 10 000. inzerát se stránkováním nedostanete; při 20 řádcích na stránku je poslední dosažitelná stránka 500.