OLX Marketplace Listings Scraper
Pricing
from $1.70 / 1,000 listings
OLX Marketplace Listings Scraper
Search public OLX listings by keyword across 11 country marketplaces. Extract titles, prices, locations, sellers, clean descriptions, attributes, images, and listing URLs.
Pricing
from $1.70 / 1,000 listings
Rating
0.0
(0)
Developer
Trove Vault
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Share
Search public OLX classifieds with one keyword across 11 country marketplaces and export normalized data. The Actor collects titles, numeric prices, currencies, locations, categories, conditions, sellers, clean text descriptions, attributes, images, publication timestamps, and direct URLs when publicly available.
Use the same input for one or several countries instead of maintaining separate search URLs, category trees, and parsers. The Actor does not calculate deal scores, freshness ranks, market positions, price-drop predictions, or historical comparisons.
What can this Actor do?
- Search the same keyword in multiple OLX countries in one run.
- Map a normalized category to each marketplace's local category tree.
- Apply optional location and local-currency price filters.
- Normalize country-specific pages and APIs into one dataset schema.
- Deduplicate promoted and organic copies of the same listing.
- Continue with the remaining countries when one marketplace fails.
- Append results to an existing dataset and tag rows with a workflow ID.
- Store a per-country diagnostic report in
RUN_SUMMARY.
Typical uses include product sourcing, local supply research, price comparisons, scheduled monitoring, and data pipelines.
Which countries are supported?
Select one or more marketplaces in the countries input:
| Country | Code | Currency | Access method |
|---|---|---|---|
| Bosnia and Herzegovina | ba | BAM | Public OLX API |
| Brazil | br | BRL | Residential proxy and browser fallback |
| Bulgaria | bg | BGN | Direct extraction |
| India | in | INR | Residential proxy and browser fallback |
| Kazakhstan | kz | KZT | Direct extraction |
| Pakistan | pk | PKR | Residential proxy and browser fallback |
| Poland | pl | PLN | Direct extraction |
| Portugal | pt | EUR | Direct extraction |
| Romania | ro | RON | Direct extraction |
| Ukraine | ua | UAH | Direct extraction |
| Uzbekistan | uz | UZS or USD | Direct extraction |
Brazil, India, and Pakistan can require a residential proxy and Chromium when HTTP extraction is blocked. The default is configured accordingly, making these runs slower and more expensive. Other marketplaces ignore the proxy setting.
OLX country sites are independent products and may change their page structure or access controls without notice.
How do I run it?
For a small single-country search:
{"query": "iPhone 15","countries": ["pt"],"maxResults": 10}
Use the same keyword across several marketplaces:
{"query": "mountain bike","countries": ["pl", "pt", "ro"],"category": "sports-hobbies","minPrice": 500,"maxPrice": 5000,"sort": "price-asc","maxResults": 100}
For Brazil, keep the residential proxy enabled:
{"query": "iPhone 15","countries": ["br"],"category": "electronics","maxResults": 25,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
query and countries are required. category, location, minPrice, maxPrice, and sort narrow each search. maxResults is a per-country limit from 1 to 1,000, so three countries at 100 can produce 300 rows. Prices use local currency and are not converted.
datasetId optionally appends every row to an existing Apify dataset. runId is copied into each row and summary for pipeline tracing. Legacy API calls using a single country string remain supported.
If a mapped category returns no listings, the Actor retries the keyword across all categories.
What data does it return?
Each dataset row can contain:
| Field | Description |
|---|---|
listingId | Marketplace listing identifier |
title | Public listing title |
price, currency, priceText | Parsed price, ISO currency, and original label |
country, countryCode | Marketplace name and two-letter input code |
category, location, condition | Normalized listing context |
sellerName, sellerType | Public seller information when exposed |
postedAt | Publication timestamp when available |
description | Plain text with HTML tags such as <br> removed |
attributes | Category-specific key-value details |
imageUrl, images | Primary image and available gallery URLs |
url | Canonical public listing URL |
scrapedAt, runId | Observation time and optional workflow ID |
Example normalized output:
{"listingId": "672276142","title": "Caixas iPhone 15 Pro Max","price": 15,"currency": "EUR","priceText": "15 €","country": "Portugal","countryCode": "pt","category": "electronics","location": "Lisboa, Benfica","condition": "used","sellerType": "private","postedAt": "2026-07-13T17:24:05+01:00","description": "Capas para iPhone 15 em excelente estado.","attributes": {"Estado": "Usado","Tipo": "Outros"},"imageUrl": "https://ireland.apollo.olxcdn.com/v1/files/example/image;s=750x1000","images": ["https://ireland.apollo.olxcdn.com/v1/files/example/image;s=750x1000"],"url": "https://www.olx.pt/d/anuncio/example-IDExample.html","scrapedAt": "2026-07-21T09:09:01.158Z"}
Unavailable fields are omitted or null. Exchange, free, or unpriced listings can have price: null while retaining priceText. Missing seller details, dates, or attributes are never invented.
How can I integrate it?
Start a run with the Apify API:
curl -X POST "https://api.apify.com/v2/acts/trovevault~olx-marketplace-listings-scraper/runs" \-H "Authorization: Bearer <APIFY_TOKEN>" \-H "Content-Type: application/json" \-d '{"query": "iPhone 15","countries": ["pt", "pl", "ro"],"category": "electronics","maxResults": 25}'
It also works with Apify clients, Schedules, webhooks, dataset exports, and MCP. It writes only to Apify storage unless you provide datasetId.
At the end of a run, the default key-value store contains:
OUTPUT: dataset URL plus aggregate counters.RUN_SUMMARY: saved rows, discovered listings, requests, failures, filters, and timing for each country.
How much does a run cost?
Cost depends on saved rows, pagination, memory, and proxy traffic. Most listings require one detail request. Multi-country totals scale with maxResults times the selected countries.
Protected markets use a 2 GB browser runtime and residential traffic, so they cost more. Start with 5 to 25 results per country, inspect them, then increase the limit. Proxy traffic follows your Apify plan.
What are the limitations?
- Search ranking, promoted results, and deep pagination are controlled by OLX.
- A normalized category may not have an exact equivalent in every country.
- Location filtering works only when OLX exposes a matching public location.
- Detail pages can be unavailable even when the search card remains public; card data is retained and unavailable fields become
null. - Seller names, descriptions, exact publication times, and attributes are not present on every listing.
- Contact details behind login, chat, phone reveal, or private account flows are not accessed.
- Source text can contain inaccurate seller claims; the Actor reports it without verifying the item or seller.
How do I troubleshoot it?
| Problem | What to check |
|---|---|
| Empty dataset | Use a broader keyword, choose category: "all", and remove location or price filters. |
| Fewer rows than requested | The market may have fewer public matches, limited pagination, duplicates, or rows removed by filters. |
| Protected-market access error | For Brazil, India, or Pakistan, keep Apify Proxy enabled with the RESIDENTIAL group. |
Some fields are null | The country site did not expose those fields publicly; use url to audit the source listing. |
| One country failed | Read RUN_SUMMARY; the Actor records that error and continues with all remaining countries. |
For issues, include the country, query, run time, run ID, and proxy status. Never post tokens, passwords, or private data.
Is responsible use required?
Yes. This Actor reads public listing pages. You are responsible for complying with applicable laws, marketplace terms, robots directives, data-protection requirements, and acceptable-use rules. Avoid collecting or using personal data without a lawful purpose. Do not use it to bypass login, private messaging, contact-reveal controls, or other access restrictions.