OLX Marketplace Listings Scraper avatar

OLX Marketplace Listings Scraper

Pricing

from $1.70 / 1,000 listings

Go to Apify Store
OLX Marketplace Listings Scraper

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

Trove Vault

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

8 days ago

Last modified

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:

CountryCodeCurrencyAccess method
Bosnia and HerzegovinabaBAMPublic OLX API
BrazilbrBRLResidential proxy and browser fallback
BulgariabgBGNDirect extraction
IndiainINRResidential proxy and browser fallback
KazakhstankzKZTDirect extraction
PakistanpkPKRResidential proxy and browser fallback
PolandplPLNDirect extraction
PortugalptEURDirect extraction
RomaniaroRONDirect extraction
UkraineuaUAHDirect extraction
UzbekistanuzUZS or USDDirect 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:

FieldDescription
listingIdMarketplace listing identifier
titlePublic listing title
price, currency, priceTextParsed price, ISO currency, and original label
country, countryCodeMarketplace name and two-letter input code
category, location, conditionNormalized listing context
sellerName, sellerTypePublic seller information when exposed
postedAtPublication timestamp when available
descriptionPlain text with HTML tags such as <br> removed
attributesCategory-specific key-value details
imageUrl, imagesPrimary image and available gallery URLs
urlCanonical public listing URL
scrapedAt, runIdObservation 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?

ProblemWhat to check
Empty datasetUse a broader keyword, choose category: "all", and remove location or price filters.
Fewer rows than requestedThe market may have fewer public matches, limited pagination, duplicates, or rows removed by filters.
Protected-market access errorFor Brazil, India, or Pakistan, keep Apify Proxy enabled with the RESIDENTIAL group.
Some fields are nullThe country site did not expose those fields publicly; use url to audit the source listing.
One country failedRead 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.