# QuintoAndar Scraper — Brazil Property Prices & Rental Yield (`logiover/quintoandar-brazil-property-scraper`) Actor

Scrape QuintoAndar, Brazil's largest rental and resale property platform. Extract sale price, monthly rent, total cost with condo fees and IPTU tax, area, bedrooms, bathrooms, parking, neighbourhood, city, amenities and the rental yield the site itself computes.

- **URL**: https://apify.com/logiover/quintoandar-brazil-property-scraper.md
- **Developed by:** [Logiover](https://apify.com/logiover) (community)
- **Categories:** Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## QuintoAndar Scraper — Brazil Rents, Prices & Rental Yield

Brazilian property with the numbers tenants and investors actually use: the total monthly cost including condo fee and IPTU, and the rental yield the site computes itself.

### What does the QuintoAndar Scraper do?

This Actor collects live listings from **QuintoAndar**, Brazil's largest rental and resale property platform. It is unusual in publishing the *total* monthly cost of a rental — rent plus the condo fee plus the IPTU property tax — and, on sale listings, the rental yield it calculates itself. In Brazil the condo fee routinely adds a third to the headline rent, so a dataset carrying only `rentPrice` understates what tenants actually pay.

The listings sit in the page's Next.js state as an object keyed by listing id rather than an array, which is why a plain array walk over the payload finds nothing. That state is a window onto a client-side list, so one city yields roughly sixty listings before it starts repeating — several cities in one run is how volume is reached, and the Actor crawls each as its own search.

### Who is it for?

- **Property investors** comparing rental yield across Brazilian cities without computing it themselves.
- **Relocation services** quoting realistic all-in monthly costs rather than headline rents.
- **Proptech teams** benchmarking a Brazilian inventory.
- **Analysts** studying the gap between asking rents and total occupancy cost.
- **Developers** pricing new units against live comparable stock.

### Use cases

- Compare published rental yield across São Paulo, Rio and Belo Horizonte neighbourhoods.
- Measure how much the condo fee and IPTU add to headline rents by district.
- Track asking prices per square metre in a neighbourhood month over month.
- Filter for furnished stock, which prices very differently in Brazilian cities.
- Build an amenity-based comparison — barbecue area, gym, concierge — from the amenities column.
- Feed an AI agent live Brazilian listings for rent and price questions.

### Why use this QuintoAndar Scraper?

- **Total monthly cost, not just rent** — condo fee and IPTU included, as a Brazilian tenant experiences it.
- **Rental yield published by the platform** on sale listings, converted to a readable percentage.
- **Every core field at 100% fill**: price, area, bedrooms, bathrooms, parking and neighbourhood.
- **Sale and rent modes** from the same Actor.
- **Amenities and listing tags** captured as their own columns.
- **Keyless and login-free** — nothing to register, nothing to rotate.

### What data can you extract?

One row per listing. Anything the source left blank comes back as `null`.

| Field | Type | Description |
|---|---|---|
| `listingId` | string | QuintoAndar listing identifier |
| `url` | string | Direct link to the listing |
| `listingType` | string | Sale or Rent |
| `propertyType` | string | Property type, e.g. Apartamento or Casa |
| `salePrice` | number | Asking price in reais, on sale listings |
| `rentPrice` | number | Monthly rent in reais, on rental listings |
| `totalCost` | number | Rent plus condo fee plus IPTU — the real monthly outlay |
| `condoIptu` | number | Condo fee and IPTU tax combined |
| `rentalYield` | number | Rental yield as QuintoAndar computes it, as a percentage |
| `areaSqm` | number | Floor area in square metres |
| `bedrooms` | number | Bedroom count |
| `bathrooms` | number | Bathroom count |
| `parkingSpots` | number | Parking spaces |
| `street` | string | Street name |
| `neighbourhood` | string | Neighbourhood |
| `city` | string | City |
| `isFurnished` | boolean | Furnished |
| `isNewBuild` | boolean | New-build (primary market) unit |
| `amenities` | string | Building and unit amenities |
| `listingTags` | string | Platform tags on the listing |
| `photoCount` | number | Number of photos |
| `imageUrl` | string | Listing photo |
| `scrapedAt` | string | When this row was collected |

#### Sample output

```json
{
  "listingId": "893097224",
  "url": "https://www.quintoandar.com.br/imovel/893097224",
  "listingType": "Sale",
  "propertyType": "Apartamento",
  "salePrice": 1300000,
  "rentPrice": null,
  "totalCost": 2267,
  "condoIptu": 2267,
  "rentalYield": 0.38,
  "areaSqm": 174,
  "bedrooms": 3,
  "bathrooms": 3,
  "parkingSpots": 1,
  "street": "Rua Padre José de Anchieta",
  "neighbourhood": "Santo Amaro",
  "city": "São Paulo",
  "isFurnished": true,
  "isNewBuild": false,
  "amenities": "CHURRASQUEIRA, ESPELHO_NO_BANHEIRO, VARAL_DE_ROUPAS, FOGAO_INCLUSO, CAMA_DE_CASAL, SOL_DA_TARDE, TANQUE, AP...",
  "listingTags": null,
  "photoCount": 5,
  "imageUrl": "https://www.quintoandar.com.br/img/med/893097224-733.4858887854027PabloImvel3972240655.jpg",
  "scrapedAt": "2026-08-16T16:56:33.340Z"
}
```

### How to use the QuintoAndar Scraper

#### Option A — one city

Choose sale or rent, enter a city slug such as `sao-paulo-sp-brasil`, and set a result limit.

#### Option B — several cities

List slugs comma-separated — `sao-paulo-sp-brasil,rio-de-janeiro-rj-brasil,belo-horizonte-mg-brasil`. Each is crawled separately, and since one city tops out at roughly sixty listings, this is how a larger dataset is built.

#### Option C — a yield comparison

Run sale mode across several cities and rank neighbourhoods by `rentalYield`, then run rent mode over the same cities to sanity-check it against live asking rents.

### Input parameters

| Input | Type | Description |
|---|---|---|
| `listingType` | string | Properties for sale or to rent. Rentals carry the total monthly cost; sale listings carry the rental yield. Default: `"comprar"`. |
| `cities` | string | City slugs exactly as they appear in a QuintoAndar URL, e.g. sao-paulo-sp-brasil, rio-de-janeiro-rj-brasil, belo-horizonte-mg-brasil, curitiba-pr-brasil. Each is crawled separately; one city yields roughly 60 listings, so list several for volume. Default: `"sao-paulo-sp-brasil"`. |
| `maxResults` | integer | Stop after this many listings. Each request returns about 26, and a single city runs out at roughly 60 — add more cities to go beyond that. Default: `1000`. |
| `proxyConfiguration` | object | QuintoAndar serves Brazilian exits. Residential proxy pinned to Brazil is used automatically. |

### Tips for best results

- `totalCost` is the number to quote a tenant; `rentPrice` alone understates Brazilian rentals by a third in many buildings.
- One city yields about sixty listings from the server-rendered state — list several cities rather than raising the result cap.
- `rentalYield` is published on sale listings only, and is converted here from a fraction to a percentage.
- `isNewBuild` separates primary-market units from resale stock; they price differently.
- City slugs must match QuintoAndar's URLs exactly, including the state and country suffix.

### Integrations

Connect this Actor to Make, Zapier, n8n, Slack, Google Sheets, GitHub, Airtable or any HTTP endpoint through Apify integrations. Every finished run can push its dataset straight into your warehouse, or fire a webhook so a downstream job starts the moment the data lands.

### API usage

Run the Actor from your own code with the Apify API. Datasets can be exported as JSON, CSV, Excel, XML, RSS or HTML, and every run is available through the [Apify API reference](https://docs.apify.com/api/v2).

```bash
curl -X POST "https://api.apify.com/v2/acts/logiover~quintoandar-brazil-property-scraper/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"input": {"listingType": "comprar", "cities": "sao-paulo-sp-brasil,rio-de-janeiro-rj-brasil", "maxResults": 1000, "proxyConfiguration": {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "BR"}}}'
```

Python, JavaScript, PHP and CLI clients are documented under [Apify API clients](https://docs.apify.com/api/client).

### Use with AI agents (MCP)

This Actor is callable from any MCP-compatible client — Claude, Cursor, VS Code or your own agent — through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp). An agent can call it to answer live questions about Brazilian rents, total occupancy costs and rental yields instead of guessing from stale training data.

### FAQ

#### Do I need a QuintoAndar account or API key?

No. The Actor reads public listing pages with no login and no key.

#### What is IPTU?

Brazil's municipal property tax. QuintoAndar bundles it with the condo fee into the monthly figure a tenant actually pays, which is why `totalCost` matters more than `rentPrice`.

#### How many listings can one run return?

Roughly sixty per city from the server-rendered state, so volume comes from listing several cities in one run. The Actor crawls each separately.

#### What currency are prices in?

Brazilian reais (BRL), as published.

#### How is rental yield calculated?

QuintoAndar computes and publishes it; this Actor reports the platform's own figure, converted from a fraction to a percentage rather than recalculated.

#### Why does a plain JSON walk find no listings on this site?

They are stored as an object keyed by listing id, not as an array, so array-hunting parsers skip straight past them.

#### Can I get the landlord's contact details?

No. QuintoAndar handles all contact itself — it is a managed platform, not a classifieds board.

#### Why did my run return zero listings?

Usually a city slug missing the state or country suffix. Copy it from a QuintoAndar URL.

#### Can I export to CSV or Excel?

Yes. Every run's dataset exports as JSON, CSV, Excel, XML, RSS or HTML from the Storage tab, the API, or automatically through an integration.

#### How fresh is the data?

Every run reads the site live at that moment, so the data is as fresh as the site itself. Schedule the Actor hourly, daily or weekly to build a time series.

#### How often is the Actor updated?

It is monitored and fixed when the site changes its markup or its endpoints. Report anything that looks wrong through the Issues tab and it gets picked up.

### Is it legal to scrape QuintoAndar?

This Actor collects only publicly available information — the same pages any visitor can open without logging in. It does not bypass a login, and it does not touch private or personal accounts. Public data collection is legal in most jurisdictions, but how you *use* the data is your responsibility: if any record contains personal data, GDPR and comparable laws still apply, and you need a lawful basis for processing it. When in doubt, take legal advice. See Apify's [ethical web scraping](https://blog.apify.com/what-is-ethical-web-scraping-and-how-do-you-do-it/) guide.

### Related scrapers

- [VivaReal Scraper](https://apify.com/logiover/vivareal-scraper) — Brazilian property listings.
- [InfoCasas Scraper](https://apify.com/logiover/infocasas-property-scraper) — Uruguay, Paraguay and Bolivia property.
- [Zonaprop Scraper](https://apify.com/logiover/zonaprop-scraper) — Argentine property.
- [Square Yards Scraper](https://apify.com/logiover/squareyards-india-property-scraper) — Indian property with GPS.
- [LIFULL HOME'S Scraper](https://apify.com/logiover/lifull-homes-japan-property-scraper) — Japanese rents and move-in costs.

# Actor input Schema

## `listingType` (type: `string`):

Properties for sale or to rent. Rentals carry the total monthly cost; sale listings carry the rental yield.

## `cities` (type: `string`):

City slugs exactly as they appear in a QuintoAndar URL, e.g. sao-paulo-sp-brasil, rio-de-janeiro-rj-brasil, belo-horizonte-mg-brasil, curitiba-pr-brasil. Each is crawled separately; one city yields roughly 60 listings, so list several for volume.

## `maxResults` (type: `integer`):

Stop after this many listings. Each request returns about 26, and a single city runs out at roughly 60 — add more cities to go beyond that.

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

QuintoAndar serves Brazilian exits. Residential proxy pinned to Brazil is used automatically.

## Actor input object example

```json
{
  "listingType": "comprar",
  "cities": "sao-paulo-sp-brasil",
  "maxResults": 1000,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "BR"
  }
}
```

# Actor output Schema

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

Every record collected in this run. Open the Dataset tab to browse, filter or export as JSON, CSV or Excel.

# 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 = {
    "listingType": "comprar",
    "cities": "sao-paulo-sp-brasil",
    "maxResults": 1000,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "BR"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/quintoandar-brazil-property-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 = {
    "listingType": "comprar",
    "cities": "sao-paulo-sp-brasil",
    "maxResults": 1000,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "BR",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("logiover/quintoandar-brazil-property-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 '{
  "listingType": "comprar",
  "cities": "sao-paulo-sp-brasil",
  "maxResults": 1000,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "BR"
  }
}' |
apify call logiover/quintoandar-brazil-property-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,logiover/quintoandar-brazil-property-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/CtmawvcWMdVDeZnSG/builds/rchAeHFABM6WKPYjO/openapi.json
