OLX Brazil Scraper - olx.com.br Listings, Prices, Sellers · Apify
OLX Brazil Scraper avatar

OLX Brazil Scraper

Pricing

from $0.82 / 1,000 listings

Go to Apify Store
OLX Brazil Scraper

OLX Brazil Scraper

OLX Brazil scraper for classified ads on olx.com.br by Portuguese search term, state or category, or a pasted results page. Each row has the title, price in reais, category, city and state, publish date, photos, private or business seller, the ad's specs and link. $0.85 per 1,000 listings.

Pricing

from $0.82 / 1,000 listings

Rating

0.0

(0)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

3

Monthly active users

2 days ago

Last modified

Features

Limited permissionsMulti-tenantServer interface

Share

OLX Brazil scraper for olx.com.br searches by term, state or category, or a results page, one row per ad: id, title, price in reais, category, city and state, publish date, photos, whether the seller is private or a business, and the link.

The awkward part first. There are no seller phone numbers. The seller's public display name and whether they are private or a business is what you get.

InputPortuguese search terms, or OLX search and category URLs
OutputOne row per listing: title, price in reais, category, city and state, publish date, photos, seller type, the ad's spec block and link
Ceiling5,000 listings per run. About 5,000 per search. A run stops a little before its time limit and keeps the listings it has delivered
Account neededNone
Price$0.85 per 1,000 listings on the Free plan, a little less on paid plans. The free plan's $5 a month covers about 5,800

🔍 What OLX Brazil Scraper does

Fill in the form, paste links, or do both in one run. The form is a search term plus any mix of state, city, category, price band and sort order. A pasted URL keeps every filter already on it, so a search you set up in OLX's own interface carries over exactly as you left it.

Results pages only. A search page, a category page, a state page. A single ad URL is not one of those and comes back as an uncharged diagnostic row saying so.

region narrows a state down to one city, written the way OLX writes it in its links: campinas, sao-paulo, santa-barbara-d-oeste. It needs a state. A city OLX does not recognise is stopped before a single listing is charged, with one free CITY_NOT_RECOGNISED row saying so, and every listing that comes back from outside the state and city you asked for is left out and not billed.

Listings are de-duplicated on listingId across the whole run, so the same ad found under two searches is delivered and billed once.

📋 What data you get from each OLX ad

What you getField
Ad id, title and linklistingId, title, url
Price as a number and as shown, any earlier price, and the currencyprice, priceLabel, oldPrice, oldPriceLabel, currency
Categorycategory, categoryId, parentCategoryId
Where it iscity, state, stateName, neighbourhood, areaCode, locationLabel
When it was publishedpublishedAt, publishedTimestamp
The sellersellerType, sellerName
Photos and videothumbnailUrl, imageUrls, imageCount, hasVideo
Paid promotion and shipping flagsisFeatured, isBumped, hasFreeShipping
The spec block on the adattributes
Which of your searches found it, and where it satsearchQuery, searchUrl, page, position

▶️ How to scrape OLX Brazil listings

  1. Open OLX Brazil Scraper and click Try for free.
  2. Type a term into Search terms, or paste links into OLX search URLs.
  3. Pick a State (UF) and a Category if you want to narrow it, and set a price band.
  4. Set Maximum listings. Around 20 is enough to see what the rows look like.
  5. Click Start, then download the dataset as JSON, CSV or Excel.

Run it with nothing to search and you get one labelled sample row, which is not billed.

💰 How much does it cost to scrape OLX Brazil listings?

$0.85 per 1,000 listings on the Free plan. Paid plans pay a little less: $0.84 on Starter, $0.83 on Scale and $0.82 on Business. On the free plan, the $5 Apify gives you each month covers about 5,800 listings.

One billed row per listing delivered. The sample row is not billed, diagnostic rows are not billed, listings from outside the state and city you asked for are left out and not billed, and an ad found under two of your searches is billed once.

📥 What you give it

{
"searchQueries": ["notebook"],
"state": "SP",
"category": "informatica",
"sortBy": "date",
"minPrice": 500,
"maxPrice": 3000,
"maxItems": 250
}
FieldDefaultWhat it is
searchQueriesnoneWhat to look for, one term per line. OLX indexes in Portuguese, so Portuguese terms return the most.
startUrlsnoneOLX search or category pages pasted from the site. Works alongside the fields above.
stateall of BrazilOne Brazilian state, by two-letter code (SP, RJ) or full name.
regionnoneOne city inside the state, as OLX writes it in its links (campinas, sao-paulo). Needs a state set.
categoryall categoriesPick one from the list, or type a category path you see in an OLX URL.
sortByrelevanceOLX's own ordering. Also date for newest first, and price_asc.
minPrice, maxPricenonePrice bounds in reais.
maxItems50Total listings across every search in the run, up to 5,000.
proxyConfigurationnoneOptional, under Advanced. Only if you want the run to go out through a network of your own.

maxItems is a total, not a figure per search, so the first term in a long list can use the whole allowance before the others get a turn. If you paste URLs and also pick a category in the form, the category is not applied to the pasted links: their own paths win.

📤 What you get back

A real row from a run on 20 September 2026, with the imageUrls list cut short:

{
"listingId": "1536762825",
"title": "iPhone 13",
"price": 2000,
"priceLabel": "R$ 2.000",
"currency": "BRL",
"oldPrice": null,
"oldPriceLabel": null,
"category": "Celulares e Smartphones",
"categoryId": "3060",
"parentCategoryId": "3000",
"city": "Guaporé",
"state": "RS",
"stateName": "Rio Grande do Sul",
"neighbourhood": null,
"areaCode": "54",
"locationLabel": "Guaporé - RS",
"publishedAt": "2026-09-19T22:45:31.000Z",
"publishedTimestamp": 1789857931,
"sellerType": "private",
"sellerName": "Luc...",
"thumbnailUrl": "https://img.olx.com.br/images/17/173642924789016.jpg",
"imageUrls": ["https://img.olx.com.br/images/17/173642924789016.jpg", "..."],
"imageCount": 3,
"hasVideo": false,
"isFeatured": true,
"isBumped": true,
"hasFreeShipping": true,
"attributes": {
"Categoria": "Celulares e Smartphones",
"Marca": "APPLE",
"Modelo": "IPHONE 13",
"Condição": "Usado - Excelente",
"Memória interna": "128GB",
"Cor": "Branco",
"Saúde da bateria": "Boa (80% até 94%)",
"Aceita trocas": "Não"
},
"url": "https://rs.olx.com.br/regioes-de-caxias-do-sul-e-passo-fundo/celulares/iphone-13-1536762825",
"searchQuery": "iphone",
"searchUrl": "https://www.olx.com.br/brasil?q=iphone",
"page": 1,
"position": 1,
"scrapedAt": "2026-09-20T07:05:04.533Z"
}
FieldHow to read it
price, priceLabelThe number of reais, and OLX's own formatted string.
oldPrice, oldPriceLabelFilled only when the seller cut the price. null otherwise.
neighbourhoodOnly when the ad carries one. null otherwise.
areaCodeThe Brazilian DDD dialling code for the city.
sellerTypeprivate or business, from OLX's own professional-ad flag.
attributesThe spec block OLX shows on the ad, keys in Portuguese. The keys differ per category: phones carry Marca and Memória interna, property carries Quartos and IPTU.
isFeatured, isBumpedWhether the seller paid to promote or re-float the ad.

🧾 Reading the output

RowHow to spot itBilled
A listingNo _sample or _diagnostic key on ityes
The sample row_sample: true and charged: falseno
A diagnostic_diagnostic: true, ok: false, charged: false and an errorCodeno

Listing rows carry no charged field at all. The flag exists only on the sample and diagnostic rows, to mark them as not real results. Filter on _sample and _diagnostic being absent.

CodeWhat it means
NO_RESULTSThat search returned nothing.
BAD_URLA pasted link that is not an OLX URL.
NOT_A_SEARCH_URLAn OLX URL, but a single ad page rather than a results page.
BAD_INPUTA city with no state set, or a city name OLX can't read. Nothing was searched for it.
CITY_NOT_RECOGNISEDOLX does not recognise the city in the state you set. No listing was billed for it.
HTTP_ERROROLX answered with an error status.
NOT_SERVEDThis listing was not served this run. Re-run it later. Runs before 13 October 2026 wrote BLOCKED here.
PARSE_FAILEDThe page came back without the listing data in it.
TIME_LIMITThe run reached its time limit, stopped a little before it and kept the listings it had delivered. Give it more time, or ask for fewer listings.
UNEXPECTED_ERRORThe run stopped early on an unexpected error. The results before this row are kept.

One search failing never stops the others.

💡 What people use it for

  • Price tracking for one model in one state on a schedule: sort by date, keep maxItems small, and diff on listingId to see what appeared and what sold.
  • Property and rental research, where attributes carries Quartos, Banheiros and IPTU.
  • Comparing the same search across several states in one run, since every row says which search and which URL produced it.

🚧 What it does not do

  • No seller phone numbers.
  • No single ad pages. Paste a search or category URL, not an ad URL. An ad URL comes back as an uncharged NOT_A_SEARCH_URL row.
  • No jobs. The vagas-de-emprego section is not covered.
  • No "highest price first" sort. OLX offers it in its own interface, but it cannot be requested here. Relevance, newest and lowest price all work.
  • About 5,000 listings per search is the ceiling. Split by state, category or price band to reach deeper stock.
  • A search can come back short. If OLX stops serving pages partway through, the rows already collected are kept and the run moves on, and there is no row in the dataset marking where it stopped. Compare the count you asked for against the count you got.
  • Attribute keys are in Portuguese and change per category, so do not hard-code them.
  • It is not an official OLX tool. Dami's Studio is independent and is not affiliated with or endorsed by OLX, or by any other company named on this page.

🧭 Which marketplace scraper do you need?

If you wantUse
Brazilian classified ads from OLXThis one
Brazilian car listings with prices against the FIPE tableWebmotors Scraper
Magalu products with card price, Pix price and sellerMagazine Luiza Scraper
The deals board and best-seller lists on Mercado LibreMercado Libre Scraper
Russian classified ads from AvitoAvito Listings Scraper

❓ Questions people ask

Do I need an OLX account?

No. Nothing to register and nothing for you to set up.

Can I search OLX in English?

The term goes to OLX exactly as you typed it, and OLX's index is Portuguese, so English terms return very little. State names do accept English spellings.

How do I get more than 5,000 listings for one term?

Split it up. Several states, several price bands, or narrower categories, all in the same run.

Why did my city search stop with a CITY_NOT_RECOGNISED row?

OLX did not recognise the city in the state you set. Open the city on olx.com.br and copy the part of the link after /estado-sp/ (or your state's code), for example campinas. A city with no state set stops with a BAD_INPUT row instead, before anything is searched. No listing was billed for either.

Can I call it from code or connect it to an AI assistant?

The API tab has code for Python, JavaScript and the CLI. MCP clients like Claude and ChatGPT use https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/olx-brazil-scraper; coding assistants can load our skill file. All three bill your Apify account at the same price.

These are public ads. They carry personal data, which GDPR and similar laws cover, so have a reason for collecting it. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.

🆘 If something breaks

Open the Issues tab on the actor page. Send the search term or the URL you used and the run ID; the errorCode on the diagnostic row usually names the problem on its own.