# OLX.pl Scraper | Listings, Prices & Seller Data (`solidcode/olx-pl-scraper`) Actor

\[💰 $3.0 / 1K] Scrape OLX.pl classified ads at scale. Extract titles, prices, locations, seller info, photos, descriptions, and category attributes from any keyword, category, or search URL on Poland's largest marketplace.

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

## Pricing

from $3.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.

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

## OLX.pl Scraper

Pull classified ads from OLX.pl — Poland's largest marketplace — at scale across cars, real estate, electronics, furniture, fashion, jobs, and 15 top-level categories. Type a keyword like "iphone", pick a category and voivodeship, or paste any OLX.pl search, category, or ad URL, and get back the price, full location, seller, photos, description, and category-specific attributes for every listing. Built for resellers, market analysts, and lead-gen teams who need a clean, structured OLX.pl dataset without copying ads one page at a time.

### Why This Scraper?

- **Real classifieds schema, not a forced e-commerce template** — every row carries `sellerType` (private vs. business), `sellerName`, `sellerId`, and `sellerRegisteredAt`, so you know exactly who is selling. No empty SKU/GTIN/in-stock columns bolted onto a marketplace that never fills them.
- **Plain-text keyword search** — type "fotel" or "iPhone 15" and the actor builds the OLX query for you. Run several keywords in one go; ads matching more than one are deduplicated by ad ID.
- **8 filter dimensions pushed into the OLX search** — 15 top-level categories, 16 Polish voivodeships, PLN price floor and ceiling, seller type, item condition (new/used), and 4 sort orders. You only collect ads that match, never client-side throwaway.
- **Voivodeship-level location on every ad** — region (województwo), city, and district broken out as separate fields, plus latitude/longitude on big-city listings.
- **Flexible `params` attribute map** — mileage, year, and fuel for cars; area m² and rooms for property; size and brand for fashion — OLX's category-specific fields captured as clean key/value pairs instead of being dropped.
- **Posted and refreshed timestamps** — `postedAt` and `refreshedAt` on every ad, so you can sort by recency or track how often a seller bumps a listing.
- **Paste-a-URL power mode** — already filtered a search in your browser? Drop the OLX.pl URL into Start URLs and the actor honours every filter in it; individual ad URLs work too.
- **Up to 1,000 ads per query** — hits OLX's own per-search ceiling with smooth pagination, deduplicating the promoted ads OLX blends into every page.
- **No compute charges** — you only pay per result returned.

### Use Cases

**Market Research & Price Monitoring**
- Track the going rate for a product category over time across Poland
- Compare asking prices between private sellers and dealers for the same model
- Spot pricing gaps and arbitrage opportunities region by region
- Measure supply by voivodeship for any keyword or category

**Reselling & Sourcing**
- Find underpriced cars, electronics, or furniture filtered by condition and price band
- Monitor newest-first listings to be first to contact a seller
- Source inventory in a single region with the voivodeship filter
- Filter to private sellers only to avoid dealer markups

**Lead Generation & B2B**
- Build contact lists of businesses advertising on OLX for B2B outreach
- Identify active dealers in a category by filtering to business sellers
- Target sellers in a specific voivodeship or city

**Data Enrichment & Analytics**
- Populate internal databases with Polish second-hand market data
- Feed live OLX listings into pricing dashboards and comparison tools
- Enrich product catalogues with real-world resale valuations

**Research & Journalism**
- Study Poland's classifieds economy at scale
- Analyse regional supply-and-demand patterns by region
- Investigate category-level pricing and seller behaviour

### Getting Started

#### Keyword Search

The simplest way to start — just type what you are looking for:

```json
{
    "searchQueries": ["iphone"],
    "maxResults": 100
}
````

#### Category & Region with Price Range

Narrow a vertical to one voivodeship and a budget:

```json
{
    "searchQueries": ["fotel biurowy"],
    "category": "dom-ogrod",
    "region": "mazowieckie",
    "priceMin": 100,
    "priceMax": 500,
    "sortBy": "newest",
    "maxResults": 300
}
```

#### Paste an OLX.pl URL

Already filtered a search in your browser? Paste the URL directly:

```json
{
    "startUrls": [
        "https://www.olx.pl/motoryzacja/samochody/",
        "https://www.olx.pl/elektronika/telefony/?search%5Bfilter_float_price%3Afrom%5D=200"
    ],
    "maxResults": 500
}
```

#### Advanced: Filtered Multi-Keyword Run

```json
{
    "searchQueries": ["bmw e46", "audi a4 b7"],
    "category": "motoryzacja",
    "region": "slaskie",
    "priceMin": 5000,
    "priceMax": 25000,
    "sellerType": "private",
    "condition": "used",
    "sortBy": "price-asc",
    "maxResults": 1000
}
```

### Input Reference

#### Search

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `searchQueries` | string\[] | `[]` | Keywords to search on OLX.pl (Polish or English). Each keyword runs as its own search; ads matching more than one are deduplicated by ad ID. Leave empty to collect the unfiltered listing for the chosen category and region. |
| `category` | select | `All categories` | Limit to one top-level OLX category: All categories, Motors (Motoryzacja), Real Estate (Nieruchomości), Jobs (Praca), Electronics (Elektronika), Home & Garden (Dom i Ogród), Fashion (Moda), Agriculture (Rolnictwo), Animals (Zwierzęta), For Kids (Dla Dzieci), Sport & Hobby (Sport i Hobby), Music & Education (Muzyka i Edukacja), Services (Usługi), Rentals (Wypożyczalnia), Accommodation (Noclegi), or Free / Giveaway (Oddam za darmo). |
| `region` | select | `All of Poland` | Restrict to a single Polish voivodeship (województwo) — all 16 are available, from Dolnośląskie to Zachodniopomorskie — or leave on All of Poland to search nationwide. |

#### Filters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `priceMin` | integer | — | Only include ads priced at or above this amount in Polish złoty (PLN). Leave empty for no minimum. |
| `priceMax` | integer | — | Only include ads priced at or below this amount in Polish złoty (PLN). Leave empty for no maximum. |
| `sellerType` | select | `All sellers` | Filter by who is selling: All sellers, Private sellers only (Osoby prywatne), or Businesses only (Firmy). |
| `condition` | select | `Any condition` | Filter by item condition: Any condition, New (Nowe), or Used (Używane). This is a category-specific OLX filter — pair it with a keyword or a goods category for it to take effect. On an all-categories browse with no keyword, OLX ignores it. |
| `sortBy` | select | `Most relevant` | Order in which to collect results: Most relevant (default), Newest first, Cheapest first, or Most expensive first. |

#### Advanced Search

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `startUrls` | string\[] | `[]` | Paste OLX.pl URLs directly — search-result pages, category pages, or individual ad pages. When provided, these override the Search Keywords, Category, Region, and Filters fields above. |

#### Limits

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `maxResults` | integer | `100` | Maximum number of ads to collect across all searches and URLs. Set to 0 for no cap (an internal safety limit of 100,000 still applies). Results are collected in full pages, so the final page of each search may overshoot by a few rows. |

### Output

Each ad is saved as one row in your dataset. Here is a representative car listing:

```json
{
    "id": "987654321",
    "url": "https://www.olx.pl/d/oferta/bmw-e46-320i-2003-CID5-ID1aibNd.html",
    "title": "BMW E46 320i 2003 — zadbany, serwisowany",
    "description": "Sprzedam BMW E46 320i, rok 2003. Auto zadbane, regularnie serwisowane...",
    "price": 12500.0,
    "currency": "PLN",
    "priceText": "12 500 zł",
    "negotiable": true,
    "category": "Samochody osobowe",
    "categoryId": 81,
    "region": "Śląskie",
    "city": "Katowice",
    "district": "Śródmieście",
    "latitude": 50.2599,
    "longitude": 19.0216,
    "sellerName": "Marek",
    "sellerType": "private",
    "sellerId": "12345678",
    "sellerRegisteredAt": "2017-03-12T09:41:00+01:00",
    "condition": "Używane",
    "imageUrl": "https://ireland.apollo.olxcdn.com/v1/files/abc123/image;s=800x600",
    "imageUrls": [
        "https://ireland.apollo.olxcdn.com/v1/files/abc123/image;s=800x600",
        "https://ireland.apollo.olxcdn.com/v1/files/def456/image;s=800x600"
    ],
    "params": {
        "make": "BMW",
        "model": "E46",
        "year": "2003",
        "mileage": "198000 km",
        "fuel_type": "Benzyna",
        "gearbox": "Manualna"
    },
    "postedAt": "2026-05-26T14:08:00+02:00",
    "refreshedAt": "2026-05-27T08:30:00+02:00",
    "isPromoted": false,
    "searchQuery": "bmw e46",
    "sourceUrl": null,
    "scrapedAt": "2026-05-28T10:15:00+00:00"
}
```

#### Core Fields

| Field | Type | Description |
|-------|------|-------------|
| `id` | string | Unique OLX ad identifier |
| `url` | string | Direct link to the ad page |
| `title` | string | Ad title as shown on OLX |
| `description` | string | Full ad description, stripped to plain text |
| `condition` | string | Item condition ("Nowe" / "Używane"), when OLX exposes it |
| `params` | object | Category-specific attributes as key/value pairs (car mileage/year/fuel, property area/rooms, fashion size/brand, etc.) |
| `isPromoted` | boolean | `true` if the ad is a promoted / highlighted listing |
| `postedAt` | string | When the ad was posted (ISO timestamp) |
| `refreshedAt` | string | When the seller last refreshed the ad (ISO timestamp) |
| `scrapedAt` | string | ISO timestamp of data extraction |

#### Price

| Field | Type | Description |
|-------|------|-------------|
| `price` | number | Numeric price in PLN (null for free or exchange ads) |
| `currency` | string | Currency code (usually `"PLN"`) |
| `priceText` | string | Raw price label as shown ("12 500 zł", "Za darmo", "Zamienię") |
| `negotiable` | boolean | `true` if the price is marked negotiable ("do negocjacji") |

#### Category & Location

| Field | Type | Description |
|-------|------|-------------|
| `category` | string | Category name (e.g. "Samochody osobowe") |
| `categoryId` | number | OLX internal category ID |
| `region` | string | Voivodeship / region (województwo) |
| `city` | string | City |
| `district` | string | District or neighbourhood (big-city listings) |
| `latitude` | number | Listing latitude (when exposed) |
| `longitude` | number | Listing longitude (when exposed) |

#### Seller

| Field | Type | Description |
|-------|------|-------------|
| `sellerName` | string | Seller display name |
| `sellerType` | string | `"private"` or `"business"` |
| `sellerId` | string | Seller account identifier |
| `sellerRegisteredAt` | string | When the seller joined OLX |

#### Photos & Provenance

| Field | Type | Description |
|-------|------|-------------|
| `imageUrl` | string | Main photo URL |
| `imageUrls` | array | All photo URLs for the ad |
| `searchQuery` | string | The keyword that produced this row |
| `sourceUrl` | string | The search or category URL that produced this row |

### Tips for Best Results

- **Search in Polish for the most results** — OLX is a Polish marketplace. Use "fotel" instead of "armchair" or "mieszkanie" instead of "apartment" to match how sellers title their ads.
- **Break past the 1,000-ad ceiling** — OLX caps a single search or URL at 1,000 ads regardless of how many exist. To gather more, split one broad search into several narrower ones: run separate keywords, categories, regions, or price bands. Each one gets its own 1,000-ad budget, so three price bands triple your reach.
- **Filter to private sellers** for second-hand sourcing, or to businesses for dealer and B2B lists — `sellerType` is pushed into the OLX query, so you only pull the side you want.
- **Use Newest first** when monitoring fresh listings as they appear, and **Cheapest first** to surface the best deals at the top of your results.
- **Paste filtered URLs from your browser** — apply category, region, and price filters on OLX.pl first, then copy the address bar into Start URLs. The actor honours every filter in the URL.
- **Start small** — run with `maxResults` of 50–100 to confirm the data matches your needs, then scale up.
- **Read the `params` map per category** — a car carries mileage and year, an apartment carries area and rooms; the keys differ by category, so inspect a sample row before building downstream logic.

### Pricing

**$3.00 per 1,000 results** — pay only for the ads you collect, with no minimum.

| Results | Estimated Cost |
|---------|----------------|
| 100 | $0.30 |
| 1,000 | $3.00 |
| 10,000 | $30.00 |
| 100,000 | $300.00 |

No compute charges — you only pay per result returned. A "result" is any ad row in the output dataset. Platform fees (storage, data transfer) depend on your Apify plan and are additional.

### Integrations

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

- **Zapier** / **Make** / **n8n** — Trigger workflows automatically when new ads appear
- **Google Sheets** — Export results directly to a spreadsheet for analysis
- **Slack** / **Email** — Get notified when new matching ads are found
- **Webhooks** — Push data to your own systems in real time
- **Apify API** — Full programmatic access to schedule runs and automate pipelines

### Legal & Ethical Use

This actor is designed for legitimate market research, price monitoring, sourcing, and lead generation. Users are responsible for complying with applicable laws and OLX.pl's Terms of Service. Do not use collected data for spam, harassment, or any unlawful purpose, and handle any personal data in line with GDPR and other applicable privacy regulations.

# Actor input Schema

## `searchQueries` (type: `array`):

Keywords to search for on OLX.pl (Polish or English). Each keyword runs as its own search; ads matching more than one keyword are deduplicated by ad ID. Leave empty to collect the unfiltered listing for the chosen category and region.

## `category` (type: `string`):

Limit results to a single top-level OLX category. Leave on 'All categories' to search across everything.

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

Restrict results to a single Polish voivodeship (województwo). Leave on 'All of Poland' to search nationwide.

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

Only include ads priced at or above this amount in Polish złoty (PLN). Leave empty for no minimum.

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

Only include ads priced at or below this amount in Polish złoty (PLN). Leave empty for no maximum.

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

Filter by who is selling — private individuals only, businesses only, or both.

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

Filter by item condition (new or used). This is a category-specific OLX filter, so it works best when paired with a Search Keyword or a goods Category (electronics, fashion, home, etc.). On an all-categories browse with no keyword, OLX ignores it and returns ads of every condition — combine it with a keyword or category for it to take effect.

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

Order in which to collect results from OLX. Newest first gives the most recent ads at the top.

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

Power-user input. Paste OLX.pl URLs directly — search-result pages, category pages (e.g. https://www.olx.pl/motoryzacja/samochody/), or individual ad pages (e.g. https://www.olx.pl/d/oferta/...). When provided, these override the Search Keywords / Category / Region / Filters fields above.

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

Maximum number of ads to collect across all searches and URLs. Set to 0 for no cap (an internal safety limit of 100,000 still applies). Results are collected in full pages, so the final page of each search may overshoot this number by a few rows. Note: OLX caps a single search or URL at 1,000 ads — to gather more, split your search across several keywords, categories, regions, or price ranges (each one gets its own 1,000-ad budget).

## Actor input object example

```json
{
  "searchQueries": [
    "iphone"
  ],
  "category": "all",
  "region": "all",
  "sellerType": "all",
  "condition": "any",
  "sortBy": "relevance",
  "startUrls": [],
  "maxResults": 100
}
```

# Actor output Schema

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

Table of ads with the key fields at a glance — title, price, category, location, seller, posted date, and ad URL.

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

Full per-ad fields including description, photo URLs, seller details, coordinates, category attributes, and timestamps.

# 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 = {
    "searchQueries": [
        "iphone"
    ],
    "category": "all",
    "region": "all",
    "sellerType": "all",
    "condition": "any",
    "sortBy": "relevance",
    "startUrls": [],
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("solidcode/olx-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 = {
    "searchQueries": ["iphone"],
    "category": "all",
    "region": "all",
    "sellerType": "all",
    "condition": "any",
    "sortBy": "relevance",
    "startUrls": [],
    "maxResults": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("solidcode/olx-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 '{
  "searchQueries": [
    "iphone"
  ],
  "category": "all",
  "region": "all",
  "sellerType": "all",
  "condition": "any",
  "sortBy": "relevance",
  "startUrls": [],
  "maxResults": 100
}' |
apify call solidcode/olx-pl-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "OLX.pl Scraper | Listings, Prices & Seller Data",
        "description": "[💰 $3.0 / 1K] Scrape OLX.pl classified ads at scale. Extract titles, prices, locations, seller info, photos, descriptions, and category attributes from any keyword, category, or search URL on Poland's largest marketplace.",
        "version": "1.0",
        "x-build-id": "bTtlO7BaBUQjpje7F"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/solidcode~olx-pl-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-solidcode-olx-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~olx-pl-scraper/runs": {
            "post": {
                "operationId": "runs-sync-solidcode-olx-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~olx-pl-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-solidcode-olx-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": {
                    "searchQueries": {
                        "title": "Search Keywords",
                        "type": "array",
                        "description": "Keywords to search for on OLX.pl (Polish or English). Each keyword runs as its own search; ads matching more than one keyword are deduplicated by ad ID. Leave empty to collect the unfiltered listing for the chosen category and region.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "category": {
                        "title": "Category",
                        "enum": [
                            "all",
                            "motoryzacja",
                            "nieruchomosci",
                            "praca",
                            "elektronika",
                            "dom-ogrod",
                            "moda",
                            "rolnictwo",
                            "zwierzeta",
                            "dla-dzieci",
                            "sport-hobby",
                            "muzyka-edukacja",
                            "uslugi",
                            "wypozyczalnia",
                            "noclegi",
                            "oddam-za-darmo"
                        ],
                        "type": "string",
                        "description": "Limit results to a single top-level OLX category. Leave on 'All categories' to search across everything.",
                        "default": "all"
                    },
                    "region": {
                        "title": "Region (Voivodeship)",
                        "enum": [
                            "all",
                            "dolnoslaskie",
                            "kujawsko-pomorskie",
                            "lubelskie",
                            "lubuskie",
                            "lodzkie",
                            "malopolskie",
                            "mazowieckie",
                            "opolskie",
                            "podkarpackie",
                            "podlaskie",
                            "pomorskie",
                            "slaskie",
                            "swietokrzyskie",
                            "warminsko-mazurskie",
                            "wielkopolskie",
                            "zachodniopomorskie"
                        ],
                        "type": "string",
                        "description": "Restrict results to a single Polish voivodeship (województwo). Leave on 'All of Poland' to search nationwide.",
                        "default": "all"
                    },
                    "priceMin": {
                        "title": "Minimum Price (PLN)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only include ads priced at or above this amount in Polish złoty (PLN). Leave empty for no minimum."
                    },
                    "priceMax": {
                        "title": "Maximum Price (PLN)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only include ads priced at or below this amount in Polish złoty (PLN). Leave empty for no maximum."
                    },
                    "sellerType": {
                        "title": "Seller Type",
                        "enum": [
                            "all",
                            "private",
                            "business"
                        ],
                        "type": "string",
                        "description": "Filter by who is selling — private individuals only, businesses only, or both.",
                        "default": "all"
                    },
                    "condition": {
                        "title": "Condition",
                        "enum": [
                            "any",
                            "new",
                            "used"
                        ],
                        "type": "string",
                        "description": "Filter by item condition (new or used). This is a category-specific OLX filter, so it works best when paired with a Search Keyword or a goods Category (electronics, fashion, home, etc.). On an all-categories browse with no keyword, OLX ignores it and returns ads of every condition — combine it with a keyword or category for it to take effect.",
                        "default": "any"
                    },
                    "sortBy": {
                        "title": "Sort By",
                        "enum": [
                            "relevance",
                            "newest",
                            "price-asc",
                            "price-desc"
                        ],
                        "type": "string",
                        "description": "Order in which to collect results from OLX. Newest first gives the most recent ads at the top.",
                        "default": "relevance"
                    },
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Power-user input. Paste OLX.pl URLs directly — search-result pages, category pages (e.g. https://www.olx.pl/motoryzacja/samochody/), or individual ad pages (e.g. https://www.olx.pl/d/oferta/...). When provided, these override the Search Keywords / Category / Region / Filters fields above.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of ads to collect across all searches and URLs. Set to 0 for no cap (an internal safety limit of 100,000 still applies). Results are collected in full pages, so the final page of each search may overshoot this number by a few rows. Note: OLX caps a single search or URL at 1,000 ads — to gather more, split your search across several keywords, categories, regions, or price ranges (each one gets its own 1,000-ad budget).",
                        "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
