# Otomoto Scraper: Car Listings, Prices & Specs (`polderdata/otomoto-listings-scraper`) Actor

Scrape Otomoto.pl car, van and motorcycle listings (plus Autovit.ro and Standvirtual.com): price, net/gross, price rating, make, model, year, mileage, fuel, engine, location. Every listing once. Export to CSV, JSON or Excel.

- **URL**: https://apify.com/polderdata/otomoto-listings-scraper.md
- **Developed by:** [Polder Data](https://apify.com/polderdata) (community)
- **Categories:** E-commerce, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Otomoto Scraper: Car Listings, Prices & Specs (+ Autovit, Standvirtual)

Scrape **car, van and motorcycle listings from Otomoto.pl** (Poland), plus **Autovit.ro** (Romania) and **Standvirtual.com** (Portugal), from any search URL: make, model, version, year, mileage, fuel, gearbox, engine, **price (gross/net), Otomoto's price rating, price drops**, location, dealer or private seller, and photos. Every page of the search is followed, and every listing is returned **once**. Export to **CSV, JSON or Excel**, or use the data via **API**.

*Scraper ogłoszeń Otomoto: ceny, przebieg, rocznik i ocena ceny do Excel/CSV. · Extrage anunțuri Autovit în Excel. · Extrair anúncios Standvirtual para Excel.*

> Unofficial tool. Not affiliated with, endorsed by or sponsored by Otomoto, Autovit, Standvirtual or OLX Group. It collects only public listing data and **no personal data**: no seller names, phone numbers or profile links (only whether the seller is a dealer or a private person).

### What data you get

| Field | Example | Description |
|---|---|---|
| `adId`, `url`, `title` | `6148088666`, `https://www.otomoto.pl/osobowe/oferta/…html`, `Toyota Corolla 1.8 Hybrid Comfort` | Listing id, link and title |
| `site`, `country`, `category` | `otomoto.pl`, `PL`, `osobowe` | Site and vehicle category (cars, vans, motorcycles…) |
| `make`, `model`, `version` | `Toyota`, `Corolla`, `1.8 Hybrid Comfort` | Vehicle |
| `year`, `mileageKm` | `2024`, `63254` | Production year and mileage |
| `fuelType`, `gearbox` | `hybrid`, `automatic` | Same codes on all three sites (petrol, diesel, hybrid, plugin-hybrid, electric, petrol-lpg, lpg) |
| `engineCapacityCm3`, `enginePowerHp` | `1798`, `140` | Engine |
| `countryOfOrigin` | `pl` | Where the vehicle came from (if given) |
| `price`, `currency` | `87900`, `PLN` | Asking price |
| `priceIsGross`, `priceNet`, `priceGross` | `true`, `null`, `null` | VAT: net and gross price for dealers that issue invoices |
| `priceEvaluation` | `below` | The site's price rating vs. similar vehicles: `below`, `in` or `above` market range |
| `priceDropPercent`, `lowestPriceBeforeDrop` | `6.39`, `93900` | Recent price drop |
| `priceBadges`, `badges` | `["INVOICE_ISSUED"]`, `["LOW_MILEAGE"]` | Labels on the listing |
| `sellerType` | `dealer` | `dealer` or `private` (no names or contacts) |
| `certifiedProgram` | `Toyota Pewne Auto` | Manufacturer certified used-car programme |
| `historyVerified` | `false` | Otomoto: history checked in the CEPIK registry |
| `city`, `region` | `Jasło`, `Podkarpackie` | Location |
| `createdAt` | `2026-10-12T11:58:08Z` | When the listing was created |
| `imageUrl` | `https://ireland.apollo.olxcdn.com/…` | Main photo |
| `parameters` | `{"engine_power": "140", …}` | All specification codes from the results page |
| `searchUrl`, `scrapedAt` | | Your search URL and scrape time (UTC) |

### How to use

1. Open [otomoto.pl](https://www.otomoto.pl), [autovit.ro](https://www.autovit.ro) or [standvirtual.com](https://www.standvirtual.com) and search with the filters you want (make, model, year, price, fuel, region…). Copy the URL of the results page, e.g. `https://www.otomoto.pl/osobowe/toyota/corolla`.
2. Paste one or more URLs into **Search URLs** and set **Maximum number of results**.
3. Click **Start** and download the results as CSV, Excel or JSON, or fetch them via the API.

Example input:

```json
{
    "startUrls": [
        { "url": "https://www.otomoto.pl/osobowe/toyota/corolla" },
        { "url": "https://www.otomoto.pl/osobowe/bmw/seria-3?search%5Bfilter_enum_fuel_type%5D=diesel" },
        { "url": "https://www.standvirtual.com/carros/renault/clio" }
    ],
    "maxItems": 2000
}
```

Cars (`/osobowe`), vans (`/dostawcze`) and motorcycles (`/motocykle-i-quady`) were tested; other Otomoto categories use the same page format.

### Pricing

You pay per listing returned: **$1.50 per 1,000 listings** ($0.0015 each), plus Apify's tiny per-run start fee. 100 listings cost **$0.15**; all ~2,500 Toyota Corollas on Otomoto cost about **$3.75**. Duplicate listings are removed before you are charged. You never pay more than the **Maximum cost per run** you set in the run options.

On the Apify Free plan a run returns at most 100 listings.

### Example output

```json
[
  {
    "adId": "6148088666",
    "url": "https://www.otomoto.pl/osobowe/oferta/toyota-corolla-ID6I4KIq.html",
    "title": "Toyota Corolla 1.8 Hybrid Comfort",
    "site": "otomoto.pl",
    "country": "PL",
    "category": "osobowe",
    "make": "Toyota",
    "model": "Corolla",
    "version": "1.8 Hybrid Comfort",
    "year": 2024,
    "mileageKm": 63254,
    "fuelType": "hybrid",
    "gearbox": "automatic",
    "engineCapacityCm3": 1798,
    "enginePowerHp": 140,
    "countryOfOrigin": "pl",
    "price": 87900,
    "currency": "PLN",
    "priceIsGross": true,
    "priceNet": null,
    "priceGross": null,
    "priceEvaluation": "below",
    "priceDropPercent": 6.39,
    "lowestPriceBeforeDrop": 93900,
    "priceBadges": [
      "INVOICE_ISSUED"
    ],
    "badges": [],
    "sellerType": "dealer",
    "certifiedProgram": "Toyota Pewne Auto",
    "historyVerified": false,
    "city": "Jasło",
    "region": "Podkarpackie",
    "createdAt": "2026-10-12T11:58:08Z",
    "imageUrl": "https://ireland.apollo.olxcdn.com/v1/files/tmwx89ov7f0o2-OTOMOTOPL/image;s=640x480",
    "parameters": {
      "make": "toyota",
      "fuel_type": "hybrid",
      "gearbox": "automatic",
      "country_origin": "pl",
      "mileage": "63254",
      "engine_capacity": "1798",
      "engine_power": "140",
      "model": "corolla",
      "version": "ver-1-8-hybrid-comfort",
      "year": "2024"
    },
    "searchUrl": "https://www.otomoto.pl/osobowe/toyota/corolla",
    "scrapedAt": "2026-10-18T13:56:34.458Z"
  },
  {
    "adId": "6151017567",
    "url": "https://www.otomoto.pl/osobowe/oferta/toyota-corolla-ID6Ih2EL.html",
    "title": "Toyota Corolla",
    "site": "otomoto.pl",
    "country": "PL",
    "category": "osobowe",
    "make": "Toyota",
    "model": "Corolla",
    "version": null,
    "year": 2024,
    "mileageKm": 39053,
    "fuelType": "hybrid",
    "gearbox": "automatic",
    "engineCapacityCm3": 1798,
    "enginePowerHp": 140,
    "countryOfOrigin": null,
    "price": 85000,
    "currency": "PLN",
    "priceIsGross": true,
    "priceNet": null,
    "priceGross": null,
    "priceEvaluation": "below",
    "priceDropPercent": null,
    "lowestPriceBeforeDrop": null,
    "priceBadges": [],
    "badges": [],
    "sellerType": "private",
    "certifiedProgram": null,
    "historyVerified": false,
    "city": "Warszawa",
    "region": "Mazowieckie",
    "createdAt": "2026-10-07T20:32:36Z",
    "imageUrl": "https://ireland.apollo.olxcdn.com/v1/files/25y7lm5gop3n3-OTOMOTOPL/image;s=640x480",
    "parameters": {
      "make": "toyota",
      "fuel_type": "hybrid",
      "gearbox": "automatic",
      "mileage": "39053",
      "engine_capacity": "1798",
      "engine_power": "140",
      "model": "corolla",
      "year": "2024"
    },
    "searchUrl": "https://www.otomoto.pl/osobowe/toyota/corolla",
    "scrapedAt": "2026-10-18T13:56:35.743Z"
  },
  {
    "adId": "6151102769",
    "url": "https://www.otomoto.pl/osobowe/oferta/toyota-corolla-ID6IhoOZ.html",
    "title": "Toyota Corolla 1.8 Hybrid Style",
    "site": "otomoto.pl",
    "country": "PL",
    "category": "osobowe",
    "make": "Toyota",
    "model": "Corolla",
    "version": "1.8 Hybrid Style",
    "year": 2023,
    "mileageKm": 80992,
    "fuelType": "hybrid",
    "gearbox": "automatic",
    "engineCapacityCm3": 1798,
    "enginePowerHp": 140,
    "countryOfOrigin": "pl",
    "price": 102900,
    "currency": "PLN",
    "priceIsGross": true,
    "priceNet": null,
    "priceGross": null,
    "priceEvaluation": "in",
    "priceDropPercent": null,
    "lowestPriceBeforeDrop": null,
    "priceBadges": [
      "INVOICE_ISSUED"
    ],
    "badges": [],
    "sellerType": "dealer",
    "certifiedProgram": "Toyota Pewne Auto",
    "historyVerified": false,
    "city": "Kraków",
    "region": "Małopolskie",
    "createdAt": "2026-10-12T13:36:38Z",
    "imageUrl": "https://ireland.apollo.olxcdn.com/v1/files/pnxlikxmsnqd-OTOMOTOPL/image;s=640x480",
    "parameters": {
      "make": "toyota",
      "fuel_type": "hybrid",
      "gearbox": "automatic",
      "country_origin": "pl",
      "mileage": "80992",
      "engine_capacity": "1798",
      "engine_power": "140",
      "model": "corolla",
      "version": "ver-1-8-hybrid-style",
      "year": "2023"
    },
    "searchUrl": "https://www.otomoto.pl/osobowe/toyota/corolla",
    "scrapedAt": "2026-10-18T13:56:34.458Z"
  },
  {
    "adId": "7060920347",
    "url": "https://www.autovit.ro/autoturisme/anunt/dacia-logan-ID7HQTV3.html",
    "title": "Dacia Logan",
    "site": "autovit.ro",
    "country": "RO",
    "category": "autoturisme",
    "make": "Dacia",
    "model": "Logan",
    "version": null,
    "year": 2021,
    "mileageKm": 30885,
    "fuelType": "petrol",
    "gearbox": null,
    "engineCapacityCm3": 999,
    "enginePowerHp": 90,
    "countryOfOrigin": null,
    "price": 10890,
    "currency": "EUR",
    "priceIsGross": true,
    "priceNet": null,
    "priceGross": null,
    "priceEvaluation": "in",
    "priceDropPercent": null,
    "lowestPriceBeforeDrop": null,
    "priceBadges": [],
    "badges": [],
    "sellerType": "dealer",
    "certifiedProgram": null,
    "historyVerified": false,
    "city": "Bucuresti",
    "region": "Bucuresti",
    "createdAt": "2026-10-12T13:03:26Z",
    "imageUrl": "https://ireland.apollo.olxcdn.com/v1/files/8ygzgi19g3lz2-AUTOVITRO/image;s=640x480",
    "parameters": {
      "make": "dacia",
      "fuel_type": "petrol",
      "mileage": "30885",
      "engine_capacity": "999",
      "engine_power": "90",
      "model": "logan",
      "year": "2021"
    },
    "searchUrl": "https://www.autovit.ro/autoturisme/dacia/logan",
    "scrapedAt": "2026-10-18T13:59:20.068Z"
  },
  {
    "adId": "8097714012",
    "url": "https://www.standvirtual.com/carros/anuncio/renault-clio-ver-1-2-16v-dynamique-ID8Q1bkv.html",
    "title": "Renault Clio 1.2 16V Dynamique",
    "site": "standvirtual.com",
    "country": "PT",
    "category": "carros",
    "make": "Renault",
    "model": "Clio",
    "version": "1.2 16V Dynamique",
    "year": 2010,
    "mileageKm": 137745,
    "fuelType": "petrol",
    "gearbox": "manual",
    "engineCapacityCm3": 1149,
    "enginePowerHp": 75,
    "countryOfOrigin": null,
    "price": 5500,
    "currency": "EUR",
    "priceIsGross": true,
    "priceNet": null,
    "priceGross": null,
    "priceEvaluation": "in",
    "priceDropPercent": null,
    "lowestPriceBeforeDrop": null,
    "priceBadges": [],
    "badges": [
      "WARRANTY"
    ],
    "sellerType": "dealer",
    "certifiedProgram": null,
    "historyVerified": null,
    "city": "Madalena e Samaiões",
    "region": "Vila Real",
    "createdAt": "2026-10-13T13:54:46Z",
    "imageUrl": "https://ireland.apollo.olxcdn.com/v1/files/h9jnvvaq2eti1-STDVTLPT/image;s=640x480",
    "parameters": {
      "make": "renault",
      "version": "ver-1-2-16v-dynamique",
      "model": "clio",
      "fuel_type": "gaz",
      "gearbox": "manual",
      "mileage": "137745",
      "engine_capacity": "1149",
      "engine_power": "75",
      "first_registration_year": "2010"
    },
    "searchUrl": "https://www.standvirtual.com/carros/renault/clio",
    "scrapedAt": "2026-10-18T13:58:42.654Z"
  }
]
```

### Use cases

- **Car dealers and importers:** monitor prices of the models you buy and sell, find listings rated below market, and track price drops.
- **Market research and valuation:** build price/mileage/year datasets per model and region to estimate residual values in Poland, Romania and Portugal.
- **Leasing, insurance and fintech:** feed used-car price models with fresh market data.
- **Daily monitoring:** schedule a run on a search to see new listings and price changes every day.
- **Cross-border arbitrage:** compare the same model across the Polish, Romanian and Portuguese markets.

### Integrations

- **API:** start runs and download results with the [Apify API](https://docs.apify.com/api/v2) or the Apify JavaScript/Python clients.
- **Scheduling:** run daily or hourly with Apify Schedules to follow new listings and price changes.
- **Webhooks:** get notified when a run finishes.
- **Google Sheets, Make, Zapier, n8n:** send results to your tools via Apify integrations.
- **AI agents (MCP):** let Claude, ChatGPT or any MCP client search car listings through the [Apify MCP server](https://mcp.apify.com).

### Limits and FAQ

**Is it legal?** The Actor reads only public search results pages, at a polite rate, and respects the sites' robots.txt. It collects no personal data: no seller names, phone numbers, e-mails or profile links. You are responsible for using the data in line with the sites' terms and applicable law, including the GDPR.

**Do I get every listing of my search?** On Otomoto and Standvirtual, yes: the site's default "relevance" order repeats promoted listings on every page and hides others, so the Actor sorts your search **newest first** (unless you chose a sort order yourself) and returns each listing once — 2,518 of 2,520 Toyota Corollas and 704 of 704 Renault Clios in testing. **Autovit** doesn't allow sorted URLs in its robots.txt, so there the Actor keeps the site's order and reaches about 85 % of the listings of a large search; split big Autovit searches by model or year for full coverage.

**Why did my run fail with "did not recognise"?** Otomoto silently ignores make/model names it doesn't know and shows a much broader search (e.g. all 250,000 cars). The Actor stops instead of charging you for the wrong cars. Set the filters on the site and copy the URL.

**Do I get the full description, equipment or VIN?** No. This Actor reads search results pages (32 listings per request), which keeps it fast and cheap. Use the `url` field to open a listing.

**Gearbox is empty for Autovit.** Autovit's results pages don't show it.

**How fast is it?** About 1,300 listings per minute (2,518 listings in 2 minutes in testing).

**Something broke?** Open an issue on the Issues tab with your input and it will be looked at promptly.

### Changelog / maintained

Last verified working: 2026-10-18 (otomoto.pl cars, vans and motorcycles; autovit.ro; standvirtual.com). See the changelog tab for changes.

# Changelog

This Actor's version history is a separate document: https://apify.com/polderdata/otomoto-listings-scraper/changelog.md

# Actor input Schema

## `startUrls` (type: `array`):

Search results pages from Otomoto (otomoto.pl, Poland), Autovit (autovit.ro, Romania) or Standvirtual (standvirtual.com, Portugal). Search on the site with the make, model, year, price and other filters you want, then copy the URL, e.g. https://www.otomoto.pl/osobowe/toyota/corolla or https://www.otomoto.pl/osobowe/bmw/seria-3?search%5Bfilter_enum_fuel_type%5D=diesel. All result pages are followed automatically. Cars, vans (dostawcze) and motorcycles (motocykle-i-quady) work.

## `maxItems` (type: `integer`):

The run stops after this many listings (32 per results page). You pay per result, so this also caps the cost of a run.

## `proxyConfiguration` (type: `object`):

Optional. Not needed for these sites; enable Apify Proxy only if requests start failing.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.otomoto.pl/osobowe/toyota/corolla"
    }
  ],
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `runSummary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        {
            "url": "https://www.otomoto.pl/osobowe/toyota/corolla"
        }
    ],
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("polderdata/otomoto-listings-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "startUrls": [{ "url": "https://www.otomoto.pl/osobowe/toyota/corolla" }],
    "maxItems": 50,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("polderdata/otomoto-listings-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://www.otomoto.pl/osobowe/toyota/corolla"
    }
  ],
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call polderdata/otomoto-listings-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,polderdata/otomoto-listings-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/oXKaPqMNkDsGeudOw/builds/jqseW6ET86vuEjMdv/openapi.json
