OLX Brazil Listings Scraper avatar

OLX Brazil Listings Scraper

Pricing

from $2.80 / 1,000 result emitteds

Go to Apify Store
OLX Brazil Listings Scraper

OLX Brazil Listings Scraper

Search OLX Brazil (olx.com.br) classifieds by keyword and collect structured listings -- titles, prices, locations, categories, and images -- across paginated results in one clean dataset per query, no manual city-by-city browsing.

Pricing

from $2.80 / 1,000 result emitteds

Rating

0.0

(0)

Developer

DevilScrapes

DevilScrapes

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share


🎯 What this scrapes

Search OLX Brazil (olx.com.br) by keyword and get one row per listing card -- title, price, canonical URL, region, location, category and image -- across every page the search returns, deduplicated by listing id. Point it at as many keywords as you like; each one runs its own paginated search.

🔥 What we handle for you

  • 🛡️ Browser fingerprint rotation -- curl-cffi impersonates real Chrome / Firefox / Safari TLS handshakes on every request.
  • 🔁 Retries with exponential backoff on 408 / 429 / 503 -- up to 5 attempts per page, Retry-After honoured.
  • 🌎 Apify Proxy pinned to Brazil (apifyProxyCountry: BR) on every request, regardless of what you pass in.
  • 🧠 JSON-first parsing -- reads the page's own embedded listings data first, falling back to DOM parsing only if that's missing, so a markup tweak on OLX's side doesn't silently break your dataset.
  • 🧊 Clean, typed dataset rows -- Pydantic-validated, ISO-8601 timestamps, deduplicated listing ids, JSON / CSV / Excel export straight from the Apify Console.
  • 💰 Pay-Per-Event pricing -- you only pay for results that hit your dataset. No data, no charge.

💡 Use cases

  • Price intelligence -- track asking prices for a product category across Brazilian regions.
  • Reseller/arbitrage sourcing -- surface freshly listed items matching a keyword before they're gone.
  • Market research -- measure listing volume and pricing spread for a search term over time.
  • Lead generation -- find sellers or listings matching a niche keyword in a specific region.

⚙️ How to use it

  1. Click Try for free at the top of the page.
  2. Fill in the input form — most fields have sensible defaults.
  3. Click Start. Output streams into the run's dataset.
  4. Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.

📥 Input

FieldTypeRequiredDefaultNotes
queriesarrayyes['notebook', 'iphone', 'bicicleta']Search terms; the Actor runs one paginated search per query against www.olx.com.br/brasil?q=. 1-20 entries, each 1-200…
regionstringno'—'Optional post-filter: keep only rows whose listing URL's regional subdomain equals this code (e.g. "ba", "sp", "rj").…
maxPagesPerQueryintegerno5Upper bound on the number of o= pages walked per query before pagination stops.
maxResultsPerQueryintegerno200Upper bound on unique listing ids collected per query before pagination stops.
proxyConfigurationobjectno{'useApifyProxy': True, 'apifyProxyCountry': 'BR'}Apify Proxy configuration. Country is pinned to Brazil (BR) server-side regardless of what's set here.

Example input

{
"queries": [
"notebook"
],
"region": null,
"maxPagesPerQuery": 1,
"maxResultsPerQuery": 5,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyCountry": "BR"
}
}

📤 Output

Every row is one dataset item.

FieldTypeNotes
listing_idstringTrailing numeric id of the listing URL slug.
titlestringCard title text.
price_rawstringVerbatim price text, e.g. 'R$ 2.200'; null if the card carries no price.
price_brlnumberNumeric BRL parsed from price_raw; null when unparseable (e.g. 'Gratis', 'A combinar').
urlstringCanonical listing URL.
regionstringRegional subdomain segment parsed from url, e.g. 'ba'.
locationstringCard location text, e.g. 'Grande Salvador'.
category_pathstringURL path segments between region and slug, e.g. 'informatica/notebooks'.
image_urlstringCard thumbnail URL if present.
posted_at_rawstringVerbatim posted/updated date text if the card shows one (e.g. 'Hoje').
querystringThe queries entry that produced this row.
pageintegerThe o= value the row was found on (1 = first page).
scraped_atstringISO-8601 UTC scrape timestamp.

Example output

{
"listing_id": "1536511479",
"title": "Notebook Acer Aspire 3 Ryzen 5 2500U 12GB RAM HD 1TB SSD 128GB",
"price_raw": "R$ 2.200",
"price_brl": 2200.0,
"url": "https://ba.olx.com.br/grande-salvador/informatica/notebooks/notebook-acer-aspire-3-ryzen-5-2500u-12gb-ram-hd-1tb-ssd-128gb-1536511479",
"region": "ba",
"location": "Grande Salvador",
"category_path": "informatica/notebooks",
"image_url": "https://img.olx.com.br/images/xx/xxxxxxxxx.jpg",
"posted_at_raw": null,
"query": "notebook",
"page": 1,
"scraped_at": "2026-09-19T14:00:00Z"
}

💰 Pricing

Pay-Per-Event — you pay only when these events fire:

EventUSDWhat it is
actor-start$0.2One-off warm-up charge per run
result$0.0028Per dataset item

Example: 1 000 results at the rates above ≈ $3.00. No subscription, no minimum, no card to start — Apify gives every new account $5 of free credit.

🚧 Limitations

  • Brazil only -- other OLX country sites (Poland, Indonesia, etc.) are out of scope.
  • Search-result cards only -- no listing detail-page enrichment (full description, seller profile, phone/contact reveal) in v1.
  • No login, authenticated seller actions, messaging, or saved searches.
  • Requires at least one keyword in queries -- pure category/taxonomy browsing isn't supported.

❓ FAQ

Is this legal?

We only fetch content OLX Brazil's own search pages make publicly available, no login required. Respect OLX's terms of service before using output commercially.

Can I limit results to one Brazilian state or city?

Yes -- set the region input to the regional subdomain code (e.g. "ba", "sp", "rj"). Leave it empty to get every region.

Why did I get fewer rows than maxResultsPerQuery?

Pagination stops early once a page contributes zero new listing ids -- that means you've reached the end of that search's real results, not a bug.

How do I export to Sheets?

After the run, click Storage -> Dataset -> Export and pick CSV. Google Sheets imports it directly.

💬 Your feedback

Spotted a bug, hit a weird edge case, or need a new field? Open an issue on the Actor's Issues tab on Apify Console — we ship fixes weekly and we read every report.