# QuintoAndar Scraper — Brazil Rentals & Homes for Sale (`yugenox/quintoandar-scraper`) Actor

Scrape QuintoAndar, Brazil's rental and home-sale platform: rent, total monthly cost, condo fee, IPTU, sale price, price per m², area, bedrooms, parking, address, neighbourhood and photos, by city or neighbourhood with filters. Optional coordinates, ZIP and dates. No login.

- **URL**: https://apify.com/yugenox/quintoandar-scraper.md
- **Developed by:** [Yugenox Corp](https://apify.com/yugenox) (community)
- **Categories:** Real estate, Lead generation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 1,000 listings

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

## QuintoAndar Scraper: Brazil rentals and homes for sale

Scrape **QuintoAndar**, Brazil's largest rental and home-buying platform. Get every listing for a city or neighbourhood with the **monthly rent, total monthly cost, condominium fee, IPTU, sale price, price per m², area, bedrooms, suites, bathrooms, parking, furnished, street, neighbourhood, city, state, amenities, building facilities and photos**. Turn on **Include listing details** for map coordinates, ZIP code (CEP), floor range, publication dates, the owner's description, places nearby and every photo. Rent, buy or both; filters for price, total cost, type, rooms, area, furniture, pets and metro. No login, no cookies, no account.

**Price: $1.20 per 1,000 listings** (+ $0.50 per 1,000 for listing details, + $0.002 per run).

### What you get

| | |
|---|---|
| **Listing** | QuintoAndar id and URL, rent or sale, property type (apartment, house, house in a gated community, studio), position in the results |
| **Prices (R$)** | Monthly rent, condominium fee, IPTU, condo + IPTU, total monthly cost (rent + condo + IPTU + insurance + fee, as QuintoAndar shows it), sale price, rent per m², sale price per m², QuintoAndar's monthly rental-yield estimate for buyers |
| **The home** | Usable area (m²), bedrooms, suites, bathrooms, parking spaces, furnished, home features (balcony, air conditioning, pets allowed …), building facilities (pool, gym, 24 h doorman …), QuintoAndar's one-line summary |
| **Place** | Street (no house number), neighbourhood, region, city, state, and whether QuintoAndar added the home from a nearby area |
| **Photos** | Cover photo, photo URLs with room captions, photo count |
| **Status** | Visit booking status, special conditions (exclusive), listing tags, new development or resale |
| **With listing details** | Latitude / longitude (rounded to about 100 m), ZIP code, listing code, floor range, construction year, pets allowed, near the metro, first and last publication date, the owner's description, places nearby, every photo, video tour |

### How to use it

1. Enter one or more **cities or neighbourhoods**: `São Paulo`, `Rio de Janeiro`, `Pinheiros, São Paulo`, `Copacabana, Rio de Janeiro`, `Campinas, SP` … Each one is its own search.
2. Pick **Rent or buy** (rent, sale or both) and, if you like, filters: price, maximum total monthly cost, property types, minimum bedrooms / bathrooms / parking / suites, area, furnished, pets, near the metro.
3. Set **Max listings** and run. Leave it at 0 to get everything QuintoAndar has for your searches.

You can also paste **QuintoAndar URLs**: search URLs from your browser (`quintoandar.com.br/alugar/imovel/pinheiros-sao-paulo-sp-brasil/apartamento/2-quartos` — the type, bedrooms, price and area in the URL are kept) or listing URLs (`quintoandar.com.br/imovel/895825983/comprar`, always read with full details).

#### Input examples

20 rentals in São Paulo:

```json
{
  "locations": ["São Paulo"],
  "maxItems": 20
}
```

2-bedroom apartments for sale in Pinheiros and Vila Madalena up to R$ 900,000, with coordinates and publication dates:

```json
{
  "locations": ["Pinheiros, São Paulo", "Vila Madalena, São Paulo"],
  "dealType": "sale",
  "propertyTypes": ["APARTMENT"],
  "minBedrooms": 2,
  "maxPrice": 900000,
  "includeDetails": true,
  "maxItems": 500
}
```

A daily alert for new furnished rentals in Copacabana under R$ 5,000 a month all-in (schedule it daily):

```json
{
  "locations": ["Copacabana, Rio de Janeiro"],
  "dealType": "rent",
  "furnished": "yes",
  "maxTotalMonthlyCost": 5000,
  "sortBy": "newest",
  "onlyNew": true,
  "maxItems": 200
}
```

Every rental and every home for sale in Curitiba:

```json
{
  "locations": ["Curitiba"],
  "dealType": "both",
  "maxItems": 0
}
```

### Output example

A real row from a pasted listing URL, with listing details (photos and lists trimmed; the listing has 83 photos):

```json
{
  "listingId": "894571002",
  "url": "https://www.quintoandar.com.br/imovel/894571002/alugar/apartamento-3-quartos-vila-suzana-sao-paulo",
  "dealType": "rent",
  "propertyType": "Apartment",
  "propertyTypeRaw": "Apartamento",
  "forRent": true,
  "forSale": true,
  "rent": 2700,
  "condoFee": 3200,
  "iptu": 834,
  "condoPlusIptu": 4034,
  "totalMonthlyCost": 6838,
  "salePrice": 775000,
  "currency": "BRL",
  "rentPerM2": 12.5,
  "salePricePerM2": 3588,
  "area": 216,
  "bedrooms": 3,
  "suites": 1,
  "bathrooms": 3,
  "parkingSpaces": 4,
  "isFurnished": false,
  "street": "Rua Doutor James Ferraz Alvim",
  "neighbourhood": "Vila Suzana",
  "region": "Portal do Morumbi",
  "city": "São Paulo",
  "state": "SP",
  "latitude": -23.615,
  "longitude": -46.733,
  "zipCode": "05641-021",
  "nearbyMatch": null,
  "amenities": ["BOX", "VARANDA", "ARMARIOS_EMBUTIDOS_NO_QUARTO", "ARMARIOS_NOS_BANHEIROS", "ARMARIOS_NA_COZINHA", "CHUVEIRO_A_GAS"],
  "installations": ["PISCINA", "CHURRASQUEIRA", "ACADEMIA", "SALAO_DE_FESTAS", "RAMPAS_DE_ACESSO", "SALAO_DE_JOGOS"],
  "shortDescription": null,
  "coverImageUrl": "https://www.quintoandar.com.br/img/crop/landscape/1200x800/894571002-932.4114731908825IMG4405HDR.jpg",
  "imageUrls": ["https://www.quintoandar.com.br/img/crop/landscape/1200x800/894571002-932.4114731908825IMG4405HDR.jpg", "https://www.quintoandar.com.br/img/crop/landscape/1200x800/894571002-850.5159759124174IMG4402HDR.jpg", "…"],
  "imageCaptions": ["Sala", "Sala", "…"],
  "imageCount": 83,
  "visitStatus": "ACCEPT_NEW",
  "specialConditions": ["Exclusivity"],
  "listingTags": [],
  "isPrimaryMarket": false,
  "rentalYieldMonthly": null,
  "rentalYieldSource": null,
  "listingCode": "1871002",
  "floorMin": 8,
  "floorMax": 11,
  "constructionYear": null,
  "acceptsPets": true,
  "nearSubway": false,
  "firstPublishedAt": "2024-08-07T01:19:50.000Z",
  "lastPublishedAt": "2026-10-08T20:35:20.000Z",
  "description": null,
  "placesNearby": [
    {
      "name": "Praça Miguel Torga",
      "type": "PARK_OR_GREEN_AREA"
    },
    {
      "name": "Colégio Querubin’s",
      "type": "SCHOOL"
    },
    {
      "name": "Colégio Anglo Morumbi",
      "type": "SCHOOL"
    }
  ],
  "saleType": "SECONDARY",
  "status": "published",
  "videoUrl": null,
  "detailsScraped": true,
  "searchLocation": null,
  "source": "listing-page",
  "scrapedAt": "2026-10-30T01:08:28.791Z"
}
```

Every row has the same columns; a value QuintoAndar doesn't give is `null` (or `[]`). Prices are in Brazilian reais.

### Pricing

Pay per result, no subscription:

- **$1.20 per 1,000 listings** saved to your dataset.
- **+ $0.50 per 1,000 listing details**, only when **Include listing details** is on (or for pasted listing URLs). A listing whose page can't be read is saved without details and the details are not charged.
- **$0.002 per run** (start fee).

Duplicates, homes left out by your filters, nearby homes left out by **Only exact location** and listings skipped by **Only new listings** are never charged. A run never charges past your **maximum charge per run**: it stops saving where the money stops.

### Use cases

- **Rental market analysis**: rent, total cost and rent per m² by neighbourhood, bedrooms and building facilities.
- **Investment screening**: sale price per m², condo + IPTU, and QuintoAndar's rental-yield estimate for homes for sale.
- **Price monitoring and alerts**: a daily run with **Newest first** and **Only new listings** for the areas you watch.
- **Proptech and data products**: feed listings into your own app, map or valuation model (coordinates with listing details).
- **Relocation and corporate housing**: furnished homes near the metro within a monthly budget.

### Tips

- **Big cities**: QuintoAndar returns at most 1,000 listings per search. When you want more than that, the scraper splits the search into price ranges by itself and collects them all (São Paulo has 40,000+ rentals). Searches by neighbourhood are faster for targeted work.
- **Several places**: **Max listings** is shared fairly between your searches; a search with fewer listings than its share passes the rest to the others.
- **Nearby homes**: for a neighbourhood search QuintoAndar also shows homes from nearby areas; `nearbyMatch` marks them, and **Only exact location** leaves them out (not charged).
- **Filters** are applied by QuintoAndar itself, so a filtered search reads only matching homes; with **Include listing details** on, pets and metro are also double-checked on each listing's page.
- **Spelling**: QuintoAndar matches small typos in a neighbourhood by itself (the run log shows what each search matched). A city it can't find is skipped with a note in the status message and nothing is charged for it; the scraper never quietly hands you the whole state instead.
- **Listing URLs**: pasted listing URLs are read side by side. A listing that is no longer on QuintoAndar is skipped and not charged; if a list turns out to be mostly out of date (50 or more gone and almost none still listed), the rest of that list is not read (refresh your list).
- **Proxy**: keep the default (Apify Proxy, datacenter). It comes with every Apify plan, including the free one.

### FAQ

**Do I need a QuintoAndar account, cookies or a login?** No. The scraper reads the same public listings any visitor sees on quintoandar.com.br. It never logs in, never books visits and never makes offers.

**Which cities are covered?** Every city QuintoAndar serves, about 100: São Paulo, Rio de Janeiro, Belo Horizonte, Curitiba, Porto Alegre, Brasília, Goiânia, Campinas and more, with any of their neighbourhoods. Some cities have rentals only; the status message says so when a sale search has nothing to search.

**What does "total monthly cost" include?** For a rental it is the amount QuintoAndar shows as "Total": rent + condominium + IPTU + fire insurance + service fee. Rent, condominium and IPTU are also in their own columns.

**Why is a listing for sale showing a rent too?** Some homes are listed for both rent and sale; `forRent` and `forSale` say which. With **Rent or buy** set to both, such a home is saved once.

**How fresh is the data?** Every run reads QuintoAndar live. Listings taken down between the search and their page are left out and not charged.

**Is it legal to scrape QuintoAndar?** This Actor only collects publicly available data: property listings that anyone can see on QuintoAndar without an account, such as the price, size, rooms, street, neighbourhood and photos. Collecting publicly available data is generally legal, but you're responsible for how you use it. Listings describe homes, not people: the scraper never collects owners' names or contact details, gives the street without the house number, rounds coordinates to about 100 m, and removes personal phone numbers, e-mail addresses and the names next to them from owners' descriptions. You must follow privacy laws such as the LGPD, GDPR and CCPA, as well as QuintoAndar's terms. If you're unsure, check with a lawyer. More on this: [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

**Does it access any private data?** No. Everything comes from what QuintoAndar shows to any visitor without logging in. It never touches accounts, favourites, visits or offers, and it follows the site's robots.txt.

*This Actor is not affiliated with, endorsed by or sponsored by QuintoAndar.*

# Actor input Schema

## `locations` (type: `array`):

Where to search. A city ("São Paulo", "Rio de Janeiro", "Belo Horizonte", "Curitiba" …), a neighbourhood with its city ("Pinheiros, São Paulo", "Copacabana, Rio de Janeiro"), a city with its state ("Campinas, SP") or a QuintoAndar location slug ("pinheiros-sao-paulo-sp-brasil"). Each one is a separate search.

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

Homes for rent (aluguel), homes for sale (compra), or both (every location is searched twice). A home listed for both appears once.

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

Optional: QuintoAndar search URLs (quintoandar.com.br/alugar/imovel/pinheiros-sao-paulo-sp-brasil/apartamento/2-quartos — type, bedrooms, price and area in the URL are kept) or listing URLs (quintoandar.com.br/imovel/895825983/comprar/…, always read with full details).

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

Maximum number of listings for the whole run, shared fairly between your searches. 0 = everything (a big city has tens of thousands).

## `includeDetails` (type: `boolean`):

Also open each listing's own page for coordinates (about 100 m precision), ZIP code, listing code, floor range, publication dates, the owner's description, places nearby, pets / metro and every photo. Charged as an extra "listing details" event per listing (see Pricing); slower.

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

Order of the results, as on QuintoAndar. Price = total monthly cost for rentals, sale price for sales.

## `onlyNew` (type: `boolean`):

Skip listings an earlier run with the same input already saved (they are not saved or charged again). Ideal for a daily schedule together with "Newest first".

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

Minimum monthly rent (rentals) or sale price (sales), in reais.

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

Maximum monthly rent (rentals) or sale price (sales), in reais.

## `maxTotalMonthlyCost` (type: `integer`):

Rentals only: maximum total per month (rent + condominium + IPTU + fees), as QuintoAndar shows it.

## `propertyTypes` (type: `array`):

Only these property types. Empty = all.

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

At least this many bedrooms.

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

At least this many bathrooms.

## `minParkingSpaces` (type: `integer`):

At least this many parking spaces.

## `minSuites` (type: `integer`):

At least this many suites (bedrooms with their own bathroom).

## `minArea` (type: `integer`):

Minimum usable area in square metres.

## `maxArea` (type: `integer`):

Maximum usable area in square metres.

## `furnished` (type: `string`):

Furnished homes only, unfurnished only, or any.

## `acceptsPets` (type: `boolean`):

Only homes that accept pets.

## `nearSubway` (type: `boolean`):

Only homes near a metro station.

## `onlyExactLocation` (type: `boolean`):

QuintoAndar adds homes from nearby areas to a neighbourhood search (the nearbyMatch column says which). Turn this on to leave them out (they are not charged).

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

Apify Proxy (datacenter) is the default and is all this scraper needs.

## Actor input object example

```json
{
  "locations": [
    "São Paulo"
  ],
  "dealType": "rent",
  "maxItems": 20,
  "includeDetails": false,
  "sortBy": "relevance",
  "onlyNew": false,
  "furnished": "any",
  "acceptsPets": false,
  "nearSubway": false,
  "onlyExactLocation": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

All scraped listings.

## `run` (type: `string`):

Status and statistics for this run.

## `report` (type: `string`):

RUN_REPORT: how the run ended, counts, requests and proxy use.

# 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 = {
    "locations": [
        "São Paulo"
    ],
    "maxItems": 20,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("yugenox/quintoandar-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 = {
    "locations": ["São Paulo"],
    "maxItems": 20,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("yugenox/quintoandar-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 '{
  "locations": [
    "São Paulo"
  ],
  "maxItems": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call yugenox/quintoandar-scraper --silent --output-dataset

```

## MCP server setup

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