OLX Scraper [Only $0.9/1K💰] | 7 Countries | Price Data
Pricing
from $0.88 / 1,000 results
OLX Scraper [Only $0.9/1K💰] | 7 Countries | Price Data
Extract OLX classifieds listings from 7 country sites — olx.pl, olx.ro, olx.bg, olx.pt, olx.ua, olx.kz, olx.uz — via OLX's own public offers JSON API. Prices, GPS locations, sellers and category attributes for price monitoring, lead generation and market research. No browser, pay per result.
Pricing
from $0.88 / 1,000 results
Rating
0.0
(0)
Developer
Ahmed Jasarevic
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
2 days ago
Last modified
Categories
Share
OLX Scraper — Classifieds Data From 7 Countries Via the Official Offers API
Extract OLX listings from Poland, Romania, Bulgaria, Portugal, Ukraine, Kazakhstan and Uzbekistan for secondhand market research, used-car and real-estate lead generation, and cross-country price monitoring — through OLX's own public offers JSON API, no browser needed, at the cheapest per-result price among OLX scrapers on the Apify Store.
Main Use Cases
- OLX price monitoring — track how car, property and electronics prices move across seven CEE and Central Asian marketplaces.
- Used-car listings data — mileage, year, brand, engine, transmission and GPS location per ad, for auto lead generation and resale research.
- Real-estate lead generation — rooms, area, floor and district data for rental and resale property filtering at scale.
- Cross-country classifieds arbitrage — sort by newest first and catch fresh listings before competitors refresh.
- Secondhand market research — build a normalized dataset over 7 OLX domains with one schema and one pipeline.
- Delivered-listing prospecting — filter
courierOnlyto find resellable items that actually ship.
How It Works

Looking for an OLX scraper or a practical multi-country classifieds data alternative? Choose Poland, Romania, Bulgaria, Portugal, Ukraine, Kazakhstan or Uzbekistan, add search terms or category and city filters, then set price, delivery and item limits. Each row includes listing ID, title, description, URL, domain, price and currency, previous price, city, region, district, GPS coordinates, seller name and type, delivery and promotion flags, timestamps, photos and promoted attributes such as mileage, rooms, brand and year.
Use the dataset for price monitoring, used-car and property research, resale sourcing and cross-country market comparison. Export as JSON, CSV or Excel, or pull results through the Apify API. Pay from $0.90 per 1,000 listings.
Build Business and Resale Databases Without Manual Browsing
Every listing lands as one structured row with price and currency, GPS lat/lon, seller id/name/type, delivery flag, promo flags and timestamps — no re-visiting detail pages to enrich rows later. Add Also scrape these sites to cover several OLX markets in a single run: every seed and site shares the page budget and gets a slice of maxItems, so results land in one dataset tagged with their own domain.
Input
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
country | string (select) | no | olx.pl | Main OLX site: olx.pl, olx.ro, olx.bg, olx.pt, olx.ua, olx.kz, olx.uz. Language, currency and location names follow this site. |
additionalCountries | array of string | no | [] | More OLX country sites to crawl in the same run; rows are tagged with domain. |
searchQueries | array of string | no | ["rower"] | Keywords to search on every selected site, e.g. ["iphone", "mieszkanie"]. Leave empty to browse a category/city listing. |
excludeKeywords | array of string | no | [] | Words to keep out of results; sent as negated OLX terms (-word). |
startUrls | array of string (URL) | no | [] | Advanced: full /api/v1/offers?... URLs used instead of queries, for filters not exposed in the form. The URL's domain decides the OLX site. |
categoryId | integer | no | 0 | OLX category id (the number before -CID- in a listing URL, e.g. 767). |
cityId | integer | no | 0 | Restrict results to one OLX city. |
regionId | integer | no | 0 | Restrict to one region (voivodeship/county); works on olx.pl, olx.ro, olx.ua. |
distance | integer | no | 0 | Search radius in km around the selected city; requires cityId. |
courierOnly | boolean | no | false | Return only listings that offer courier delivery. |
sortBy | string (select) | no | relevance:desc | relevance:desc, created_at:desc (newest first — best for arbitrage), filter_float_price:asc, filter_float_price:desc. |
priceMin | number | no | 0 | Minimum price. Only accepted on leaf categories — the Actor auto-retries without the filter if OLX refuses. |
priceMax | number | no | 0 | Maximum price. Same leaf-category caveat as priceMin. |
maxItems | integer | no | 100 | Total listings across all sites and queries. OLX caps one search at 1000; add queries or sites to go higher. Hard cap 20000. Free users capped at 10. |
maxRequestsPerCrawl | integer | no | 30 | Upper bound on API calls (one call ≈ 65 listings). Hard cap 400. |
maxConcurrency | integer | no | 12 | Parallel in-flight API calls. Hard cap 25. Lower it if OLX rate-limits you. |
maxRequestsPerMinute | integer | no | 300 | Throttle ceiling to stay under OLX's WAF radar. Hard cap 3000. |
proxy | object | no | off | Standard Apify proxy picker. Enable a residential group for the target country if OLX blocks your IP. |
Output: One Dataset Row per OLX Listing
The default dataset view (overview) maps one row per listing with photoUrl, title, price, currency, city, region, district, sellerName, sellerType, mileage, rooms, brand, createdAt, refreshedAt, domain, siteName, url. The full stored record adds:
| Field group | Fields |
|---|---|
| Identity | id/offerId, title, description, url, status, offerType |
| Price | price, currency, priceLabel, negotiable, priceArranged, previousPrice, previousPriceLabel, convertedPrice, convertedCurrency |
| Location | city, cityId, district, districtId, region, regionId, latitude, longitude, mapUrl |
| Seller | sellerId, sellerName, sellerType, isBusiness, sellerCompanyName, sellerSince, sellerLastSeen, contactPhoneAvailable, contactChatAvailable, protectPhone, safeDeal |
| Delivery & promo | deliveryAvailable, delivery, promoHighlighted, promoUrgent, promoTopAd, promoOptions |
| Time | createdAt, refreshedAt, pushedUpAt, validUntil, ageDays |
| Photos | photoUrl, photos, photosLarge, photoCount |
| Attributes | attributes, attributeNames plus promoted convenience fields: mileage, rooms, brand, model, year, condition, area, engineSize, enginePower, transmission, seats, color, floor, vin |
| Taxonomy | categoryId, categoryType, domain, siteName |
Note: OLX's schema spells mileage as
milage; the Actor maps bothmilageandmileageto themileagefield for you.
Example Input
{"country": "olx.pl","additionalCountries": ["olx.ro", "olx.bg"],"searchQueries": ["rower", "horyzowca"],"excludeKeywords": ["czesci", "uszkodzony"],"sortBy": "created_at:desc","maxItems": 1000,"maxConcurrency": 16}
Example Output
{"id": 1089622638,"title": "Rower dzieciecy 14'' z koszykiem i bocznymi kolkami","description": "Rower w bardzo dobrym stanie.\nWozek dla dziecka.","url": "https://www.olx.pl/d/oferta/rower-dzieciecy-14-z-koszykiem-i-bocznymi-kolkami-CID767-ID1bJVCG.html","domain": "olx.pl","siteName": "Poland","price": 400,"priceLabel": "400 zl","currency": "PLN","negotiable": false,"city": "Busko-Zdroj","region": "Swietokrzyskie","district": null,"latitude": 50.47086,"longitude": 20.72001,"mapUrl": "https://www.google.com/maps?q=50.47086,20.72001","sellerId": 1114454131,"sellerName": "Fedoryshyn","sellerType": "private","isBusiness": false,"createdAt": "2026-08-06T09:53:10+02:00","refreshedAt": "2026-09-24T09:15:38+02:00","ageDays": 52,"deliveryAvailable": true,"promoHighlighted": true,"promoUrgent": false,"promoTopAd": true,"photoCount": 3,"photoUrl": "https://ireland.apollo.olxcdn.com:443/v1/files/uj40c3qxh5g42-PL/image;s=750x1000","photos": ["... "],"condition": "Jak nowe","attributes": { "state": "Jak nowe", "gender": "Uniseks", "equipment": "Kosz" },"categoryId": 767}
Pricing: Cheapest Per-Result OLX Scraper on the Store
This is a pure JSON API scraper — no browser, no paid anti-bot API. Each API call returns up to ~65 listings and pages are pulled in parallel, so 1,000 listings take roughly 16 requests that finish in seconds. Memory starts at 256 MB.
- Start: $0.00005 per run
- Result: $0.0009 — $0.90 per 1,000 listings
- Free tier: Apify free users get a 10-listing preview; paid accounts get the full
maxItemsyou request. - Proxy: billed only if you enable it (Apify includes proxy traffic in paid plans).
Verified against the OLX scrapers currently on the Store (trev0n, bovi, abotapi, parseforge, dadhalfdev): none matches this per-result price at this country coverage — seven sites, one schema.
Integrations & Automation
The Actor runs on the Apify platform, so you get REST API access, webhooks, scheduled runs, dataset exports (JSON, CSV, Excel) and Zapier/Make integrations out of the box. Recommended schedules for recurring use:
- Arbitrage hunting:
created_at:desc+courierOnlyevery 30–60 minutes to catch fresh, shippable listings. - Price monitoring:
filter_float_price:asc+ a leafcategoryId, run daily, export to a spreadsheet. - Lead generation: residential proxy + city radius per target city, weekly sweep into your CRM.
Related Actors
- Vinted Smart Scraper — Cross-Country Arbitrage Scanner — Vinted price-gap arbitrage across 26 markets; same secondhand-resale cluster.
- Allegro Fast Product Scraper (Apify) — Polish e-commerce product listings; same CEE commerce region.
- Vinted Search Scraper — Vinted product listings and price monitoring.
- Vinted Cross-Country Arbitrage Scraper — by the same developer; Vinted price comparison for arbitrage deals.
- eBay Sold Items Scraper — by the same developer; final sold prices for resale research.
FAQ
Is there an official OLX API — why use this Actor instead?
OLX offers no public partner API for listing data. The Actor uses the offers JSON endpoint OLX itself whitelists for crawlers (Allow: /api/v1/offers/ in robots.txt), which many older scrapers miss — they rely on the now-dead /api/relevance/v4/search endpoint (returns Unsupported API version) or render client-side pages in a browser. This Actor ships one clean row per listing without that overhead.
What are the alternatives to this OLX scraper?
Manual browsing, or other Store actors: browser-based OLX scrapers (slower, pricier), single-country actors such as trev0n/olx-scraper (olx.pl only) or dadhalfdev/olx-portugal-scraper (PT only), and abotapi/olx-scraper (9 countries, higher per-result price). For adjacent marketplaces, see the Related Actors section above (Vinted, Allegro, eBay, OLX Brazil actors for the Brazilian platform).
Why is olx.com.br not in the country list?
Because a proxy is not enough — the endpoint is genuinely gone. OLX Brazil no longer runs the same platform: it is a Next.js app serving search through separate backend-for-frontend services, GET /api/v1/offers is not routed there, and the replacement endpoint is not publicly documented. A run on olx.com.br would only cost money for an empty dataset, so it is rejected with an explicit error instead.
Which countries can I scrape and why not more?
Seven domains are verified working against the live offers API: olx.pl, olx.ro, olx.bg, olx.pt, olx.ua, olx.kz, olx.uz. Other OLX domains either no longer exist (olx.co.za shut down, olx.pk does not resolve), do not expose this endpoint (olx.in 404, olx.ae bot wall), or sit behind a WAF that rejects datacenter IPs.
Why did my run return 0 items?
Almost always the 403 datacenter-IP block. Enable the proxy and pick a residential group for the target country (PL for olx.pl, RO for olx.ro…). Secondary causes: the query is too narrow for that country (keywords are not translated between sites), or maxItems is very low.
Can I get seller phone numbers?
No. The API only reports that a phone is available (contactPhoneAvailable); actual extraction is intentionally out of scope.
Why are some prices null on Kazakhstan and Uzbekistan?
Prices are returned there — the gap is category-specific. Vehicle, dealer and "price on request" ads on olx.kz/olx.uz come back without a price param, while property, electronics and bikes normally have one. The run log reports exact per-site price coverage.
For AI Agents & LLM Apps
Purpose: returns one dataset row per OLX listing (price, GPS, seller, attributes) across 7 OLX country sites.
Minimal working input:
{ "country": "olx.pl", "searchQueries": ["iphone"], "maxItems": 100 }
Variants:
- Multi-country:
{ "country": "olx.pl", "additionalCountries": ["olx.ro", "olx.bg"], "searchQueries": ["telefon"], "maxItems": 500 } - Arbitrage/newest-first:
{ "country": "olx.pl", "searchQueries": ["rower"], "sortBy": "created_at:desc", "courierOnly": true, "maxItems": 200 }
Output field list (common): id, title, description, url, domain, siteName, price, currency, priceLabel, negotiable, previousPrice, city, cityId, district, region, regionId, latitude, longitude, mapUrl, sellerId, sellerName, sellerType, isBusiness, deliveryAvailable, promoHighlighted, promoUrgent, promoTopAd, createdAt, refreshedAt, ageDays, photoUrl, photos, photoCount, attributes, categoryId, mileage, rooms, brand, model, year, condition, area, engineSize, enginePower, transmission, seats, color, floor, vin.
Behaviors an agent should know:
searchQuerieshas default["rower"]— always override it, or the run scrapes bicycle ads.sortBycreated_at:descreturns newest listings first;relevance:descis the default and may mix unrelated promoted ads.priceMin/priceMaxare ignored on non-leaf categories — the Actor auto-retries without them; don't design agent logic around strict price bounds on broad queries.- One search is capped at 1000 results by OLX — to exceed 1000, add
searchQueriesoradditionalCountries, not justmaxItems. - Datacenter IPs get HTTP 403 from OLX's WAF — if results are empty, set proxy with a residential group for the target country.
- Cost rule of thumb: 1 API call ≈ 65 listings, so
maxRequestsPerCrawl: 5already yields ~250 rows. RaisemaxItemsbefore raising request count.
Billing: pay-per-result — start $0.00005, then $0.0009 per listing ($0.90 per 1K results). Free tier caps at 10 listings.
Legal & Compliance Disclaimer
This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by OLX Group or any of the country sites it reads. It accesses only publicly available listing data via the offers API path that OLX's robots.txt explicitly allows (Allow: /api/v1/offers/) — no login bypass, no CAPTCHA solving, no private endpoints. You are responsible for complying with the applicable OLX site's Terms of Use and with data-protection law. Output includes personal data of sellers in the EU/UK (e.g. sellerName, sellerId), which falls under GDPR — keep or drop those fields according to your use. This information is not legal advice.
SEO Keywords
olx scraper, olx.pl data extraction, olx poland classifieds scraper, olx romania listings, olx bulgaria scraper, olx portugal scraper, olx ukraine data, olx kazakhstan listings, olx uzbekistan classifieds, olx price monitoring, secondhand market data, used car listings data, real estate listings scraping, classifieds lead generation, olx offers api, cross-country arbitrage, olx seller data, olx gps location, apartment listing monitoring, delivered-listing prospecting, olx category attributes, olx api alternative, olx cost per result, cee marketplace data