Skip to content
    ↑↓ to choose · Enter to open

    · 12 min read

    Otomoto Car Listings Scraper: 200,000+ Listings Covered (2026)

    By CrawlerBros Engineering Team

    Each record returned by this actor carries 25 fields detailing vehicle specs, listing metadata, and regional seller locations from Otomoto.pl. Data includes make, model, year, price in PLN, mileage, engine details, fuel type, gearbox, city, region, and listing URL extracted directly without requiring login credentials. A run writing 1,000 records costs $5.00 on Apify's free plan, which provides $5.00 in monthly usage with no credit card required. This tool is built for data analysts, dealerships, and market researchers monitoring Polish automotive trends; it is not for buyers who require direct phone numbers or email addresses, as individual seller contact details are not included in the dataset.

    Try it before you read further. Apify's free plan includes $5.00 of usage every month with no credit card, enough for up to 1,000 results at $0.005 each before platform usage. Open Otomoto Car Listings Scraper on Apify and run the prefilled example.

    How reliable is Otomoto Car Listings Scraper in production?

    Across the last 30 days of public runs on the Apify platform, Otomoto Car Listings Scraper recorded 89 runs with the following outcomes.

    Outcome Runs Share
    Succeeded 89 100.0%
    Failed 0 0.0%
    Aborted by the user 0 0.0%
    Timed out 0 0.0%
    Total 89 100.0%

    No run failed or timed out in the last 30 days. Keep a retry and an alert on scheduled runs all the same: a clean month is a record, not a guarantee.

    What does it cost to run Otomoto Car Listings Scraper?

    Each result costs $0.005 on Apify's free plan, which is $5.00 per 1,000 results. Starting a run is charged separately at $0.005 per GB of Actor memory. Apify also bills the platform usage each run consumes, at the rates of your Apify plan, on top of these charges.

    Apify plan Per result Per 1,000 results
    FREE $0.005 $5.00
    BRONZE $0.00433 $4.33
    SILVER $0.00367 $3.67
    GOLD $0.003 $3.00
    PLATINUM $0.003 $3.00
    DIAMOND $0.003 $3.00

    Worked example: collecting 10,000 results costs $50.00 in result charges before run-start fees and platform usage. No run failed or timed out in the last 30 days, so the list price is a fair budget; keep a retry in place all the same.

    The maxItems parameter drives the total cost of a run by limiting how many records are written to the dataset. Optional filtering controls like minPrice, minYear, or fuelType narrow the matching results but do not alter the cost per written item. To evaluate data structure without unnecessary usage, set maxItems to 5 on a first run to verify output fields at a maximum cost of $0.025 in result charges.

    How do you run Otomoto Car Listings Scraper from the API?

    The schema marks 1 of its 13 controls as required: mode. Nothing in the payload below is illustrative. Those are the schema's prefilled defaults for Otomoto Car Listings Scraper, so the request works once your token is in place.

    Call the synchronous endpoint to start a run and receive dataset items in one request:

    curl -X POST "https://api.apify.com/v2/acts/crawlerbros~otomoto-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
      -H "Content-Type: application/json" \
      -d '{"mode":"browse","category":"cars","listingUrls":[],"maxItems":5}'
    

    The same run from Python, using the official client:

    from apify_client import ApifyClient
    
    client = ApifyClient("<YOUR_APIFY_TOKEN>")
    
    run_input = {
      "mode": "browse",
      "category": "cars",
      "listingUrls": [],
      "maxItems": 5
    }
    
    run = client.actor("crawlerbros~otomoto-scraper").call(run_input=run_input)
    
    for item in client.dataset(run["defaultDatasetId"]).iterate_items():
        print(item)
    

    And from Node.js:

    import { ApifyClient } from 'apify-client'
    
    const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' })
    
    const input = {
      "mode": "browse",
      "category": "cars",
      "listingUrls": [],
      "maxItems": 5
    }
    
    const run = await client.actor('crawlerbros~otomoto-scraper').call(input)
    const { items } = await client.dataset(run.defaultDatasetId).listItems()
    console.log(items)
    

    Because the call is synchronous, your client waits for the whole run. Keep it for exploration. For scheduled work, start the run without waiting and collect the dataset afterwards, so network trouble costs you a retry rather than the results.

    Which Otomoto Car Listings Scraper inputs matter, and which can you skip?

    The mode parameter is required and determines search behavior across 'browse', 'byMake', or 'byUrl'. When mode is set to 'byMake', the make control must be provided with a lowercase slug like 'bmw' or 'toyota'. Optional numerical filters like minPrice or minYear should be left unset on initial runs unless specific inventory subsets are needed.

    • mode (string): Scraping mode. Default: "browse".
    • category (string): Type of vehicle to search. Default: "cars".
    • listingUrls (array): List of Otomoto listing page URLs. Default: [].
    • maxItems (integer): Maximum number of vehicle records to emit. Default: 20.
    • make (string): Vehicle make/brand slug (e.g. 'bmw', 'toyota', 'volkswagen', 'ford'). Used when mode=byMake.
    • minPrice (integer): Minimum price in PLN.
    • maxPrice (integer): Maximum price in PLN.
    • minYear (integer): Minimum production year.
    • maxYear (integer): Maximum production year.
    • minMileage (integer): Minimum mileage in kilometres.
    • maxMileage (integer): Maximum mileage in kilometres.
    • fuelType (string): Filter by fuel type.

    The other 1 controls, with their defaults, are listed in the input schema on Otomoto Car Listings Scraper on Apify.

    Fixed-choice controls: mode accepts browse (Browse listings), byMake (Filter by make/brand), byUrl (Specific listing URLs); category accepts cars (Passenger Cars), motorcycles (Motorcycles & Quads), vans (Vans & Delivery), rvs (RVs & Campervans), agricultural (Agricultural Machinery), construction (Construction Machinery); fuelType accepts petrol, diesel, electric, hybrid, petrol-lpg (Petrol + LPG), petrol-cng (Petrol + CNG), ethanol, hydrogen.

    What does Otomoto Car Listings Scraper return?

    Returned records are structured for vehicle pricing analysis, inventory tracking, and regional market comparison in Poland. Every item includes specs like price in PLN, mileageKm, year, engineCapacityCc, city, and region. The dataset does not contain individual seller email addresses or direct phone contact details.

    • listingId: Unique listing ID
    • title: Full listing title
    • make: Vehicle manufacturer
    • model: Vehicle model
    • version: Trim/version name
    • year: Production year
    • price: Price in PLN
    • currency: Currency (PLN)
    • mileageKm: Odometer reading in km
    • engineCapacityCc: Engine displacement in cc
    • enginePowerHp: Engine power in horsepower
    • fuelType: Fuel type (Petrol, Diesel, Electric, etc.)
    • gearbox: Transmission type
    • condition: New / Used / Damaged
    • color: Exterior color
    • city: City where the vehicle is located
    • region: Polish province/region
    • thumbnailUrl: High-resolution thumbnail image URL
    • shortDescription: Short listing description
    • isPremiumTopAd: Whether the listing is a premium promoted ad
    • createdAt: ISO timestamp when the listing was posted
    • listingUrl: Link to full listing page
    • sourceUrl: URL scraped
    • scrapedAt: ISO timestamp
    • recordType: Always vehicle

    These are the documented fields. Optional ones can be empty on a given record, so measure how often each field your deliverable depends on is populated across a real sample before automating the handoff.

    How do you build the workflow end to end?

    Open Otomoto Car Listings Scraper and work through these in order. Each step ends with something to check, so a bad configuration surfaces on a small run rather than a scheduled one.

    1. Select mode by choosing 'browse' for broad filtering, 'byMake' for brand-specific searches, or 'byUrl' to fetch specific pages.
    2. Specify category to filter between cars, motorcycles, vans, rvs, agricultural, or construction.
    3. Set make to a valid lowercase slug like 'bmw' or 'volkswagen' if mode is set to 'byMake'.
    4. Define filtering constraints using minPrice, maxPrice, minYear, maxYear, minMileage, maxMileage, fuelType, and gearbox.
    5. Populate listingUrls with direct Otomoto URLs if mode is set to 'byUrl'.
    6. Set maxItems between 1 and 500 to cap the number of records returned for the run.
    7. Execute the run and review dataset records to ensure non-null fields for listingId, price, and year before automating scheduled executions.

    How do you apply it? Three worked playbooks

    These are Otomoto Car Listings Scraper's own documented use cases, each worked through as an operating pattern rather than a description.

    Use case 1: Automotive market analysis

    Outcome: Compare prices across makes, models, and regions in Poland

    Configure: mode: "byMake", make: "volkswagen", category: "cars", minYear: 2018, maxItems: 100

    Working method: Run the initial collection for a specific make across all regions, then repeat with adjusted make values. Compare price distributions and mileage parameters per region using city and region fields.

    Deliverable: Dataset containing vehicle records with price, region, city, year, and mileageKm across multiple regional markets.

    Stop condition: Stop execution if returned records carry null values in region or price across more than 5 percent of results.

    Use case 2: Price tracking

    Outcome: Monitor used car prices for specific makes or models

    Configure: mode: "browse", category: "cars", fuelType: "diesel", minYear: 2020, maxPrice: 80000, maxItems: 50

    Working method: Schedule daily runs with identical filtering controls to capture listingId, price, and scrapedAt timestamps. Store snapshots over time to measure daily price shifts for target specifications.

    Deliverable: Historical dataset mapping listingId updates against price over time for diesel vehicles.

    Stop condition: Stop execution if consecutive runs return identical listingId records with zero new createdAt timestamps.

    Use case 3: Lead generation

    Outcome: Collect dealer contacts and vehicle listings for business use

    Configure: mode: "browse", category: "vans", minYear: 2015, maxItems: 200

    Working method: Execute a broad crawl across commercial vehicle categories. Extract listingUrl, city, region, and shortDescription fields to gather inventory metadata and dealer location details.

    Deliverable: Structured list of active dealer vehicle postings containing listingUrl, city, shortDescription, and listingId.

    Stop condition: Stop execution if maxItems is reached without population of city or location details in output records.

    What breaks, and how do you design around it?

    • Over the last 30 days, 0.0% of public runs failed and 0.0% timed out. Build retries and alerting around those rates rather than assuming every run completes.

    The maxItems control is capped at 500 records per individual run. To collect larger market segments, split requests into multiple runs segmented by specific year ranges, price brackets, or fuel types using minYear, maxYear, minPrice, and maxPrice. For listings outside Poland, use dedicated market scrapers rather than modifying category filters.

    When should you not use Otomoto Car Listings Scraper?

    Do not use this scraper if your target vehicle inventory is outside Poland, as Otomoto strictly covers the Polish automotive market. If you need vehicle listings from Germany or central Europe, use Mobile De Vehicle Scraper instead. If you need aggregated search results across North American platforms like Cars.com or eBay Motors, AutoTempest Car Listings Scraper is the appropriate tool. Furthermore, do not use this actor if your deliverable requires private personal seller contact information, as the returned dataset contains location and inventory metadata without direct buyer or seller contact info.

    What should you check before trusting the output?

    • Verify that listingId is present and non-empty for every record returned.
    • Confirm that currency evaluates strictly to 'PLN' across all results.
    • Check that price and year fall within the ranges specified by minPrice, maxPrice, minYear, and maxYear.
    • Ensure listingUrl contains a valid web address pointing to the source page.
    • Halt execution if recordType returns anything other than 'vehicle'.

    None of this proves a record is correct. It gives a scheduled Otomoto Car Listings Scraper run defined points where it should stop instead of quietly passing bad data downstream.

    Frequently asked questions

    How much does it cost to run the Otomoto scraper?

    Each result costs $0.005 on Apify's free plan, which comes out to $5.00 per 1,000 results. Apify's free tier provides $5.00 in monthly usage without a credit card, covering up to 1,000 results before run-start fees.

    Is login required to scrape Otomoto listings?

    No. All vehicle details, specs, location data, and pricing fields are retrieved from public state without requiring user accounts or login credentials.

    What currency are listing prices provided in?

    All prices returned by the scraper are strictly in PLN (Polish Zloty), alongside dedicated numeric fields for price and currency.

    How do I filter vehicle searches by brand?

    Set the mode parameter to 'byMake' and enter a valid lowercase brand slug in the make field, such as 'bmw', 'volkswagen', or 'toyota'.

    Can I target categories other than passenger cars?

    Yes. The category control supports 'cars', 'motorcycles', 'vans', 'rvs', 'agricultural', and 'construction' machinery.

    Where to go next

    When you are ready to run it, open Otomoto Car Listings Scraper on Apify; the free plan covers up to 1,000 results a month.

    Start with the Otomoto Car Listings Scraper Actor page for the current input schema, pricing tier, and run history.

    If you are comparing approaches rather than committing to one Actor, these category pages list every option we publish:

    Other Actors we maintain for related data:

    Related guides:

    Resources

    • Actor documentation, input schema, and pricing: verified against the published Actor on 2026-09-27.

    • Actor last updated by its maintainers on 2026-06-07.

    • Run outcome figures cover the 30 day public window ending 2026-09-27.

    • Otomoto Car Listings Scraper on Apify

    Featured actors

    Otomoto Car Listings Scraper

    Scrape vehicle listings from Otomoto.pl - Poland's largest car marketplace with 200,000+ listings. Browse cars, motorcycles, and vans; filter by make, price, year, mileage, and fuel type.

    Run on Apify ↗