Request a tool
All toolsAutomationsGuidesMCP serverRequest a toolPlatformsCategories
OLX Brazil Scraper icon

OLX Brazil Scraper

Scrape olx.com.br classifieds by search term, state or category. Get id, title, BRL price, location, images and seller type. $0.85 per 1,000 listings.

247 runs on Apify $0.00085 per listing ($0.85 / 1,000)
Run this in the cloudRun on Apify →

Developer & Research Tools

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust searchQueries, state, region (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Pricing

$0.00085 per listing = $0.85 per 1,000

You are charged forWhenPrice
Listing returnedCharged once per genuine OLX listing row. Sample rows, diagnostics, blocked requests and empty runs are never charged.$0.00085

Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-07, and they are what you are actually charged.

Inputs

FieldWhat it doesType
searchQueriesWhat to look for on olx.com.br, one term per line. OLX is a Brazilian site, so Portuguese terms return the most ("iphone", "notebook", "bicicleta aro 29", "apartamento 2 quartos").array
stateOptional. Limit the search to one Brazilian state. Accepts the two-letter code ("SP", "RJ", "MG") or the full name ("Sao Paulo"). Leave empty to search all of Brazil.string
regionOptional. Narrows the search inside the state, using the region slug OLX shows in its own URLs, for example "sao-paulo-e-regiao", "rio-de-janeiro-e-regiao". Requires a state; ignored without one. OLX silently returns the whole state for a slug it does not recognise, so this Actor checks and adds one uncharged warning row listing the slugs that would have worked. Leave empty for the whole state.string
categoryOptional OLX category path. Pick one here, or type any path you see in an OLX URL (for example "imoveis/venda" or "autos-e-pecas/carros-vans-e-utilitarios").string
maxItemsHard cap on rows returned across all searches (1-5000). You are charged per listing returned. OLX serves about 50 listings per page and stops paginating after page 100, so one search tops out near 5000 listings.integer
startUrlsOptional. Paste OLX search or category result pages and every filter already on the URL is kept, for example https://www.olx.com.br/celulares/estado-sp?q=iphone&ps=1000&pe=3000 . Works alongside the fields above. Single listing pages are not supported.array
sortByHow OLX orders the results. "Newest first" is the one to use for monitoring new listings.string
minPriceOptional. Only return listings priced at or above this, in Brazilian reais.integer
maxPriceOptional. Only return listings priced at or below this, in Brazilian reais.integer

What you get

A structured dataset — each result includes fields like:

titlepricecurrencycategorycitystatepublishedAtsellerTypesellerNamethumbnailUrlurllistingId

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

Related tools in Developer & Research Tools

Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.

GitHub Scraper iconDeveloper & Research Tools

GitHub Scraper

Search GitHub repos and users: stars, forks, language, topics, licence, plus user bio, company and followers. No token needed. $0.90 per 1,000 rows.

18 use cases

Stack Overflow / Stack Exchange Scraper iconDeveloper & Research Tools

Stack Overflow / Stack Exchange Scraper

Search Stack Overflow and Stack Exchange by keyword or tag. Score, answer count, views, reputation and body text. $2 per 1,000 questions.

2 use cases

Package Registry Scraper (npm + PyPI) iconDeveloper & Research Tools

Package Registry Scraper (npm + PyPI)

Get npm and PyPI package metadata as JSON. Version, license, author, repo, keywords and npm monthly downloads. $2 per 1,000 packages.

2 use cases

arXiv Scraper iconDeveloper & Research Tools

arXiv Scraper

Search arXiv papers by title, author, abstract or category. Get full abstracts, authors, categories, DOI, dates and PDF links. $2 per 1,000 papers.

2 use cases

OpenAlex Scholarly Works Scraper iconDeveloper & Research Tools

OpenAlex Scholarly Works Scraper

Search 250M+ OpenAlex papers with no API key. Get titles, authors, venue, year, citations, DOI, OA links and full abstracts. $2.00 per 1,000 papers.

2 use cases

Crossref Scholarly Works Scraper iconDeveloper & Research Tools

Crossref Scholarly Works Scraper

Search 150M+ papers on Crossref: DOI, title, authors, journal, publisher, date, citations and abstract. No API key. $1.00 per 1,000 works.

2 use cases

See all Developer & Research Tools →

OLX Brazil Scraper: listings from olx.com.br by search term, state, category or a URL you paste

Type a Portuguese search term, pick a state, or paste an OLX results page, and every ad on those pages comes back as a row: 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. OLX keeps them off the results pages this reads, and the run does not go hunting for them elsewhere. 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
Ceiling5,000 listings per run. About 5,000 per search is OLX's own limit
Account neededNone, and nothing to install
Price$0.85 per 1,000 listings, flat on every plan

🏷️ 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, region, 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 inside a state, using the slug OLX prints in its own URLs, like sao-paulo-e-regiao. Two things about it. It needs a state to work against, and OLX ignores a slug it does not recognise without saying so, handing back the whole state with no error. The run checks the rows it got against the region you asked for, and if they do not match it adds one uncharged row naming slugs that would have worked.

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

📥 What you give it

{
  "searchQueries": ["notebook"],
  "state": "SP",
  "category": "informatica",
  "sortBy": "date",
  "minPrice": 500,
  "maxPrice": 3000,
  "maxItems": 250
}
FieldDefaultWhat it is
searchQueriesbox starts at iphoneWhat 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.
regionnoneA region slug from an OLX URL, to narrow inside a state. 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.
maxItemsbox starts at 50Total listings across every search in the run, up to 5,000.
proxyConfigurationleave it aloneOptional, under Advanced. Only if you want the run to go out through a particular 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:

{
  "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": "Lucassantos509",
  "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"
}

The imageUrls list is cut short above. A real row carries all of them.

FieldWhat it is
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 on plenty of rows.
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.
searchQuery, searchUrl, page, positionWhich of your searches produced this row, and where it sat.

🧾 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, 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.
REGION_NOT_APPLIEDOLX did not recognise your region slug and returned the whole state. Sent once per run.
HTTP_ERROROLX answered with an error status.
BLOCKEDOLX refused the page.
PARSE_FAILEDThe page came back without the listing data in it.

One search failing never stops the others.

▶️ How to run it

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. Start around 20 to see what the rows look like. 5. Click Start, then download the dataset as JSON, CSV or Excel, or read it from the Apify API.

💰 How much does it cost?

$0.85 per 1,000 listings. Flat on every Apify plan, with no volume tiers.

One billed row per listing delivered. The sample row is not billed, diagnostic rows are not billed, the region warning is not billed, and an ad found under two of your searches is billed once.

💡 What people use it for

  • Price tracking for one model in one state, on a schedule, diffing on listingId.
  • Property and rental research, where attributes carries Quartos, Banheiros and IPTU.
  • Building a list of dealers and shops in a category, keeping rows where sellerType is business.
  • Watching what is new: sort by date, keep maxItems small, and read publishedAt.
  • 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. They are not on the pages this reads, and it does not go looking for

them anywhere else.

  • 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. vagas-de-emprego is a separate OLX product that renders differently and carries no

listing data on the results page.

  • No "highest price first" sort. OLX offers it in its own interface but not as something a

plain request can ask for. Relevance, newest and lowest price all work.

  • About 5,000 listings per search is OLX's ceiling, not ours. After page 100 OLX keeps handing

back page 100. 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 OLX's, not ours. They are in Portuguese and they change per category, so

do not hard-code them.

🧭 Which marketplace scraper do you need?

If you wantUse
Brazilian classified ads from OLXThis one
Russian classified ads from AvitoAvito Listings Scraper
Everything one Avito seller has listedAvito Seller Listings & Profile Scraper
Wholesale prices and order quantities from 16881688 Wholesale Scraper
Reviews and ratings from a Shopee shopShopee Shop Reviews & Ratings Scraper

❓ Questions people ask

Do I need a Brazilian address to run this? No. Nothing about the input asks for one and there is nothing for you to set up.

Can I search 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 region get ignored? OLX did not recognise the slug. Look for the uncharged REGION_NOT_APPLIED row: it lists slugs that do work for that state.

Can I schedule it? Yes. listingId is stable, so diffing one run against the next shows what appeared and what sold. Set sortBy to date for that.

Is this legal? 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 scraping and the law 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.