# OLX Scraper: 7 Markets, Postal Code & Phone Data (`getascraper/olx-marketplace-scraper`) Actor

Scrape OLX classifieds across Poland, Romania, Ukraine, Bulgaria, Portugal, Kazakhstan and Uzbekistan. Get price, location, postal code and phone availability per listing. Export to Sheets, Excel or the API.

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

## Pricing

from $1.12 / 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: 7 Markets, Postal Code & Phone Data

<table width="100%">
<tr>
<td style="padding:24px 28px;background:#F0F6F7;border:1px solid #D3E3E7;border-top:4px solid #0C6478;border-radius:12px">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">Scan 7 OLX markets and find contactable sellers first</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Price, location, postal code and phone-available flags across Poland, Romania, Ukraine, Bulgaria, Portugal, Kazakhstan and Uzbekistan. No other multi-country OLX scraper on the Store pulls this deep.</span>
</td>
</tr>
</table>

<table width="100%">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #D3E3E7;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#084A57">🌍 7 markets, one run</span><br>
<span style="font-size:12px;color:#57534E">Poland, Romania, Ukraine, Bulgaria, Portugal, Kazakhstan and Uzbekistan in a single Actor.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #D3E3E7;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#084A57">📞 Phone-available flag</span><br>
<span style="font-size:12px;color:#57534E">Know which sellers list a phone number before you spend time reaching out.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #D3E3E7;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#084A57">📮 Postal code, where published</span><br>
<span style="font-size:12px;color:#57534E">Real postal-level location on enriched listings, not just a city name.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #D3E3E7;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#084A57">🎯 Price filters that hold</span><br>
<span style="font-size:12px;color:#57534E">Set a price range once and get results checked against every listing's real price.</span>
</td>
</tr>
</table>

Extract [OLX](https://www.olx.pl) classifieds listings across any of 7 markets. Export to JSON, CSV or Excel, or connect straight into Google Sheets and your own pipeline via the API. Run it on demand or on a schedule. No coding required.

### ✨ Why use this Actor

**Built for real workflows.**

- 🔁 **Resellers and arbitrage traders**: check price and location across five OLX country sites in one sheet instead of five browser tabs, and spot underpriced items before someone else does.
- 📊 **Market researchers and price analysts**: track secondhand pricing across Eastern Europe and Central Asia with clean, structured fields ready to pivot by market and city.
- ☎️ **Lead-gen buyers**: filter to sellers who actually list a phone number, so you're not chasing dead leads.

**Depth most multi-country OLX scrapers skip.** Most scrapers covering several OLX markets stop at title, price and location. This one also pulls postal code and a phone-available flag when full details are enabled, the kind of depth usually only found on single-market OLX scrapers.

**Honest about scope.** This Actor does not cover OLX Brazil, India or Pakistan (a different platform with different anti-bot requirements), and does not claim GPS coordinates or video counts it can't reliably deliver.

### ⚙️ How it works

<table width="100%">
<tr>
<td style="padding:16px 14px;width:33%;background:#F0F6F7;border:1px solid #D3E3E7;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#0C6478;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Pick your markets</span><br>
<span style="font-size:12px;color:#57534E">Choose one or more OLX markets and search terms. Add a price range if you want one.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#F0F6F7;border:1px solid #D3E3E7;border-left:none;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#0C6478;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Run the Actor</span><br>
<span style="font-size:12px;color:#57534E">It browses each OLX market for you and collects listings matching your search, live from the site.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#F0F6F7;border:1px solid #D3E3E7;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#0C6478;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Get your data</span><br>
<span style="font-size:12px;color:#57534E">Download as JSON, CSV or Excel, or connect straight into Google Sheets or your own pipeline via the API.</span>
</td>
</tr>
</table>

### 📥 Input

| Field | Type | Required | Description |
|---|---|---|---|
| `startUrls` | array of URLs | No | OLX search URLs to scrape directly, instead of or alongside the market/query filters below. |
| `markets` | enum | No | Which OLX markets to search: Poland, Romania, Ukraine, Bulgaria, Portugal, Kazakhstan, or Uzbekistan. |
| `searchQueries` | array | No | Keywords to search across the selected markets, e.g. `iphone 15`. |
| `priceMin` / `priceMax` | integer | No | Price range in each market's local currency. |
| `includeFullDetails` | boolean | No | Visit each listing's own page for the full description, postal code, and phone-availability flag. |
| `maxItemsPerMarket` | integer | No | Stop collecting from a single market/query combination after this many listings. |
| `maxItems` | integer | No | Stop the whole run after collecting this many matching listings across all markets. |
| `proxyConfiguration` | object | No | Proxy settings. Apify's proxy is required for reliable access. |

### 📤 Output

Every result is one row in the dataset. A typical item with `includeFullDetails` enabled looks like this:

```json
{
  "listingId": "1093808893",
  "market": "pl",
  "title": "Apple iPhone 15 Pro Max 1TB / Bialy Tytan / 8GB RAM",
  "price": 2499,
  "currency": "PLN",
  "priceDisplay": "2 499 zl",
  "city": "Radom",
  "isPromoted": true,
  "imageUrl": "https://ireland.apollo.olxcdn.com/v1/files/12fhg6bo7a8w1-PL/image",
  "listingUrl": "https://www.olx.pl/d/oferta/apple-iphone-15-pro-max-CID99-ID1c1wEW.html",
  "isPhoneAvailable": true,
  "description": "Stan idealny, komplet akcesoriow, faktura VAT...",
  "scrapedAt": "2026-08-29T01:41:25.993Z"
}
```

Download the dataset in JSON, CSV, Excel, HTML or XML from the Apify Console, or pull it through the API.

### 📊 Data table

| Field | Type | Description |
|---|---|---|
| `listingId` / `listingUrl` | string | Unique OLX listing ID and link to the live listing. |
| `market` | string | Which OLX country site the listing came from. |
| `title` | string | Listing headline. |
| `price` / `currency` / `priceDisplay` | number/string | Numeric price, currency code, and the site's own formatted price text. |
| `city` / `district` | string | Location as published on the listing. |
| `isPromoted` | boolean | Whether the listing is a paid/featured placement. |
| `imageUrl` | string | Thumbnail image URL. |
| `description` | string | Full listing description (with full details enabled). |
| `postalCode` | string | Postal code, where the seller has published one (with full details enabled). |
| `isPhoneAvailable` | boolean | Whether the listing has a phone number to reveal (with full details enabled). |

The Output tab also ships three pre-built views: Listings, By Market, and Full Details, so you can jump straight to the columns you care about.

### 💰 Pricing

This Actor is pay per result: you only pay for the listings you actually collect, and a run that returns nothing costs nothing. There is no subscription and no minimum spend.

### ⭐ Enjoying OLX Scraper?

<table width="100%">
<tr>
<td style="padding:20px 24px 14px;background:#F0F6F7;border:1px solid #D3E3E7;border-left:5px solid #0C6478;border-radius:10px 10px 0 0">
<span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#1C1917">Helped you find a deal or a lead faster across OLX markets?</span><br>
<span style="font-size:14px;color:#57534E">A 5-star rating takes 10 seconds and helps other traders and researchers find it. Your feedback also tells us what to build next.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#0C6478;border:1px solid #D3E3E7;border-top:none;border-radius:0 0 10px 10px;text-align:center">
<a href="https://apify.com/getascraper/olx-marketplace-scraper/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

### 🛠️ Tips for better runs

- Leave `includeFullDetails` off for fast, cheap runs when you only need price and location.
- Turn `includeFullDetails` on when you need the full description, postal code, or want to prioritize sellers with a listed phone number.
- Run one market at a time with a focused search term for the fastest, most targeted results; running all 7 markets on a broad term multiplies both compute time and result volume.

### ❓ FAQ

**Is it legal to scrape OLX?**
This Actor only collects data that is already publicly visible on OLX listing pages. You are responsible for how you use the data and for complying with OLX's own terms of service.

**Why do some listings have no postal code?**
Not every OLX seller pins a precise address. This Actor never invents or guesses a value: if OLX doesn't publish a postal code for a listing, the field is left out rather than filled with a placeholder.

**Does this cover OLX Brazil, India, or Pakistan?**
No. Those markets run on a different platform than the 7 covered here and need different anti-bot handling. This Actor is scoped to Poland, Romania, Ukraine, Bulgaria, Portugal, Kazakhstan, and Uzbekistan.

**Can I get notified of new listings automatically?**
Yes. Schedule this Actor to run daily or hourly from the Apify Console and pipe new results into Google Sheets, Slack, or your own database with no code.

Found a bug or need a custom version of this Actor? Open an issue from the Actor's Issues tab and it'll be looked at directly.

### 🔗 Other actors

- [Avito Auto Scraper: Парсер Авито Авто](https://apify.com/getascraper/avito-auto-scraper) ↗ - used car listings from Russia's largest classifieds site.
- [Auto.RIA Cars Scraper: Used Cars Ukraine](https://apify.com/getascraper/auto-ria-cars-scraper) ↗ - used car listings from Ukraine's largest car marketplace.
- [Bazaraki scraper: Cyprus classifieds monitor](https://apify.com/getascraper/bazaraki-scraper) ↗ - general classifieds listings from Cyprus.
- [Blocket Cars Scraper: Bilar till salu](https://apify.com/getascraper/blocket-cars-scraper) ↗ - used car listings from Sweden's Blocket classifieds.
- [2dehands Cars Scraper: Tweedehandse auto's](https://apify.com/getascraper/2dehands-cars-scraper) ↗ - used car listings from the Netherlands' 2dehands classifieds.

# Actor input Schema

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

Paste OLX search URLs to scrape directly instead of, or in addition to, the market/query filters below.

## `markets` (type: `array`):

Which OLX country sites to search.

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

Keywords to search across the selected markets, e.g. "iphone 15".

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

Minimum listing price, in the local currency of each market.

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

Maximum listing price, in the local currency of each market.

## `includeFullDetails` (type: `boolean`):

Visit each listing's own page for its full description, postal code, and whether a phone number is available. Roughly doubles the number of pages loaded.

## `maxItemsPerMarket` (type: `integer`):

Stop collecting from a single market/query combination after this many listings.

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

Stop the whole run after collecting this many matching listings across all markets.

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

OLX blocks plain requests without a real browser fingerprint; Apify's proxy is required for reliable access.

## Actor input object example

```json
{
  "startUrls": [],
  "markets": [
    "pl"
  ],
  "searchQueries": [
    "iphone"
  ],
  "includeFullDetails": false,
  "maxItemsPerMarket": 50,
  "maxItems": 200,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `dataset` (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": [],
    "markets": [
        "pl"
    ],
    "searchQueries": [
        "iphone"
    ],
    "includeFullDetails": false,
    "maxItemsPerMarket": 50,
    "maxItems": 200,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/olx-marketplace-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": [],
    "markets": ["pl"],
    "searchQueries": ["iphone"],
    "includeFullDetails": False,
    "maxItemsPerMarket": 50,
    "maxItems": 200,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/olx-marketplace-scraper").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 '{
  "startUrls": [],
  "markets": [
    "pl"
  ],
  "searchQueries": [
    "iphone"
  ],
  "includeFullDetails": false,
  "maxItemsPerMarket": 50,
  "maxItems": 200,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call getascraper/olx-marketplace-scraper --silent --output-dataset

```

## MCP server setup

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

```

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/7jIFut0IRot28qVru/builds/PmqSt5abBJyw3eoiX/openapi.json
