# OLX Poland Classifieds Scraper (`automation-lab/olx-poland-classifieds-scraper`) Actor

Scrape listings from OLX.pl — Poland's largest classifieds marketplace. Extract titles, prices, locations, images, and attributes from any category.

- **URL**: https://apify.com/automation-lab/olx-poland-classifieds-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** E-commerce, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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

## OLX Poland Classifieds Scraper 🇵🇱

Extract listings from OLX.pl — Poland's largest classifieds marketplace — without writing a single line of code. Scrape cars, real estate, electronics, jobs, furniture, and more from any category or keyword search.

### What does it do?

OLX Poland Classifieds Scraper uses the OLX.pl public JSON API to collect structured listing data from any category, region, or keyword search. You provide one or more OLX.pl URLs (category pages, search results) or a search query, and the actor returns clean, structured data ready for export to spreadsheets, databases, or downstream integrations.

Each result includes the listing title, price (numeric + formatted label), seller type, location (city, region, GPS coordinates), all listing photos, category-specific attributes (e.g. mileage for cars, floor for apartments), promotion flags, and timestamps — everything visible on the OLX.pl listing card.

### Who is it for?

- 🚗 **Car dealerships and auto traders** monitoring the used-car market in Poland — track prices, availability, and competitor listings
- 🏠 **Real estate analysts and property investors** tracking apartment and house prices across Polish cities
- 🛒 **E-commerce entrepreneurs** sourcing wholesale products, monitoring competitor prices on electronics, clothing, and household goods
- 📊 **Market researchers and data analysts** building price indices or demand datasets for the Polish classifieds market
- 🤖 **Developers and data engineers** building price comparison tools, lead generation pipelines, or inventory trackers powered by OLX.pl data

### Why use OLX Poland Classifieds Scraper?

OLX.pl hosts millions of active listings across dozens of categories and is one of the most visited websites in Poland. The platform doesn't offer a public data export, and manually copying listings is impractical at scale. This actor:

- ✅ Returns **structured JSON** instead of raw HTML — every field is typed and cleaned
- ✅ Handles **pagination automatically** — extract up to 1,000 results per search
- ✅ Supports **all OLX.pl categories** — cars, real estate, jobs, electronics, fashion, pets, and more
- ✅ Accepts **direct OLX.pl URLs** — paste a category URL and the actor detects the right parameters
- ✅ Extracts **all listing attributes** — category-specific params like mileage, fuel type, floor, and number of rooms
- ✅ Provides **GPS coordinates** — map each listing to an exact location
- ✅ Uses **efficient HTTP requests** with no browser overhead — fast and cost-effective

### Data you can extract

| Field | Type | Description |
|-------|------|-------------|
| `id` | number | Unique OLX listing ID |
| `title` | string | Full listing title |
| `description` | string | Listing description (plain text) |
| `price` | number | Numeric price in PLN |
| `currency` | string | Currency (PLN) |
| `priceLabel` | string | Formatted price (e.g. "114 900 zł") |
| `negotiable` | boolean | Whether the price is negotiable |
| `priceArranged` | boolean | Whether price is "do uzgodnienia" (TBD) |
| `city` | string | City where the listing is located |
| `region` | string | Polish province/region |
| `latitude` | number | GPS latitude |
| `longitude` | number | GPS longitude |
| `categoryId` | number | OLX category ID |
| `categoryType` | string | Category type (e.g. automotive, real_estate) |
| `condition` | string | Item condition (Nowe / Używane) |
| `sellerName` | string | Seller display name |
| `isBusiness` | boolean | True if posted by a business |
| `photos` | array | Image URLs (800×600 resolution) |
| `params` | object | Category-specific attributes (mileage, fuel, floor, etc.) |
| `isHighlighted` | boolean | Whether the ad is highlighted (promoted) |
| `isUrgent` | boolean | Whether the ad is marked Urgent |
| `isTopAd` | boolean | Whether the ad is a Top Ad |
| `createdTime` | string | ISO 8601 creation timestamp |
| `lastRefreshTime` | string | ISO 8601 last refresh timestamp |
| `validToTime` | string | ISO 8601 expiry timestamp |
| `url` | string | Direct URL to the listing on OLX.pl |

### How much does it cost to scrape OLX Poland listings?

The actor uses pay-per-result (PPE) pricing. You only pay for the listings you extract.

| Volume | Approximate cost |
|--------|-----------------|
| 100 listings | ~$0.10 |
| 500 listings | ~$0.50 |
| 1,000 listings | ~$1.00 |

The FREE plan on Apify includes $5 of usage per month — enough for approximately **5,000 listings** at no charge. Most users run this actor as part of a scheduled workflow and stay comfortably within the free tier.

Costs are always billed at the per-result rate listed in the actor pricing section. The start event ($0.005) covers infrastructure setup per run regardless of result count.

### How to scrape OLX Poland listings (step by step)

1. **Open the actor** on Apify and click **Try for free** (no credit card required for the free tier).
2. **Paste an OLX.pl URL** into the *Start URLs* field — for example, `https://www.olx.pl/motoryzacja/samochody/` for cars or `https://www.olx.pl/nieruchomosci/mieszkania/` for apartments.
3. Alternatively, type a **search keyword** into the *Search query* field (e.g., `laptop`, `sofa`, `iPhone`).
4. (Optional) Set a **Category ID** to narrow results to a specific subcategory, or a **Region ID** to filter by Polish province.
5. Choose your **sort order** — newest first, recently refreshed, or by price.
6. Set **Max results** (up to 1,000 per run).
7. Click **Start** and wait a few seconds for results.
8. **Download your data** as JSON, CSV, Excel, or HTML from the dataset view.

### Input parameters

#### 🔍 What to scrape

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `startUrls` | array | — | OLX.pl category or search URLs to scrape |
| `searchQuery` | string | — | Keyword search (used when no startUrls provided) |
| `categoryId` | integer | — | OLX category ID for direct filtering |
| `regionId` | integer | — | OLX region ID for geographic filtering |

#### ⚙️ Limits & settings

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `sortBy` | select | `created_at:desc` | Newest / Refreshed / Price ascending / Price descending |
| `maxResults` | integer | 100 | Maximum listings to return (1–1,000) |
| `maxRequestRetries` | integer | 3 | Retry attempts for failed HTTP requests |

**Common OLX category IDs:**

| Category | URL slug | ID |
|----------|----------|----|
| All Motors | motoryzacja | 5 |
| Cars & Motorcycles | motoryzacja/samochody | 658 |
| Real Estate (all) | nieruchomosci | 3 |
| Apartments | nieruchomosci/mieszkania | 14 |
| Houses | nieruchomosci/domy | 15 |
| Electronics | elektronika | 6 |
| Home & Garden | dom-ogrod | 4 |
| Fashion | moda | 87 |
| Sport & Hobby | sport-hobby | 10 |
| Animals | zwierzeta | 20 |

**Polish region IDs:**

| Region | ID |
|--------|----|
| Dolnośląskie | 2 |
| Kujawsko-Pomorskie | 15 |
| Lubelskie | 6 |
| Łódzkie | 9 |
| Małopolskie | 10 |
| Mazowieckie | 11 |
| Podkarpackie | 14 |
| Pomorskie | 5 |
| Śląskie | 17 |
| Wielkopolskie | 7 |

### Output format

Each listing is stored as a JSON object in the default dataset. Example output for a car listing:

```json
{
  "id": 1072603156,
  "url": "https://www.olx.pl/d/oferta/volvo-xc-60-CID5-ID1aAx4U.html",
  "title": "Volvo XC 60 FULLED B4D Pakiet Czerń Kamera Virtual Panorama",
  "description": "Witaj w firmie NEDERLAND AUTO. Rok 2024. Bezwypadkowy 100%. Przebieg autentyczny.",
  "price": 219900,
  "currency": "PLN",
  "priceLabel": "219 900 zł",
  "negotiable": false,
  "priceArranged": false,
  "city": "Warszawa",
  "region": "Mazowieckie",
  "latitude": 52.2297,
  "longitude": 21.0122,
  "categoryId": 1383,
  "categoryType": "automotive",
  "condition": "Używane",
  "sellerName": "NEDERLAND AUTO",
  "isBusiness": true,
  "photos": [
    "https://ireland.apollo.olxcdn.com:443/v1/files/abc123-PL/image;s=800x600"
  ],
  "params": {
    "year": "2024",
    "engine_capacity": "2000 cm3",
    "fuel_type": "Diesel",
    "mileage": "35000 km",
    "color": "Czarny",
    "car_type": "SUV"
  },
  "isHighlighted": true,
  "isUrgent": false,
  "isTopAd": true,
  "createdTime": "2026-05-11T18:22:53+02:00",
  "lastRefreshTime": "2026-05-11T18:22:53+02:00",
  "validToTime": "2026-06-10T18:21:40+02:00"
}
````

### Tips for getting the best results

- 🔗 **Paste OLX URLs directly** — the actor automatically detects the category from the URL for the most common categories
- 📂 **Use Category IDs for precise filtering** — look up the category ID from the table in this README for any OLX subcategory
- 📍 **Combine region filter with keyword** — e.g., search for "mieszkanie" with `regionId: 11` (Mazowieckie) to get Warsaw apartments
- 📄 **OLX caps results at 1,000 per search** — to get more than 1,000 listings from a large category, split your scrape by region or price range
- 🔄 **Schedule runs daily or weekly** to track price changes over time using Apify's scheduler
- 💰 **Use price:asc sort** to find the cheapest listings first — great for bargain hunters
- 🏷️ **Filter promoted vs organic** in post-processing using the `isHighlighted`, `isUrgent`, and `isTopAd` fields

### Integrations

**Export scraped data to spreadsheets:**
Connect the actor to Google Sheets or Airtable via Apify's native integration or Zapier. Every new run automatically appends fresh OLX listings to your spreadsheet.

**Build a price alert pipeline:**
Schedule the actor to run daily, compare prices using Apify's dataset API, and send Slack/email alerts when a listing drops below a target price.

**Feed a real estate dashboard:**
Combine OLX apartment data with a BI tool like Google Looker Studio or Metabase to visualize price trends by city, region, or property type.

**Lead generation for B2B:**
Scrape OLX job listings or business ads to identify companies actively hiring or purchasing in specific categories.

**Power a price comparison site:**
Use the actor as a data source for a consumer-facing price comparison tool for Polish secondhand goods.

### API usage

#### Node.js (Apify client)

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

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });

const run = await client.actor('automation-lab/olx-poland-classifieds-scraper').call({
  startUrls: [{ url: 'https://www.olx.pl/motoryzacja/samochody/' }],
  maxResults: 100,
  sortBy: 'created_at:desc',
});

const dataset = await client.dataset(run.defaultDatasetId).listItems();
console.log(dataset.items);
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run = client.actor("automation-lab/olx-poland-classifieds-scraper").call(run_input={
    "startUrls": [{"url": "https://www.olx.pl/motoryzacja/samochody/"}],
    "maxResults": 100,
    "sortBy": "created_at:desc",
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["title"], item.get("priceLabel"))
```

#### cURL

```bash
## Start the actor run
curl -X POST "https://api.apify.com/v2/acts/automation-lab~olx-poland-classifieds-scraper/runs" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "startUrls": [{"url": "https://www.olx.pl/motoryzacja/samochody/"}],
    "maxResults": 100
  }'

## Fetch results (replace DATASET_ID with the run's defaultDatasetId)
curl "https://api.apify.com/v2/datasets/DATASET_ID/items?token=YOUR_API_TOKEN"
```

### Use with Claude Code and AI assistants (MCP)

You can use this actor directly from Claude Code, Claude Desktop, Cursor, or any MCP-compatible AI assistant:

**Claude Code (terminal):**

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/olx-poland-classifieds-scraper"
```

**Claude Desktop / Cursor / VS Code** — add to your MCP config file:

```json
{
  "mcpServers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=automation-lab/olx-poland-classifieds-scraper",
      "headers": { "Authorization": "Bearer YOUR_API_TOKEN" }
    }
  }
}
```

Once connected, you can ask your AI assistant:

- *"Scrape the 50 newest car listings from OLX Poland and give me a price breakdown"*
- *"Find all apartments under 500,000 PLN in Kraków on OLX"*
- *"What's the average price of a used iPhone 14 on OLX Poland today?"*

### Legality and terms of service

This actor scrapes publicly accessible data from OLX.pl — the same information any visitor can see in their browser. It does not circumvent authentication, scrape private user data, or violate any login-gated content.

Web scraping of publicly available data is generally permissible under Polish and EU law. Users are responsible for complying with OLX.pl's terms of service and applicable data protection regulations (GDPR) when processing personal data such as seller names.

This actor is intended for market research, price analysis, and business intelligence purposes. Do not use it for spam, harassment, or any activity that violates OLX.pl's terms.

### FAQ

**What categories can I scrape?**
All publicly visible OLX.pl categories: cars, motorcycles, real estate (buy/rent), electronics, computers, furniture, clothing, sports, animals, agriculture, jobs, and more. See the category ID table above for the most common ones.

**Why do I get up to 1,000 results maximum?**
OLX.pl's search API limits results to 1,000 per search query. To collect more listings from a large category (e.g., all Polish car listings), split your scrape across multiple searches: by region (use `regionId`), by price range, or by subcategory.

**Why are some listings from unexpected categories?**
OLX.pl's search algorithm may return results from all categories when the query is very broad. Use `categoryId` or more specific Start URLs to filter to a specific category.

**The actor extracted fewer results than I requested — why?**
OLX.pl may have fewer active listings than your `maxResults` limit in that category/query. The actor returns all available results.

**Can I get contact details (phone numbers)?**
OLX.pl hides phone numbers behind a click-to-reveal interaction that requires user authentication. This actor does not extract phone numbers.

**I'm getting an error: "Input schema is not valid"**
Make sure `startUrls` entries are objects with a `url` key: `[{ "url": "https://www.olx.pl/..." }]`, not plain strings.

### Related scrapers

- [automation-lab/amazon-asin-scraper](https://apify.com/automation-lab/amazon-asin-scraper) — Amazon product data for Polish market sellers
- [automation-lab/google-maps-lead-finder](https://apify.com/automation-lab/google-maps-lead-finder) — Local business leads from Google Maps

***

*Built and maintained by [Automation Lab](https://apify.com/automation-lab) — professional web scraping tools for business intelligence.*

# Actor input Schema

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

Paste one or more OLX.pl category or search page URLs (e.g. <code>https://www.olx.pl/motoryzacja/samochody/</code> or <code>https://www.olx.pl/oferty/q-laptop/</code>). Leave empty to use the Search query field instead.

## `searchQuery` (type: `string`):

Keyword to search for across all of OLX.pl. Used when no Start URLs are provided, or combined with a Category ID.

## `categoryId` (type: `integer`):

Numeric OLX.pl category ID to filter results. Leave empty to search all categories. Common IDs: 5 = Motoryzacja, 4 = Dom i Ogród, 6 = Elektronika, 15 = Odzież.

## `regionId` (type: `integer`):

Numeric OLX.pl region ID to filter results by location. Leave empty for nationwide search.

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

Sort order for returned listings.

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

Maximum number of listings to extract. OLX.pl caps search results at 1,000 per query.

## `maxRequestRetries` (type: `integer`):

Number of retry attempts for failed HTTP requests.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.olx.pl/motoryzacja/samochody/"
    }
  ],
  "sortBy": "created_at:desc",
  "maxResults": 20,
  "maxRequestRetries": 3
}
```

# Actor output Schema

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

No description

# API

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

## JavaScript example

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

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

// Prepare Actor input
const input = {
    "startUrls": [
        {
            "url": "https://www.olx.pl/motoryzacja/samochody/"
        }
    ],
    "searchQuery": "",
    "sortBy": "created_at:desc",
    "maxResults": 20,
    "maxRequestRetries": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/olx-poland-classifieds-scraper").call(input);

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

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

```

## Python example

```python
from apify_client import ApifyClient

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

# Prepare the Actor input
run_input = {
    "startUrls": [{ "url": "https://www.olx.pl/motoryzacja/samochody/" }],
    "searchQuery": "",
    "sortBy": "created_at:desc",
    "maxResults": 20,
    "maxRequestRetries": 3,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/olx-poland-classifieds-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": [
    {
      "url": "https://www.olx.pl/motoryzacja/samochody/"
    }
  ],
  "searchQuery": "",
  "sortBy": "created_at:desc",
  "maxResults": 20,
  "maxRequestRetries": 3
}' |
apify call automation-lab/olx-poland-classifieds-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "OLX Poland Classifieds Scraper",
        "description": "Scrape listings from OLX.pl — Poland's largest classifieds marketplace. Extract titles, prices, locations, images, and attributes from any category.",
        "version": "0.1",
        "x-build-id": "zQcAZQ8IjCglJQgyt"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/automation-lab~olx-poland-classifieds-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-automation-lab-olx-poland-classifieds-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/automation-lab~olx-poland-classifieds-scraper/runs": {
            "post": {
                "operationId": "runs-sync-automation-lab-olx-poland-classifieds-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/automation-lab~olx-poland-classifieds-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-automation-lab-olx-poland-classifieds-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": "🔗 Start URLs",
                        "type": "array",
                        "description": "Paste one or more OLX.pl category or search page URLs (e.g. <code>https://www.olx.pl/motoryzacja/samochody/</code> or <code>https://www.olx.pl/oferty/q-laptop/</code>). Leave empty to use the Search query field instead.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "searchQuery": {
                        "title": "🔎 Search query",
                        "type": "string",
                        "description": "Keyword to search for across all of OLX.pl. Used when no Start URLs are provided, or combined with a Category ID."
                    },
                    "categoryId": {
                        "title": "📂 Category ID",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Numeric OLX.pl category ID to filter results. Leave empty to search all categories. Common IDs: 5 = Motoryzacja, 4 = Dom i Ogród, 6 = Elektronika, 15 = Odzież."
                    },
                    "regionId": {
                        "title": "📍 Region ID",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Numeric OLX.pl region ID to filter results by location. Leave empty for nationwide search."
                    },
                    "sortBy": {
                        "title": "↕️ Sort by",
                        "enum": [
                            "created_at:desc",
                            "last_refresh_time:desc",
                            "price:asc",
                            "price:desc"
                        ],
                        "type": "string",
                        "description": "Sort order for returned listings.",
                        "default": "created_at:desc"
                    },
                    "maxResults": {
                        "title": "📊 Max results",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum number of listings to extract. OLX.pl caps search results at 1,000 per query.",
                        "default": 100
                    },
                    "maxRequestRetries": {
                        "title": "🔁 Max request retries",
                        "minimum": 0,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Number of retry attempts for failed HTTP requests.",
                        "default": 3
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
