Otomoto.pl Scraper with Contacts avatar

Otomoto.pl Scraper with Contacts

Pricing

from $0.59 / 1,000 listings

Go to Apify Store
Otomoto.pl Scraper with Contacts

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

ParseBird

Maintained by Community

Actor 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?

FieldDescription
listing_id / url / titleOtomoto listing ID, listing page and title
pricing.amount / currencyPrice and currency (PLN or EUR)
pricing.evaluationOtomoto's price indicator: BELOW, IN, ABOVE (market range) or NONE
pricing.is_gross / labelsGross or net price, and labels like INVOICE_ISSUED (VAT invoice) or INCLUDE_VAT
vehicle.make / model / version / generationMake, model, version and generation
vehicle.year / mileage_kmProduction year and mileage
vehicle.fuel_type / gearbox / transmissionFuel, gearbox and drive
vehicle.engine_capacity_cc / engine_power_hpEngine capacity and power
vehicle.body_type / color / door_count / seat_countBody type, color, doors and seats
vehicle.condition / damaged / country_originNew or used, damaged flag, country of origin
vehicle.vin / registration_number / first_registration_dateVIN, Polish registration number and first registration date (with enrichment, when the seller provides them)
location.city / regionListing city and voivodeship
location.address / postal_code / coordinatesSeller address, postal code and map position (with enrichment)
seller.name / type / id / website_urlSeller name, PROFESSIONAL or PRIVATE, Otomoto seller ID and dealer page
seller.phone_number / phone_numbersSeller phone numbers (with Get seller phone numbers on)
seller.badges / active_ads / packageSeller badges like "Sprzedający na OTOMOTO od 2020", number of active ads and dealer package (with enrichment)
media.thumbnail_url / image_urls / image_countMain photo, and every photo with enrichment
description / short_descriptionFull listing description (with enrichment) and the short subtitle shown in search
features.equipment / equipment_groupsEquipment list, flat and grouped like on Otomoto (with enrichment)
signalsHighlighted, promoted, CEPiK-verified, and whether the record was enriched
attributes.parameters / detailsAll raw Otomoto parameters and the detail table with labels and groups
attributes.source_datesCreated, updated, originally created and last bump dates
source_contextInput 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

  1. Go to Otomoto.pl, pick a category and set your filters (make, model, price, year, location and so on).
  2. Copy the URL from your browser's address bar, for example https://www.otomoto.pl/osobowe/bmw?search[filter_float_price:to]=100000.
  3. Open Otomoto.pl Scraper on Apify Store and click Try for free.
  4. Paste the URL into Otomoto URLs. Add more search, dealer or listing URLs if you like.
  5. Set Max listings per URL, or leave it empty to collect every result.
  6. Optionally turn on Enrich with listing details and Get seller phone numbers.
  7. 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.

EventFreeBronzeSilverGold
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.

ParameterTypeRequiredDefaultDescription
startUrlsarrayYes—Otomoto search result, category, dealer or listing URLs
limitintegerNoempty (all)Listings to save per URL. Minimum 1
enrich_databooleanNofalseAdd description, photos, equipment, all parameters, VIN, registration, address and coordinates
get_contactbooleanNofalseAdd seller phone numbers
proxyConfigurationobjectNononeNot 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 ApifyClient
client = 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

  1. For each search URL, the Actor reads the filters and sort order that Otomoto applies to that URL, including any redirect Otomoto makes.
  2. 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 page parameter, it starts from that page.
  3. Dealer pages are expanded into one search per category the dealer sells in.
  4. 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.

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

ActorWhat it does
Cars.com Scraper with ContactsScrape US car listings and dealer phone numbers from Cars.com
Coches.net ScraperScrape Spanish car and motorcycle listings from Coches.net
AutoTrader.co.uk ScraperScrape UK car listings from AutoTrader.co.uk
AutoTrader Canada ScraperScrape Canadian car listings from AutoTrader.ca
IAAI Vehicles ScraperScrape salvage and insurance auction vehicles from IAAI
Allegro.pl Product ScraperScrape products and prices from Allegro.pl
Pracuj.pl Jobs ScraperScrape Polish job offers from Pracuj.pl