# OLX Scraper for Seven Countries

> OLX scraper for Poland, Ukraine, Romania, Portugal, Bulgaria, Kazakhstan and Uzbekistan. Get price, city, photos and dates. Only-new mode for alerts.

URL: https://cliqtomedia.com/actors/olx-listings-scraper/

Category: Classifieds & second-hand · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/olx-listings-scraper?fpr=cliqto

Search OLX by keyword or paste an OLX results link. Get one clean row per ad, with price, place and details. It works on seven OLX country sites.

## How to use it: 3 steps

1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `iphone` in Search keywords. Each start is one run.
3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

## What it does

OLX Listings Scraper collects public listings from OLX in Poland, Ukraine, Kazakhstan, Portugal, Romania, Bulgaria and Uzbekistan by keyword, city, price or a pasted OLX category URL, and returns one clean row per listing with price, location, category, parameters, dates, photos and seller type.

- Keywords (`queries`): one OLX search per keyword on the site you choose in `country`. You can limit keyword searches by `city`.
- OLX URLs (`categoryUrls`): paste any OLX results page. The category, city and filters from the page are kept.

### Good for

- Track prices of used phones, laptops or cars in one or more countries.
- Build a list of apartments or cars in one city with price, area, year and mileage.
- Watch a search on a schedule and get only listings that appeared since the last run.

### Not a good fit

- OLX Brazil (olx.com.br), OLX India and other non-listed OLX sites are not supported.
- No phone numbers, e-mails or names of private sellers. The Actor does not log in and does not open single listing pages.
- OLX shows at most about 1,000 listings per search. To get more, split the search by city, category or price range.

## Price

Pay per event. Apify bills you, not us.

| What you pay for | Price | When |
|---|---|---|
| Start fee | $0.01 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. |
| Saved listing | $0.0007 (from $0.0006 on paid Apify plans) | One OLX listing saved to the default Dataset. A listing found by two searches in the same run is saved and charged once. |

- One listing: about $0.01.
- 1,000 listings: about $0.71.
- Every day 100 listings, for 30 days: about $2.40 a month.

Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed.

Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/olx-listings-scraper?fpr=cliqto

## Questions

### Which OLX sites can I use?

Poland, Ukraine, Kazakhstan, Portugal, Romania, Bulgaria and Uzbekistan. OLX Brazil and India are not supported.

### Do I need a proxy or an OLX login?

No. The tool reads public search pages. If a request is blocked, it retries with Apify Proxy. The proxy is in the price.

### Why do some ads have no price?

The seller wants an exchange or gave no price. Free items show a price of 0.

### Can I get seller names and phones?

No phones or emails. A seller name is shown only for business sellers.

### Why is `price` null for some listings?

The listing has no numeric price: it is for exchange (`priceType: exchange`) or the seller did not give a price. Free listings have `price: 0`.

### Are the results complete and fresh?

Each row is what OLX showed at `fetchedAt`. OLX limits a search to about 1,000 listings, and paid listings can appear in several places. The Actor saves each listing once per run.

### Can I search OLX Brazil or India?

No. Only olx.pl, olx.ua, olx.kz, olx.pt, olx.ro, olx.bg and olx.uz are supported.

## Data fields

- `id` (integer): OLX listing id.
- `url` (string): Listing page URL.
- `title` (string): Listing title.
- `description` (string): Description as plain text; null when includeDescription is off.
- `price` (number): Asking price as a number in currency. 0 = free. null = no numeric price (exchange or not given).
- `priceLabel` (string): Price as shown on OLX, e.g. "1 199 zł" or "Za darmo".
- `currency` (string): Price currency, e.g. PLN, UAH, KZT, EUR, RON, BGN, UZS; null when price is null.
- `priceType` (string): price, arranged (negotiable asking price), free or exchange.
- `negotiable` (boolean): true if the seller marked the price as negotiable.
- `previousPrice` (number): Earlier price when the seller lowered it; null otherwise.
- `priceConverted` (number): Price converted by OLX to a second currency when OLX shows one; null otherwise.
- `convertedCurrency` (string): Currency of priceConverted.
- `city` (string): City name.
- `cityId` (integer): OLX city id.
- `district` (string): District, when the seller gave one.
- `region` (string): Region (voivodeship, oblast, district) name.
- `regionId` (integer): OLX region id.
- `latitude` (number): Approximate latitude (OLX blurs the location within locationRadiusKm).
- `longitude` (number): Approximate longitude.
- `locationRadiusKm` (number): Blur radius of the coordinates in km.
- `categoryId` (integer): OLX category id.
- `category` (string): Leaf category name, e.g. iPhone or BMW.
- `categoryPath` (string): Full category path, e.g. Motoryzacja > Samochody osobowe > BMW.
- `categoryType` (string): OLX vertical: goods, automotive, real_estate, electronics, job and others.
- `params` (object): Listing parameters as key → value, e.g. model, year, milage, petrol, m (area), rooms.
- `paramsDetailed` (array): Same parameters with display name, value and machine value key.
- `postedAt` (string): When the listing was created (ISO 8601 with offset).
- `refreshedAt` (string): Last refresh or bump time.
- `pushedUpAt` (string): Last paid push-up time; null if never.
- `validTo` (string): When the listing expires.
- `photos` (array): Photo URLs in original size.
- `photoCount` (integer): Number of photos.
- `sellerType` (string): private or business.
- `sellerId` (integer): OLX seller id (to group listings by seller).
- `sellerName` (string): Business seller name; always null for private sellers.
- `sellerSince` (string): When the seller account was created.
- `isPromoted` (boolean): true for paid listings: promoted slots and OLX TOP ads shown among the results.
- `isHighlighted` (boolean): Paid highlight flag.
- `isUrgent` (boolean): Paid urgent flag.
- `hasDelivery` (boolean): true if OLX delivery is available.

## Input settings

- `country` (string): Which OLX site keyword searches run on: pl = olx.pl, ua = olx.ua, kz = olx.kz, pt = olx.pt, ro = olx.ro, bg = olx.bg, uz = olx.uz. URLs below always use the site from the URL itself.
- `queries` (array): One OLX search per keyword, e.g. iphone, bmw x5 or mieszkanie. Up to 50 keywords and URLs together. Leave empty when you paste category URLs below.
- `categoryUrls` (array): Paste any OLX results page with your filters already set, e.g. https://www.olx.pl/motoryzacja/samochody/bmw/warszawa/ or https://www.olx.ua/uk/nedvizhimost/kvartiry/kiev/. Category, city and the page's own filters are kept. Offer (single listing) pages are not supported. Up to 10 URLs per run.
- `city` (string): Limit keyword searches to one city or region, written as in the OLX address bar: warszawa, krakow, kiev, alma-ata, astana, lisboa, bucuresti, sofiya, tashkent. Accents are removed automatically (Kraków → krakow). An unknown city gives status not_found for those searches. Empty = whole country.
- `priceMin` (integer): Lowest price in the site's currency (PLN, UAH, KZT, EUR, RON, BGN/EUR, UZS). Applies to all searches and URLs. Empty = no minimum.
- `priceMax` (integer): Highest price in the site's currency. Applies to all searches and URLs. Empty = no maximum.
- `sortBy` (string): Order of results. newest = newest and recently refreshed first (best for monitoring and onlyNew).
- `maxItems` (integer): Stop each keyword or URL after this many listings. OLX itself shows at most about 1,000 listings per search; narrow by city, category or price to get more. You pay per listing saved.
- `onlyNew` (boolean): For scheduled monitoring: return only listings created after the previous run of the same search and not returned before. The first run returns current listings. Memory is kept in your account in the key-value store olx-listings-scraper-state.
- `includeDescription` (boolean): Add the full listing description as plain text. Turn off for smaller output.
- `includePromoted` (boolean): OLX mixes paid (promoted) listings into every results page. They (and TOP ads among the results) are marked isPromoted = true. Turn off to keep only organic results.

## Step by step on Apify

1. Open the Input tab.
2. Keep Country = `pl` and Search keywords = `iphone` (the form prefill), or add your own keyword.
3. Keep Max listings per search = `20` (prefill) for a first test.
4. Click Start.
5. Open the Output tab → Listings and check `title`, `price` and `city`.

## Use cases

| Task | Input | You get | Key fields | Next step |
|---|---|---|---|---|
| Resell phones and electronics | `queries`, `priceMax` | listing | `price`, `params`, `postedAt`, `url` | Google Sheets or CSV |
| Car market analysis | `categoryUrls` (cars category) | listing | `price`, `params` (year, mileage, fuel), `city` | BI tool via API |
| Real estate in one city | `categoryUrls` or `queries` + `city` | listing | `price`, `params` (area, rooms), `district`, `latitude` | map or spreadsheet |
| Price comparison across countries | same keyword, different `country` | listing | `price`, `currency`, `country` | Dataset export |
| New listing alerts | `onlyNew` on a schedule | new listing | `title`, `price`, `url`, `isNew` | webhook, Slack or e-mail |

## Tips

- OLX shows about 1,000 ads per search. Split big searches by city, category or price.
- Paste an OLX category URL to keep the filters you set on the site.
- Schedule the run with only-new mode to get new ads as alerts.

## Limits



- At most about 1,000 listings per search (OLX limit). `RUN_SUMMARY.searches[].totalAvailable` shows how many OLX reports.
- Up to 50 keywords and URLs per run, of them at most 10 URLs (each URL search first loads the OLX page to read its filters). 5 searches × 1,000 listings (5,000 rows) were tested in one run.
- The run stops new requests shortly before its timeout and keeps saved rows (`PARTIAL`, `TIME_LIMIT`). The default timeout is 300 s; raise it for large runs.
- Search relevance is OLX's own: a keyword can return related items (for example cases and glass for `iphone`). Use `priceMin` or a category URL to narrow.
- OLX blurs coordinates: `latitude` and `longitude` are approximate.

## Sample result

```json
{
  "id": 1009568339,
  "url": "https://www.olx.pl/d/oferta/szklo-hartowane-na-obiektyw-3mk-apple-iphone-15-plus-CID99-ID16k2Qj.html",
  "title": "Szkło hartowane na obiektyw 3MK  Apple iPhone 15 Plus",
  "description": "Lens Protection Pro to szkło ochronne na obiektyw aparatu iPhone'a, które odznacza się naj…",
  "price": 25,
  "priceLabel": "25 zł",
  "currency": "PLN",
  "priceType": "price",
  "negotiable": false,
  "previousPrice": null,
  "priceConverted": null,
  "convertedCurrency": null,
  "city": "Kraków",
  "cityId": 8959,
  "district": "Mistrzejowice",
  "region": "Małopolskie",
  "regionId": 4,
  "latitude": 50.09557,
  "longitude": 20.00366,
  "locationRadiusKm": 7,
  "categoryId": 2911,
  "category": "Folie i szkła ochronne",
  "categoryPath": "Elektronika > Telefony > Akcesoria > Folie i szkła ochronne",
  "categoryType": "electronics",
  "params": { "state": "Nowe", "type": "Szkło hartowane" },
  "paramsDetailed": [{ "key": "state", "name": "Stan", "value": "Nowe", "valueKey": "new" }],
  "postedAt": "2025-06-21T16:36:04+02:00",
  "refreshedAt": "2026-10-14T16:23:01+02:00",
  "pushedUpAt": null,
  "validTo": "2026-11-13T15:36:05+01:00",
  "photos": ["https://ireland.apollo.olxcdn.com/v1/files/tz6bc091m3xh2-PL/image;s=750x1000"],
  "photoCount": 1,
  "sellerType": "private",
  "sellerName": null,
  "sellerSince": "2016-01-24T18:22:06+01:00",
  "isPromoted": false,
  "isHighlighted": false,
  "isUrgent": false,
  "hasDelivery": true,
  "offerType": "offer",
  "status": "active",
  "country": "pl",
  "domain": "www.olx.pl",
  "search": "iphone",
  "searchUrl": "https://www.olx.pl/api/v1/offers/?offset=0&limit=40&query=iphone&sort_by=created_at%3Adesc",
  "position": 4,
  "isNew": null,
  "source": "olx",
  "fetchedAt": "2026-10-14T14:26:33.531Z"
}
```

## Use it from code

Actor ID: `cliqtomedia/olx-listings-scraper`

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/olx-listings-scraper").call(run_input={
    "country": "pl",
    "queries": [
        "iphone"
    ]
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

```bash
curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~olx-listings-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"country": "pl", "queries": ["iphone"]}'
```

```python
# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool

tool = ApifyActorsTool("cliqtomedia/olx-listings-scraper")
result = tool.invoke({"run_input": {"country": "pl", "queries": ["iphone"]}})
print(result)
```

run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/

## Similar tools

- [AutoScout24 Scraper - EU Car Listings & Prices, No login](https://cliqtomedia.com/actors/car-listings-scraper/)
- [Depop Scraper - Listings, Prices, Brands & Shops](https://cliqtomedia.com/actors/depop-scraper/)
- [Kleinanzeigen Scraper: Listings, Prices & Photos (No Login)](https://cliqtomedia.com/actors/kleinanzeigen-scraper/)
- [Subito.it Scraper - Italy Classifieds & Prices, No Login](https://cliqtomedia.com/actors/subito-listings-scraper/)
- [Craigslist Scraper - Listings, Prices & Photos, No Login](https://cliqtomedia.com/actors/craigslist-scraper/)
- [Vinted Scraper - Listings, Prices & Brands in 25 Countries](https://cliqtomedia.com/actors/vinted-scraper/)
