Otomoto.pl Scraper - Poland Used Cars avatar

Otomoto.pl Scraper - Poland Used Cars

Pricing

from $3.00 / 1,000 results

Go to Apify Store
Otomoto.pl Scraper - Poland Used Cars

Otomoto.pl Scraper - Poland Used Cars

Scrape Otomoto.pl, Poland's #1 used-car marketplace: make, model, version, price, mileage, year, fuel, gearbox, engine, location, seller (dealer name & website) and Otomoto's price evaluation. Paste any Otomoto listing URL. No login, no API key, no browser.

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

Haketa

Haketa

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

18 hours ago

Last modified

Features

Limited permissions

Share

Otomoto.pl Scraper — Poland Used-Car Listings, Prices & Dealer Leads 🚗

Apify Actor Otomoto Data Format Scale Pricing

Extract clean, structured automotive data from Otomoto.pl, Poland's #1 used-car marketplace (OLX Group). This Otomoto scraper transforms any Otomoto search or listing URL into comprehensive automotive intelligence: for every car advert you get make, model, version, production year, mileage, price (PLN), gross/net status, fuel type, gearbox, engine capacity and power, location (city and voivodeship/region), seller details (dealer name and official website link), CEPiK government registry verification, and Otomoto's proprietary market price evaluation. Paste any search URL and the scraper paginates automatically through the full catalog — no login, no API keys, and no browser overhead.

Export Polish used-car market data directly to JSON, CSV, Excel, or API.

Built for used-car dealerships, automotive pricing analysts, vehicle arbitrage hunters, automotive market researchers, data science teams, and B2B automotive lead-generation agencies seeking reliable access to the Polish vehicle market.


⚡ At a glance

FeatureSpecification
Target WebsiteOtomoto.pl (otomoto.pl) — Poland's Leading Automotive Marketplace
Supported URLsAny Otomoto search URL: category (/osobowe), make (/osobowe/bmw), model (/osobowe/audi/a4), or filtered searches
Pricing IntelligenceAsking price, currency (PLN), gross/net flag (isGross), deal indicator (BELOW/IN/ABOVE), price drop %
B2B Lead GenerationSeller type (dealer vs private), dealer business name, and direct dealer website URL
Vehicle ProvenanceCountry of origin (countryOrigin), official Polish government CEPiK registry verification
Scale & PaginationDeep multi-page pagination (1,000+ adverts per URL, 0 = unlimited)
Speed & EfficiencyFast HTTP execution without heavy headless browser overhead
Output FormatsJSON, CSV, XML, Excel (XLSX), HTML Table, Apify Dataset API
IntegrationsPython SDK, Node.js SDK, REST API, Webhooks, Zapier, Make

🔎 Why scrape Otomoto?

Otomoto.pl is the undisputed market leader in Poland for passenger cars, commercial vehicles, and motorcycles — hosting hundreds of thousands of active listings from both professional automotive dealer groups and private owners. For automotive analysts and cross-border car traders across the European Union, Otomoto is the primary source of truth for used-car valuation, inventory velocity, and dealer intelligence in Central and Eastern Europe.

Collecting listing data manually from the website is impractical: infinite-scroll interfaces, session-tied pagination, and rapid daily price fluctuations make manual tracking impossible.

This Otomoto data extractor automates the entire collection process: feed it any search query URL, and it extracts, normalizes, and flattens every advert into clean tabular datasets ready for spreadsheets, pricing algorithms, or CRM pipelines.

Common reasons teams scrape Otomoto.pl:

  • 💶 Automotive valuation & pricing algorithms — build accurate depreciation curves and residual value models across makes, models, years, and mileage bands.
  • 🎯 Car dealer lead generation — collect directories of active automotive dealerships in Poland complete with verified business names and website links.
  • 📉 Spotting below-market deals — identify undervalued inventory using Otomoto's priceEvaluation indicator (BELOW) combined with priceDropPercentage.
  • 🔍 Competitor inventory monitoring — track stock levels, aging inventory, and price adjustments across competing dealerships.
  • 🇪🇺 Cross-border vehicle arbitrage — identify export/import margin opportunities between Poland, Germany, and neighboring European markets.
  • 🛡️ Government registry compliance — filter for authenticated vehicles verified against Poland's official CEPiK database.

✨ Key Features & Capabilities

  • ✅ Scrape Any Filtered Search URL — configure filters directly on Otomoto (price range, year, mileage, fuel type, transmission, body type, voivodeship) and paste the URL.
  • ✅ Automated Deep Pagination — automatically iterates through ?page=N, collecting hundreds or thousands of adverts with sticky session management.
  • ✅ Granular Vehicle Specifications — extracts make, model, version, production year, odometer mileage (km), fuel type, gearbox, engine displacement (cm³), and engine power (KM/HP).
  • ✅ Full Financial Transparency — captures numerical asking price, currency, gross/net indicator, and seller discount percentages.
  • ✅ Dealer & Commercial Attribution — flags professional dealers versus private sellers, extracting dealer names and official website links for B2B outreach.
  • ✅ CEPiK Verification Status — records whether a vehicle's VIN and registration history have been validated against Poland's national vehicle registry.
  • ✅ Complete Raw Specs Map — provides a nested specs dictionary capturing every custom attribute and accessory parameter declared on the listing.
  • ✅ Zero Duplicate Guarantee — internal tracking de-duplicates listings by advert ID so each car appears exactly once.
  • ✅ Unlimited 1,000+ Deep Scalability — set maxItems: 0 for unlimited extraction; collect all available adverts across Poland.

🎯 Use cases

1. Used-Car Dealerships & Inventory Pricing

Dealerships benchmark their lot inventory against live regional competition. Compare asking prices for a 2021 BMW 3 Series with 80,000 km across the Masovian or Lesser Poland voivodeships to price vehicles competitively for fast turnover.

2. Automotive Reselling & Cross-Border Arbitrage

Professional car buyers spot mispriced vehicles instantly. By filtering for listings marked with priceEvaluation: "BELOW" and priceDropPercentage > 5, traders identify profitable opportunities for domestic resale or export to neighboring EU countries.

3. B2B Automotive Lead Generation

SaaS platforms, detailing suppliers, warranty providers, and auto-finance brokers build comprehensive lists of Polish dealerships. Filtering results by sellerType == "dealer" extracts dealer names and direct website links for sales outreach.

4. Data Science & Machine Learning Valuation Models

Fintech lenders and insurance underwriters train predictive vehicle valuation algorithms on structured datasets containing millions of historical asking prices, engine specs, and mileage data points.


📥 Input Parameters

Paste one or more Otomoto listing URLs. Running with default settings executes a fast demo across live BMW listings.

FieldTypeDescriptionDefaultPrefill
startUrlsArrayOtomoto.pl search URLs — category, make, model, or filtered search URL.[][{ "url": "https://www.otomoto.pl/osobowe/bmw" }]
maxItemsIntegerMaximum adverts to collect per URL. Set to 0 for unlimited pagination.0100
proxyConfigurationObjectApify Proxy configuration (datacenter proxies work smoothly).{ "useApifyProxy": true }{ "useApifyProxy": true }

Example Input Configuration

{
"startUrls": [
{ "url": "https://www.otomoto.pl/osobowe/bmw" },
{ "url": "https://www.otomoto.pl/osobowe/audi/a4" }
],
"maxItems": 250,
"proxyConfiguration": { "useApifyProxy": true }
}

📤 Output Dataset & Field Specification

Each dataset item represents a unique vehicle listing on Otomoto.pl. Numerical values are cleanly typed as integers or floats.

Real Output Sample

{
"id": "6151465267",
"title": "BMW Seria 4 420d xDrive Sport-Aut M Sport",
"shortDescription": "M Sport | Gwarancja BMW | Laserlight | Driving Assistant Pro | xDrive",
"url": "https://www.otomoto.pl/osobowe/oferta/bmw-seria-4-ID6IiW7J.html",
"createdAt": "2026-11-01T14:54:48Z",
"price": 55350,
"currency": "PLN",
"isGross": false,
"make": "BMW",
"model": "Seria 4",
"version": "420d xDrive Sport-Aut M Sport",
"year": 2023,
"mileage": 92560,
"fuelType": "Diesel",
"gearbox": "Automatyczna",
"engineCapacity": 1995,
"enginePower": 190,
"bodyType": null,
"color": null,
"doorCount": null,
"countryOrigin": "Niemcy",
"city": "Kraków",
"region": "Małopolskie",
"sellerType": "dealer",
"sellerName": "KB Automotive",
"sellerWebsite": "https://kbautomotive.otomoto.pl",
"priceEvaluation": "NONE",
"cepikVerified": false,
"priceDropPercentage": null,
"thumbnail": "https://ireland.apollo.olxcdn.com/v1/files/zp6ldww1u0xk1-OTOMOTOPL/image;s=320x240",
"specs": {
"make": "BMW",
"model": "Seria 4",
"version": "420d xDrive Sport-Aut M Sport",
"year": "2023",
"mileage": "92560 km",
"fuel_type": "Diesel",
"gearbox": "Automatyczna",
"engine_capacity": "1995 cm3",
"engine_power": "190 KM",
"country_origin": "Niemcy"
},
"scrapedAt": "2026-11-10T16:47:00.000Z"
}

Field Breakdown & Data Coverage

🚗 Vehicle Identity & Technical Specifications
FieldTypeDescriptionCoverage
idStringUnique Otomoto listing ID (de-duplication key).🟢 High (100%)
titleStringCommercial advert headline title.🟢 High (100%)
makeStringVehicle manufacturer (e.g. BMW, Audi, Toyota).🟢 High (100%)
modelStringVehicle model line (e.g. Seria 3, A4, Corolla).🟢 High (100%)
versionStringTrim and package version (e.g. M Sport, S-Line).🟢 High (75%)
yearIntegerManufacturing year (e.g. 2022).🟢 High (100%)
mileageIntegerOdometer reading in kilometers.🟢 High (100%)
fuelTypeStringFuel type (Benzyna, Diesel, Hybryda, Elektryczny).🟢 High (100%)
gearboxStringTransmission type (Manualna or Automatyczna).🟢 High (100%)
engineCapacityIntegerEngine displacement in cubic centimeters (cm³).🟢 High (96%)
enginePowerIntegerEngine power rating in metric horsepower (KM).🟢 High (98%)
countryOriginStringCountry of initial registration (e.g. Niemcy, Polska).🟢 High (72%)
💰 Pricing & Market Intelligence
FieldTypeDescriptionCoverage
priceIntegerListed asking price in currency units.🟢 High (100%)
currencyStringISO currency code (typically PLN).🟢 High (100%)
isGrossBooleanWhether price includes VAT (true=Gross, false=Net).🟢 High (95%)
priceEvaluationStringOtomoto deal rating: BELOW, IN, ABOVE, or NONE.🟢 High (100%)
priceDropPercentageFloatReduction percentage if the price was discounted.🟡 Conditional (12%)
🏢 Seller & Lead Generation Attributes
FieldTypeDescriptionCoverage
sellerTypeStringSeller classification: dealer or private.🟢 High (100%)
sellerNameStringCommercial dealership or company name.🟡 When Dealer (92%)
sellerWebsiteStringDealership website URL for business outreach.🟡 When Dealer (85%)
cityStringCity where the vehicle is located.🟢 High (100%)
regionStringPolish voivodeship / province (e.g. Mazowieckie).🟢 High (100%)
cepikVerifiedBooleanValidated against Poland's official CEPiK registry.🟢 High (100%)
urlStringDirect canonical URL to the advert.🟢 High (100%)
thumbnailStringPrimary photograph image URL.🟢 High (98%)
specsObjectKey-value dictionary of all advert parameters.🟢 High (100%)
scrapedAtStringISO 8601 extraction timestamp.🟢 High (100%)

🔁 Pagination & Unlimited Scale

The Otomoto.pl Scraper is engineered for high-volume automotive data ingestion:

  • 1,000+ Adverts via Deep Pagination: Setting maxItems: 0 removes all caps, allowing you to scrape 1,000, 5,000, or 10,000 listings across dozens of search result pages seamlessly.
  • Sticky Session Consistency: Automatically pairs cookie sessions and sticky proxy URLs for each query URL, preventing pagination resets and duplicate page reads.
  • Fast HTTP Execution: Employs lightweight HTTP requests without headless browser overhead, completing hundreds of listings in seconds.
  • Fast Prefill Performance: Standard prefill verification runs complete in under 25 seconds for rapid testing.

💻 Integration & API Usage

Integrate Polish used-car listings directly into your Python, JavaScript, or data warehouse pipelines.

Python SDK Example

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run_input = {
"startUrls": [{"url": "https://www.otomoto.pl/osobowe/volkswagen/golf"}],
"maxItems": 100,
}
run = client.actor("haketa/otomoto-scraper").call(run_input=run_input)
for car in client.dataset(run["defaultDatasetId"]).iterate_items():
print(f"{car['title']} - {car['year']} - {car['price']} {car['currency']} - Rating: {car['priceEvaluation']}")

Node.js SDK Example

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('haketa/otomoto-scraper').call({
startUrls: [{ url: 'https://www.otomoto.pl/osobowe/toyota' }],
maxItems: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Scraped ${items.length} cars:`, items);

cURL API Trigger

curl --request POST \
--url "https://api.apify.com/v2/acts/haketa~otomoto-scraper/runs?token=YOUR_APIFY_TOKEN" \
--header "Content-Type: application/json" \
--data '{
"startUrls": [{"url": "https://www.otomoto.pl/osobowe/bmw"}],
"maxItems": 50
}'

🛠️ Troubleshooting & Common Edge Cases

Issue / SymptomProbable CauseRecommended Resolution
URL returns 0 advertsInvalid URL or zero listings match applied search filtersVerify URL loads in a standard browser. Ensure the URL starts with https://www.otomoto.pl/.
Incomplete specs dictionarySeller did not specify optional vehicle equipmentThe scraper extracts all available parameters; missing equipment fields remain omitted.
Incomplete dealer website linkDealer does not maintain an external domainDealerships on Otomoto often host their portal directly at subdomain.otomoto.pl; exact URLs are captured.
sellerWebsite is nullListing posted by a private individualOnly commercial car dealerships have dedicated website URLs; private sellers do not.
Missing bodyType or colorAttribute only declared on secondary pageThe scraper captures all search-level parameters. Search results often leave body type to the specs map.
Page pagination loop ends earlySearch result set ended (no further matching listings)The scraper automatically halts when it reaches the final available page or two consecutive empty batches.

🔬 Data Processing & Analysis Examples

Identify Below-Market Deals with Pandas

import pandas as pd
# Load scraped Otomoto listings dataset
df = pd.read_csv("otomoto_cars.csv")
# Filter for bargains with price evaluation BELOW market
bargains = df[
(df["priceEvaluation"] == "BELOW") &
(df["price"].notna()) &
(df["year"] >= 2020)
].sort_values(by="price", ascending=True)
print(f"Discovered {len(bargains)} below-market deals:")
print(bargains[["title", "year", "mileage", "price", "city", "sellerName"]].head(10))

Extract Dealership Leads with jq

# Extract dealership business names and website links
cat dataset.json | jq -r '.[] | select(.sellerType == "dealer" and .sellerWebsite != null) | "\(.sellerName)\t\(.sellerWebsite)\t\(.city)"' | sort -u > dealers_poland.tsv

💡 Best Practices & Pro Tips

  • 🔍 Configure Filters on Otomoto First: Open otomoto.pl, set your desired price ranges, fuel types, and regions, then copy and paste the final URL into startUrls.
  • 📊 Target Arbitrage Opportunities: Filter your dataset on priceDropPercentage > 10 to find sellers motivated to negotiate or liquidate inventory.
  • 🏢 B2B Dealership Lists: To generate B2B dealer sales lists, filter for sellerType == "dealer" and extract sellerName, sellerWebsite, and region.
  • 🛡️ Prioritize CEPiK Verified: Filter on cepikVerified == true when looking for trustworthy listings with verified mileage and vehicle history.

❓ Frequently Asked Questions

Do I need an Otomoto account or API key?
No. The scraper accesses publicly available listing data without requiring an account, login, or commercial API subscription.

How many cars can I scrape in one run?
There is no hard limit. By setting maxItems: 0 (unlimited), you can paginate through thousands of vehicles across any search URL.

Which vehicle categories are supported?
All categories on Otomoto are supported, including passenger cars (/osobowe), delivery vans (/dostawcze), trucks (/ciezarowe), and motorcycles (/motocykle).

What does Otomoto's price evaluation mean?
Otomoto evaluates asking prices against historical market data: BELOW indicates a price below market average, IN is aligned with market norms, ABOVE represents a premium price, and NONE indicates insufficient comparable data.

Can I run this actor on an automated schedule?
Yes. Configure an Apify Schedule (e.g. daily at 08:00 UTC) to monitor price drops, new arrivals, and sold inventory over time.

Are electric and hybrid cars supported?
Yes. Otomoto indexes pure electric vehicles (Elektryczny), plug-in hybrids, and conventional hybrids under the fuelType attribute alongside petrol (Benzyna) and diesel (Diesel).

How are gross and net vehicle prices differentiated?
The isGross boolean indicates whether the published price includes VAT (common for private consumer sales) or is quoted net of VAT (common for commercial leasing and corporate inventory).

Does this scraper extract dealer phone numbers?
To ensure high speed and low bandwidth consumption, the scraper collects search-level data including dealer names and website URLs. Direct phone numbers masked behind click-to-reveal prompts on detail pages are not captured.


🔗 Complementary Automotive & Commercial Scrapers


📋 Changelog

  • v1.2 (2026-11):
    • 🚀 Unlocked 1,000+ Deep Pagination: Enabled maxItems: 0 for unlimited advert collection across result pages.
    • ⚡ Optimized Prefill Execution: Fast sample test run completes in <25s across live listings.
    • 🧼 Clean Output Schema Compliance: Strict string-typed output schema for seamless CSV, Excel, and API consumption.
  • v1.1 (2026-08):
    • Added CEPiK government vehicle registry verification extraction.
    • Enhanced dealer attribution with business name and website URL lead generation.
  • v1.0 (2026-05):
    • Initial release with Next.js urql state extraction, sticky session pagination, and price evaluation indicators.
⌂ 换网址