OLX Marketplace Scraper (7 Countries)
Pricing
from $1.50 / 1,000 ads
OLX Marketplace Scraper (7 Countries)
Scrape OLX classifieds across 7 countries (PL, UA, RO, BG, KZ, UZ, PT) from one actor. One row per ad: title, price in native currency, GPS, city/region, business-seller flag, and OLX's own category attributes (car make/model/mileage, property rooms/m²). Optional photos + seller profile.
Pricing
from $1.50 / 1,000 ads
Rating
0.0
(0)
Developer
Muhamed Didovic
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Turn any OLX search into clean, structured classifieds data — across seven countries from a single actor: Poland, Ukraine, Romania, Bulgaria, Kazakhstan, Uzbekistan and Portugal. Search by keyword (iphone 15, opel astra, mieszkanie), or paste search, category or ad URLs — and get one flat row per ad with title, description, price in native currency, GPS, city/region, business-seller flag, and OLX's own normalised category attributes.
Built for cross-border arbitrage, used-car and property intelligence, price monitoring, and CEE/CIS marketplace research.
How it works

✨ Why use this scraper?
- Seven countries, one actor, one schema — most OLX scrapers cover a single domain. Tick
pl,ua,ro,bg,kz,uz,ptand the same keyword runs across all of them, returning identical columns with each market's own currency. Cross-border price comparison works out of the box. - OLX's own normalised attributes — every ad carries the structured attribute set OLX uses for its filters, in both raw and flattened form: car
make/model/year/mileage/fuel, propertyrooms/m²/floor, phonemodel/storage/colour. These are real typed fields, not text parsed out of a description. - GPS on every row — latitude/longitude plus OLX's full city → region → district hierarchy, on feed rows too, not only in deep mode.
- Business vs private sellers —
isBusinessseparates shops and dealers from private individuals, which is the filter that matters for lead-gen and dealer analysis. - No residential proxy needed — OLX serves its data to ordinary requests, so runs are fast and cheap. No premium-proxy surcharge buried in your bill.
- Fast mode or deep mode — feed rows already include price, description, GPS, location and attributes. Turn on Also open each ad page to add all photos, the seller profile and contact flags. You choose cost vs depth.
- Structured, not scraped — reads OLX's own embedded
__PRERENDERED_STATE__JSON rather than fragile HTML selectors, so the output stays reliable. - JSON, CSV, Excel or API — pipe straight into your sheet, CRM or pipeline. Billed per ad.
🎯 Use cases
| You are a… | Use it to… |
|---|---|
| Cross-border arbitrage trader | Compare the same product's price across PL, RO, UA and PT in one run |
| Used-car dealer / analyst | Pull local vehicle inventory with make, model, year, mileage and fuel type |
| Property analyst | Track listings by rooms, m², floor and region across CEE markets |
| Price-monitoring / repricing | Track asking prices for a product across a country over time |
| Lead-gen | Find active business sellers (isBusiness: true) with contact channels |
| Market researcher | Measure supply, price distribution and category mix per country |
📥 Supported inputs
| Input | Example | What it does |
|---|---|---|
| Search keyword + markets | iphone 15 × ["pl","ro"] | Builds & paginates that search on each selected country |
| Search URL | https://www.olx.pl/oferty/?q=iphone | Paginates that search |
| Category URL | https://www.olx.ro/imobiliare/ | Paginates that whole category |
| Ad URL | https://www.olx.pl/d/oferta/...-ID123abc.html | Scrapes that single ad in full detail |
Supported domains: olx.pl, olx.ua, olx.ro, olx.bg, olx.kz, olx.uz, olx.pt.
Not supported: olx.ba, olx.com.br and olx.in run on separate platforms and are not covered. Private messages, buyer data and anything behind a login are out of scope — the actor reads only public pages.
⚙️ How it works
- Classify every input — keywords are expanded across the selected markets; pasted URLs are sorted into search / ad, with the country detected from the domain.
- Fetch each page with a real browser TLS fingerprint. OLX needs no residential proxy, so this is a plain sequential retry — fewer requests, lower cost.
- Parse the embedded
__PRERENDERED_STATE__JSON — the search feed's ad array, and each ad page's full object. - Enrich (optional) — for each ad, fetch its own page to add all photos, seller profile and contact flags.
- Push one flat, deduplicated row per ad to the dataset, tagged with its market.
🔧 Input configuration
| Field | Type | Default | Description |
|---|---|---|---|
searchQueries | array | ["iphone 15"] | Keywords to search. Each runs on every selected market. |
markets | array | ["pl"] | Countries: pl, ua, ro, bg, kz, uz, pt. |
startUrls | array | [] | OLX search, category and/or ad URLs. Auto-classified. |
scrapeDetails | boolean | false | Open each ad page for all photos, seller profile and contact flags. |
maxItems | integer | 1000 | Hard cap on rows for the whole run. |
maxItemsPerSearch | integer | 1000 | Cap per feed. OLX stops paginating at page 25 (~1,250 ads). |
maxConcurrency | integer | 8 | Parallel requests. |
maxRequestRetries | integer | 6 | Retry budget per request. |
proxy | object | Apify datacenter | Optional. Residential proxies are not required for OLX. |
📤 Output overview
One row per ad, tagged with its market and country. In fast mode you get the feed fields — already rich; with Also open each ad page on (or when you paste an ad URL) every row adds photos, seller and contact data.
Fast mode (feed): adId, title, description, price/priceDisplay/currency, latitude/longitude, location, params/attributes, condition, isBusiness, isPromoted, createdTime, url.
Deep mode adds: all photos, primaryImage, seller (name, avatar, last-seen, online status, phone/chat/delivery flags), isJob, salary, externalUrl.
🧾 Output samples
A phone listing in Poland (deep mode):
{"rowType": "listing","adId": "1075898915","market": "pl","country": "Poland","url": "https://www.olx.pl/d/oferta/...-ID1aOmsj.html","title": "Apple iPhone 15 128GB NOWA BATERIA 100%","price": 1997,"priceDisplay": "1 997 zł","currency": "PLN","isNegotiable": false,"condition": "Używane","location": { "cityName": "Kraków", "regionName": "Małopolskie" },"latitude": 50.06026, "longitude": 19.9396,"isBusiness": true,"attributes": {"state": "Używane","phonemodel": "iPhone 15","builtinmemory_phones": "128GB","rammemory_phones": "6 GB"},"photos": ["https://ireland.apollo.olxcdn.com/…", "… 6 more"],"seller": { "name": "SmartSfera", "hasPhone": true, "chatEnabled": true }}
The same search in Portugal — identical columns, native currency:
{"adId": "…","market": "pt","country": "Portugal","title": "Iphone 15 128GB - Selado","price": 625,"priceDisplay": "625 €","currency": "EUR","condition": "Novo","location": { "cityName": "Loures", "regionName": "Lisboa" },"attributes": { "model": "iPhone 15", "capacity": "128GB", "operador": "Desbloqueado" },"isBusiness": false}
🔑 Key output fields
| Field | Description |
|---|---|
adId / adCode | OLX numeric ad id and URL code (stable dedup keys) |
market / country | Which OLX country site the row came from |
title / description | Ad title and full description text |
price / priceDisplay / currency | Numeric price, OLX's formatted string, native ISO currency |
isNegotiable / isFree / isExchange | OLX's own price flags |
params | Full normalised attribute list (key, label, value, normalised value) |
attributes | The same attributes flattened to key → value, for CSV |
location | City, region and district with OLX's ids |
latitude / longitude | Ad GPS coordinates |
isBusiness | Shop/dealer vs private seller |
condition | Item condition, in the market's own language |
createdTime / lastRefreshTime | When the ad was posted and last bumped |
photos | Array of full-resolution image URLs (deep mode) |
seller | Name, avatar, last-seen, online status, phone/chat/delivery flags (deep mode) |
❓ FAQ
Which countries are covered? Poland, Ukraine, Romania, Bulgaria, Kazakhstan, Uzbekistan and Portugal — seven OLX domains sharing one platform and therefore one schema. Bosnia (olx.ba), Brazil and India run separate platforms and are not supported.
Do I need a residential proxy? No. OLX serves its data to ordinary requests, so the default Apify datacenter proxy is enough. That's why this actor is cheaper to run than marketplace scrapers that require residential IPs.
What's the difference between fast and deep mode? Fast mode (default) returns feed rows, which already include price, description, GPS, location and the full attribute set — cheap and quick. Deep mode opens each ad page to add all photos, the seller profile and contact flags — richer rows, ~2× the requests.
Can I get seller phone numbers? OLX does not publish the number itself on the page; it exposes whether the seller accepts phone contact. Rows carry seller.hasPhone, chatEnabled and courierEnabled rather than a raw number.
Does it work for cars and property? Yes. Those categories carry the richest attribute sets — make, model, year, mileage and fuel for vehicles; rooms, m², floor and market for property — all in params/attributes.
How many results per search? OLX returns ~50 ads per page and stops at page 25 — about 1,250 per feed. Use several keywords, categories or markets to go wider.
🛟 Support
Found a bug or need a field added? Open an issue on the actor's Issues tab in the Apify Console and we'll take a look.
🚀 Additional services
Need a different marketplace, site, or a custom schema? We build and maintain scrapers across classifieds, real estate, jobs and e-commerce.
🔎 Explore more scrapers
- OfferUp Marketplace Scraper
- Kleinanzeigen Scraper
- Willhaben Scraper
- Craigslist Scraper
- Facebook Marketplace Scraper
⚠️ Disclaimer
This actor scrapes only publicly available ad data from OLX. It does not access private messages, buyer data, or any content behind a login, and it does not collect personal data beyond the public seller information OLX itself displays on an ad. You are responsible for using the scraped data in compliance with OLX's Terms of Service, applicable laws (including GDPR and other data-protection and consumer-protection laws), and any restrictions on automated access. Use the output lawfully and ethically.
🔍 SEO Keywords
OLX scraper, OLX API, OLX data extractor, scrape OLX listings, OLX Poland scraper, olx.pl scraper, OLX Ukraine scraper, OLX Romania scraper, OLX Bulgaria scraper, OLX Portugal scraper, OLX Kazakhstan scraper, OLX classifieds scraper, OLX car scraper, OLX property scraper, OLX price monitoring, classifieds data export, CEE marketplace data, second-hand marketplace scraper, OLX JSON export.