OLX Global $1πŸ’° All in One URL | Search | Listings Data avatar

OLX Global $1πŸ’° All in One URL | Search | Listings Data

Pricing

from $1.00 / 1,000 results

Go to Apify Store
OLX Global $1πŸ’° All in One URL | Search | Listings Data

OLX Global $1πŸ’° All in One URL | Search | Listings Data

From $1/1K. Fast OLX scraper across 9 countries, including Poland, Romania, Portugal, Ukraine, Bulgaria, Kazakhstan, Uzbekistan, India, and Brazil. Extract structured listing data via search or URL with support for pagination and multi-market coverage.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

1

Bookmarked

44

Total users

8

Monthly active users

12 hours ago

Last modified

Share

OLX Scraper

Fast scraper for OLX classifieds across 9 countries: Poland (olx.pl), Romania (olx.ro), Portugal (olx.pt), Ukraine (olx.ua), Bulgaria (olx.bg), Kazakhstan (olx.kz), Uzbekistan (olx.uz), India (olx.in), and Brazil (olx.com.br). Built for low cost on the free tier (Brazil needs the Residential proxy add-on).

Two modes

  1. Search by filters - pick a country, then optionally narrow by category, city, query keyword, price range, and sort. The actor builds the request and walks pagination.
  2. Direct URLs - paste one or more OLX search-result URLs. Country is auto-detected per URL. Each URL is paginated forward until your page or listings cap.

What you get per listing

45+ fields, far richer than a typical OLX scraper:

  • Identity - listing ID, country, URL, title, full description, status
  • Timeline - created at, first posted at, last bumped at, listing expiry, display date
  • Price - numeric value, ISO 4217 currency, formatted display, negotiable flag
  • Category - ID, name, breadcrumb path
  • Location - city, region, district, full display string, latitude, longitude, map zoom hint
  • Seller - ID, UUID, display name, type (private/business/dealer), tag (e.g. "Approved dealer"), logo URL, account-created date, last login, KYC verified flag
  • Contact toggles (boolean only - no PII) - phone available, chat available, negotiation, courier delivery, anonymized phone
  • Commercial - business flag, partner code, shop ID, delivery options, safedeal escrow info
  • Media - full image URL list, image count, video URLs
  • Attributes - every parameter key/value (model, fuel, year, etc.), highlighted "key" parameters, value-added-service tags
  • Metadata - promoted flag, relevance score (India), source search URL, scrape timestamp
  • Change tracking (incremental mode only) - changeType, changedFields, firstSeenAt, lastSeenAt β€” see Incremental & dedup mode below

Set Fetch full details per listing to add an enrichment pass that fills in any field that the search response omits (full description, seller account info, complete attribute list).

Search filters

FieldApplies to
CountryAll
Free-text queryAll
Category IDAll
City IDClassic countries (PL/RO/PT/UA/BG/KZ/UZ)
Location IDIndia
State subdomainBrazil (auto-detected from URL)
Min / max priceAll
Sort orderAll
Extra filters (JSON passthrough)Advanced

The Extra filters field is an escape hatch for site-specific filters not exposed in the UI. Keys are passed verbatim into the request URL. Examples for classic countries:

{ "filter_enum_make": ["bmw"], "filter_enum_fuel": ["diesel"], "filter_float_year:from": 2018 }

URL mode notes

  • Country is auto-detected from each URL's hostname.
  • Pagination uses ?page=N (classic countries), page-index (India), or ?o=N (Brazil).
  • Filter fields above are ignored - paste the URL with your filters already applied.
  • Multi-URL is supported; each URL is processed sequentially.
  • For Brazil URLs, the proxy must be Apify Residential country=BR (see Limits below).

Output preview

Open the dataset and switch the Overview view to see the headline columns. Seller info and Media views give focused slices.

Send results into your apps (MCP connectors)

Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape β€” the Apify dataset is never changed.

What gets written to the connector: a condensed, human-readable summary of each record β€” not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.

  1. Authorize a connector once under Apify β†’ Settings β†’ Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
  3. For Notion, also set notionParentPageUrl to the page where items should be created.

The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.

Limits

  • Maximum pages β€” leave empty to walk every result page (stopped only by Maximum listings, end of results, or the site's own last-page signal). Set a number to cap the walk at exactly that many pages.
  • Classic countries cap server-side at offset 1000. Narrow your filters to scrape the full set on high-volume queries.
  • Detail enrichment adds 1 extra HTTP call per listing. Off by default to keep cheap runs cheap.
  • The default Apify Datacenter proxy works on the free tier and is sufficient for most countries. Switch to Residential if you hit rate limits on a high-traffic country.
  • Brazil requires Apify Residential proxy (country=BR) - the Apify Datacenter pool is challenged by the upstream edge, so runs on Datacenter return zero listings. Set the proxy field to Apify Residential with country BR before running. The actor logs a clear warning if you start a BR run on Datacenter.

Resume & recurring updates

Two different features, for two different jobs:

  • Resume from a previous run (resumeFromRunId) continues one specific interrupted run.
  • Incremental mode (incrementalMode) is for running the same search again and again (e.g. daily) and getting only what changed.

Resuming a large scrape

Set Resume from a previous run (resumeFromRunId) to a prior run ID (or its dataset ID) to continue a full-catalogue walk without re-scraping listings you already have. The actor seeds its dedup set from that run's dataset before scraping, so only new listings (by listing ID) are appended. A run also checkpoints its progress periodically, so a platform migration or a Resurrect of a failed run picks up where it left off without duplicating or re-charging already-saved listings.

Incremental & dedup mode (scheduled/recurring monitoring)

Turn on Incremental changes for scheduled runs (incrementalMode, off by default β€” no existing schedule's output changes unless you opt in) to track the same search across scheduled runs. Every listing is classified against the actor's own remembered state:

changeTypeMeaning
NEWFirst time this listing has been seen for this search
UPDATEDA tracked field changed since the last run β€” see changedFields
UNCHANGEDNothing changed since the last run
REAPPEAREDWas gone (EXPIRED) in a previous run, now back
EXPIREDWas tracked but not found in this run's complete scan (only emitted with emitExpired on)

Each row also gets changedFields (the field names that differ, empty outside UPDATED), firstSeenAt, and lastSeenAt (ISO timestamps).

By default, only NEW/UPDATED/REAPPEARED rows are returned β€” a normal scheduled run only pays for what's new or changed.

  • emitUnchanged (default off): also return UNCHANGED rows. This bills extra rows for listings you already have unchanged β€” turn it on only if you want a full snapshot every run, not just the delta.
  • emitExpired (default off): also return synthetic EXPIRED rows for listings that vanished. This bills extra (synthetic) rows. EXPIRED is only ever produced after a complete, uncapped, uninterrupted scan of the tracked search β€” it is skipped (with a log line explaining why) whenever Maximum listings capped the run, a page failed to load, or resumeFromRunId was used, because none of those prove the listing is actually gone.
  • State key (stateKey, optional): state is normally derived automatically from the country/query/filters/URL(s) and the fetchDetails toggle β€” two differently-configured searches (including two different countries) never share a baseline. Set stateKey to name a monitoring campaign explicitly, or to deliberately share state across otherwise-different configurations.
  • Incremental mode and resumeFromRunId are independent tools; combining them on a brand-new monitoring campaign bootstraps the incremental baseline from the resume dataset. Combining them once a campaign already has saved state is rejected β€” remove resumeFromRunId or pick a different stateKey.

Country support

CountryTLDAPIProxy
Polandolx.plclassicDatacenter or Residential
Romaniaolx.roclassicDatacenter or Residential
Portugalolx.ptclassicDatacenter or Residential
Ukraineolx.uaclassicDatacenter or Residential
Bulgariaolx.bgclassicDatacenter or Residential
Kazakhstanolx.kzclassicDatacenter or Residential
Uzbekistanolx.uzclassicDatacenter or Residential
Indiaolx.inIndia relevanceDatacenter or Residential
Brazilolx.com.brBrazil SSRResidential country=BR required

OLX South Africa (olx.co.za) was decommissioned by the operator. OLX Egypt is now Dubizzle. OLX Argentina runs on a different platform and is not yet supported.

Output schema

See the dataset preview in the Apify Console for the full field list and data types.