OLX Scraper: Listings, Ad Details, Phone Numbers avatar

OLX Scraper: Listings, Ad Details, Phone Numbers

Pricing

from $2.00 / 1,000 results

Go to Apify Store
OLX Scraper: Listings, Ad Details, Phone Numbers

OLX Scraper: Listings, Ad Details, Phone Numbers

Scrape OLX in Poland, Ukraine, Romania, Bulgaria, Portugal, Kazakhstan, Uzbekistan, and India. Search by keyword, category, location, and price, or paste an OLX search link. Get ad details with descriptions and photos, and seller phone numbers where OLX allows it. $2 per 1,000 results.

Pricing

from $2.00 / 1,000 results

Rating

5.0

(1)

Developer

Sourabh Kumar

Sourabh Kumar

Maintained by Community

Actor stats

1

Bookmarked

51

Total users

18

Monthly active users

4 hours ago

Last modified

Features

Limited permissions

Share

OLX scraper: search listings, offer details and seller phone numbers

Get OLX classifieds data in 2 ways: search by keyword, filters or a pasted OLX link, or fetch specific offers by URL. Press Start and download a clean spreadsheet.

$2 per 1,000 results, plus $0.01 per run. No proxy setup or login needed.

Works on OLX Poland, Ukraine, Romania, Bulgaria, Portugal, Kazakhstan, Uzbekistan and India.


Pick a mode

Set Mode (mode) and Market (market), then fill the section for your mode. The other mode's sections are ignored.

You wantmodePaste into
Offers for a keyword, category or locationsearchquery, or the filters
The results of a search you built on the OLX websitesearchstartUrls (OLX search or category links)
Specific offers you already havedetailofferUrls (offer links or IDs)

Every mode can be scheduled. A schedule repeats the same input, so move Posted after forward between runs to get only new listings.


Why this OLX scraper?

  • 💸 One flat price: the same in both modes, with no monthly fee.
  • 🌍 Eight countries, one tool: the same columns on all eight OLX sites.
  • 🔗 Paste any OLX search: every filter you set on the website comes with the link, even category-only ones like car model.
  • 📞 Seller phone numbers: looked up on request, and each row says what happened.
  • 💼 Job pay included: salary range, currency and pay type as separate columns, where OLX gives them.
  • 🆕 New-listings monitoring: get only the offers created on or after a date.
  • 🧾 You pay only for rows you get: each offer is charged once per run, duplicates are free.

Paste a keyword, or an OLX search link with your filters already set.

Get one row per offer: title, price, condition, description, location, seller, photos, dates and every attribute the ad lists, such as mileage or room count. Search rows already carry the full description and photos, so you need the second mode only for offers you already have.

OptionFieldDefaultWhat it does
KeywordqueryFree-text search
OLX search URLsstartUrlsOLX search or category links. Each keeps its own country and filters
Category ID, Region ID, City IDcategoryId, regionId, cityIdNumeric IDs, shown on any result row (a row shows its narrowest category)
Min price, Max pricepriceMin, priceMaxIn the currency OLX uses for that category: usually the local one, but euros on OLX Romania property and cars, and always UZS on OLX Uzbekistan, even for offers priced in UYE
Conditionconditionanyany, new or used
Sort bysortByrelevancerelevance, created_desc, price_asc, price_desc
Posted afterpostedAfterOnly offers created on or after this date
Reveal phone numbersincludePhoneoffLook up the seller's number
Max resultsmaxItems1000 means no limit

Input

{
"mode": "search",
"market": "pl",
"query": "iphone 13",
"categoryId": 99,
"priceMin": 800,
"priceMax": 2000,
"condition": "used",
"includePhone": true,
"maxItems": 100
}

Or paste a link from the website:

{
"mode": "search",
"market": "pl",
"startUrls": ["https://www.olx.pl/motoryzacja/samochody/bmw/?search%5Bfilter_enum_model%5D%5B0%5D=3-as-sorozat"],
"maxItems": 500
}

Output (one real row, selected fields)

{
"id": 1071736548,
"url": "https://www.olx.pl/d/oferta/iphone-13-pro-max-128gb-gold-100-telakces-manufaktura-CID99-ID1avTDm.html",
"title": "IPHONE 13 PRO MAX 128GB GOLD 100% Telakces Manufaktura",
"price": 1799,
"priceLabel": "1 799 zł",
"currency": "PLN",
"priceType": "price",
"condition": "used",
"createdTime": "2026-05-07T13:15:43+02:00",
"lastRefreshTime": "2026-11-04T15:18:17+01:00",
"city": "Łódź",
"region": "Łódzkie",
"district": "Bałuty",
"lat": 51.80141,
"lon": 19.43061,
"sellerType": "business",
"companyName": "TELAKCES.COM",
"hasPhone": true,
"phoneStatus": "revealed",
"sponsoredSlot": false,
"photoCount": 5,
"params": {
"state": "Używane",
"phonemodel": "iPhone 13 Pro Max",
"builtinmemory_phones": "128GB"
},
"status": "active",
"market": "pl"
}

Output for a job ad (one real row, selected fields)

{
"id": 1103608719,
"url": "https://www.olx.pl/oferta/praca/specjalista-ds-obslugi-i-koordynacji-zamowien-novi-pawilony-CID4-ID1cGD2D.html",
"title": "Specjalista ds. Obsługi i Koordynacji Zamówień / Novi Pawilony",
"price": null,
"salaryFrom": 4800,
"salaryTo": 7000,
"salaryCurrency": "PLN",
"salaryType": "monthly",
"categoryType": "job",
"city": "Radom",
"region": "Mazowieckie",
"companyName": "Novi Pawilony",
"params": {
"type": "Pełny etat",
"experience": "Wymagane doświadczenie"
},
"market": "pl"
}

price: 0 can mean a free or exchange offer, so check priceType. In search rows, priceLabel is what the site shows, which can be in a different currency from price on Ukrainian, Romanian and Uzbek offers. convertedPrice then holds that amount. On OLX Uzbekistan, currency is UZS or UYE, the unit the site shows as у.е.


2. Offer details: fetch specific offers

Paste OLX offer links or numeric offer IDs. A link uses its own country, and an ID uses the Market setting.

Get the same fields as search, plus inputUrl, the link or ID you pasted, so you can match each row to your list. Here priceLabel shows the seller's own currency, and convertedPrice and sponsoredSlot stay empty.

OptionFieldDefaultWhat it does
Offer URLs or IDsofferUrlsOffer links or bare numeric IDs
Reveal phone numbersincludePhoneoffLook up the seller's number
Max resultsmaxItems1000 means no limit

Input

{
"mode": "detail",
"market": "pl",
"offerUrls": [
"https://www.olx.pl/d/oferta/jak-nowy-iphone-13-128gb-2-lata-gwarancji-rozne-kolory-CID99-ID14FiGI.html",
"1071736548"
],
"includePhone": true
}

Output (one real row, selected fields)

{
"id": 985081464,
"inputUrl": "https://www.olx.pl/d/oferta/jak-nowy-iphone-13-128gb-2-lata-gwarancji-rozne-kolory-CID99-ID14FiGI.html",
"url": "https://www.olx.pl/d/oferta/jak-nowy-iphone-13-128gb-2-lata-gwarancji-rozne-kolory-CID99-ID14FiGI.html",
"title": "JAK NOWY | IPHONE 13 128GB | 2 lata gwarancji! | Różne kolory",
"price": 999,
"priceLabel": "999 zł",
"currency": "PLN",
"condition": "used",
"city": "Tychy",
"region": "Śląskie",
"sellerName": "LUXTRADE STORE Tychy",
"sellerSince": "2017-07-11T16:11:47+02:00",
"phoneStatus": "revealed",
"photoCount": 7,
"market": "pl"
}

An offer that has left the site delivers no row and is not charged. The run says how many were not found.


Use it from an AI agent (Claude, ChatGPT, MCP)

Connect Claude, ChatGPT, Cursor or any MCP client to Apify's MCP server with this scraper as a tool:

https://mcp.apify.com?tools=sourabhbgp/olx-scraper

Then ask in plain words. The agent fills in the input, and you pay the same per result. For example:

  • "Find used iPhone 13 offers in Poland between 800 and 2,000 zł."
  • "What do sellers ask for flats in this OLX Romania search?" (with a link)
  • "List offers for bicycles in Portugal posted since Monday."
  • "Get the details of these three OLX offers."

Notes for the agent:

QuestionModeMinimum input
Offers for a keywordsearchmarket, query
Offers in a category or placesearchmarket, categoryId or regionId or cityId
Results of an OLX linksearchstartUrls
New offers since a datesearchmarket, query, postedAfter
Specific offersdetailofferUrls
  • Keep the cost small: $2 per 1,000 rows, so set maxItems to what the question needs (20 to 100 for a quick answer). Each phone lookup with includePhone makes a run slower, so leave it off unless numbers are needed.
  • Dates: postedAfter takes YYYY-MM-DD, or a full time such as 2026-11-01T08:00:00Z. A date alone means midnight UTC. It forces newest-first order.
  • IDs and links: offerUrls takes offer links or numeric IDs, never a search link. Search links go in startUrls, and an offer link there is refused. Numeric category and region IDs differ per market: read them from any result row, or use a link.
  • Filters that a category refuses: condition is not available on every category, such as cars on OLX Poland. OLX rejects the search and the run explains it, so retry without condition.
  • Keywords: query also matches ad descriptions, so add categoryId or use a link when the question is about one kind of item, above all with postedAfter.
  • Key output fields: price is in currency, as the seller set it. priceType says what kind of price it is, and price: 0 on a free or exchange offer is not a real price. phones is null unless phoneStatus is revealed: withheld means OLX refused to give the number, and failed means our lookup did not get through. no_phone means the offer lists no number, not_available means the site gives no numbers (OLX India), not_tried means the run ran out of time, and offer_gone means the offer left the site. On OLX India, hasPhone is true where the site offers a call and null otherwise, and always null on search rows. hasPhone true does not promise a number. lat and lon are approximate unless mapShowDetailed is true.
  • Reading the result: the status message starts with a code when a run ends short: [U_...] means the input, [E_...] means our side, except [E_PAGE_CEILING], which means OLX stopped serving the search. The RUN_SUMMARY record in the run's key-value store has the totals and, for detail or startUrls, each input's outcome.
  • Time: 15 offers take about 10 seconds; a full search of about 1,300 offers takes about 5 minutes. OLX India reads about 3 to 4 offers a second, so a full 10,000 takes about 45 minutes. A pasted link can add a minute or more. Phone lookups add about a second per offer.

What people use it for

  • 🛒 Price research: track asking prices for a product or brand across a whole country.
  • 🚗 Car and property data: pull mileage, year, area, rooms and location at scale.
  • 💼 Job market research: compare pay ranges by role and city.
  • 🧲 Lead generation: collect business sellers in a category or region.
  • 📈 Resellers: spot underpriced offers as they appear, with a daily run.
  • 🗺️ Local market analysis: map supply and pricing by city, district or region.

How much does it cost?

You pay per row, and each row is charged once per run. The price is the same in both modes and with phone lookups.

What you getPer 1,000
One offer$2.00

Each run also costs $0.01 to start.

  • Free plan: your $5 monthly credit covers about 2,500 rows.
  • Starter plan ($19): about 9,500 rows a month.

Limitations

  • About 1,300 offers per search, or 10,000 on OLX India: OLX stops serving a search there, however many matches it reports. The run says so. To reach more, split the search by category, region or price.
  • Phone numbers are often not available: OLX refuses the lookup on many offers, most of them in some countries, and phoneStatus shows which.
  • Location is usually approximate: OLX places most offers near a city or district, not at the exact address.
  • Newest first follows refresh dates: OLX moves refreshed offers up, so an old offer can appear near the top.
  • Sponsored offers: OLX mixes them into most pages, as on the website. They count towards maxItems, and sponsoredSlot marks them.
  • Kazakh and Uzbek links: rows from OLX Kazakhstan and Uzbekistan carry Russian params labels, even from a link in another language.
  • OLX India gives less: no phone numbers, no new or used filter, and no negotiable, delivery or chat fields, so those columns stay empty. With includePhone on, phoneStatus is not_available. Relevance gives the same order as Newest first, and createdTime is the first-posted date, while the site shows the last refresh date. Deep pages of a keyword and city search can include a few nearby cities.
  • Other OLX countries are not covered: only the eight sites listed above.

FAQ

How do I scrape OLX without coding?

Pick a mode, enter a keyword or paste a link, and press Start. Download the results as Excel, CSV or JSON.

How do I get only new listings every day?

Run a search with Posted after set to the date of your last run. You get only the offers created since then. A schedule repeats the same input, so update the date before each run, for example through the Apify API. An offer that falls inside two runs' dates is charged in both.

Can I get more than 1,300 offers?

Yes, across several searches. Split by category, region or price band, then paste the links into OLX search URLs. An offer found twice in one run is charged once.

Do I need a proxy or an OLX account?

No. It works out of the box, and it doesn't log in.

Can I use it from code or an AI agent?

Yes. Call it through the Apify API, or connect it to an AI agent through Apify's MCP server (see above).

It collects only what OLX shows any visitor, with no login. How you use the data is your responsibility, especially personal data such as names and phone numbers.

Your feedback

Something missing or wrong? Open an issue.

⌂ 换网址