API

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

endpointCo se vracíPovinné
searchHledá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é
listingCelý 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.

Požadavek
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}'
Odpověď (zkrácená)
{
  "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.