OLX Listings Scraper avatar

OLX Listings Scraper

Pricing

from $1.05 / 1,000 results

Go to Apify Store
OLX Listings Scraper

OLX Listings Scraper

Search live OLX Group marketplace listings across 7 countries (Poland, Ukraine, Kazakhstan, Uzbekistan, Romania, Bulgaria, Portugal) — price, condition, seller, photos and location, routed to whichever surface each country's robots.txt actually allows.

Pricing

from $1.05 / 1,000 results

Rating

0.0

(0)

Developer

Ibnu Adzim

Ibnu Adzim

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

Share

OLX Listings Scraper — PL/UA/KZ/UZ/RO/BG/PT

Search live OLX Group classifieds across 7 countries — Poland, Ukraine, Kazakhstan, Uzbekistan, Romania, Bulgaria, Portugal — with one unified schema. No login, no cookies, no browser. HTTP only.

Why one actor across 7 countries

Every OLX Group country domain runs the identical platform and answers the identical ad-object shape — verified by cross-checking fields between the JSON API and the site's own server-rendered state. The only real variation between countries is transport, and that variation is forced by each country's own robots.txt, not by choice:

Countriesrobots.txt saysStrategy used
Poland, Ukraine, Kazakhstan, Uzbekistan/api/ allowedS1-api — the JSON search API directly
Romania, Bulgaria, Portugal/api/ disallowed, search+detail HTML allowedS2-ssr — the site's own server-rendered __PRERENDERED_STATE__, same ad fields

A user picks country; the actor picks the strategy that host's own policy permits. This is a routing table, not a mode switch — there's exactly one behaviour (search → listings) and the registry just says how to reach it.

What you get

One record type per search result, one SEARCH_SUMMARY per query.

LISTING

FieldNotes
adId, title, description, url
priceAmountNone for genuinely priceless listings — swap-only ("Zamienię") and giveaway ("Za darmo") ads carry no real number. See priceType.
priceTypeprice (fixed) / arranged (negotiable, still a real number) / free / exchange — the honest signal for "is there a price at all"
priceCurrency, priceNegotiable, priceLabel
city, region
category, condition, paramsparams is every category-specific attribute (model, mileage, size, …) as raw passthrough — no fixed schema is possible across OLX's whole category tree
photos, photoCount
isBusiness, isPromoted, sellerName
createdAt, validToAtISO 8601 UTC

SEARCH_SUMMARY — one per query

reachableCount vs upstreamTotalCount are different numbers, both real: OLX's own API caps total_elements at 1000 regardless of how many results actually exist (visible_total_count carries the true figure — a popular query can show 148,000+ there while reachableCount stays 1000). Also reports pagesFetched, duplicatesSkipped (see below), and queryEchoed — the literal query string upstream received, useful because OLX's own search falls back to fuzzy token matching on a query with no real hits rather than returning empty.

ERROR — one per query that failed

Every query maps to at least one row.

Known limits — read before relying on volume figures

  • Offset ceiling is exactly 1000, enforced identically on every query regardless of popularity. This is a platform limit, not something this actor could paginate past.
  • Promoted ads recycle independently of pagination. OLX interleaves paid-placement listings into every page at fixed slots, and once a query's promoted pool runs dry it starts repeating earlier promoted ids. Deduplicated automatically — duplicatesSkipped on SEARCH_SUMMARY reports how many were dropped, typically ~5% of a deep (1000-item) walk.
  • Romania/Bulgaria/Portugal return one page only. Their robots.txt allows the search page but not the paginated API, and the page itself doesn't expose a working offset parameter for deeper pages without a browser — out of scope for an HTTP-only actor. notes on the summary row says so explicitly when it happens.
  • A nonsense search query does not come back empty. This is upstream's own site behaviour (their search box does the same fuzzy fallback), not a bug — queryEchoed lets you see exactly what was searched.

Countries probed and found out of scope this session

olx.ba, olx.com.br — robots.txt itself answers behind a Cloudflare challenge (policy unreadable). olx.in, olx.co.za, olx.com.pk — a different, non-OLX-Group platform (404s / no JSON, no __PRERENDERED_STATE__).

Proxy

Residential is the default. No WAF was observed anywhere in this family during recon (6-profile TLS ladder × 7 hosts × both surfaces, all 200 OK), but a shared datacenter IP is still the fastest way onto a rate limit on a high-traffic marketplace.