# OLX Imóveis Scraper | Brazil Apartments, Rent & Prices (`piotrv1001/olx-brazil-real-estate-scraper`) Actor

The OLX Brazil Real Estate Scraper extracts OLX Imóveis apartments, houses, land and commercial property for sale or rent: price, m², bedrooms, bathrooms, garage, condo fee, IPTU, city and neighbourhood, with optional CEP, coordinates and advertiser. Ideal for property market research.

- **URL**: https://apify.com/piotrv1001/olx-brazil-real-estate-scraper.md
- **Developed by:** [FalconScrape](https://apify.com/piotrv1001) (community)
- **Categories:** Real estate, Lead generation, Automation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 properties

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 Imóveis Scraper: Brazil Apartments, Rent and Prices

Export **OLX Imóveis listings** as clean JSON, CSV or Excel: apartments, houses, land and commercial property, for sale (venda) or for rent (aluguel), anywhere in Brazil. The **OLX Brazil Real Estate Scraper** gives each property its own columns for price, m², bedrooms, bathrooms, garage spaces, condo fee and IPTU, so you can work out the price per square metre without parsing text.

### 🎯 Use Cases

- **Price per square metre (preço do metro quadrado)**: divide `price` by `sizeM2` per city or neighbourhood.
- **Rental market research (olx aluguel)**: compare rents, condo fees and IPTU across a state.
- **Real estate investment screening**: filter apartments by price, size and bedrooms, then rank by price per m².
- **Lead lists of real estate agencies**: with details on, get the advertiser's name for professional listings.
- **Portfolio monitoring**: schedule a run and see new listings and price drops for an area.

### ✨ Features

- **Typed property columns**: `sizeM2`, `bedrooms`, `bathrooms`, `garageSpaces`, `condoFee`, `iptu` as numbers.
- **Amenities**: `features` for the unit, `complexFeatures` for the building (pool, gym, elevator, pets allowed).
- **Sale or rent, by type**: apartments, houses, land and farms, commercial and industrial.
- **Real filters**: bedrooms, bathrooms, garage, size, price, state, keyword and seller type.
- **City-level searches**: paste a search link from OLX with the city already chosen.
- **Past the 5,000-result limit**: large searches are split by state and price band automatically.
- **Optional details**: description, CEP, coordinates, first-listed date and advertiser.

### 🛠️ How It Works

1. **Choose what to search**: fill in the fields or paste a search link from OLX.
2. **Set Max results**: the default is 50.
3. **Run the scraper** and download the results as JSON, CSV or Excel, or pull them through the API.

### ⚙️ Input

| Field | What it does |
| --- | --- |
| **Deal type** | For sale or for rent. |
| **Property type** | Any, apartments, houses, land or commercial. |
| **State** | One state, or all of Brazil. Default São Paulo. |
| **Keyword** | Optional words, such as `piscina` or `cobertura`. |
| **Bedrooms, bathrooms, garage** | Minimum values, plus a maximum for bedrooms. 5 means 5 or more. |
| **Min / Max size** | Size range in m². |
| **Min / Max price** | Price range in R$. |
| **Sort by** | Most relevant, newest, lowest price or highest price. |
| **Seller type** | Any, private or professional. |
| **Search links** | Links from www.olx.com.br, for one city for example. When used, the fields above are ignored. |
| **Max results** | Total properties to save. Default 50. |
| **Scrape ad details** | Also open each ad for description, CEP, coordinates and advertiser. Off by default. |

```json
{
    "dealType": "rent",
    "propertyType": "apartment",
    "state": "rj",
    "minBedrooms": 2,
    "maxBedrooms": 3,
    "minGarageSpaces": 1,
    "maxPrice": 4000,
    "sortBy": "newest",
    "maxItems": 200
}
```

### 💰 Pricing

You pay per result, and only for what is saved.

| Event | Price |
| --- | --- |
| Actor start (per run, per GB of memory) | $0.00005 |
| Each property saved | $0.003 |
| Ad details, per property (only when turned on and loaded) | $0.002 |

Examples, leaving out the start fee of a fraction of a cent:

- 1,000 properties: $3.00
- 1,000 properties with details: $5.00
- 10,000 properties: $30.00

Set a maximum charge per run and the scraper stops there. Duplicates aren't charged, and if an ad's details can't be loaded, the property is saved without them and you don't pay for details.

### 📦 Sample Output Data

```json
{
    "id": "1544035803",
    "title": "Apartamento à venda, 2 quartos, Parque Campolim, Sorocaba/SP",
    "price": 440000,
    "priceText": "R$ 440.000",
    "oldPrice": null,
    "currency": "BRL",
    "url": "https://sp.olx.com.br/regiao-de-sorocaba/imoveis/apartamento-a-venda-2-quartos-parque-campolim-sorocaba-sp-1544035803",
    "category": "Apartamentos",
    "categoryId": "1001",
    "state": "SP",
    "city": "Sorocaba",
    "neighbourhood": "Parque Campolim",
    "areaCode": "15",
    "postedAt": "2026-11-01T07:41:10.000Z",
    "isProfessional": true,
    "isFeatured": false,
    "isPinned": false,
    "priceReduced": false,
    "onlinePayment": false,
    "delivery": false,
    "sellerRating": null,
    "imageCount": 16,
    "videoCount": 0,
    "images": [
        "https://img.olx.com.br/images/29/295648694834992.jpg",
        "https://img.olx.com.br/images/28/286668696639265.jpg"
    ],
    "attributes": {
        "category": "Apartamentos",
        "real_estate_type": "Venda - apartamento padrão",
        "condominio": "R$ 400",
        "iptu": "R$ 54",
        "size": "78m²",
        "rooms": "2",
        "bathrooms": "2",
        "garage_spaces": "2",
        "re_types": "Padrão"
    },
    "searchInput": "venda apartment SP",
    "propertyType": "Apartamentos",
    "listingType": "Venda - apartamento padrão",
    "sizeM2": 78,
    "bedrooms": 2,
    "bathrooms": 2,
    "garageSpaces": 2,
    "condoFee": 400,
    "iptu": 54,
    "features": [],
    "complexFeatures": [],
    "detailsScraped": true,
    "description": "Código do anúncio: VIP0128 Apartamento à venda no Parque Campolim, Sorocaba/SP, com 78 m² de área privativa, localizado no 1º andar de um edifício com apenas 4 pavimentos e 8 unida…",
    "firstListedAt": "2026-11-01T07:41:10.000Z",
    "zipcode": "18047800",
    "region": "Sorocaba e região, SP",
    "latitude": -23.532418,
    "longitude": -47.466985,
    "sellerName": "Vip7 Imóveis",
    "sellerId": "adcc79e3-83a1-4ff9-99ad-eb26722311f0",
    "officialStore": null,
    "officialStoreUrl": null,
    "whatsappAvailable": false,
    "phoneAvailable": true,
    "scrapedAt": "2026-11-01T07:52:59.322Z"
}
```

`bedrooms`, `bathrooms` and `garageSpaces` read 5 when OLX says "5 or more". `condoFee` and `iptu` are in R$ as the advertiser gave them, and OLX doesn't state the period for IPTU. `latitude` and `longitude` come with details and are empty when the advertiser hid the address.

### 📅 Schedule and Integrate

For market tracking, a weekly run per state or city is usually enough. To catch new listings, sort by newest and run daily. Set it up with Apify **Schedules**, then send results to Google Sheets, Zapier, Make, n8n or your own webhook.

### 🤖 Use with AI Agents (MCP)

This Actor works as a tool in Claude, ChatGPT, Cursor and other MCP clients through the Apify MCP server (`https://mcp.apify.com`). An agent can call it with:

```json
{
    "dealType": "sale",
    "propertyType": "house",
    "state": "mg",
    "maxPrice": 800000,
    "maxItems": 20
}
```

### ❓ FAQ

**Does OLX Brazil have an official API?**
OLX Brazil's integration tools are aimed at professional advertisers publishing their own ads, not at reading search results. This Actor is the practical alternative: no API key, no approval, and the results come back as structured data.

**Do I need an OLX account?**
No. It reads public ads, so no login or account is needed.

**Why is a field empty?**
Advertisers fill in different things, and each category has its own attributes. Details fields are only filled when Scrape ad details is on. Phone numbers aren't included, because OLX doesn't show them publicly; `phoneAvailable` and `whatsappAvailable` tell you if the advertiser accepts those contacts.

**How do I get listings for one city?**
Open OLX, choose the city and filters, then paste that link into Search links. Example: `https://www.olx.com.br/imoveis/venda/apartamentos/estado-sp/vale-do-paraiba-e-litoral-norte/sao-jose-dos-campos`.

**How do I calculate the price per square metre?**
Divide `price` by `sizeM2`. Some listings leave out the size, so filter out empty values first.

**How many results can I get?**
OLX shows at most 5,000 results per search. When you ask for more, the scraper splits by state and price band. Listings with no price can be missed once a search is split by price.

### 🔗 Related Scrapers

- [OLX Brazil Listings Scraper](https://apify.com/piotrv1001/olx-brazil-listings-scraper): every other OLX category by keyword.
- [OLX Brazil Cars Scraper](https://apify.com/piotrv1001/olx-brazil-cars-scraper): cars and motorcycles with make, model, year and mileage.
- [Mercado Libre Listings Scraper](https://apify.com/piotrv1001/mercado-libre-listings-scraper): Latin American marketplace listings for comparison.

# Actor input Schema

## `dealType` (type: `string`):

For sale or for rent.

## `propertyType` (type: `string`):

Which kind of property to search.

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

State to search. For one city, paste a search link below.

## `keyword` (type: `string`):

Optional words to look for, for example piscina or cobertura.

## `minBedrooms` (type: `integer`):

At least this many bedrooms (5 means 5 or more).

## `maxBedrooms` (type: `integer`):

At most this many bedrooms.

## `minBathrooms` (type: `integer`):

At least this many bathrooms.

## `minGarageSpaces` (type: `integer`):

At least this many garage spaces.

## `minSizeM2` (type: `integer`):

Only properties of at least this size.

## `maxSizeM2` (type: `integer`):

Only properties up to this size.

## `sortBy` (type: `string`):

Order of the results.

## `minPrice` (type: `integer`):

Only ads priced at this amount or more.

## `maxPrice` (type: `integer`):

Only ads priced at this amount or less.

## `sellerType` (type: `string`):

Private sellers, professional sellers, or both.

## `startUrls` (type: `array`):

Search or category links copied from www.olx.com.br with any filters, for example https://www.olx.com.br/imoveis/venda/apartamentos/estado-sp/vale-do-paraiba-e-litoral-norte/sao-jose-dos-campos. When you paste links, the fields above are ignored.

## `maxItems` (type: `integer`):

Stop after this many properties in total. Your maximum charge per run also caps the run. Above 5,000, searches are split by state and price band automatically; ads with no price can then be missed.

## `scrapeDetails` (type: `boolean`):

Also open each ad for the full description, first-listed date, CEP, coordinates and seller name. Charged per ad on top of the property price.

## `proxyConfiguration` (type: `object`):

Residential proxies in Brazil work best.

## Actor input object example

```json
{
  "dealType": "sale",
  "propertyType": "apartment",
  "state": "sp",
  "sortBy": "relevance",
  "sellerType": "any",
  "maxItems": 50,
  "scrapeDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "BR"
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `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 = {
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "BR"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/olx-brazil-real-estate-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 = { "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "BR",
    } }

# Run the Actor and wait for it to finish
run = client.actor("piotrv1001/olx-brazil-real-estate-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 '{
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "BR"
  }
}' |
apify call piotrv1001/olx-brazil-real-estate-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,piotrv1001/olx-brazil-real-estate-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/AuMXYsUt29oG6DaDc/builds/vBewOMIuFLHm66zQh/openapi.json
