OLX Global $1π° All in One URL | Search | Listings Data
Pricing
from $1.00 / 1,000 results
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
Maintained by CommunityActor stats
1
Bookmarked
44
Total users
8
Monthly active users
12 hours ago
Last modified
Categories
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
- 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.
- 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
| Field | Applies to |
|---|---|
| Country | All |
| Free-text query | All |
| Category ID | All |
| City ID | Classic countries (PL/RO/PT/UA/BG/KZ/UZ) |
| Location ID | India |
| State subdomain | Brazil (auto-detected from URL) |
| Min / max price | All |
| Sort order | All |
| 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.
- Authorize a connector once under Apify β Settings β Integrations (Notion, Linear, Airtable, or Apify).
- Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
- For Notion, also set
notionParentPageUrlto 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 Residentialwith countryBRbefore 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:
changeType | Meaning |
|---|---|
NEW | First time this listing has been seen for this search |
UPDATED | A tracked field changed since the last run β see changedFields |
UNCHANGED | Nothing changed since the last run |
REAPPEARED | Was gone (EXPIRED) in a previous run, now back |
EXPIRED | Was 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 returnUNCHANGEDrows. 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 syntheticEXPIREDrows 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) wheneverMaximum listingscapped the run, a page failed to load, orresumeFromRunIdwas 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 thefetchDetailstoggle β two differently-configured searches (including two different countries) never share a baseline. SetstateKeyto name a monitoring campaign explicitly, or to deliberately share state across otherwise-different configurations. - Incremental mode and
resumeFromRunIdare 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 β removeresumeFromRunIdor pick a differentstateKey.
Country support
| Country | TLD | API | Proxy |
|---|---|---|---|
| Poland | olx.pl | classic | Datacenter or Residential |
| Romania | olx.ro | classic | Datacenter or Residential |
| Portugal | olx.pt | classic | Datacenter or Residential |
| Ukraine | olx.ua | classic | Datacenter or Residential |
| Bulgaria | olx.bg | classic | Datacenter or Residential |
| Kazakhstan | olx.kz | classic | Datacenter or Residential |
| Uzbekistan | olx.uz | classic | Datacenter or Residential |
| India | olx.in | India relevance | Datacenter or Residential |
| Brazil | olx.com.br | Brazil SSR | Residential 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.