Otomoto.pl is Poland's biggest car marketplace, with private sellers and most of the country's dealers. If you want its listings in code, to price a car, track depreciation or watch a rival dealer, you find out quickly that Otomoto has no public API for searching listings.
This post shows two ways to get them anyway: without code, and from Python. All the output below comes from real runs on 15 November 2026.
Disclosure: we built and sell the tool used here, the Otomoto.pl Scraper on Apify, and an AI agent wrote this post. The numbers are from real runs, not made up.
Without code: paste a search URL
- Search on otomoto.pl as usual: make, model, price, city.
- Copy the address from your browser.
- Open the Otomoto.pl Scraper, paste the address into Start URLs and press Start.
- Download the results as CSV, Excel or JSON.
A search for Skoda Octavias, newest first, returned rows like these:
| Car | Price (PLN) | Year | Mileage (km) | City | Otomoto's price badge |
|---|---|---|---|---|---|
| Octavia 2.0 TSI RS | 117,000 | 2023 | 79,000 | Bydgoszcz | within market |
| Octavia 1.5 TSI e-Tec Style DSG | 76,900 | 2021 | 113,000 | Warszawa | within market |
| Octavia 1.5 TSI Ambition | 66,500 | 2020 | 80,700 | Sędziszów Małopolski | above market |
| Octavia 2.0 TDI 4x4 RS DSG | 56,500 | 2016 | 209,000 | Wroniawy | within market |
| Octavia 1.4 TSI Ambition | 42,000 | 2018 | 158,000 | Pruszcz Gdański | within market |
| Octavia 1.6 TDI Elegance DSG | 18,900 | 2013 | 254,775 | Pruszcz Gdański | below market |
The price badge is Otomoto's own judgment of the price compared with similar cars. Each row is one JSON object. Here is the 2018 car, trimmed:
{ "url": "https://www.otomoto.pl/osobowe/oferta/skoda-octavia-ID6IjVGg.html", "title": "Skoda Octavia 1.4 TSI Ambition", "priceAmount": 42000, "priceCurrency": "PLN", "priceEvaluation": "within_market", "make": "Skoda", "model": "Octavia", "version": "1.4 TSI Ambition", "year": 2018, "mileageKm": 158000, "fuelType": "petrol", "gearbox": "manual", "enginePowerHp": 150, "bodyType": "sedan", "city": "Pruszcz Gdański", "region": "Pomorskie", "sellerType": "private", "noAccident": true, "createdAt": "2026-11-15T21:00:27Z", "equipment": ["Apple CarPlay", "Android Auto", "Interfejs Bluetooth", "Radio", "..."] } The full row also has the description, every photo URL and the whole equipment list (42 items for this car). When the seller fills them in, you also get the VIN, the number of owners and the service record.
From Python: what an Octavia costs by year
You need a free Apify account and its API token (Console, then Settings, then API & Integrations).
pip install apify-client pandas export APIFY_TOKEN=your_token This script asks for 500 Octavias from 2017 or later, then groups them by year:
import os import pandas as pd from apify_client import ApifyClient client = ApifyClient(os.environ["APIFY_TOKEN"]) run = client.actor("redomic/otomoto-scraper").call(run_input={ "make": "Skoda", "model": "Octavia", "yearFrom": 2017, "mode": "search", "maxItems": 500, }) cars = pd.DataFrame(client.dataset(run.default_dataset_id).list_items().items) by_year = cars.groupby("year").agg( cars=("id", "count"), median_price_pln=("priceAmount", "median"), median_km=("mileageKm", "median"), ) print(by_year) print(cars["priceEvaluation"].value_counts(normalize=True).round(2)) cars.to_csv("octavia.csv", index=False) It took about 80 seconds and printed:
cars median_price_pln median_km year 2017 16 44250.0 139112.0 2018 34 44999.5 157000.0 2019 43 49900.0 165000.0 2020 26 65500.0 117318.0 2021 41 69900.0 116893.0 2022 70 78695.0 119515.5 2023 106 79900.0 114245.5 2024 53 99900.0 24700.0 2025 35 109900.0 18212.0 2026 76 131012.5 5.0 priceEvaluation within_market 0.81 below_market 0.13 above_market 0.06 (run.default_dataset_id is for apify-client 3.x. Older 1.x versions return a dict, so there you write run["defaultDatasetId"].)
A few things in there are worth a second look:
- 2019 to 2020 is the big step. Cars from 2017 to 2019 sit between 44,000 and 50,000 PLN, and 2020 jumps to 65,500. The fourth-generation Octavia went on sale in 2020, and the 2020 cars have about 50,000 km less on the clock.
- Young cars, high mileage. 61 of the 106 cars from 2023 have already passed 100,000 km, and 370 of the 500 listings come from businesses rather than private sellers. If you want a low-mileage car, filter on
mileageMaxinstead of the year. - Most prices look fair by Otomoto's measure. Of the 392 cars with a badge, 81% were within market, 13% below and 6% above.
Some of the cheap outliers are damaged cars. A 2023 Octavia at 14,900 PLN turned out to be marked "Uszkodzony" (damaged) on its page. Search mode doesn't return that flag, but detail mode adds a damaged field (true or false), so use detail mode if you want to drop those cars before taking medians.
These are the first 500 Octavias in Otomoto's default order, not the whole market. Raise maxItems (up to 5,000) for a fuller picture.
Watch prices instead of downloading them
Monitor mode returns only what changed since the last run: new cars, price changes and removed listings. To follow one dealer, save this input as a task and give it a daily schedule:
{ "startUrls": [{ "url": "https://AUTO21KRKOCMYRZOWSKA.otomoto.pl/inventory" }], "mode": "monitor", "maxItems": 200 } The first run records everything the dealer has today. From then on, each row carries changeType (new, changed or removed), the previous price, the full price history and the days on market. Apify can send the rows to Slack, email or a webhook after each run.
You can point it at a search URL in the same way, for example every Octavia RS under 80,000 PLN, and get a morning list of new cars and price cuts.
What it costs
$0.75 per 1,000 cars, so the 500-car run above cost about $0.38. Apify's free plan comes with $5 of credit a month, which covers about 6,600 cars. In monitor mode you pay only for new and changed cars, so a day with no changes costs nothing.
Limits worth knowing
- You don't get phone numbers or email addresses, and the tool doesn't collect private sellers' names. Dealer names are included.
- Many sellers hide the VIN. None of the 20 newest Octavias in our test run showed one.
- Otomoto copies some listings from OLX. Those come with fewer fields, often without the version or the price badge.
- The tool reads public pages without logging in. Check Otomoto's terms and your local law for what you do with the data.
If a run returns something that looks wrong, open an issue on the Actor's page with your input and we'll look at it.
