# OLX Brazil Scraper | $0.8/1K — Listings, Prices, Sellers (`gangary/olx-brazil-scraper`) Actor

Scrape OLX Brasil by keyword, state or search URL: title, price and previous price, category, city, neighborhood, attributes (rooms, mileage, brand), photos and professional seller. Cars, real estate, electronics, furniture. Up to 5,000 per search. $0.80 per 1,000 listings, blocked pages free.

- **URL**: https://apify.com/gangary/olx-brazil-scraper.md
- **Developed by:** [Gangary](https://apify.com/gangary) (community)
- **Categories:** E-commerce, Automation, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 listing scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

![olx-brazil-scraper](https://empresas-por-cnae.vercel.app/covers/olx-brazil-scraper.png)

## OLX Brazil Scraper | $0.8/1K — Listings, Prices, Sellers

**US$0.80 per 1,000 listings + US$0.005 per run. Brazilian residential proxies and retries are included; blocked pages, failed searches and invalid URLs are never charged.**

Search OLX, Brazil's largest classifieds marketplace, by keyword, state or search URL and get every listing back as structured data: **price, previous price, category, city and neighborhood, state, publish date, attributes (rooms, size, mileage, brand, condition...), photos and the seller name of professional advertisers**. One run covers cars, real estate, electronics, furniture and every other OLX category.

- **Up to 50 search URLs + 50 keywords in one run**, each one followed through OLX pagination.
- **Up to 5,000 listings per search** (100 pages of 50), the most OLX itself serves.
- **Each listing delivered and charged once per run**, even when several of your searches overlap.

**Em português:** raspe a OLX por palavra-chave, estado (UF) ou link de busca e receba preço, preço anterior (queda de preço), categoria, cidade, bairro, características (quartos, área, IPTU, marca, estado de conservação), fotos e nome do anunciante profissional em tabela pronta pra planilha. Até 5.000 anúncios por busca, com proxy residencial brasileiro incluído. Feito pra monitorar preços e pesquisar mercado de usados, imóveis e eletrônicos. Custa US$0,80 por 1.000 anúncios mais US$0,005 por execução; página bloqueada não é cobrada.

### What you get

One row per listing, real output from an OLX real-estate search (photos shortened to 3 for readability):

```json
{
  "id": "1548058874",
  "url": "https://sp.olx.com.br/baixada-santista-e-litoral-sul/imoveis/vendo-casa-guaruja-1548058874",
  "title": "Vendo casa Guaruja",
  "price": 1190000,
  "oldPrice": null,
  "priceText": "R$ 1.190.000",
  "category": "Casas",
  "categoryId": "1001",
  "city": "Guarujá",
  "neighborhood": "Enseada",
  "state": "SP",
  "location": "Guarujá, Enseada",
  "publishedAt": "2026-10-27T22:07:02.000Z",
  "isProfessional": false,
  "isFeatured": false,
  "olxPayEnabled": false,
  "olxDeliveryEnabled": false,
  "attributes": {
    "category": "Casas",
    "real_estate_type": "Venda - casa em vila",
    "iptu": "R$ 1.750",
    "size": "284m²",
    "rooms": "4",
    "bathrooms": "5 ou mais",
    "garage_spaces": "4",
    "re_types": "Casa de vila"
  },
  "attributesList": [
    { "label": "Tipo", "value": "Venda - casa em vila" },
    { "label": "IPTU", "value": "R$ 1.750" },
    { "label": "Área construída", "value": "284m²" },
    { "label": "Quartos", "value": "4" },
    { "label": "Banheiros", "value": "5 ou mais" },
    { "label": "Vagas na garagem", "value": "4" }
  ],
  "imageUrls": [
    "https://img.olx.com.br/images/48/487642571234814.jpg",
    "https://img.olx.com.br/images/49/494632572473519.jpg",
    "https://img.olx.com.br/images/31/316672690856626.jpg"
  ],
  "imageCount": 20,
  "sellerName": null,
  "searchUrl": "https://www.olx.com.br/imoveis/venda/estado-sp",
  "scrapedAt": "2026-10-27T20:15:00.000Z"
}
```

| Field | Meaning |
|---|---|
| `id` / `url` | OLX listing ID and canonical link |
| `title` | Listing title |
| `price` / `oldPrice` / `priceText` | Current price and previous price in BRL as numbers (`null` when the listing has none), plus the price text as shown ("R$ 1.190.000") |
| `category` / `categoryId` | OLX category name and ID |
| `city` / `neighborhood` / `state` / `location` | Where the item is — state is the two-letter UF |
| `publishedAt` | When the listing was published or last renewed (ISO 8601) |
| `attributes` / `attributesList` | Category-specific details (rooms, size, IPTU, mileage, brand, model, condition, storage...) as a key-value object and as a label/value list |
| `imageUrls` / `imageCount` | Up to 20 photo links and the total number of photos |
| `isProfessional` / `sellerName` | `true` for store, dealer and agency ads. The seller name is returned **only for professional advertisers** — it is always `null` for individuals |
| `isFeatured` / `olxPayEnabled` / `olxDeliveryEnabled` | Highlighted ad, OLX Pay and OLX delivery flags |
| `searchUrl` | The search that produced the row |
| `error` | Set only on failed searches — those rows are **not charged** |

### Use cases

- **Used cars and motorcycles:** collect asking prices by model and state, with the vehicle details OLX shows in `attributes`, to price a trade-in or a dealer's stock.
- **Real estate:** pull houses and apartments for sale or rent with rooms, area, IPTU and neighborhood, and compare asking prices in the same area.
- **Electronics and resale:** track second-hand prices of phones, consoles or notebooks to spot listings below the market.
- **Price drops:** `oldPrice` is filled when the listing shows a previous price, so you can list every reduced ad in a search.
- **Professional sellers:** filter `isProfessional` and `sellerName` to see which stores, dealers and agencies dominate a category or region.

### How to use it

1. Paste one or more **OLX search URLs** (any category, with the filters you want applied on olx.com.br), and/or type **Search keywords** such as "iphone 13".
2. Optionally set **State (UF)** to restrict keyword searches to one state (e.g. SP). Without it, keywords search all of Brazil.
3. Set **Max listings per search** (default 100, up to 5,000). The actor follows OLX pagination — 50 listings per page, up to 100 pages — until the limit or the last page.
4. Run and export — the **Listings** dataset view gives you price, category, location and seller type in one table.

Example input:

```json
{
  "queries": ["iphone 13"],
  "state": "SP",
  "searchUrls": ["https://www.olx.com.br/imoveis/venda/estado-sp"],
  "maxItemsPerSearch": 100
}
```

Each search URL and each keyword is a separate search. A listing that shows up in more than one search is delivered (and charged) only once per run.

| Input | Type | Default | Notes |
|---|---|---|---|
| `searchUrls` | array of URLs | — | Search/listing pages copied from OLX, filters kept; up to 50 per run |
| `queries` | array of strings | — | Keywords, one search each; up to 50 per run, duplicates removed |
| `state` | string (UF) | empty = all of Brazil | Applies to keywords only, e.g. `SP` |
| `maxItemsPerSearch` | integer | 100 | 1 to 5,000 per search URL or keyword |

Two more inputs you can copy:

```json
{ "queries": ["civic 2018", "corolla 2020"], "state": "PR", "maxItemsPerSearch": 500 }
```

```json
{ "searchUrls": ["https://www.olx.com.br/imoveis/venda/estado-sp"], "maxItemsPerSearch": 5000 }
```

### Pricing

Pay per event: a small start fee opens the Brazilian residential session, then a flat fee per **listing delivered**: **$0.005 per run + $0.80 per 1,000 listings**. Blocked pages, failed searches and invalid URLs are **never charged** — and every run respects the `maxTotalChargeUsd` budget you set on Apify.

| Scenario | Approximate cost |
|---|---|
| 100 listings (1 search) | ~US$ 0.085 |
| 1,000 listings | ~US$ 0.81 |
| 5,000 listings (max per search) | ~US$ 4.01 |

### Run it from code

Replace `<YOUR_APIFY_TOKEN>` with your token from **Apify Console → Settings → API & Integrations**.

**cURL** (waits for the run and returns the items):

```bash
curl -X POST "https://api.apify.com/v2/acts/gangary~olx-brazil-scraper/run-sync-get-dataset-items" \
  -H "Authorization: Bearer <YOUR_APIFY_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"queries": ["iphone 13"], "state": "SP", "maxItemsPerSearch": 100}'
```

**Python** (`pip install apify-client`):

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("gangary~olx-brazil-scraper").call(
    run_input={"queries": ["iphone 13"], "state": "SP", "maxItemsPerSearch": 100}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item.get("price"), item.get("city"), item.get("title"))
```

**Node.js** (`npm install apify-client`):

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('gangary~olx-brazil-scraper').call({
    queries: ['iphone 13'],
    state: 'SP',
    maxItemsPerSearch: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, items[0]);
```

The synchronous endpoint waits up to 300 seconds; for big runs (thousands of listings) start the run asynchronously and read the dataset when it finishes.

### Integrations

Everything below is built into Apify, no extra setup on our side:

- **[Schedules](https://docs.apify.com/platform/schedules):** rerun the same searches daily to catch new listings and price drops.
- **[Webhooks](https://docs.apify.com/platform/integrations/webhooks):** get a call to your own endpoint when a run finishes.
- **[Make](https://docs.apify.com/platform/integrations/make), [n8n](https://docs.apify.com/platform/integrations/n8n) and [Zapier](https://docs.apify.com/platform/integrations/zapier):** send each run's rows to Google Sheets, a database, Slack or your CRM.
- **[Google Drive](https://docs.apify.com/platform/integrations/drive):** drop each run's export into a shared folder.
- **Exports:** JSON, CSV, Excel, XML or HTML from the dataset, or straight from the API.

### Use with AI agents (MCP)

Apify runs a hosted MCP server, so Claude, Cursor, VS Code and other MCP clients can call this actor as a tool. Add this server URL to your client (it signs in with OAuth on first use, or send `Authorization: Bearer <YOUR_APIFY_TOKEN>`):

```
https://mcp.apify.com?tools=gangary/olx-brazil-scraper
```

Then ask in plain words, e.g. *"List used Honda Civic 2018 ads in Paraná on OLX and give me the median price."* Setup details for each client: **[Apify MCP server docs](https://docs.apify.com/platform/integrations/mcp)**.

### FAQ

**Is scraping OLX legal?**
The actor reads publicly listed search results — no login and no paywall bypass. It does not collect phone numbers, e-mails or personal data: the seller name is returned only for professional advertisers (stores, dealers, agencies), never for individuals.

**Can I filter by category, price or city?**
Yes — apply the filters on olx.com.br, copy the resulting URL into **OLX search URLs**, and the actor keeps every filter in the link while it paginates.

**Why can't I get more than 5,000 listings from one search?**
OLX itself serves at most 100 pages of 50 listings per search. For more volume, split the search into narrower URLs (by state, category or price range) and run them together.

**Why do some searches come back with an `error` row?**
OLX runs anti-bot protection. When a session gets blocked, the actor drops it, opens a fresh Brazilian residential IP and retries the same page — up to 3 times. If it still fails, the search is abandoned with an error row and you are not charged for it.

**Is proxy included?**
Yes — Brazilian residential proxies are included in the price. Nothing to configure.

**Does a listing found by two searches cost twice?**
No. Each listing ID is delivered and charged once per run, even when your searches overlap.

**How do I see price drops?**
`oldPrice` holds the previous price when the listing shows one (`null` otherwise). Compare it with `price`, or schedule the same search and compare runs by `id`.

**Why is `sellerName` empty?**
OLX shows the advertiser name only for professional sellers (stores, dealers, agencies). For private sellers it is always `null`; no phone numbers or e-mails are collected for anyone.

**Can I search by keyword in one state only?**
Yes. Fill **State (UF)** with the two-letter code (e.g. `SP`). It applies to keywords; search URLs keep whatever location they already have.

**What does a run with no results cost?**
Only the US$0.005 start fee. Listings are charged one by one as they are delivered, and error rows are free. You can also cap any run with **Max total charge** on Apify.

### Honest limitations

- Only search/listing URLs from www.olx.com.br are accepted. Old regional subdomains (like sp.olx.com.br) redirect to the home page, so they are skipped with a free error row, as is anything outside OLX.
- OLX exposes at most 100 pages (about 5,000 listings) per search.
- Attributes depend on the category: a car has mileage and fuel, a house has rooms and IPTU. Fields the listing does not show come back empty.
- Prices are the ones displayed on the listing; "negotiable" or price-less ads return `price: null`.

### Changelog

- **2026-10-31:** lower price: US$0.80 per 1,000 listings and US$0.005 per run (was US$1.50 and US$0.02).
- **2026-10-28:** first public release.

### From the same maker

- **[Mercado Livre Scraper](https://apify.com/gangary/mercado-livre-search-scraper)** — search results, prices and sales from Brazil's largest marketplace.
- **[Zap Imóveis Scraper](https://apify.com/gangary/zap-imoveis-scraper)** — Brazilian real-estate listings for sale and rent.
- **[VivaReal Scraper](https://apify.com/gangary/vivareal-scraper)** — sale and rent listings with condo fee, IPTU and agency CRECI.
- **[QuintoAndar Scraper](https://apify.com/gangary/quintoandar-scraper)** — rent and sale listings with total monthly cost and rental yield.

***

If this actor helped you, a rating on its Store page helps others find it. Something broke or a field is missing? Open an issue on the actor's **Issues** tab.

*Keywords: olx scraper, olx brasil scraper, raspar olx, olx price scraper, preços olx, anúncios olx, used car prices brazil, real estate brazil scraper, classifieds scraper brazil, price monitoring brazil, competitor tracking, market research brazil.*

# Actor input Schema

## `searchUrls` (type: `array`):

Listing or search pages copied from olx.com.br (e.g. https://www.olx.com.br/imoveis/venda/estado-sp). Only olx.com.br links are accepted. Filters in the URL are kept; pagination is handled for you. Use search/listing URLs from www.olx.com.br (old regional subdomains like sp.olx.com.br redirect to the home page and are skipped).

## `queries` (type: `array`):

Search terms exactly as a shopper would type them on OLX (e.g. "iphone 13"). Each keyword is one search. Use this and/or the search URLs above.

## `state` (type: `string`):

Optional Brazilian state to restrict keyword searches to one state. Leave empty to search all of Brazil. Does not affect search URLs.

## `maxItemsPerSearch` (type: `integer`):

Collect up to this many listings per search URL or keyword. OLX exposes at most 100 pages of 50 listings (about 5,000) per search.

## Actor input object example

```json
{
  "searchUrls": [
    "https://www.olx.com.br/imoveis/venda/estado-sp"
  ],
  "maxItemsPerSearch": 100
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchUrls": [
        "https://www.olx.com.br/imoveis/venda/estado-sp"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("gangary/olx-brazil-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "searchUrls": ["https://www.olx.com.br/imoveis/venda/estado-sp"] }

# Run the Actor and wait for it to finish
run = client.actor("gangary/olx-brazil-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchUrls": [
    "https://www.olx.com.br/imoveis/venda/estado-sp"
  ]
}' |
apify call gangary/olx-brazil-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,gangary/olx-brazil-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/pTyI6GBGUzY8OXM0D/builds/x6wxsIKPqH95eKXaI/openapi.json
