# Otomoto.pl Car Listings Scraper (`solidcode/otomoto-pl-scraper`) Actor

\[💰 $4 / 1K] Extract car listings from Otomoto.pl, Poland's largest auto marketplace — price, make, model, year, mileage, fuel, gearbox, specs, equipment, seller phone, location & photos. Search by make/model, price, year, mileage, fuel, body type & region, or paste any Otomoto URL.

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

## Pricing

from $4.00 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Otomoto.pl Car Listings Scraper

Pull car and vehicle listings from Otomoto.pl — Poland's largest automotive marketplace — at scale: prices with Otomoto's price-rating badge, full specifications, equipment lists, every gallery photo, seller details, CEPiK verification, and map coordinates for each listing. Build a search from plain filters or paste any Otomoto URL — no hand-crafted links required. Built for car dealers, market analysts, valuation teams, and lead-generation specialists who need fresh Polish used-car data without browsing thousands of listings by hand.

### Why This Scraper?

- **Search by plain filters, not raw URLs** — pick make, model, condition, fuel, body, gearbox, seller type, region, and price/year/mileage ranges; the actor builds the Otomoto search for you, so non-technical users never touch a search link.
- **16 Polish voivodeship region filters** — narrow to Mazowieckie, Śląskie, Małopolskie, or any of the 16 regions to target a specific local market.
- **8 fuel types including LPG, CNG, electric, plug-in hybrid, and hydrogen** — go far beyond petrol/diesel to isolate alternative-fuel and EV inventory.
- **10 body-type filters** — sedan, hatchback, estate (kombi), SUV, coupe, convertible, minivan, compact, pickup, and city car.
- **Full vehicle spec extraction** — engine capacity (cc), power (HP), gearbox, transmission, doors, seats, color, first-registration date, and VIN on every detail-enriched listing.
- **Seller contact details including phone number** — dealer/seller name, type (private vs. dealer), seller ID, and the listing's phone number when contact collection is enabled.
- **Every gallery photo at full resolution** — the complete image URL set per listing plus an image count and thumbnail, not just the cover shot.
- **CEPiK verification flag and geo coordinates** — each row carries the official Polish vehicle-registry verification status plus latitude/longitude for mapping and territory analysis.
- **Otomoto price-rating badge and 5 sort orders** — capture Otomoto's own "good/below market" price evaluation, and order results by price, year, mileage, or most recently listed.

### Use Cases

**Dealer Market Research**
- Track competing dealer inventory by make, model, and region
- Benchmark your asking prices against live market listings
- Spot pricing gaps using Otomoto's price-rating badge
- Monitor how fast specific models turn over in a voivodeship

**Price Analysis & Valuation**
- Build used-car valuation models from real listing prices, mileage, and year
- Compare petrol vs. diesel vs. EV pricing across the same model
- Analyze depreciation curves by first-registration date and mileage
- Feed live PLN pricing into appraisal and trade-in tools

**Lead Generation**
- Collect dealer and private-seller contact details for outreach
- Identify dealers carrying high-value or in-demand inventory
- Build targeted seller lists filtered by region and brand
- Find listings without CEPiK verification to offer inspection services

**Inventory Sourcing & Arbitrage**
- Find underpriced cars flagged with a favorable price rating
- Source specific trims, fuel types, or body styles for buyers
- Track newly listed vehicles by sorting on most recently listed
- Locate damaged-condition cars for repair-and-resell operations

**Automotive Research**
- Study EV and hybrid adoption across Polish regions
- Map the fuel-type mix of the Polish used-car market
- Analyze feature and equipment trends by segment
- Track seasonal supply and pricing shifts over time

### Getting Started

#### Search by Make

The simplest run — every listing for a single brand:

```json
{
    "make": "bmw",
    "maxResults": 100
}
````

#### Filtered Market Search

Combine structured filters to target an exact segment:

```json
{
    "make": "audi",
    "model": "a4-avant",
    "condition": "used",
    "fuelType": ["diesel"],
    "bodyType": ["estate"],
    "gearbox": "automatic",
    "region": "mazowieckie",
    "priceMin": 40000,
    "priceMax": 90000,
    "yearMin": 2017,
    "mileageMax": 150000,
    "sortBy": "priceAsc",
    "maxResults": 500
}
```

#### Paste an Otomoto URL

Already have a saved search? Paste the URL and the filters above are ignored:

```json
{
    "startUrls": [
        "https://www.otomoto.pl/osobowe/volkswagen/golf",
        "https://www.otomoto.pl/osobowe/oferta/toyota-corolla-ID6H4abc.html"
    ],
    "includeSellerContacts": true,
    "maxResults": 200
}
```

### Input Reference

#### What to Scrape

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `startUrls` | string\[] | `[]` | Paste one or more Otomoto URLs — a search results page, a brand/category page, or an individual listing. When provided, the search filters below are ignored. |

#### Search Filters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `make` | string | `""` | Car brand, e.g. "bmw", "audi", "volkswagen". Leave empty for all makes. |
| `model` | string | `""` | Exact Otomoto model slug for the chosen make, e.g. "seria-3" (BMW), "golf" (VW), "a4-avant" (Audi). Leave empty for all models; an unrecognized slug returns all listings for the make. |
| `keyword` | string | `""` | Optional free-text term (best effort). For dependable filtering, use make, model, and the structured filters. |
| `condition` | select | `Any` | Any, New, Used, or Damaged. |
| `fuelType` | string\[] | `[]` | One or more of Petrol, Diesel, LPG, Hybrid, Plug-in Hybrid, Electric, CNG, Hydrogen. Empty = all. |
| `bodyType` | string\[] | `[]` | One or more of Sedan, Hatchback, Estate, SUV, Coupe, Convertible, Minivan, Compact, Pickup, City car. Empty = all. |
| `gearbox` | select | `Any` | Any, Manual, or Automatic. |
| `sellerType` | select | `Any` | Any, Private seller, or Dealer / business. |
| `region` | select | `Any region` | Limit to one of 16 Polish voivodeships, or search all of Poland. |

#### Price, Year & Mileage

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `priceMin` | integer | `null` | Lowest price in PLN. Leave empty for no lower bound. |
| `priceMax` | integer | `null` | Highest price in PLN. Leave empty for no upper bound. |
| `yearMin` | integer | `null` | Earliest production year (e.g. 2015). |
| `yearMax` | integer | `null` | Latest production year. |
| `mileageMax` | integer | `null` | Maximum mileage in kilometres. |

#### Output Options

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `sortBy` | select | `Relevance` | Relevance, Price (low/high), Year (newest first), Mileage (low to high), or Recently listed. |
| `includeListingDetails` | boolean | `true` | Enrich each result from its full listing page (complete specs, equipment, all photos, seller location, description). Disable for a faster, lighter run. |
| `includeSellerContacts` | boolean | `false` | Also collect the listing's seller phone number. Slower, because each listing page is opened. |
| `maxResults` | integer | `100` | Total number of listings to return across all searches and URLs. Set to 0 for unlimited (capped at roughly 160,000 per search as a safety limit). |

### Output

Each listing is one flat row in the dataset. Here's a representative result with full details enabled:

```json
{
    "listingId": "6H4abc123",
    "url": "https://www.otomoto.pl/osobowe/oferta/audi-a4-ID6H4abc.html",
    "title": "Audi A4 2.0 TDI S-line Avant Quattro",
    "price": 72900,
    "priceCurrency": "PLN",
    "priceEvaluation": "BELOW",
    "make": "Audi",
    "model": "A4",
    "version": "2.0 TDI",
    "year": 2018,
    "mileage": 142000,
    "fuelType": "Diesel",
    "gearbox": "Automatic",
    "transmission": "AWD",
    "engineCapacity": 1968,
    "enginePower": 190,
    "bodyType": "Estate",
    "color": "Grey",
    "doorCount": 5,
    "seatCount": 5,
    "condition": "Used",
    "vin": "WAUZZZ8K9JA000000",
    "firstRegistration": "2018-03-12",
    "sellerName": "AutoCentrum Warszawa",
    "sellerType": "Dealer",
    "sellerId": "1234567",
    "sellerPhone": "+48 600 000 000",
    "city": "Warszawa",
    "region": "Mazowieckie",
    "latitude": 52.2297,
    "longitude": 21.0122,
    "imageUrls": ["https://ir.otomoto.pl/image1.jpg", "https://ir.otomoto.pl/image2.jpg"],
    "imageCount": 24,
    "thumbnailUrl": "https://ir.otomoto.pl/thumb.jpg",
    "features": ["Navigation system", "Leather seats", "LED headlights"],
    "description": "Pierwszy właściciel, serwisowany w ASO, bezwypadkowy...",
    "isPromoted": true,
    "isHighlighted": false,
    "cepikVerified": true,
    "createdAt": "2026-05-30T09:15:00Z",
    "sourceUrl": "https://www.otomoto.pl/osobowe/audi/a4-avant",
    "scrapedAt": "2026-06-11T14:30:00Z"
}
```

#### Core Fields

| Field | Type | Description |
|-------|------|-------------|
| `listingId` | string | Otomoto listing identifier (stable deduplication key) |
| `url` | string | Canonical listing URL |
| `title` | string | Listing headline |
| `price` | number | Numeric price |
| `priceCurrency` | string | Currency (typically PLN) |
| `priceEvaluation` | string | Otomoto price-rating badge (e.g. below/above market), when present |
| `condition` | string | New, Used, or Damaged |
| `createdAt` | string | Listing publish/update date |
| `sourceUrl` | string | The search or listing URL this row was discovered from |
| `scrapedAt` | string | ISO timestamp of extraction |

#### Vehicle Specs

| Field | Type | Description |
|-------|------|-------------|
| `make` | string | Brand |
| `model` | string | Model |
| `version` | string | Trim / version |
| `year` | integer | Production year |
| `mileage` | integer | Mileage in km |
| `fuelType` | string | Fuel type |
| `gearbox` | string | Manual or Automatic |
| `transmission` | string | Drivetrain (FWD/RWD/AWD), when present |
| `engineCapacity` | integer | Engine displacement in cc |
| `enginePower` | integer | Power in HP |
| `bodyType` | string | Body style |
| `color` | string | Exterior color |
| `doorCount` | integer | Number of doors |
| `seatCount` | integer | Number of seats |
| `vin` | string | VIN, when published |
| `firstRegistration` | string | First registration date |

#### Seller & Location

| Field | Type | Description |
|-------|------|-------------|
| `sellerName` | string | Seller / dealer name |
| `sellerType` | string | Private or Dealer |
| `sellerId` | string | Seller identifier |
| `sellerPhone` | string | Phone number (only when seller contacts are enabled) |
| `city` | string | City |
| `region` | string | Voivodeship |
| `latitude` | number | Latitude |
| `longitude` | number | Longitude |

#### Media & Signals

| Field | Type | Description |
|-------|------|-------------|
| `imageUrls` | string\[] | Full-resolution gallery image URLs |
| `imageCount` | integer | Number of images |
| `thumbnailUrl` | string | Primary thumbnail |
| `features` | string\[] | Equipment / feature list |
| `description` | string | Listing description text (detail mode only) |
| `isPromoted` | boolean | Promoted / featured listing flag |
| `isHighlighted` | boolean | Highlighted listing flag |
| `cepikVerified` | boolean | CEPiK (Polish vehicle registry) verification flag |

### Tips for Best Results

- **Start small** — set `maxResults` to 20–50 on a first run to confirm the data fits your needs, then scale up.
- **Toggle details for speed vs. depth** — set `includeListingDetails` to `false` for a fast price sweep (search-result fields only); set it to `true` for full specs, VIN, equipment, all photos, and seller location.
- **Paste a fully-filtered Otomoto search URL** to mirror an exact saved search — any filter you applied on the website is preserved, and the structured filters are skipped.
- **Phone numbers require detail mode** — enabling `includeSellerContacts` opens each listing page, so combine it with a tight filter and a modest `maxResults` to keep runs efficient.
- **Use `region` to segment by market** — running the same make/model across each voivodeship reveals regional pricing differences that a national search hides.
- **Lean on structured filters over `keyword`** — make, model, fuel, body, and the price/year/mileage ranges are exact; the free-text keyword is best-effort and may not narrow results.
- **Sort by "Recently listed"** to capture fresh inventory first when monitoring a market on a schedule.

### Pricing

**From $4.00 per 1,000 results** — undercuts comparable Otomoto data tools while delivering richer specs, photos, and verified seller details. Bronze, Silver, and Gold subscribers pay progressively less; the table below shows the total cost at each discount tier.

| Results | No discount | Bronze | Silver | Gold |
|---------|-------------|--------|--------|------|
| 100 | $0.48 | $0.45 | $0.425 | $0.40 |
| 1,000 | $4.80 | $4.50 | $4.25 | $4.00 |
| 10,000 | $48.00 | $45.00 | $42.50 | $40.00 |
| 100,000 | $480.00 | $450.00 | $425.00 | $400.00 |

A "result" is any car listing row in the output dataset. No compute or time-based charges — you pay per result, plus a small fixed per-run start fee.

### Integrations

Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:

- **Zapier** / **Make** / **n8n** — Workflow automation
- **Google Sheets** — Direct spreadsheet export
- **Slack** / **Email** — Notifications on new results
- **Webhooks** — Trigger custom APIs on run completion
- **Apify API** — Full programmatic access

### Legal & Ethical Use

This actor is designed for legitimate market research, valuation, and lead generation. You are responsible for complying with applicable laws and Otomoto.pl's Terms of Service. Do not use extracted data for spam, harassment, or any unlawful purpose, and handle any personal data (such as seller contact details) in line with GDPR and local privacy regulations.

# Actor input Schema

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

Paste one or more Otomoto.pl URLs — a search results page, a brand/category page, or an individual listing (e.g. 'https://www.otomoto.pl/osobowe/bmw' or a single car page). When you provide URLs here, the search filters below are ignored. Handy when you already have a saved Otomoto search.

## `make` (type: `string`):

Car brand, e.g. 'bmw', 'audi', 'volkswagen', 'toyota'. Leave empty for all makes.

## `model` (type: `string`):

Exact Otomoto model slug for the chosen make, e.g. 'seria-3' (BMW), 'golf' (Volkswagen), 'a4-avant' (Audi). Copy it from an Otomoto URL. Leave empty for all models. An unrecognized slug returns all listings for the make.

## `keyword` (type: `string`):

Optional free-text term, e.g. 'kombi', 'panorama', 'salon polska'. Best-effort only — Otomoto does not expose a reliable public free-text filter, so this may not narrow results. For dependable filtering, use Make, Model, and the structured filters below. Leave empty to skip.

## `condition` (type: `string`):

Filter by vehicle condition.

## `fuelType` (type: `array`):

Only include cars with one of these fuel types. Leave empty for all fuel types.

## `bodyType` (type: `array`):

Only include cars with one of these body types. Leave empty for all body types.

## `gearbox` (type: `string`):

Transmission type.

## `sellerType` (type: `string`):

Filter listings by who is selling.

## `region` (type: `string`):

Limit results to a Polish voivodeship. Leave as 'Any region' to search all of Poland.

## `priceMin` (type: `integer`):

Only include cars at or above this price, in Polish złoty. Leave empty for no lower bound.

## `priceMax` (type: `integer`):

Only include cars at or below this price, in Polish złoty. Leave empty for no upper bound.

## `yearMin` (type: `integer`):

Only include cars produced in or after this year (e.g. 2015). Leave empty for any age.

## `yearMax` (type: `integer`):

Only include cars produced in or before this year. Leave empty for any age.

## `mileageMax` (type: `integer`):

Only include cars with at most this many kilometres on the clock. Leave empty for any mileage.

## `sortBy` (type: `string`):

How to order the search results. Defaults to Otomoto's relevance ranking.

## `includeListingDetails` (type: `boolean`):

When enabled, every result is enriched from its full listing page (complete specifications, equipment list, all gallery images, seller location, description). Disable for a faster, lighter run that returns only the fields shown on the search results.

## `includeSellerContacts` (type: `boolean`):

When enabled, the actor also collects available dealer/seller phone numbers. This makes the run slower because each listing page must be opened to reveal the contact details.

## `maxResults` (type: `integer`):

Maximum number of car listings to return in total across all searches and URLs. The actor may return a few extra from the final page — it stops requesting new pages once the cap is reached. Set to 0 for unlimited (a single search is then capped at roughly 160,000 listings as a safety limit).

## Actor input object example

```json
{
  "startUrls": [],
  "condition": "any",
  "fuelType": [],
  "bodyType": [],
  "gearbox": "any",
  "sellerType": "any",
  "region": "any",
  "sortBy": "relevance",
  "includeListingDetails": true,
  "includeSellerContacts": false,
  "maxResults": 100
}
```

# Actor output Schema

## `overview` (type: `string`):

Table of car listings with key fields like make, model, year, price, mileage, fuel, and location.

## `details` (type: `string`):

Full per-listing rows including specifications, equipment, seller contacts, coordinates, and images.

# 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": [],
    "make": "",
    "model": "",
    "keyword": "",
    "condition": "any",
    "fuelType": [],
    "bodyType": [],
    "gearbox": "any",
    "sellerType": "any",
    "region": "any",
    "sortBy": "relevance",
    "includeListingDetails": true,
    "includeSellerContacts": false,
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("solidcode/otomoto-pl-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": [],
    "make": "",
    "model": "",
    "keyword": "",
    "condition": "any",
    "fuelType": [],
    "bodyType": [],
    "gearbox": "any",
    "sellerType": "any",
    "region": "any",
    "sortBy": "relevance",
    "includeListingDetails": True,
    "includeSellerContacts": False,
    "maxResults": 100,
}

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

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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": [],
  "make": "",
  "model": "",
  "keyword": "",
  "condition": "any",
  "fuelType": [],
  "bodyType": [],
  "gearbox": "any",
  "sellerType": "any",
  "region": "any",
  "sortBy": "relevance",
  "includeListingDetails": true,
  "includeSellerContacts": false,
  "maxResults": 100
}' |
apify call solidcode/otomoto-pl-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=solidcode/otomoto-pl-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Otomoto.pl Car Listings Scraper",
        "description": "[💰 $4 / 1K] Extract car listings from Otomoto.pl, Poland's largest auto marketplace — price, make, model, year, mileage, fuel, gearbox, specs, equipment, seller phone, location & photos. Search by make/model, price, year, mileage, fuel, body type & region, or paste any Otomoto URL.",
        "version": "1.0",
        "x-build-id": "3ORAlApPhHiFveiyZ"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/solidcode~otomoto-pl-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-solidcode-otomoto-pl-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/solidcode~otomoto-pl-scraper/runs": {
            "post": {
                "operationId": "runs-sync-solidcode-otomoto-pl-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/solidcode~otomoto-pl-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-solidcode-otomoto-pl-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "startUrls": {
                        "title": "Otomoto URLs",
                        "type": "array",
                        "description": "Paste one or more Otomoto.pl URLs — a search results page, a brand/category page, or an individual listing (e.g. 'https://www.otomoto.pl/osobowe/bmw' or a single car page). When you provide URLs here, the search filters below are ignored. Handy when you already have a saved Otomoto search.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "make": {
                        "title": "Make (brand)",
                        "type": "string",
                        "description": "Car brand, e.g. 'bmw', 'audi', 'volkswagen', 'toyota'. Leave empty for all makes."
                    },
                    "model": {
                        "title": "Model",
                        "type": "string",
                        "description": "Exact Otomoto model slug for the chosen make, e.g. 'seria-3' (BMW), 'golf' (Volkswagen), 'a4-avant' (Audi). Copy it from an Otomoto URL. Leave empty for all models. An unrecognized slug returns all listings for the make."
                    },
                    "keyword": {
                        "title": "Keyword (best effort)",
                        "type": "string",
                        "description": "Optional free-text term, e.g. 'kombi', 'panorama', 'salon polska'. Best-effort only — Otomoto does not expose a reliable public free-text filter, so this may not narrow results. For dependable filtering, use Make, Model, and the structured filters below. Leave empty to skip."
                    },
                    "condition": {
                        "title": "Condition",
                        "enum": [
                            "any",
                            "new",
                            "used",
                            "damaged"
                        ],
                        "type": "string",
                        "description": "Filter by vehicle condition.",
                        "default": "any"
                    },
                    "fuelType": {
                        "title": "Fuel Type",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Only include cars with one of these fuel types. Leave empty for all fuel types.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "petrol",
                                "diesel",
                                "lpg",
                                "hybrid",
                                "plugin-hybrid",
                                "electric",
                                "cng",
                                "hydrogen"
                            ],
                            "enumTitles": [
                                "Petrol",
                                "Diesel",
                                "LPG",
                                "Hybrid",
                                "Plug-in Hybrid",
                                "Electric",
                                "CNG",
                                "Hydrogen"
                            ]
                        },
                        "default": []
                    },
                    "bodyType": {
                        "title": "Body Type",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Only include cars with one of these body types. Leave empty for all body types.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "sedan",
                                "hatchback",
                                "estate",
                                "suv",
                                "coupe",
                                "convertible",
                                "minivan",
                                "compact",
                                "pickup",
                                "city-car"
                            ],
                            "enumTitles": [
                                "Sedan",
                                "Hatchback",
                                "Estate (kombi)",
                                "SUV",
                                "Coupe",
                                "Convertible",
                                "Minivan",
                                "Compact",
                                "Pickup",
                                "City car"
                            ]
                        },
                        "default": []
                    },
                    "gearbox": {
                        "title": "Gearbox",
                        "enum": [
                            "any",
                            "manual",
                            "automatic"
                        ],
                        "type": "string",
                        "description": "Transmission type.",
                        "default": "any"
                    },
                    "sellerType": {
                        "title": "Seller Type",
                        "enum": [
                            "any",
                            "private",
                            "dealer"
                        ],
                        "type": "string",
                        "description": "Filter listings by who is selling.",
                        "default": "any"
                    },
                    "region": {
                        "title": "Region (voivodeship)",
                        "enum": [
                            "any",
                            "dolnoslaskie",
                            "kujawsko-pomorskie",
                            "lubelskie",
                            "lubuskie",
                            "lodzkie",
                            "malopolskie",
                            "mazowieckie",
                            "opolskie",
                            "podkarpackie",
                            "podlaskie",
                            "pomorskie",
                            "slaskie",
                            "swietokrzyskie",
                            "warminsko-mazurskie",
                            "wielkopolskie",
                            "zachodniopomorskie"
                        ],
                        "type": "string",
                        "description": "Limit results to a Polish voivodeship. Leave as 'Any region' to search all of Poland.",
                        "default": "any"
                    },
                    "priceMin": {
                        "title": "Minimum Price (PLN)",
                        "minimum": 0,
                        "maximum": 100000000,
                        "type": "integer",
                        "description": "Only include cars at or above this price, in Polish złoty. Leave empty for no lower bound."
                    },
                    "priceMax": {
                        "title": "Maximum Price (PLN)",
                        "minimum": 0,
                        "maximum": 100000000,
                        "type": "integer",
                        "description": "Only include cars at or below this price, in Polish złoty. Leave empty for no upper bound."
                    },
                    "yearMin": {
                        "title": "Minimum Year",
                        "minimum": 1900,
                        "maximum": 2030,
                        "type": "integer",
                        "description": "Only include cars produced in or after this year (e.g. 2015). Leave empty for any age."
                    },
                    "yearMax": {
                        "title": "Maximum Year",
                        "minimum": 1900,
                        "maximum": 2030,
                        "type": "integer",
                        "description": "Only include cars produced in or before this year. Leave empty for any age."
                    },
                    "mileageMax": {
                        "title": "Maximum Mileage (km)",
                        "minimum": 0,
                        "maximum": 2000000,
                        "type": "integer",
                        "description": "Only include cars with at most this many kilometres on the clock. Leave empty for any mileage."
                    },
                    "sortBy": {
                        "title": "Sort By",
                        "enum": [
                            "relevance",
                            "priceAsc",
                            "priceDesc",
                            "yearDesc",
                            "mileageAsc",
                            "createdDesc"
                        ],
                        "type": "string",
                        "description": "How to order the search results. Defaults to Otomoto's relevance ranking.",
                        "default": "relevance"
                    },
                    "includeListingDetails": {
                        "title": "Include full listing details",
                        "type": "boolean",
                        "description": "When enabled, every result is enriched from its full listing page (complete specifications, equipment list, all gallery images, seller location, description). Disable for a faster, lighter run that returns only the fields shown on the search results.",
                        "default": true
                    },
                    "includeSellerContacts": {
                        "title": "Include seller phone numbers",
                        "type": "boolean",
                        "description": "When enabled, the actor also collects available dealer/seller phone numbers. This makes the run slower because each listing page must be opened to reveal the contact details.",
                        "default": false
                    },
                    "maxResults": {
                        "title": "Maximum Results",
                        "minimum": 0,
                        "maximum": 100000,
                        "type": "integer",
                        "description": "Maximum number of car listings to return in total across all searches and URLs. The actor may return a few extra from the final page — it stops requesting new pages once the cap is reached. Set to 0 for unlimited (a single search is then capped at roughly 160,000 listings as a safety limit).",
                        "default": 100
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
