Otomoto.pl Scraper with Contacts
Pricing
from $0.59 / 1,000 listings
Otomoto.pl Scraper with Contacts
Scrape Otomoto.pl car listings from any search, category, dealer or listing URL: price, mileage, year, engine, fuel, location, seller, photos, equipment, VIN, and optional seller phone numbers.
Pricing
from $0.59 / 1,000 listings
Rating
0.0
(0)
Developer
ParseBird
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Otomoto.pl Scraper with Contacts
Otomoto.pl Scraper extracts vehicle listings from Otomoto.pl, one of Poland's largest marketplaces for cars, motorcycles, vans, trucks, trailers and machinery. Paste any Otomoto search, category, dealer or listing URL and get the price, mileage, year, engine, fuel, location, seller and photos, plus optional seller phone numbers, VIN, equipment and full descriptions, as clean JSON, CSV or Excel.
| Use any Otomoto search with all its filters and sort order, a dealer's whole inventory, or single listings, and get 40+ structured fields per vehicle, with phone numbers for dealers and private sellers, VIN and registration number, the full equipment and parameter list (80+ items on well-equipped cars), and every photo on demand. |
Copy to your AI assistant
Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.
Apify Actor: parsebird/otomoto-scraper. Scrapes vehicle listings from Otomoto.pl (Polish marketplace for cars, motorcycles, vans, trucks, trailers, construction and agricultural machinery). Call via ApifyClient: client.actor("parsebird/otomoto-scraper").call(run_input={"startUrls": ["https://www.otomoto.pl/osobowe/bmw"], "limit": 100, "enrich_data": true, "get_contact": true}). Inputs: startUrls (array of strings: Otomoto search result or category URLs like https://www.otomoto.pl/osobowe/audi?search[filter_float_price:to]=60000 with any filters and sort order, dealer pages like https://<dealer>.otomoto.pl, or listing URLs https://www.otomoto.pl/osobowe/oferta/...html), limit (integer, max listings per URL, empty = all), enrich_data (boolean, default false: adds description, all photos, equipment, every parameter, VIN, registration number and date, seller address, coordinates, badges), get_contact (boolean, default false: adds seller phone numbers), proxyConfiguration (object, optional). Output: one record per listing with listing_id, url, title, status, short_description, description, pricing {amount, currency, evaluation, is_gross, labels}, vehicle {make, model, version, generation, year, mileage_km, fuel_type, gearbox, engine_capacity_cc, engine_power_hp, body_type, color, door_count, seat_count, transmission, condition, damaged, vin, registration_number, first_registration_date, main_features}, location {city, region, address, postal_code, coordinates}, seller {id, uuid, name, type, website_url, phone_number, phone_numbers, badges, active_ads, package}, media {thumbnail_url, image_urls, image_count}, features {equipment, equipment_groups}, signals {highlighted, promoted, cepik_verified, enriched}, attributes {parameters, details, category, source_dates}, source_context {source_url, seed_id, seed_type, page_index, position, scraped_at, record_fingerprint}. Pricing: pay per listing, plus per enriched listing and per listing with a phone number. Full API spec: https://apify.com/parsebird/otomoto-scraper/api. Get your token: https://console.apify.com/settings/integrations.
What is Otomoto.pl Scraper?
Otomoto.pl Scraper turns Otomoto listings into a structured dataset. Set up your search on Otomoto the way you normally would, copy the URL, and paste it into the Actor. Every filter in the URL is applied (make, model, generation, price, year, mileage, fuel, gearbox, body type, location and radius, seller type, damage status) along with the sort order.
It works as an Otomoto API alternative: you don't need an Otomoto account, an API key or a browser. Turn on Get seller phone numbers to add the numbers sellers show on their listings, which makes it a simple car dealer lead source for Poland.
What can Otomoto.pl Scraper do?
- 🔎 Any Otomoto search. Paste search result or category URLs with any filters and sort order. Several URLs run in one go, each with its own limit.
- 🏢 Whole dealer inventories. Paste a dealer page (
https://<dealer>.otomoto.pl) to collect every listing the dealer has, across all categories. - 🚗 Single listings. Paste listing URLs (
/oferta/...html) to collect specific vehicles. - 📞 Seller phone numbers. Add the phone numbers dealers and private sellers show on their listing.
- 🧾 Full listing details. Add the description, every photo, the equipment list, every technical parameter, VIN, registration number, first registration date, seller address and map coordinates.
- 🚚 All vehicle categories. Cars (
osobowe), motorcycles, vans, trucks, trailers, construction and agricultural machinery. - ♻️ No duplicates. Promoted listings that repeat across pages or URLs are saved once.
- 📅 Scheduling and monitoring. Run daily with Apify Schedules to track prices and new stock.
- 🔌 API and integrations. Use the Apify API, or send listings to Google Sheets, Zapier, Make, Slack or webhooks with Apify integrations. Export as JSON, CSV, Excel, XML or HTML.
What data can you extract from Otomoto.pl?
| Field | Description |
|---|---|
listing_id / url / title | Otomoto listing ID, listing page and title |
pricing.amount / currency | Price and currency (PLN or EUR) |
pricing.evaluation | Otomoto's price indicator: BELOW, IN, ABOVE (market range) or NONE |
pricing.is_gross / labels | Gross or net price, and labels like INVOICE_ISSUED (VAT invoice) or INCLUDE_VAT |
vehicle.make / model / version / generation | Make, model, version and generation |
vehicle.year / mileage_km | Production year and mileage |
vehicle.fuel_type / gearbox / transmission | Fuel, gearbox and drive |
vehicle.engine_capacity_cc / engine_power_hp | Engine capacity and power |
vehicle.body_type / color / door_count / seat_count | Body type, color, doors and seats |
vehicle.condition / damaged / country_origin | New or used, damaged flag, country of origin |
vehicle.vin / registration_number / first_registration_date | VIN, Polish registration number and first registration date (with enrichment, when the seller provides them) |
location.city / region | Listing city and voivodeship |
location.address / postal_code / coordinates | Seller address, postal code and map position (with enrichment) |
seller.name / type / id / website_url | Seller name, PROFESSIONAL or PRIVATE, Otomoto seller ID and dealer page |
seller.phone_number / phone_numbers | Seller phone numbers (with Get seller phone numbers on) |
seller.badges / active_ads / package | Seller badges like "Sprzedający na OTOMOTO od 2020", number of active ads and dealer package (with enrichment) |
media.thumbnail_url / image_urls / image_count | Main photo, and every photo with enrichment |
description / short_description | Full listing description (with enrichment) and the short subtitle shown in search |
features.equipment / equipment_groups | Equipment list, flat and grouped like on Otomoto (with enrichment) |
signals | Highlighted, promoted, CEPiK-verified, and whether the record was enriched |
attributes.parameters / details | All raw Otomoto parameters and the detail table with labels and groups |
attributes.source_dates | Created, updated, originally created and last bump dates |
source_context | Input URL, page, position, scrape time and a record fingerprint |
Fields stay empty when the listing doesn't have them. Labels and values are in Polish, as Otomoto shows them.
How to scrape Otomoto.pl
- Go to Otomoto.pl, pick a category and set your filters (make, model, price, year, location and so on).
- Copy the URL from your browser's address bar, for example
https://www.otomoto.pl/osobowe/bmw?search[filter_float_price:to]=100000. - Open Otomoto.pl Scraper on Apify Store and click Try for free.
- Paste the URL into Otomoto URLs. Add more search, dealer or listing URLs if you like.
- Set Max listings per URL, or leave it empty to collect every result.
- Optionally turn on Enrich with listing details and Get seller phone numbers.
- Click Start. When the run finishes, download the listings as JSON, CSV, Excel, XML or HTML from the Output tab, or read them with the API.
How much does it cost to scrape Otomoto.pl?
Otomoto.pl Scraper uses pay-per-event pricing. You pay for each listing saved, for each listing enriched when Enrich with listing details is on, and for each listing where a phone number is found when Get seller phone numbers is on. Compute and proxy costs are included in the event prices.
| Event | Free | Bronze | Silver | Gold |
|---|---|---|---|---|
listing (per listing) | $0.00089 | $0.00079 | $0.00069 | $0.00059 |
enrichment (per enriched listing) | $0.00079 | $0.00069 | $0.00059 | $0.00049 |
contact (per listing with a phone number) | $0.00069 | $0.00059 | $0.00049 | $0.00039 |
| Per 1,000 listings | $0.89 | $0.79 | $0.69 | $0.59 |
| Per 1,000 enriched listings | $0.79 | $0.69 | $0.59 | $0.49 |
| Per 1,000 listings with phone numbers | $0.69 | $0.59 | $0.49 | $0.39 |
For example, 1,000 listings cost $0.89 on the Free plan, or $2.37 with enrichment and phone numbers for all of them. Listings without a phone number are not charged for contacts. You can set a maximum cost per run in Apify Console, and the Actor stops when it's reached.
Input
See the Input tab for the full form.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
startUrls | array | Yes | — | Otomoto search result, category, dealer or listing URLs |
limit | integer | No | empty (all) | Listings to save per URL. Minimum 1 |
enrich_data | boolean | No | false | Add description, photos, equipment, all parameters, VIN, registration, address and coordinates |
get_contact | boolean | No | false | Add seller phone numbers |
proxyConfiguration | object | No | none | Not needed; see the FAQ |
BMW cars, standard fields
{"startUrls": ["https://www.otomoto.pl/osobowe/bmw"],"limit": 25}
Detail-rich collection for two makes
{"startUrls": ["https://www.otomoto.pl/osobowe/audi","https://www.otomoto.pl/osobowe/mercedes-benz"],"enrich_data": true,"limit": 50}
Volkswagen sellers with phone numbers
{"startUrls": ["https://www.otomoto.pl/osobowe/volkswagen"],"get_contact": true,"limit": 25}
One listing with everything
{"startUrls": ["https://www.otomoto.pl/osobowe/oferta/volkswagen-arteon-ID6IhNhA.html"],"enrich_data": true,"get_contact": true}
Output example
Each listing is one row in the dataset. This one has enrichment and contacts on; the photo, equipment, parameter and detail lists are shortened here.
{"listing_id": "6151196798","url": "https://www.otomoto.pl/osobowe/oferta/volkswagen-arteon-ID6IhNhA.html","title": "Volkswagen Arteon 2.0 TDI R-Line DSG","status": "ACTIVE","short_description": "Pierwszy właściciel niski przebieg","description": "VOLKSWAGEN ARTEON – Elegancki sedan z 2022 roku, łączący nowoczesny design z komfortem i zaawansowanymi technologiami. ...","pricing": {"amount": 140000,"currency": "PLN","evaluation": "IN","is_gross": true,"labels": []},"vehicle": {"make": "Volkswagen","model": "Arteon","version": "2.0 TDI R-Line DSG","generation": null,"year": 2022,"mileage_km": 80000,"fuel_type": "Diesel","gearbox": "Automatyczna","engine_capacity_cc": 1968,"engine_power_hp": 200,"body_type": "Sedan","color": "Czarny","door_count": 5,"seat_count": 5,"transmission": "Na przednie koła","condition": "Używany","damaged": false,"country_origin": null,"vin": "WVWZZZ3HZPE006363","registration_number": "GD3G296","first_registration_date": null,"main_features": ["2022", "80 000 km", "1 968 cm3", "Diesel"]},"location": {"city": "Rokocin","region": "Pomorskie","address": "Ogrodowa 7 - 83-200 Rokocin, starogardzki, Pomorskie (Polska)","postal_code": "83-200","coordinates": {"latitude": 53.94063,"longitude": 18.47296,"radius_m": 0}},"seller": {"id": "12293373","uuid": "67a18855-40b7-4bfc-ad9f-d3555d285977","name": "DS SERWIS s.c. Dariusz Szalewski, Bartosz Sengerski","type": "PROFESSIONAL","website_url": "https://DSSERWIS.otomoto.pl","phone_number": "792 752 669","phone_numbers": ["792 752 669"],"badges": ["Firma", "Sprzedający na OTOMOTO od 2020"],"active_ads": 1,"package": "Ultra"},"media": {"thumbnail_url": "https://ireland.apollo.olxcdn.com/v1/files/ivm9x5kwsgwg-OTOMOTOPL/image;s=640x480","image_urls": ["https://ireland.apollo.olxcdn.com/v1/files/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmbiI6Iml2bTl4NWt3c2d3Zy1PVE9NT1RPUEwiLCJ3IjpbeyJmbiI6IndnNGducXA2eTFmLU9UT01PVE9QTCIsInMiOiIxNiIsImEiOiIwIiwicCI6IjEwLC0xMCJ9XX0.PLL-SvERmYclVQgcxUXBJHypg5THd05brmc_QEMbups/image"],"image_count": 6},"features": {"equipment": ["Apple CarPlay", "Android Auto", "Interfejs Bluetooth", "Radio", "Zestaw głośnomówiący", "Gniazdo USB"],"equipment_groups": [{"key": "audio_and_computing","label": "Audio i multimedia","values": [{"key": "apple_carplay", "label": "Apple CarPlay"},{"key": "android_auto", "label": "Android Auto"}]}]},"signals": {"highlighted": false,"promoted": true,"cepik_verified": false,"enriched": true},"attributes": {"parameters": {"make": {"label": "make", "display_value": "Volkswagen", "value": "volkswagen"},"mileage": {"label": "mileage", "display_value": "80 000 km", "value": "80000"},"vin": {"label": "vin", "display_value": "WVWZZZ3HZPE006363", "value": "WVWZZZ3HZPE006363"}},"details": {"make": {"label": "Marka pojazdu", "display_value": "Volkswagen", "value": "Volkswagen", "group": "basic_information"}},"category": {"code": "osobowe", "name": "Osobowe"},"source_dates": {"created_at": "2026-10-17T18:42:18Z","updated_at": "2026-10-18T07:00:53.022817Z","original_created_at": "2026-10-17T18:37:35Z","bump_date": null}},"source_context": {"source_url": "https://www.otomoto.pl/osobowe/volkswagen","seed_id": "f89d762b84c0","seed_type": "search_url","page_index": 1,"position": 3,"scraped_at": "2026-10-19T00:46:54.089274Z","record_fingerprint": "5ede5cafff30279e"}}
Use listing_id as the key when you merge repeated runs, and source_context.record_fingerprint to spot listings whose title, price, mileage or year changed.
Use the Otomoto.pl Scraper API
Call the Actor from your own code with the Apify API client. Find your token in Apify Console → Settings → Integrations.
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("parsebird/otomoto-scraper").call(run_input={"startUrls": ["https://www.otomoto.pl/osobowe/toyota?search%5Bfilter_float_price%3Ato%5D=80000"],"limit": 200,"get_contact": True,})for car in client.dataset(run["defaultDatasetId"]).iterate_items():print(car["title"], car["pricing"]["amount"], car["pricing"]["currency"], car["seller"]["name"], car["seller"]["phone_number"])
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('parsebird/otomoto-scraper').call({startUrls: ['https://www.otomoto.pl/osobowe/skoda/octavia'],limit: 100,enrich_data: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();items.forEach((car) => console.log(car.title, car.vehicle.vin, car.media.image_count));
You can also start runs over plain HTTP from the API tab, or connect the Actor to AI agents through the Apify MCP server.
Use cases
- Dealer lead generation. Build lists of Polish car dealers and private sellers for a make, model or region, with phone numbers.
- Price monitoring. Track prices and Otomoto's price evaluation for the models you buy or sell.
- Competitor inventory. Pull a competing dealer's whole stock with prices, mileage and equipment.
- Car import and export. Find vehicles by VIN, year, mileage and price for cross-border trading.
- Market research. Compare used vehicle prices by year, mileage, fuel, equipment and voivodeship.
How it works
- For each search URL, the Actor reads the filters and sort order that Otomoto applies to that URL, including any redirect Otomoto makes.
- It loads the matching listings page by page (32 per page) until it reaches your limit or the end of the results. If the URL has a
pageparameter, it starts from that page. - Dealer pages are expanded into one search per category the dealer sells in.
- With enrichment or contacts on, the Actor opens each listing page and reads the details and phone numbers there. A listing that has been sold or removed is skipped with a warning and not charged.
FAQ
Do I need an Otomoto account? No. The Actor reads only public listings that anyone can see on Otomoto.pl.
Which Otomoto URLs work?
Search result and category pages on www.otomoto.pl (with any filters), dealer pages on <dealer>.otomoto.pl, and listing pages (/oferta/...html). Other pages, like the homepage, are skipped with a warning.
Why does my search return a different model or more results than expected?
The Actor uses the filters Otomoto itself applies to your URL. Otomoto redirects some URLs (for example /osobowe/audi/a4 to /osobowe/audi/a4-avant) and ignores path parts it doesn't recognize. The run log shows when a redirect happens. Open the URL in your browser to see the same results.
Which phone numbers do I get?
The numbers the seller shows on the listing behind Otomoto's "show number" button, for dealers and private sellers alike. Some dealers list several numbers; all of them are in phone_numbers. A few sellers don't publish a number, and those listings are not charged for contacts.
Why is the VIN or registration number empty?
Sellers can leave them out, and some enter a placeholder (like "ZAPYTAJSPRZEDAWCE", "ask the seller"). vehicle.vin is filled only with a VIN-shaped value; the raw value stays in attributes.parameters.vin.
Is the first result different from what I see on Otomoto? Otomoto rotates promoted listings, so the first positions can change between visits. The rest follow the same sort order as the website.
Do I need a proxy? No. The Actor connects directly and switches to Apify Proxy on its own if Otomoto starts refusing requests.
Can I schedule runs or export to Google Sheets? Yes. Use Apify Schedules for recurring runs and integrations for Google Sheets, Zapier, Make, Slack and webhooks.
Something is missing or broken? Open an issue on the Issues tab. Feedback and feature requests are welcome there too.
Is it legal to scrape Otomoto.pl?
The Actor collects only public listings that Otomoto.pl shows to every visitor. It doesn't log in or access any account data. Listings can include private sellers' first names and phone numbers, and vehicles' registration numbers, which are personal data under the GDPR. Make sure you have a lawful basis to store and use them, and follow Polish rules on direct marketing before you contact sellers. Read more in Apify's blog post Is web scraping legal?
Other vehicle and Polish scrapers
| Actor | What it does |
|---|---|
| Cars.com Scraper with Contacts | Scrape US car listings and dealer phone numbers from Cars.com |
| Coches.net Scraper | Scrape Spanish car and motorcycle listings from Coches.net |
| AutoTrader.co.uk Scraper | Scrape UK car listings from AutoTrader.co.uk |
| AutoTrader Canada Scraper | Scrape Canadian car listings from AutoTrader.ca |
| IAAI Vehicles Scraper | Scrape salvage and insurance auction vehicles from IAAI |
| Allegro.pl Product Scraper | Scrape products and prices from Allegro.pl |
| Pracuj.pl Jobs Scraper | Scrape Polish job offers from Pracuj.pl |