OLX Brazil Listings Scraper
Pricing
from $2.80 / 1,000 result emitteds
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
Maintained by CommunityActor 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-cffiimpersonates real Chrome / Firefox / Safari TLS handshakes on every request. - 🔁 Retries with exponential backoff on
408 / 429 / 503-- up to 5 attempts per page,Retry-Afterhonoured. - 🌎 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
- Click Try for free at the top of the page.
- Fill in the input form — most fields have sensible defaults.
- Click Start. Output streams into the run's dataset.
- Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.
📥 Input
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
queries | array | yes | ['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… |
region | string | no | '—' | Optional post-filter: keep only rows whose listing URL's regional subdomain equals this code (e.g. "ba", "sp", "rj").… |
maxPagesPerQuery | integer | no | 5 | Upper bound on the number of o= pages walked per query before pagination stops. |
maxResultsPerQuery | integer | no | 200 | Upper bound on unique listing ids collected per query before pagination stops. |
proxyConfiguration | object | no | {'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.
| Field | Type | Notes |
|---|---|---|
listing_id | string | Trailing numeric id of the listing URL slug. |
title | string | Card title text. |
price_raw | string | Verbatim price text, e.g. 'R$ 2.200'; null if the card carries no price. |
price_brl | number | Numeric BRL parsed from price_raw; null when unparseable (e.g. 'Gratis', 'A combinar'). |
url | string | Canonical listing URL. |
region | string | Regional subdomain segment parsed from url, e.g. 'ba'. |
location | string | Card location text, e.g. 'Grande Salvador'. |
category_path | string | URL path segments between region and slug, e.g. 'informatica/notebooks'. |
image_url | string | Card thumbnail URL if present. |
posted_at_raw | string | Verbatim posted/updated date text if the card shows one (e.g. 'Hoje'). |
query | string | The queries entry that produced this row. |
page | integer | The o= value the row was found on (1 = first page). |
scraped_at | string | ISO-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:
| Event | USD | What it is |
|---|---|---|
actor-start | $0.2 | One-off warm-up charge per run |
result | $0.0028 | Per 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.