OLX Scraper

Classifieds in any
OLX country, as rows.

Paste an OLX search URL from any country the platform runs in - olx.ro, olx.pl, olx.kz, olx.in - and get the listings back as rows: the title and description, the price with the currency it is quoted in, where it is, who is selling and whether they are a business, every image, and a link to the offer.

one-time 500 free rows$0.002 per row after28 columnsCSV · XLSX · JSON
How it works

A search URL in,
the listings out.

The input is whatever OLX search you are looking at, on whichever country's site you are looking at it.

  1. STEP 1Sign in to the platform.
  2. STEP 2Open the OLX Scraper.
  3. STEP 3Paste olx.* search URLs, one per line - or upload a CSV, XLSX, TXT or Parquet file.
  4. STEP 4Set a limit per query, or leave it empty to take everything.
  5. STEP 5Choose your output format.
  6. STEP 6Click Get Data.

One row per listing, each tagged with the query it came from - so a run across several countries still reconciles back to your input list.

Why teams use it

One tool,
every OLX country.

Any country, same columns

OLX runs a lot of national sites and this reads all of them through one form. Paste a Romanian search and a Polish one on consecutive lines and they come back in the same shape.

Location split into its parts

City, region and district each get their own column, with ids alongside the names, rather than arriving as one string you have to pull apart. The combined string is still there if you want it.

Private seller or business, flagged

A dedicated column marks whether the listing is a private sale or a trader, which is the split that decides whether a price series is measuring a consumer market or a professional one.

What you get back

Twenty-eight columns,
one row per listing.

Each row carries the listing as OLX's results show it: the title and description, the price and its currency, the location broken into parts, the seller and their account age, every image, and a link to the offer.

The column list below is the header row of real runs rather than a specification. Read the note under it before you build against it - this output has three shapes that catch people out, and one of them will quietly corrupt a price comparison if you assume the currency from the country you searched.

Data dictionary

Twenty-eight columns,
in every export format.

Taken from the header row of real runs, identical to the column list the platform ships. The JSON and the workbook carry the same names, so no format here is narrower than another.

query
The OLX search URL you submitted, repeated on every row that came from it.
id
OLX’s own identifier for the listing.
author_title
The seller’s display name as OLX shows it.
author_id
OLX’s identifier for the seller account, which is what you group by to find everything one seller has listed.
company_name
The trading name where the seller has one. Do not treat this as a mirror of business - the two do not track each other reliably in either direction.
is_phone_viewable
Whether OLX exposes a phone number on the listing - the lowercase strings yes and no.
author_member_since
The date the seller’s account was created, as YYYY-MM-DD. A rough proxy for how established they are.
listing_url
Link to the offer. Identical to url on every row we have seen - the two are a duplicate pair, so pick one and ignore the other.
title
The listing title as the seller wrote it.
description
The listing body text.
business
Whether the listing is from a trader rather than a private seller - the lowercase strings yes and no.
location_city_id
OLX’s numeric id for the city.
location_city_name
The city name as displayed.
location_city_normalized_name
The normalised form of the city name - the one to join on, since the displayed name carries local spelling and diacritics.
location_region_id
OLX’s numeric id for the region.
location_region_name
The region name as displayed.
location_region_normalized_name
The normalised form of the region name.
images
Every image URL in one string, joined by a semicolon and a space - not an array. Split on "; " to get the list.
price
The asking price as a bare number in a string - no symbol and no thousands separator. The unit is in the next column, not this one.
currency
The currency the price is quoted in. Read this per row. A single search on one national site returned prices in more than one currency, so inferring it from the domain will give you wrong numbers.
phones
Intended for the seller’s phone number.
location_district_id
OLX’s numeric id for the district, where the listing has one.
location_district_name
The district name, where the listing has one.
location
The combined location string as OLX displays it, typically city and region together. The split columns above are the same information, already separated.
date
When the listing was posted, as YYYY-MM-DD. A real date - no arithmetic against your run date required.
url
Link to the offer. The duplicate of listing_url.
image
The first image URL - the same value as the first entry in images.
details
The category-specific spec line OLX prints under the title, as free text - a vehicle listing gives something like 150 000 km · 2022. It varies by category and carries trailing whitespace, so trim it before parsing.

Three shapes in this output catch people out. First and most costly: currency must be read per row. One search on a single national site came back with prices in more than one currency, so a price series that assumes the currency from the domain is silently mixing units. Second: images is one string joined by a semicolon and a space, not an array - split on "; ", and note that image is just its first entry. Third: url and listing_url were identical on every row we have seen, as were the combined location and the split city and region columns, so several of the twenty-eight are the same fact twice. Also worth knowing before you write a parser: details is free text that changes shape by category and carries trailing whitespace, and company_name does not reliably follow the business flag in either direction.

Run controls

Set on the job,
not in the spreadsheet.

A per-query limit decides what a run costs and how much lands in the file. It is chosen before the job starts, alongside how you hand over the list of searches.

olx.ro search URL olx.pl search URL olx.kz search URL olx.in search URL Limit per query Empty for everything Paste one per line CSV upload XLSX upload TXT upload Parquet upload
Common workflows

Three jobs people
most often run here.

A few examples of how teams use classifieds data to answer a question they actually have.

Pricing

Price a category across borders

OLX covers a lot of countries with one shape of output, so the same search run against several national sites gives a cross-border price picture in a single file. Convert on the currency column rather than on the domain and the comparison holds.

Pricing · Marketplaces
Supply

Separate the traders from the private sellers

The business flag splits a category into a consumer market and a professional one. Those two behave differently on price and on how fast stock turns, and averaging them together hides both.

Strategy
Research

Map supply down to the district

City, region and district arrive as their own columns with ids attached, so geographic rollups do not start with string surgery. Join on the normalised names and local spelling stops being a problem.

Research
Pricing

Pay only for the listings
you actually pull.

No subscription, no minimum, no recurring bill. Your first 500 rows are on us - after that, pay-as-you-go at the same flat rate as every other scraper here.

Free tier

500 free rows - $0

Every new account, one-time. No credit card required. Per-query limits, file upload and every export format included.

$0 forever
Pay-as-you-go

$0.002 per row, after the free tier

Roughly $2 per 1,000 listings. The pre-flight estimator shows the row count and credit cost before a run starts - no surprise bills, no compute units to translate.

Most popular
Volume

Custom · high volume

Volume pricing, dedicated workers and an SLA for continuous monitoring or very large historical pulls. Tell us your numbers and we will quote.

Talk to us
10% off your first paid run.Use code LIVESCRAPER10 at checkout.
Sign up
Pairs well with

One classifieds site,
and the ones beside it.

The legal bit

Is it legal to scrape
OLX listings?

Short answer: yes for the public listing content - and this output has more seller detail in it than most, which is worth planning for.

Listings on OLX are published to be found. The title, the description, the price, the location, the images and the seller's display name are shown to anyone who runs the search, signed in or not. Collecting publicly visible listing data for price research is long-established practice, and nothing here touches a login or a paywall.

This schema carries more about the seller than a plain price scrape does: a display name, an account id, an account creation date, a business flag, and columns for a trading name and a phone number. OLX is huge in the EU, so the GDPR applies to what you do with those downstream, not to the fact that they were published. Two things follow. If your analysis is about prices and supply, drop the seller columns at ingest and the question stops being yours. And if you do keep them, treat the phone column as personal data by default, whatever any given run happens to return.

OLX's own terms restrict automated access, so this is a terms question as well as a legal one - if you have a contractual relationship with the platform, check it. We run no third-party trackers on the data layer, and your exports auto-delete after 30 days.

livescraper.app · principles
Public listing content only
No logins, no accounts touched
Seller columns are personal data - drop if unused
GDPR-aligned by default
Exports auto-delete (30 days)
Check OLX's own terms before scaling.
Common questions

Things people
ask before signing up.

The questions we hear most. Anything else? Talk to us - humans, not bots, write the answers.

How do I scrape OLX listings?+
Using the OLX Scraper:
  1. Sign in to the platform.
  2. Open the OLX Scraper.
  3. Paste olx.* search URLs, one per line - or upload a CSV, XLSX, TXT or Parquet file.
  4. Set a limit per query, or leave it empty to take everything.
  5. Choose your output format.
  6. Click Get Data.
Which OLX countries does it work on?+
Any of them - you paste the search URL from whichever national site you are on, so olx.ro, olx.pl, olx.kz and olx.in all go in the same box, one per line. The columns come back in the same shape regardless of which country the search came from.
What comes back for each listing?+
Twenty-eight columns covering the offer, the location and the seller: the listing id, title, description, price and currency, the posting date, the images, a link to the offer, the city, region and district as separate columns with ids, and the seller's name, account id, account age and business flag. All twenty-eight are in the CSV and XLSX as well as the JSON.
Can I work out the currency from the country I searched?+
No, and this is the mistake most likely to cost you. A single search on one national site came back with prices quoted in more than one currency, so the domain does not tell you the unit. Read the currency column per row and convert on that - otherwise a price series quietly mixes units and every aggregate built on it is wrong.
Why do some columns look like duplicates?+
Because several are. On every row we have seen, url and listing_url held the same link, image held the first entry of images, and the combined location string held the same city and region that the split columns already carry. Pick whichever form suits your pipeline and ignore its twin rather than treating them as independent fields.
Is images a list?+
Not as it arrives. It is a single string containing every image URL joined by a semicolon and a space, so split on that to get a list. The separate image column is a convenience holding the first URL only.
My older export has far fewer columns. Why?+
Because the output widened on 2 July 2026. Before that date a run returned eight columns - query, title, price, location, date, url, image and details. From that date it returns the twenty-eight documented here, with the seller, currency, description and split location fields added. If you have a file from before the change, that is why it looks narrower; nothing was removed.
How much does it cost?+
The first 500 rows are free and one-time, with no credit card. After that it is $0.002 per row - about $2 per 1,000 listings - which is the same flat rate as every other scraper on the platform. The estimator shows the cost of a run before it starts.

Your first 500 listings,
on the house.

500 one-time free rows on every new account - no expiry. After that it is $0.002 per row, pay-as-you-go - no card on file until you say so.

Activates instantly · no card required

Scrape OLX classifieds listings at scale

Livescraper's OLX Scraper turns marketplace searches into listing data. You submit olx.* search URLs from any country the platform runs in - typed one per line, or uploaded as a CSV, XLSX, TXT or Parquet file - cap the rows per query if you want to, and download the results as a clean CSV, Excel or JSON file.

Each row carries the listing as OLX's results show it, across twenty-eight columns: the id, title and description, the price and the currency it is quoted in, the posting date, every image, a link to the offer, the city, region and district as separate columns with both display and normalised names, and the seller's display name, account id, account age and business flag. All of it appears in the workbook as well as the JSON.

Pricing teams run one search across several national sites to build a cross-border picture in a single file. Strategy teams use the business flag to split a category into its private and professional halves, which behave differently and mislead when averaged together. Researchers use the split location columns to roll supply up from district to region without string surgery.

Three shapes in this output are worth knowing before you build on it. The currency must be read per row - one search on a single national site returned more than one currency, so inferring it from the domain produces wrong numbers. The images column is one semicolon-joined string rather than an array. And several columns are the same fact twice: url and listing_url matched on every row we have seen, as did image and the first entry of images. Start free: your first 500 rows cost nothing and need no credit card, and after that it is $0.002 per row, flat.