# OLX.pl Listings Scraper (`axlymxp/olx-pl-listings-scraper`) Actor

Scrape OLX.pl listings at scale — price, description, location with GPS, attributes, photos, seller info and delivery — from any keyword, category or URL. Optional phone reveal. Reliable official-API source, structured JSON. Pay only for the results you get.

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

## Pricing

from $3.00 / 1,000 dataset items

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 web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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 Listings Scraper

Extract structured data from **OLX.pl**, Poland's largest classifieds marketplace,
by keyword, category, or pasted URL. Every listing comes back as clean JSON — price,
full description, location with GPS coordinates, all category attributes, photos,
seller info and OLX-delivery status — pulled straight from OLX's official mobile
backend, so it's fast and reliable (no anti-bot breakage).

Great for building price datasets, monitoring the market, feeding an app, or
generating seller leads.

### Who uses this

- **Developers & SaaS teams** — a stable, documented JSON schema and a reliable
  source to power apps, price comparison, or internal tools.
- **Investors & market analysts** — price, price-per-m² inputs, location + GPS and
  listing freshness for pricing models and trend analysis.
- **Resellers & arbitrage** — track prices and spot new listings per category/city
  on a schedule.
- **Researchers** — structured marketplace data for analysis, exportable to CSV,
  JSON, or Excel.

### What you get — output fields

| Field | Type | Description |
| ----- | ---- | ----------- |
| `id` | integer | OLX listing id |
| `url` | string | Canonical listing URL |
| `title` | string | Listing title |
| `description` | string | Full listing description |
| `priceAmount` | number | Price value |
| `priceCurrency` | string | Currency (PLN) |
| `priceLabel` | string | Formatted price, e.g. "48 900 zł" |
| `priceNegotiable` | boolean | Whether the price is negotiable |
| `categoryId` / `categoryType` | integer / string | Category id and type |
| `city` / `region` / `district` | string | Location names |
| `cityId` | integer | OLX city id |
| `latitude` / `longitude` | number | Approximate GPS coordinates |
| `params` | object | All typed attributes (e.g. year, mileage, m², rooms, brand, condition) |
| `photos` | array | Full-size photo URLs |
| `photosCount` | integer | Number of photos |
| `sellerId` / `sellerUuid` | integer / string | Seller identifiers |
| `sellerName` | string | Seller display name |
| `sellerType` | string | `private` or `business` |
| `sellerCompanyName` | string | Company name (business sellers) |
| `sellerSince` | string | Seller registration date |
| `isBusiness` | boolean | Business seller flag |
| `hasDelivery` | boolean | OLX delivery available |
| `canChat` / `hasPhone` | boolean | Contact options available |
| `phone` | array | Revealed phone number(s) — when "Reveal seller phone numbers" is on |
| `createdAt` / `validTo` / `lastRefreshAt` | string | Listing timestamps |
| `scrapedAt` | string | ISO-8601 scrape time |

### High-value use cases

1. **Price intelligence** — pull every listing for a make/model or category in a city
   and compute average/median price, distribution, and per-m² for real estate.
2. **New-listing alerts** — schedule the actor sorted by newest and push fresh
   listings to Slack, a webhook, or your CRM.
3. **Competitor & inventory tracking** — monitor a category or business seller's
   catalogue over time.
4. **Lead sourcing** — enable phone reveal to collect seller contacts for a category
   and region (for deeper business/company data, see our OLX.pl Seller Leads actor).
5. **Market research datasets** — export structured OLX data to CSV/Excel for analysis.

### Input parameters

| Field | Type | Default | Description |
| ----- | ---- | ------- | ----------- |
| `searchQuery` | string | — | Keywords to search. |
| `startUrls` | array | — | OLX category/search URLs (resolved automatically). |
| `categoryId` | integer | — | OLX category id (cars=84, flats=15, phones=1838…). |
| `locationQuery` | string | — | City/district name (auto-resolved to ids). |
| `regionId`/`cityId`/`districtId` | integer | — | Explicit location ids. |
| `distance` | integer | — | Radius (km) around the city. |
| `ownerType` | enum | `any` | `any` / `private` / `business`. |
| `priceMin`/`priceMax` | integer | — | Price range (PLN). |
| `sortBy` | enum | `newest` | newest / price asc / price desc / relevance. |
| `filters` | object | `{}` | Advanced raw OLX filters. |
| `includePhone` | boolean | `false` | Reveal seller phone per listing. |
| `engine` | enum | `graphql` | `graphql` (rich) or `rest` (light). |
| `maxItems` | integer | `100` | Max listings (OLX caps deep paging at ~1000/search). |
| `proxyConfiguration` | object | off | Optional; the API works proxy-free. |

#### Example input

```json
{
  "searchQuery": "iphone 15",
  "categoryId": 1838,
  "ownerType": "any",
  "sortBy": "newest",
  "includePhone": false,
  "maxItems": 100
}
```

#### Example output row

```json
{
  "id": 1087346487,
  "url": "https://www.olx.pl/d/oferta/bmw-seri-5-f11-3-0d-...html",
  "title": "BMW SERI 5 F11 3.0D",
  "priceAmount": 48900,
  "priceCurrency": "PLN",
  "priceLabel": "48 900 zł",
  "priceNegotiable": true,
  "categoryId": 183,
  "categoryType": "automotive",
  "city": "Bytom",
  "region": "Śląskie",
  "latitude": 50.34938,
  "longitude": 18.91962,
  "params": { "model": "Seria 5", "year": "2011", "petrol": "Diesel", "condition": "Nieuszkodzony" },
  "photos": ["https://ireland.apollo.olxcdn.com/v1/files/xxx-PL/image;s=1000x0"],
  "sellerType": "business",
  "sellerName": "ADAM",
  "createdAt": "2026-07-20T10:00:00+02:00",
  "scrapedAt": "2026-07-30T09:00:00Z"
}
```

### Scheduling & integrations

Run on a **schedule** (e.g. hourly for new listings) from the Apify console. Pipe
results to **Google Sheets, Make, Zapier, Slack, or Amazon S3**, or receive a
**webhook** when a run finishes. Every dataset is downloadable as JSON, CSV, Excel,
or XML, and reachable through the Apify API.

### Use it from an AI assistant (MCP)

This actor works with the **Apify MCP server**, so AI assistants (Claude, ChatGPT,
and other MCP clients) can call it as a tool — ask your agent to "scrape OLX.pl
listings for X" and it can run this actor and read the results directly.

### FAQ

**Is there a result limit?** OLX caps deep pagination at ~1,000 results per search.
Split large jobs by category, city, or price band to go beyond that.

**How fresh is the data?** Every run fetches live data directly from OLX in real time.

**Do I need a proxy or login?** No. The actor uses OLX's open API and needs neither.
A proxy is optional for very high volume.

**Can I get seller phone numbers?** Yes — enable "Reveal seller phone numbers".
Some sellers hide their number; those rows return an empty list.

**Is scraping OLX legal?** The actor collects only publicly available listing data.
You are responsible for using the data in line with OLX's terms and applicable law
(including GDPR for any personal data).

**What if a run fails?** Runtime errors are reported automatically and the run fails
loudly with a clear message. Reach out via the Issues tab for support.

# Actor input Schema

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

Free-text keywords to search on OLX.pl, e.g. "iphone 15" or "mieszkanie". Optional if you provide a Category ID or Start URLs.

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

Paste one or more OLX.pl category or search-result URLs. Each is resolved to its search parameters automatically. Overrides Search query / Category ID.

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

OLX.pl numeric category id (e.g. cars = 84, flats = 15, phones = 1838). Tip: paste a category URL in Start URLs instead if you don't know the id.

## `locationQuery` (type: `string`):

Free-text location, e.g. "Warszawa" or "Kraków Podgórze". Resolved to region/city/district ids automatically. Ignored if you set explicit ids below.

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

Explicit OLX region (voivodeship) id. Optional.

## `cityId` (type: `integer`):

Explicit OLX city id. Optional.

## `districtId` (type: `integer`):

Explicit OLX district id. Optional.

## `distance` (type: `integer`):

Radius in kilometres around the selected city.

## `ownerType` (type: `string`):

Restrict to private or business sellers.

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

Minimum price in Polish złoty.

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

Maximum price in Polish złoty.

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

Ordering of results.

## `filters` (type: `object`):

Extra OLX filter parameters passed through verbatim, e.g. {"filter\_enum\_state": \["used"], "filter\_float\_year:from": 2015}. For power users.

## `includePhone` (type: `boolean`):

Fetch each listing's phone number (one extra request per listing; some sellers hide it). Slower but adds direct contact data.

## `engine` (type: `string`):

GraphQL returns the richest per-listing data (business profile, delivery, all attributes) in one call. REST is a lighter alternative.

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

Stop after this many listings. OLX caps deep pagination at ~1000 results per search.

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

Optional. The OLX.pl API works proxy-free; enable a proxy only for very high volume.

## Actor input object example

```json
{
  "searchQuery": "iphone 15",
  "startUrls": [],
  "ownerType": "any",
  "sortBy": "newest",
  "filters": {},
  "includePhone": false,
  "engine": "graphql",
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# 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 = {
    "searchQuery": "iphone 15",
    "startUrls": [],
    "filters": {}
};

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

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

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

```

## Python example

```python
from apify_client import ApifyClient

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

# Prepare the Actor input
run_input = {
    "searchQuery": "iphone 15",
    "startUrls": [],
    "filters": {},
}

# Run the Actor and wait for it to finish
run = client.actor("axlymxp/olx-pl-listings-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 '{
  "searchQuery": "iphone 15",
  "startUrls": [],
  "filters": {}
}' |
apify call axlymxp/olx-pl-listings-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/lo7LPbSD0IgmEiFXp/builds/nSSEgyhgpgtQCSgAT/openapi.json
