# OLX Scraper — Listings, Prices & Sellers | $4/1K (`bovi/olx-listings`) Actor

Scrape OLX classifieds listings by keyword across Poland, Ukraine, Bulgaria and 20+ OLX country domains. Returns title, price, currency, location, seller, photos, category and listing URL. No proxy needed. Pay per result.

- **URL**: https://apify.com/bovi/olx-listings.md
- **Developed by:** [Vitalii Bondarev](https://apify.com/bovi) (community)
- **Categories:** E-commerce, MCP servers
- **Stats:** 9 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.88 / 1,000 listings

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/actors/running/actors-in-store.md#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 Scraper — 20+ Country Classifieds | from $1.50/1K | PL UA BG RO PT

Built for cross-border classified arbitrage traders (cars, electronics, real estate), market researchers comparing prices across Eastern Europe, and lead-gen agencies collecting seller contact data.

**Pricing:** Pay per listing — $1.50/1K. First 10 results free.

**No proxy. No login. Official OLX API.**

Scrape OLX marketplace listings by keyword across Poland, Ukraine, Bulgaria, Romania, Portugal and other OLX country sites. Returns structured data including price, location, photos, seller info, and delivery availability.

### What you get

Each result includes:

- `offer_id` — numeric OLX offer ID
- `title` — listing title
- `description` — full description (HTML stripped)
- `price`, `currency`, `negotiable` — price flattened out of the OLX params array
- `city`, `region` — seller location
- `category_id` — OLX category ID
- `seller_id`, `seller_name`, `seller_last_seen`
- `url` — canonical listing URL
- `photo_url` — first photo (400×400)
- `photos` — all photos as resolved URLs (400×400)
- `created_time`, `last_refresh_time` — ISO 8601 timestamps
- `delivery_available` — whether OLX Delivery (Rock) is enabled
- `domain` — which OLX country domain was scraped
- `parse_confidence`, `warnings` — data quality signal

### Supported domains

`olx.pl` (Poland), `olx.ua` (Ukraine), `olx.bg` (Bulgaria), `olx.ro` (Romania), `olx.pt` (Portugal) — and any other OLX country site that uses the same `/api/v1/offers/` endpoint.

### How it works

Uses the OLX public internal API (`GET /api/v1/offers/?query=<q>&offset=N&limit=50`). No authentication, no proxy required from Apify cloud IPs. The response is JSON with `data[]`, `metadata`, and `links.next` for pagination.

### Pricing

Pay per result (PPE). You only pay for listings actually returned.

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `searchQuery` | string | — | Keyword(s) to search (required) |
| `domain` | string | `olx.pl` | OLX country domain |
| `maxItems` | integer | 100 | Max listings to return (0 = unlimited) |
| `minPrice` | integer | 0 | Skip listings below this price |
| `maxPrice` | integer | 0 | Skip listings above this price |
| `proxyConfiguration` | object | — | Optional Apify proxy |

### Example output

```json
{
  "offer_id": 1069106343,
  "title": "Nike Jordan 4 retro rozmiar 42 Nowe Orginalne",
  "description": "Nowe oryginalne buty Nike Jordan 4 retro w rozmiarze 42...",
  "price": 380.0,
  "currency": "PLN",
  "negotiable": false,
  "city": "Warszawa",
  "region": "Mazowieckie",
  "category_id": 2955,
  "seller_id": 689893,
  "seller_name": "Mateusz",
  "seller_last_seen": "2026-05-30T19:38:07+02:00",
  "url": "https://www.olx.pl/d/oferta/nike-jordan-4-retro-rozmiar-42-nowe-orginalne-CID87-ID1alRoH.html",
  "photo_url": "https://ireland.apollo.olxcdn.com/v1/files/n43jjt22k4co-PL/image;s=400x400",
  "photos": ["https://ireland.apollo.olxcdn.com/v1/files/n43jjt22k4co-PL/image;s=400x400"],
  "created_time": "2026-04-24T08:11:33+02:00",
  "last_refresh_time": "2026-05-30T08:57:58+02:00",
  "delivery_available": true,
  "domain": "olx.pl",
  "parse_confidence": 1.0,
  "warnings": []
}
```

### vs. competitors

| Feature | This actor | epctex/olx-scraper |
|---|---|---|
| Country coverage | 20+ OLX domains | Usually 1 (olx.pl) |
| Official API (not HTML) | Yes | No |
| delivery\_available flag | Yes | No |
| Multi-photo array | Yes | No |
| parse\_confidence signal | Yes | No |
| Price | $1.50/1K | $3–5/1K |

### Use with AI agents (MCP)

This actor is tagged `MCP_SERVERS` — compatible with Claude, GPT-4o, and other MCP-aware agents:

```
https://mcp.apify.com/?tools=bovi/olx-listings
```

### CEE data stack

Bundle with the **Allegro Scraper** (`bovi/allegro-offers`) for full Poland/CEE ecom coverage: OLX = classifieds (cars, electronics, real estate, second-hand), Allegro = structured retail marketplace. Together they cover the two largest Polish platforms.

### Limitations

- OLX caps search results at 1000 items per query (`metadata.total_elements` may show up to 1000). Run multiple targeted queries for larger datasets.
- Promoted/sponsored listings appear on every page — de-duplication is handled automatically by the actor.
- Category filtering via `category_id` is not supported by the OLX search API (returns 400). Use `searchQuery` and client-side `minPrice`/`maxPrice` filters instead.

### Pricing example

| Volume | Cost |
|---|---|
| 100 listings | $0.15 |
| 1,000 listings | $1.50 |
| 10,000 listings | $15.00 |

First 10 results are free. You pay only for offers actually returned.

### FAQ

**Do I need a proxy or OLX account?**
No. The OLX public API works from Apify cloud IPs without authentication or proxy. A proxy input is available as a fallback for unusual IP blocks.

**Which countries are supported?**
Any OLX country domain that uses the same `/api/v1/offers/` endpoint — confirmed: `olx.pl`, `olx.ua`, `olx.bg`, `olx.ro`, `olx.pt`. Set the `domain` input accordingly.

**What output formats are available?**
JSON (default), CSV, and Excel — via the Apify dataset export or API.

**What if results come back empty?**
OLX search is language-specific. Use local-language keywords for the domain (e.g. Polish keywords for `olx.pl`). Also note OLX caps results at ~1,000 per query — run multiple targeted queries for large datasets.

### Integrations

Built for cross-border arbitrage traders and market researchers comparing classified listings across Eastern Europe — the JSON/dataset output drops into the tools you already run, no glue code:

- **n8n / Make / Zapier** — trigger a run or pipe every new dataset item into 500+ apps (Google Sheets, Airtable, Slack, HubSpot, your database) with no code: [n8n](https://docs.apify.com/platform/integrations/n8n), [Make](https://docs.apify.com/platform/integrations/make), [Zapier](https://docs.apify.com/platform/integrations/zapier).
- **Webhooks** — fire your own endpoint the moment a run finishes, to push results straight into your pipeline ([docs](https://docs.apify.com/platform/integrations/webhooks)).
- **MCP server** — expose this actor as a tool to Claude, Cursor, or any [MCP client](https://mcp.apify.com) so an AI agent can pull this data mid-conversation ([guide](https://blog.apify.com/how-to-use-mcp/)).
- **API & SDKs** — fetch the dataset as JSON, CSV, or Excel through the Apify REST API or the Python / JS SDKs.

See all [Apify integrations](https://apify.com/integrations).

### More scrapers from our toolkit

Building a data pipeline? These actors pair well with this one — each runs on your own Apify account with the same pay-per-result pricing, no subscription:

- [Poshmark Listings](https://apify.com/bovi/poshmark-listings)
- [Shopify Products Scraper](https://apify.com/bovi/shopify-products-scraper)
- [Tiktok Shop Scraper](https://apify.com/bovi/tiktok-shop-scraper)
- [Uber Eats Menu Scraper](https://apify.com/bovi/ubereats-menu)
- [Vinted Marketplace](https://apify.com/bovi/vinted-marketplace)
- [Allegro Offers](https://apify.com/bovi/allegro-offers)

Chain any of them together from the **Integrations** tab (the *Run succeeded* trigger) to build a multi-step workflow — one actor's output feeds the next.

# Actor input Schema

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

Keyword(s) to search for on OLX (e.g. 'nike air max', 'iphone 13', 'laptop'). Required.

## `domain` (type: `string`):

OLX country domain to search. Examples: olx.pl (Poland), olx.ua (Ukraine), olx.bg (Bulgaria), olx.ro (Romania), olx.pt (Portugal). Default: olx.pl.

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

Maximum number of listings to return (0 = no limit, fetches all pages). Default 100.

## `minPrice` (type: `integer`):

Skip listings with price below this value (in the local currency). 0 = no minimum.

## `maxPrice` (type: `integer`):

Skip listings with price above this value (in the local currency). 0 = no maximum.

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

Optional Apify proxy. The OLX public API works without a proxy from Apify cloud IPs. Only needed if you observe 403 errors.

## Actor input object example

```json
{
  "searchQuery": "nike",
  "domain": "olx.pl",
  "maxItems": 100,
  "proxyConfiguration": {}
}
```

# Actor output Schema

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

Dataset containing OLX listing records (offer\_id, title, price, currency, city, region, seller\_name, url, photo\_url, created\_time, etc.)

# 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": "nike",
    "domain": "olx.pl",
    "maxItems": 100,
    "minPrice": 0,
    "maxPrice": 0,
    "proxyConfiguration": {}
};

// Run the Actor and wait for it to finish
const run = await client.actor("bovi/olx-listings").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": "nike",
    "domain": "olx.pl",
    "maxItems": 100,
    "minPrice": 0,
    "maxPrice": 0,
    "proxyConfiguration": {},
}

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

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

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

```

## CLI example

```bash
echo '{
  "searchQuery": "nike",
  "domain": "olx.pl",
  "maxItems": 100,
  "minPrice": 0,
  "maxPrice": 0,
  "proxyConfiguration": {}
}' |
apify call bovi/olx-listings --silent --output-dataset

```

## MCP server setup

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

```

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

## OpenAPI specification

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