# OLX.pl Scraper (`ribtools/olxpl-scraper`) Actor

Scrape OLX.pl listings in every category (goods, cars, property, jobs, services) from any search, seller or ad URL: price or salary, attributes, photos, location. Optional add-on: business seller contacts. Proxies included.

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

## Pricing

from $1.99 / 1,000 listing data results

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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## OLX.pl Scraper

Scrape OLX.pl, Poland's largest classifieds site, in every category (electronics, cars, property, jobs, services, animals and more): prices or salaries, attributes, photos, location and business seller contacts.

### What is OLX.pl Scraper?

**OLX.pl Scraper** is a data extraction tool that automatically collects listings (ogłoszenia) from [OLX.pl](https://www.olx.pl), Poland's biggest marketplace for new and used goods, cars, flats, jobs and services. Simply provide starting URLs and get structured data including title, description, price or salary, category attributes, photos, city, region, map location, seller type and listing dates.

This scraper handles pagination, searches larger than OLX.pl's 1,000-result limit and data normalization automatically, delivering clean, structured datasets ready for analysis or integration into your systems.

### What can this Actor do?

- **Extract comprehensive listing data** — title, description, price, currency, negotiable flag, old price and price drop, job salaries, category attributes (model, year, mileage, area, rooms, condition...), photos, city, region, district, map location, promotion flags, OLX delivery and listing dates
- **Handle multiple entry points** — search, category, region and city pages with any filter and sort, single ads, seller pages and seller shops
- **Automatic pagination** — crawls through every page of results, and splits searches with more than 1,000 results by region and price band, so you are not stuck at OLX.pl's 1,000-result cap
- **Business seller contacts (add-on)** — the company profile a business seller published on OLX: trading name, address, office phones, website, logo and shop page
- **Premium proxies included** — high-quality Polish residential proxies built in at no additional cost
- **Structured output** — JSON, CSV, Excel formats available
- **API integration** — real-time data access through Apify API
- **Scheduled runs** — automated daily/weekly data collection

### What data can OLX.pl Scraper extract?

| Field | Description | Example |
| ----- | ----------- | ------- |
| **id** | OLX.pl ad identifier | `1012848093` |
| **url** | Ad URL | `https://www.olx.pl/d/oferta/...-ID16xO3z.html` |
| **title** | Ad title (typed phone numbers and emails hidden) | `iPhone 13 Pro Max 256GB` |
| **description** | Ad description as plain text (typed phone numbers and emails hidden) | `iPhone 13 Pro Max 256 GB z GWARANCJĄ...` |
| **category_id** / **category_type** | OLX.pl category id and family | `2298` / `electronics` |
| **price** / **currency** | Asking price (null on jobs and most services) | `2049` / `PLN` |
| **price_label** / **price_type** | Price as shown, and its kind (price, free, exchange, arranged) | `2 049 zł` / `price` |
| **is_negotiable** | Price marked negotiable ("do negocjacji") | `false` |
| **old_price** / **price_drop_pct** | Previous price and the drop in % | `2299` / `10.9` |
| **salary_from** / **salary_to** / **salary_period** / **salary_is_gross** | Job ads: salary range, hourly or monthly, gross or net | `6200` / `6800` / `monthly` / `true` |
| **photos** | Full-size photo URLs | `["https://ireland.apollo.olxcdn.com/..."]` |
| **city** / **region** / **neighborhood** | City, voivodeship and district | `Żory` / `Śląskie` / `null` |
| **latitude** / **longitude** / **location_radius_km** | Map location as OLX.pl publishes it, and the radius it is blurred to | `50.039` / `18.683` / `5` |
| **seller_type** | business or private | `business` |
| **seller_id** | OLX.pl seller account id | `2546329041` |
| **seller_name** / **seller_url** | Business trading name and OLX shop page | `Ringo Group Sp. z o.o.` |
| **is_promoted** / **is_highlighted** / **badges** | Paid promotion flags, "urgent" badge | `false` / `false` / `[]` |
| **attributes** | Category attributes by key | `{"phonemodel": "iPhone 13 Pro Max"}` |
| **has_phone** / **has_delivery** | Phone reveal offered, OLX delivery offered | `true` / `true` |
| **partner** / **external_url** | Source and link of a cross-posted ad (Otomoto, Otodom, job feeds) | `otomoto_pl_form` |
| **listed_at** / **first_listed_at** / **bumped_at** / **expires_at** | Listing dates, ISO 8601 UTC | `2026-10-14T11:25:35Z` |
| **seller** | Business seller's company profile (add-on) | see the output example |

### How to scrape OLX.pl

#### Step-by-step tutorial:

1. **Add starting URLs** — Enter OLX.pl search, ad, seller or shop URLs (see compatible formats below)
2. **Configure options** (optional) — set the maximum number of listings and turn on the business seller data add-on
3. **Run the scraper** — Click "Start" and monitor progress in real-time
4. **Download results** — Export data in JSON, CSV, or Excel format

Proxies are included automatically — no setup required.

#### Compatible URL examples:

- **Search with filters and sort**: `https://www.olx.pl/elektronika/telefony/smartfony-telefony-komorkowe/warszawa/q-iphone/?search[filter_float_price:to]=2000`
- **Keyword search in every category**: `https://www.olx.pl/oferty/q-rower/`
- **Category**: `https://www.olx.pl/motoryzacja/samochody/`
- **Category in a city**: `https://www.olx.pl/nieruchomosci/mieszkania/sprzedaz/krakow/`
- **Region (voivodeship)**: `https://www.olx.pl/mazowieckie/`
- **Jobs**: `https://www.olx.pl/praca/warszawa/`
- **Single ad**: `https://www.olx.pl/d/oferta/iphone-13-128-gb-CID99-ID1cL7PO.html`
- **Seller page**: `https://www.olx.pl/oferty/uzytkownik/1Ie1H0/`
- **Seller shop**: `https://smartsfera.olx.pl/home/`

The `/d/...` links, paged links (`?page=3`) and the `olx.pl` and `m.olx.pl` hosts work too.

**Important**: Only URLs matching these patterns will work. Otomoto (otomoto.pl) and Otodom (otodom.pl) URLs belong to our Otomoto and Otodom actors.

### How much does it cost to scrape OLX.pl?

OLX.pl Scraper uses **pay-per-event** pricing — you only pay for listings it returns.

#### Is scraping OLX.pl free?

The scraper follows Apify's pay-per-event model with the following structure:

- **Base extraction**: one charge per listing returned ($2.99 per 1,000 on the free plan, $1.99 per 1,000 on GOLD and above), plus a tiny charge per Actor start
- **Business seller data add-on**: one additional charge per listing returned with the seller's company profile ($1.99 per 1,000 on the free plan, $0.99 per 1,000 on GOLD and above), only when the profile has a trading name, phone, address or website; private sellers are never charged for it

Pricing is optimized for efficiency, using minimal compute units while maintaining high success rates. Contact support for volume discounts on large-scale projects.

### Input configuration

The scraper accepts the following inputs:

#### Start URLs

OLX.pl URLs copied from your browser: search, category, region and city pages with any filter and sort, single ads, seller pages and seller shops (see the compatible formats above). Searches with more than 1,000 results are split automatically by region and price band.

#### Maximum items

The maximum number of listings to scrape across all URLs (each listing is a charged event). Leave it empty to scrape everything the URLs list.

#### Fetch business seller data (add-on)

Adds the company profile of business sellers in the `seller` field: trading name, business type, address, postal code, city, office phones, website, logo, profile and shop page, member-since date and the company description, as the company published them on OLX.pl. Private sellers never return personal data. Charged only when the profile has a name, phone, address or website.

### Output example

```json
{
  "type": "listing",
  "id": 1012848093,
  "url": "https://www.olx.pl/d/oferta/iphone-13-pro-max-256gb-bateria-100-gwarancja-2-lata-jak-nowy-CID99-ID16xO3z.html",
  "title": "iPhone 13 Pro Max 256GB | Bateria 100% | Gwarancja 2 lata | Jak Nowy",
  "category_id": 2298,
  "category_type": "electronics",
  "seller_type": "business",
  "description": "iPhone 13 Pro Max 256 GB z GWARANCJĄ 24 miesiące – jak nowy!\n\nKondycja baterii: nowa – 100%\n\nStan wizualny: klasa A+ (jak nowy!)\n\nGwarancja: 24 miesiące – pisemna!",
  "price": 2049,
  "currency": "PLN",
  "price_label": "2 049 zł",
  "price_type": "price",
  "is_negotiable": false,
  "old_price": null,
  "price_drop_pct": null,
  "salary_from": null,
  "salary_to": null,
  "salary_period": null,
  "salary_is_gross": null,
  "photos": [
    "https://ireland.apollo.olxcdn.com:443/v1/files/h8o8bmfnc1qx2-PL/image;s=525x700",
    "https://ireland.apollo.olxcdn.com:443/v1/files/56khjyus8dd91-PL/image;s=525x700"
  ],
  "city": "Żory",
  "region": "Śląskie",
  "neighborhood": null,
  "latitude": 50.03937,
  "longitude": 18.68291,
  "location_radius_km": 5,
  "seller_id": "2546329041",
  "seller_name": "Ringo Group Sp. z o.o.",
  "seller_url": "https://sklepringo.olx.pl/home/",
  "is_promoted": false,
  "is_highlighted": false,
  "badges": [],
  "attributes": {
    "state": "Używane",
    "phonemodel": "iPhone 13 Pro Max",
    "builtinmemory_phones": "256GB",
    "coloriphone": "Niebieski",
    "guarantee": "Oferty z gwarancją",
    "sim_options": "Dual SIM (SIM + eSIM)"
  },
  "has_phone": true,
  "has_delivery": true,
  "partner": null,
  "external_url": null,
  "listed_at": "2026-10-14T11:25:35Z",
  "first_listed_at": "2025-07-09T14:29:33Z",
  "bumped_at": "2026-10-14T11:25:35Z",
  "expires_at": "2026-11-06T11:25:28Z",
  "seller": {
    "id": "2546329041",
    "business_name": "Ringo Group Sp. z o.o.",
    "business_type": "premium",
    "address": "Górne Przedmieście 5",
    "postal_code": "44-240",
    "city": "Żory",
    "phones": ["500 000 000"],
    "website": "https://example.com",
    "logo": "https://img-resizer.prd.01.eu-west-1.eu.olx.org/img-eu-olxpl-production/000000000_1_94x72_rev003.jpg",
    "profile_url": "https://www.olx.pl/oferty/user/xxxxx/",
    "shop_url": "https://sklepringo.olx.pl/home/",
    "member_since": "2018-04-25",
    "about": "Godziny otwarcia: Pon–Pt 9:00–17:00, Sob 9:00–13:00"
  }
}
```

You can download the dataset extracted by **OLX.pl Scraper** in various formats such as **JSON, HTML, CSV, or Excel**. The data is automatically cleaned and normalized for immediate use in analysis tools, databases, or business applications.

### Use cases and applications

- **Price monitoring** — track asking prices, price drops and free or exchange offers for any product or category
- **Market research** — measure supply by category, city and voivodeship across Poland
- **Lead generation** — find business sellers and shops with their published company contacts
- **Job market analysis** — collect salary ranges by role, city and contract type from OLX.pl Praca

### Integrations and API access

OLX.pl Scraper seamlessly integrates with popular platforms:

- **Zapier** — Automate data workflows and notifications (via [Apify Zapier integration](https://docs.apify.com/platform/integrations/zapier))
- **Make (Integromat)** — Create complex automation scenarios (via [Apify Make integration](https://www.make.com/en/integrations/apify))
- **Google Sheets** — Direct data export for analysis
- **REST API** — Programmatic access to extracted data ([instructions here](https://docs.apify.com/academy/api/run-actor-and-retrieve-data-via-api))
- **Python/Node.js SDKs** — Easy integration into applications ([instructions here](https://docs.apify.com/academy/api/run-actor-and-retrieve-data-via-api#javascript-and-python-client))

### FAQ and Support

#### Do I need to configure a proxy?

No. The Actor includes high-quality Polish residential proxies automatically at no additional cost. There's nothing to configure.

#### Why are there no names or phone numbers for private sellers?

To respect the privacy of private individuals under the EU's GDPR (RODO in Poland), private sellers come back with their seller type and account id only: no name, no phone, no shop. When a private seller pins the exact address of a property on the map, its coordinates are left empty; locations OLX.pl blurs to a circle are returned as published. Business sellers return their trading name, never the account holder's personal name. Phone numbers are never revealed: the business seller add-on returns only the office phones a company published in its OLX profile. VINs and registry numbers (REGON, BDO, the vet registry WNI) are not extracted either, nor a private breeder's kennel name. Descriptions are returned as OLX.pl publishes them, except phone numbers and email addresses that sellers type into the title or description to get past OLX.pl's own masking (`5 0 0 - 1 2 3 - 4 5 6`, `500 i 123 i 456`, `jan(małpa)gmail.com`): they are replaced with `[phone hidden]` and `[email hidden]`, for every seller type. Numbers OLX.pl already masks (`50*******21`) come back as OLX.pl shows them.

#### Can I scrape more than 1,000 results from one search?

Yes. OLX.pl shows at most 1,000 results per search. When a search has more, the scraper splits it by voivodeship and then by price band, walks each slice, and drops the duplicates, so you get the whole search.

#### How often is the data updated?

OLX.pl updates listings in real-time. For fresh data, schedule regular scraper runs or use our API for on-demand extraction.

#### What if some URLs don't work?

The scraper only supports specific URL patterns from OLX.pl. Ensure your URLs match the compatible formats listed above. A URL OLX.pl doesn't know, or a filter it rejects, is skipped, the run goes on with the other URLs, and the run's status message says what was skipped and why.

#### Do you offer custom solutions?

Absolutely! We can customize the scraper for specific requirements, additional data points, or integration with your existing systems. Contact us through the Issues tab for enterprise solutions.

#### Need help or have feedback?

- **Report issues**: Use the Issues tab for bug reports and feature requests
- **Custom development**: Contact us for tailored solutions and enterprise integrations

# Changelog

This Actor's version history is a separate document: https://apify.com/ribtools/olxpl-scraper/changelog.md

# Actor input Schema

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

OLX.pl URLs copied from your browser: any search or category page with its filters and sort (`/elektronika/telefony/warszawa/q-iphone/?search[filter_float_price:to]=2000`, `/oferty/q-rower/`, `/motoryzacja/samochody/`, `/nieruchomosci/mieszkania/sprzedaz/krakow/`, `/praca/`), single ads (`/d/oferta/...-ID1cL7PO.html`), seller pages (`/oferty/uzytkownik/...`) and shops (`<shop>.olx.pl/home/`). Searches with more than 1,000 results are split automatically. Otomoto and Otodom URLs belong to our Otomoto and Otodom actors.

## `maxRequests` (type: `integer`):

Maximum number of listings to scrape (each result is a charged event). Leave empty for no limit.

## `sellerDataAddon` (type: `boolean`):

Add the company profile of business sellers: trading name, address, office phones, website, logo and shop page, as the company published them on OLX. Private sellers never return personal data. Charged only when the profile has a name, phone, address or website.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.olx.pl/elektronika/telefony/smartfony-telefony-komorkowe/q-iphone/"
    }
  ],
  "maxRequests": 10,
  "sellerDataAddon": false
}
```

# Actor output Schema

## `items` (type: `string`):

All scraped listings.

# 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/elektronika/telefony/smartfony-telefony-komorkowe/q-iphone/"
        }
    ],
    "maxRequests": 10,
    "sellerDataAddon": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("ribtools/olxpl-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/elektronika/telefony/smartfony-telefony-komorkowe/q-iphone/" }],
    "maxRequests": 10,
    "sellerDataAddon": False,
}

# Run the Actor and wait for it to finish
run = client.actor("ribtools/olxpl-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": [
    {
      "url": "https://www.olx.pl/elektronika/telefony/smartfony-telefony-komorkowe/q-iphone/"
    }
  ],
  "maxRequests": 10,
  "sellerDataAddon": false
}' |
apify call ribtools/olxpl-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ribtools/olxpl-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/snnDVgiXPsIXZT7ba/builds/JH2loYOEw5X5qBC8F/openapi.json
