OLX Brazil Scraper - Past the 5,000-Listing Search Wall avatar

OLX Brazil Scraper - Past the 5,000-Listing Search Wall

Pricing

Pay per event

Go to Apify Store
OLX Brazil Scraper - Past the 5,000-Listing Search Wall

OLX Brazil Scraper - Past the 5,000-Listing Search Wall

[$1.50 / 1K, no start fee] OLX Brasil listings past the 5,000-per-search wall: the Actor slices a big search into price bands on its own. Price drops, CEP, neighbourhood and category attributes per listing; descriptions and seller sales history are an opt-in extra.

Pricing

Pay per event

Rating

0.0

(0)

Developer

WebData Labs

WebData Labs

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

Share

OLX Brazil Scraper

Every listing on Brazil's largest classifieds site, including the ones OLX stops serving after 5,000.

Ask OLX for "iphone" and it tells you there are 107,000 matches. Then it hands you 100 pages of 50 and stops: page 101 is page 100 again, page 500 is page 100 again. Every OLX scraper hits that wall, and most just tell you to split the search by hand. This one splits it for you, cutting the query into price bands and then into states until every slice fits under the ceiling, so "all of it" is an answer you can actually get.

✅ What you get / ❌ what this isn't

✅ What you get❌ What this isn't
Past the 5,000-per-search ceiling by automatic price-band and state splittingNot a pager that quietly returns page 100 five times and calls it 5,000 rows
50 real listings per page, with OLX's empty ad slots skippedNot a row count padded with placeholder cards that carry no listing at all
Seller history: completed sales, cancelled sales, average dispatch time, top-rated flagNot just a seller name and a "business or private" guess
Exact location: state, city, neighbourhood, CEP postal code, DDD area codeNot "São Paulo" and nothing narrower
OLX's own filters for price, condition, top-rated sellers, sent at the sourceNot a full scan of the category that throws away 90% of what you paid to fetch
Category attributes parsed per listing: brand, model, storage, battery health, conditionNot a description blob you have to regex yourself
Detail pages priced separately so you only pay for the expensive half when you want itNot one flat price that charges everybody for the depth most runs never use

🔎 Why use this Actor

  • Breaks the 5,000 wall. OLX serves at most 100 pages of 50 for any one search. When a search has more matches than that, the Actor bisects it on price using the prices on the page it just read, so the split adapts to the category: about R$1,500 for phones, hundreds of thousands for property. When price runs out of room it splits across the 27 states instead.
  • Stops paging on evidence, not on a link. A page ends a search when it serves no listing ID that slice has not already returned. OLX answers page 101 with page 100 rather than an error, so anything that trusts a next-page affordance pages forever.
  • Empty ad slots never become rows. A page of results is 57 cards: 50 listings and about seven advertising placeholders that OLX ships with no listing ID, no title and no location, for the browser to fill from an ad network. They are dropped before anything is counted or charged. Listings the seller paid to highlight are real and are kept, flagged as isFeatured.
  • Filters go to OLX where OLX supports them. Price range, condition, top-rated sellers and private-only are query parameters, not post-filters, so a narrow search does not cost you the rows it rejects. The two OLX cannot express - business-sellers-only and a highest-price sort - are applied here, and the README says which is which.
  • Seller quality, not just seller identity. Enriched rows carry the account's completed and cancelled sale counts, its average dispatch time, whether OLX rates it above four stars, and whether a phone number is on file at all.
  • Regional URLs keep working. OLX answers sp.olx.com.br/celulares?q=iphone with a redirect to its bare homepage, dropping the category and the query. Pasted regional links are rewritten into the path OLX actually routes on.
  • Pay per listing you receive. No start fee. Deduplicated by listing ID across every search, slice and page in the run, so an overlapping split never bills you twice for the same ad.

👥 Who it's for

Resale and arbitrage operators, Brazilian real-estate and auto aggregators, price-intelligence teams, and B2B prospectors looking for active sellers in a region.

  • Build a price curve for one phone model, car model or appliance across all 27 states.
  • Pull a whole imoveis/venda region as an inventory feed instead of a 5,000-row sample.
  • Build a call list of business sellers in one state, with city, neighbourhood, DDD and sales history.
  • Track what a category is asking week over week by re-running the same search on a schedule.
  • Watch for listings published in the last 24 hours under a price cap.

Example tasks

⚙️ How to scrape OLX Brazil

  1. Type what you are looking for into Search terms - Portuguese or English, one term per line. Or paste an olx.com.br URL into OLX search URLs if you already built the search on the site.
  2. Narrow it if you want to: Category, State, Minimum/Maximum price, Condition, Seller type, Only top-rated sellers, Published within.
  3. Leave Max results at 100 for a first run. Set it to 0 for everything OLX has.
  4. Turn on Include description and seller details only if you need descriptions, CEP or seller history. It is charged separately.
  5. Click Start. Rows appear in the dataset as each page is parsed, so you can watch and stop early. Export from the Output tab as JSON, CSV, Excel or an API feed.

Get more than 5,000 listings

Leave Go past OLX's 5,000-listing limit on and set Max results above 5,000 (or to 0). The Actor reads OLX's own match count on the first page of each search; if it is over the ceiling and your budget wants more, it splits the search on price and works the pieces depth-first. A search for "iphone" with a budget of 20,000 becomes a tree of price bands, each under the ceiling, all deduplicated into one dataset.

Get a fresh list on a schedule

Set Published within (days) to 1 and Sort by to "Newest first", save it as a task, and schedule it daily. The timestamp used is OLX's real publication time, not the bump that pushes an old ad back to the top of the page, so a re-listed three-month-old ad does not show up as new.

📥 Input

{
"searchQueries": ["iphone 13"],
"category": "celulares",
"state": "SP",
"minPrice": 1000,
"maxPrice": 3000,
"condition": ["Used - excellent"],
"sellerType": "private",
"sortBy": "newest",
"enrichDetails": false,
"maxResults": 100
}
  • searchQueries - what to search for, one search per entry. Results are merged and deduplicated.
  • searchUrls - any olx.com.br listing URL. Filters already in the URL win over the form.
  • category - one of 160 OLX categories, picked by name. Required for condition and onlyGoodSellers to have any effect.
  • state - two-letter UF code. Applied at the source.
  • listingUrls - scrape named ads instead of searching. Full URLs or bare listing IDs. Search filters do not apply to these.
  • minPrice / maxPrice - BRL, inclusive, applied by OLX. Listings with no published price drop out once either is set.
  • condition - New, Used - excellent, Used - good, Refurbished, For parts or damaged. Needs a category.
  • sellerType - any, private or business. Private is applied by OLX; business is applied here.
  • onlyGoodSellers - sellers OLX rates above four stars. Needs a category, and cuts results hard.
  • publishedWithinDays - 0 means any age. Uses the real publication time, not the bump.
  • sortBy - relevance, newest, price_asc, price_desc. The first three are OLX's own ordering.
  • splitLargeSearches - on by default. The 5,000-ceiling split described above.
  • enrichDetails - off by default, charged separately. Adds description, CEP, seller identity and sales history.
  • maxResults - default 100, 0 for unlimited. No hard ceiling.

Field names from other OLX Actors are accepted as aliases, so input JSON copied from a competitor's docs runs here without editing: startUrls, urls, query, keywords, maxItems, limit, includeDetails, includeBusinessOnly, priceMin, priceMax, sort.

📤 Output

titlepricecategoryNamestatemunicipalityneighbourhoodsellerTypepostedAt
Apple iPhone 11 (128gb) - Branco1000Celulares e SmartphonesSPAtibaiaCidade Satéliteprivate2026-08-04T23:03:46Z
iPhone 13 128 gb com caixa e capa2100Celulares e SmartphonesMGJuiz de ForaSão Pedroprivate2026-08-04T23:00:10Z
Honda Civic EXL 2019 automático105800Carros, vans e utilitáriosRJNiteróiIcaraíbusiness2026-08-03T14:21:08Z

Every row also carries listingId, url, priceDisplay, previousPrice and hasPriceDrop for price-cut tracking, currency, categoryId and parentCategoryId, areaCode (DDD), postedAtEpoch, bumpedHoursAgo, isFeatured, the OLX Pay and OLX Delivery flags, offersInstallments, imageCount, videoCount, thumbnailUrl, the full images array, an attributes object with the category's own fields (brand, model, storage, battery health, condition, accepts trades), and the searchUrl and searchQuery that found it.

With enrichDetails on, rows additionally carry description, zipcode (CEP), region, replyCount, and the seller block: sellerName, sellerId, sellerPublicId, sellerIsProAccount, sellerIsGoodSeller, sellerSalesCount, sellerCanceledSalesCount, sellerAverageDispatch, phonePublished, phoneVerified, whatsappEnabled.

Five dataset views ship with the Actor - Listings, Sellers, Prices, Locations and Descriptions - so the Output tab is readable without building a transformation first.

💵 How much does it cost?

[💵 $1.50 / 1K listings · no start fee], charged per listing delivered to your dataset. Nothing is charged for pages scanned, ad slots skipped, rows filtered out, duplicates removed, or the requests the ceiling split spends planning.

Turning on Include description and seller details adds [💵 $1.50 / 1K] on the listing-enriched event, and only for listings you actually receive. That is not a markup: an OLX listing page weighs about 190 times what a search result costs to fetch, and putting it on its own event is what keeps the base price at $1.50 for the majority of runs that never need it.

A typical run: 100 listings for $0.15, or 5,000 for $7.50. The same 5,000 with full descriptions and seller history costs $15.00. Higher Apify plans pay less per listing on both events.

🔁 Run it on the Apify platform

Schedule the Actor daily or weekly from the Console, or start it from the API and read the dataset back as JSON, CSV, Excel or XML. Results can be pushed straight into Make, Zapier, n8n, a webhook, Google Sheets, S3 or your own CRM through Apify's integrations, and the Actor is available to AI agents over MCP.

⚠️ Limits and caveats

  • OLX serves at most 5,000 listings per search. Page 101 returns page 100 again, so this is a hard ceiling, not a paging trick. The Actor works around it by splitting the search, but a single slice still cannot exceed 5,000 - and a slice that cannot be narrowed further (one price, one state) will stop there, with a warning in the log.
  • The match count OLX shows is not a row count. It drifts by dozens between two identical requests and is consistently larger than what the pager will serve. Treat it as a planning number.
  • Phone numbers are never published. OLX hides them behind its own contact flow. Enriched rows report phonePublished and phoneVerified so you know a number exists and was verified, but the digits are not available to any scraper.
  • Condition and top-rated-seller filters need a category. OLX silently ignores them on an all-of-OLX search. Set category, or use a category URL. The run logs a warning when you have not.
  • There is no highest-price sort at the source. OLX's own URLs cannot express it. price_desc sorts the listings the run collected, and only on runs capped at 10,000 or fewer, so it reorders your results rather than changing which ones OLX serves. For a genuine highest-price search, set a high minPrice.
  • Business-sellers-only is applied after fetching. OLX's seller-type parameter only expresses private-only. In categories where professionals are rare (phones are about 6% business) a business-only run scans many rows to deliver a few. You are only charged for the ones delivered.
  • Some listings have no price. "Sob consulta" ads return price: null, and any price bound excludes them.
  • Brazilian residential exits are required. OLX's protection blocks datacenter addresses outright, so this Actor runs on residential IPs. Nothing to configure, and it is why enriched rows are priced the way they are.
  • Brazil CNPJ Company API - turn a business seller into a registered company record: legal name, CNPJ, address, activity codes.
  • ReclameAqui Scraper - check a Brazilian seller's or brand's complaint record before you buy or prospect.
  • Craigslist Scraper - the same job on the largest US classifieds site, for cross-market price comparison.
  • eBay Sold Listings Scraper - what an item actually sold for, against what OLX is asking for it.
  • Mercari Sold Comps Scraper - a second resale benchmark for electronics and collectables.
  • Google Maps Business Scraper API - find the physical storefront and phone behind an OLX business seller.
  • Lead List Deduplicator - merge repeat runs into one clean list before it reaches your CRM.

❓ FAQ

Yes, but not from one query. OLX caps every query at 5,000. The Actor turns your query into a tree of narrower queries on price and then on state, each under the cap, and deduplicates the results into a single dataset. Leave splitLargeSearches on and set maxResults above 5,000.

Am I charged for listings I filtered out?

No. You are charged for rows delivered to the dataset. Advertising placeholders, duplicates across slices, rows that fail your price or seller filter, and every page fetched to plan a split are all free.

Does it return the seller's phone number?

No, and neither does anything else. OLX does not publish the digits. You get phonePublished and phoneVerified flags, plus the DDD area code of the listing.

Which parts of Brazil does it cover?

All 27 federal units, by their two-letter UF code, plus the region and city that OLX itself assigns to each listing. Enriched rows carry the full eight-digit CEP.

Do I need to configure a proxy?

No. Proxying, session rotation and pacing are handled internally and included in the per-listing price. There is nothing to switch on and nothing to switch off.

Why is description empty?

Descriptions live on the listing page, not in search results. Turn on Include description and seller details. It is charged as a separate event because listing pages are far more expensive to fetch.

🛠️ Support

Open an issue on the Actor's Issues tab with the run URL, the input you used, and what you expected. That is the fastest path to a fix.

⭐ Rate this Actor

If this saved you time, please leave a review on the Reviews tab. Reviews are the main trust signal a buyer has on the Store, and they decide what gets built next here. If something is broken or a field is missing, please open an issue first - most things are fixed within a day, and a fixed Actor is more useful to you than a one-star rating.

Changelog

0.1 - 2026-08-05

  • First release. Search by term, category, state, price, condition, seller type and top-rated seller.
  • Automatic splitting past OLX's 5,000-listing ceiling, on price bands and then on states.
  • Optional detail enrichment: description, CEP, seller identity and sales history.
  • Advertising placeholders detected and excluded from the row count.

Scraping publicly available pages is legal in most jurisdictions, and this Actor reads only what OLX serves to any visitor without logging in: no account, no login wall, no paywall. It does not collect personal data beyond what a seller chose to publish on a public advertisement, and OLX itself never publishes phone numbers or full addresses. If you plan to store or process seller names commercially, check your obligations under Brazil's LGPD and the GDPR where they apply to you. You are responsible for how you use what you collect.