Sauto.cz Scraper — Czech Used Cars, VIN, Equipment & Dealers
No login. No cookies. No browser.
Extracts vehicle listings from Sauto.cz, the largest Czech car marketplace, across nine categories from cars to buses, with Sauto.cz's own numeric make and model IDs on every row. An optional details add-on opens each listing for the VIN, the full equipment list, the STK inspection date and the dealer's phones, emails and company ID.
oswaldocarabano/sauto-scraper
{
"category": "cars",
"manufacturer": "skoda",
"model": "octavia",
"region": "prague",
"maxItems": 500,
"includeDetails": true
}- Version
- v0.1.3
- Memory
- 512 MB
- Browser
- none
- Proxy
- None needed: Sauto.cz answers directly
Short answer
The Sauto.cz Scraper extracts vehicle listings from Sauto.cz, the largest Czech car marketplace, with a median of 48 populated fields per row from the search results alone (n = 987 listings, 10 search profiles, 23 September 2026) and 95 with the details add-on (n = 300). The add-on returns the VIN on 88.7% of those 300 listings, the full equipment list on 81.7% and the STK inspection date on 51.3%. Sauto.cz only pages through the first 10,000 results of a search, so larger searches are split into price bands automatically. Pricing is $0.0009 per vehicle and $0.0011 per details add-on. Private sellers' phone numbers and user IDs are withheld by default.
Key points
- The Sauto.cz Scraper returns a median of 48 populated fields per vehicle from the search results alone, measured on 987 listings from 10 search profiles on 23 September 2026.
- The details add-on raises the median to 95 populated fields and returns the VIN on 88.7% of 300 measured listings, including dealer VINs the site hides on the page.
- Sauto.cz pages through only the first 10,000 results of any search, so the Actor splits larger searches into price bands; the bands summed to 106,825 against a parent total of 106,824.
- Private sellers were 7.05% of Sauto.cz car listings (7,531 of 106,824 on 23 September 2026), and their phone, user ID and any VIN they hid are withheld by default.
- Sauto.cz's robots.txt disallows everything to user agents it does not name, and the Sauto.cz Actor does not filter its requests by robots.txt.
- A thousand vehicles cost $0.90 from search results, or $2.00 with the details add-on, and error rows are never charged.
What it does
Extracts vehicle listings from Sauto.cz, the largest Czech car marketplace, across nine categories from cars to buses, with Sauto.cz's own numeric make and model IDs on every row. An optional details add-on opens each listing for the VIN, the full equipment list, the STK inspection date and the dealer's phones, emails and company ID.
{
"record_type": "car",
"id": 210980478,
"url": "https://www.sauto.cz/osobni/detail/skoda/octavia/210980478",
"title": "Škoda Octavia, 1.5 TSI, Ambition Plus",
"manufacturer": "Škoda",
"model": "Octavia",
"variant": "1.5 TSI, Ambition Plus",
"price_czk": 270000,
"price_currency": "CZK",
"mileage_km": 166420,
"first_registration_date": "2019-06-04",
"fuel": "petrol",
"gearbox": "automatic",
"engine_power_kw": 110,
"body_type": "estate",
"color": "white",
"vin": "TMBJR7NE4K0205606",
"vin_hidden_on_site": false,
"equipment_count": 24,
"service_book": true,
"stk_valid_until": "2027-05-13",
"region": "Hlavní město Praha",
"seller_type": "dealer",
"dealer_name": "AAA AUTO",
"contact_redacted": false,
"details_included": true,
"scraped_at": "2026-09-23T18:49:48.541Z"
}Why this one
Past the 10,000-result window, by price band
Sauto.cz serves only the first 10,000 results of a search. When more match, the Sauto.cz Actor splits the search into price bands that each fit the window, and the split was checked against the parent count: 106,825 summed against 106,824 reported. A local test delivered 10,500 cars in 72 seconds.
The VIN, including the ones hidden on the page
Many Czech dealers tick the option to hide the VIN on the web page while the listing data still carries it. The Sauto.cz Actor returns the dealer VIN with a `vin_hidden_on_site` flag, so a buyer can see which dealers chose not to display it. A VIN a private seller hid is treated as that person's contact data and withheld by default.
Filters that are checked rather than trusted
Sauto.cz silently ignores a value it does not recognise and returns the whole catalogue with HTTP 200. The Sauto.cz Actor checks that a free-text make, model or district actually narrowed the result count, and stops with an explanation, charging nothing, when it did not.
Numeric make and model IDs on every row
Make and model arrive as names, URL slugs and Sauto.cz's own numeric IDs, which makes runs joinable across days without string matching on Czech diacritics.
Use cases
- Build a Czech used-car price dataset or valuation model from price, mileage, year, fuel, gearbox and make and model IDs.
- Watch a make, model or region daily, sorted by newest, as a dealer or importer.
- Compile a Czech car dealer list with phones, emails, website, IČO company ID, address and opening hours.
- Check a specific car before buying: VIN, service book, first owner, crash flag and STK validity from the add-on.
- Track EV and hybrid supply with the fuel filter.
Input
Every field has a default, and the defaults are deliberately small so a first run is cheap enough to inspect before you commit to a sweep. This table mirrors the Actor's own input schema field for field.
| Field | Default | What it does |
|---|---|---|
categorystring | cars | Vehicle categorycars, vans, trucks, motorcycles, quads, trailers, campers, machinery or buses. |
manufacturerstring | (all makes) | MakeAs in sauto.cz URLs, e.g. `skoda`, `volkswagen`. Accents work. An unknown make stops the run and nothing is charged. |
modelstring | (all models) | ModelAs in sauto.cz URLs, e.g. `octavia`. Needs a make. |
fuel / gearbox / bodyType / conditionstring | any | Vehicle filtersDropdowns verified against the live site. |
sellerTypestring | any | Seller typepersonal data`dealer` or `private`. Dealers held about 93% of car listings when measured. |
region / districtstring | any | LocationOne of the 14 Czech regions (kraj), and optionally a district slug such as `brno-mesto`. |
priceMin / priceMaxinteger | — | Price range (CZK)Asking price in Czech koruna. |
mileageMin / mileageMax, yearFrom / yearTo, powerMinKwinteger | — | Numeric filtersOdometer, manufacturing year and minimum power in kW. |
sortBystring | newest | Sort byAbove 10,000 matches the search is split into price bands and the sort applies inside each band. |
maxItemsinteger | 100 | Maximum resultsHard cap per run, up to 100,000. |
includeDetailsboolean | false | Include full vehicle details (add-on)Opens each listing for about 40 more fields, VIN included. Billed as its own event, about one extra request per vehicle. |
outputTypestring | cars | Output type`cars` or `dealers` (one row per dealer found by your filters). |
includePrivateSellerContactboolean | false | Include private sellers' contact datapersonal dataOff by default. Turn on only with a lawful basis to process private persons' data. |
maxConcurrencyinteger | 4 | Parallel detail requestsDetail pages fetched at once when the add-on is on. |
Output and fill rates
A field being in the schema is not the same as it having a value. The percentages below were counted on real runs; the sample sizes are in Measurements. Anything not listed here is not promised.
| Field | Filled | Meaning |
|---|---|---|
idinteger | 100% | Sauto.cz listing identifier. |
urlstring | 100% | Public listing URL. |
titlestring | 100% | Listing title as published, in Czech. |
manufacturer / manufacturer_idstring / integer | 100% | Make, with Sauto.cz's numeric ID and URL slug. |
model / model_idstring / integer | 100% | Model, with numeric ID and slug. |
variantstring | 95.5% | Trim or engine name. |
price_czknumber | 100% | Asking price in CZK; `price_currency` states it on every row. |
price_by_agreementboolean | 100% | Price on request. |
mileage_kminteger | 89.3% | Odometer reading in km. |
manufactured_yearinteger | 88.9% | Year of manufacture. |
first_registration_datedate | 61% | Date of first registration. |
fuelstring | 89.5% | English value, with the Czech original in `fuel_raw`. |
gearboxstring | 79.7% | Manual, semi-automatic or automatic, with `gearbox_raw`. |
region / districtstring | 100% | Czech region and district, with IDs and slugs. |
municipalitystring | 49% | Municipality, when the listing gives one. |
imagesstring[] | 100% | Photo URLs, with `image_count`. |
cebia_verifiedboolean | 100% | Whether the listing carries the Cebia verification flag. |
seller_typestring | 100% | `dealer` or `private`. |
dealer_name / dealer_idstring / integer | 66.9% | The dealer. 66.9% of the 987-listing sample, which is 100% of its dealer rows. |
vinstring | 88.7% | Details add-on only. Measured on 300 listings (193 dealer, 107 private). |
vin_hidden_on_siteboolean | 100% | Details add-on. Whether the seller chose to hide the VIN on the page. |
equipment / equipment_groupedstring[] / object | 81.7% | Details add-on. Full equipment list in Czech, and grouped by category. |
engine_power_kwnumber | 86% | Details add-on. |
descriptionstring | 91% | Details add-on. Seller's text, with contacts redacted on private listings. |
service_bookboolean | 58% | Details add-on. |
stk_valid_untildate | 51.3% | Details add-on. Expiry of the Czech roadworthiness inspection. |
crashed_in_pastboolean | 42.7% | Details add-on. Seller-declared accident history. |
dealer_phones / dealer_emails / dealer_icostring[] / string[] / string | 64.3% | Details add-on. 100% of the 193 dealer listings in the 300-listing sample; never filled for private sellers. |
contact_redactedboolean | 100% | Whether private-seller contact data was withheld on this row. |
scraped_atdatetime | 100% | When the row was read from Sauto.cz. |
Every key is always present. A field that exists but is empty comes back as explicit null, so a parser never has to guess.
Datasets
Different record types go to different datasets, so the main table never carries columns that are blank on most rows.
defaultOne row per vehicle, or one row per dealer when `outputType` is `dealers`. One row type per run.billedError rowsRows with `record_type: error` explaining what failed. Never charged.never billedRUN_SUMMARY (key-value store)Matched, delivered and charged counts and why the run stopped.never billedERRORS (key-value store)Always written; empty on a clean run.never billed
Pricing
Pay per delivered result. Charges are applied as each row is produced rather than in a lump at the end, so an aborted run bills only for what it actually gave you.
| Event | Price | Notes |
|---|---|---|
apify-actor-startActor start | $0.00001 | Once per run. |
carVehicle listing | $0.0009 | One vehicle row from the search results: price, mileage, year, fuel, gearbox, make and model with IDs, location, photos, Cebia flag and dealer. |
car-detailsFull vehicle details add-on | $0.0011 | Only with `includeDetails`: VIN, description, equipment, engine, STK date, GPS and the dealer's contact card. |
dealerDealer profile | $0.002 | Only with `outputType: dealers`: phones, emails, website, IČO, address, GPS, rating and total listings. |
Measurements
Each figure is shown with the method that produced it. A benchmark without a method is a marketing claim wearing a number's clothes.
Search-result fill rates
median 48 populated fields per row
n = 987 listings from 10 search profiles, live site, 23 September 2026 (README and the repository's generated schema table).
Details add-on fill rates
median 95 populated fields (p10 70, p90 102); VIN 88.7%
n = 300 listings with details, 193 dealer and 107 private, 23 September 2026.
Dealer contact coverage
phones, emails and IČO on 100% of dealer listings
n = 193 dealer listings inside the 300-listing details sample.
Price-band split accuracy
106,825 summed against 106,824 reported
All car listings on 23 September 2026, split into bands that each fit the 10,000-result window.
Private-seller share
7.05% of car listings
7,531 of 106,824 car listings on 23 September 2026, counted with the site's own private-seller facet.
Throughput
10,500 cars in 72 seconds; 100 rows in 9.5 s on the platform
The first is a local test past the 10,000 window; the second the default input on Apify at 512 MB, build 0.1.3.
What it will not do
Stated plainly so you can judge fit before spending anything.
- Search-result rows do not carry the VIN, the equipment list or dealer contacts; those need the details add-on, which costs one extra request and $0.0011 per vehicle.
- Sauto.cz's own window stops at 10,000 results per search; the price-band split covers larger searches, but a single band that still exceeds the window cannot be split by price further.
- `maxItems` is a hard cap of 100,000 rows per run.
- Sauto.cz's robots.txt (checked 10 October 2026) ends with `User-agent: *` / `Disallow: /`. The Sauto.cz Actor does not filter by robots.txt.
- The Actor never logs in and never resolves CAPTCHAs; dealer premises pages that answer 401 are not requested.
Privacy
- Private sellers were 7.05% of car listings (7,531 of 106,824, 23 September 2026). By default their phone number and user ID are withheld, phone numbers or emails typed into their description are redacted, and the row carries `contact_redacted: true`.
- A VIN that a private seller chose to hide is withheld by default as well, because the seller asked for it not to be shown.
- `includePrivateSellerContact` turns those fields on. Use it only with a lawful basis under the GDPR.
- Dealers' business contact data — phones, emails, website and IČO — is always delivered. A seller that cannot be verified as a dealer is treated as a private seller.
- Removal requests: privacy@actorstack.dev
See also the data removal process.