# QuintoAndar Scraper \[$1/1K 💰] Brazil Rentals & Sales (`memo23/quintoandar-scraper`) Actor

QuintoAndar scraper for Brazil rentals and sales. Type a city or neighbourhood or paste any search or listing URL. Rent, sale price, condo fee, IPTU, total cost, area, rooms, floor, CEP, coordinates, amenities and photos. Price and bedroom filters. Past the 1,000-result cap. $1/1K.

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

## Pricing

from $1.00 / 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 & Sales

Extract rental and sale listings from **QuintoAndar.com.br**, one of Brazil's biggest rental and sale platforms. Type a city or neighbourhood, or paste any QuintoAndar search URL (city, neighbourhood, filters and all) or single listing URLs, and get one clean row per property: rent, sale price, condo fee, IPTU, home insurance, service fee and **total monthly cost**, plus area, rooms, floor, CEP, exact coordinates, description, amenities, condominium, nearby places and photos. Large cities go **past the website's 1,000-result limit**. Pure HTTP, no browser, **$1 per 1,000 listings**.

| Input | Rows emitted |
|---|---|
| Location (`"Cambuí, Campinas, SP"`) | One row per listing in that place, for rent or for sale |
| Search URL (`/alugar/imovel/...` or `/comprar/imovel/...`) | One row per listing in the search, filters applied |
| Listing URL (`/imovel/893021603`) | One row for that listing |

![How the QuintoAndar Scraper works](https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/how-it-works-quintoandar.png)

### Why use this scraper

- **Every cost broken out.** Rent, condo fee (condomínio), IPTU, home insurance (seguro incêndio), service fee and total cost as separate numbers, plus price per m² and QuintoAndar's rental yield. Ready for affordability and yield analysis without parsing text.
- **Past the 1,000-result limit.** QuintoAndar shows at most 1,000 results per search. São Paulo alone has over 70,000 rentals. The actor splits big searches into price ranges automatically, so `maxItems: 0` returns the whole search.
- **No URL needed.** Type `São Paulo, SP` or `Cambuí, Campinas, SP`, choose rent or buy, and add a price range, minimum bedrooms or property types if you want them.
- **Filters from the URL.** Or set up the search on quintoandar.com.br (price, property type, bedrooms, area, furnished, pets, near metro, availability) and paste the address bar. The same filters are applied.
- **Full listing record.** CEP (zip code), floor range, exact latitude and longitude, condominium name and link, every amenity marked yes, building facilities, nearby schools, hospitals and metro stations, first and last publication dates.
- **Rent and sale.** Works for `/alugar` (rent) and `/comprar` (buy) searches.
- **Partner listings included.** QuintoAndar mixes its own listings with partner classifieds. You get both, marked by `source`, or only QuintoAndar's own with one toggle.

### Supported inputs

| Type | Example |
|---|---|
| 📍 Location (no URL) | `São Paulo, SP` · `Cambuí, Campinas, SP` · `Copacabana, Rio de Janeiro, RJ` |
| 🔍 City rentals | `https://www.quintoandar.com.br/alugar/imovel/sao-paulo-sp-brasil` |
| 🔍 Neighbourhood + filters | `https://www.quintoandar.com.br/alugar/imovel/pinheiros-sao-paulo-sp-brasil/apartamento/de-1500-a-4000-reais/2-quartos` |
| 🏷️ For sale | `https://www.quintoandar.com.br/comprar/imovel/rio-de-janeiro-rj-brasil` |
| 🏠 Single listing | `https://www.quintoandar.com.br/imovel/893021603` |

### Use cases

- **Rental market research**: median rent, condo fee and total cost per neighbourhood, per m², per bedroom count.
- **Investment analysis**: compare sale prices with rents and QuintoAndar's yield field to find high-return areas.
- **Price monitoring**: run a search on a schedule and track new listings and price drops.
- **Lead lists for real-estate services**: movers, furniture, insurance and internet providers targeting new tenants by area.
- **Data for models**: geocoded listings with costs and features for valuation and recommendation models.

### How it works

1. A location is turned into the search URL the website uses for that place (`Cambuí, Campinas, SP` → `/alugar/imovel/cambui-campinas-sp-brasil`). A search URL is opened once to read the region (city or neighbourhood, map area) and the filters encoded in the URL.
2. The actor queries QuintoAndar's own search service with those filters, 100 listings per request. When a search holds more than 1,000 listings, it first splits the price range until each part fits under the limit.
3. With **Open each listing page** on (default), each QuintoAndar listing page is read for the full record: separate fees, CEP, floor, coordinates, description, condominium, amenities and nearby places.
4. Rows are deduplicated by listing ID and pushed to the dataset.

### Input configuration

| Field | Type | Default | Notes |
|---|---|---|---|
| `startUrls` | array | São Paulo rentals | Search and/or listing URLs, any mix |
| `locations` | array | none | `City, UF` or `Neighbourhood, City, UF`. The state code can be left out for the cities QuintoAndar serves (`Campinas`) |
| `dealType` | string | `rent` | `rent` or `sale`, for locations. A search URL already says which |
| `minPrice`, `maxPrice` | integer | none | Monthly rent for rentals, asking price for sales, in R$. Replaces the price in a pasted URL |
| `minBedrooms` | integer | none | 2 means 2 or more bedrooms |
| `propertyTypes` | array | all | `apartment`, `house`, `house_condo`, `studio` |
| `maxItems` | integer | 100 | Listings for the whole run. `0` = everything the searches return |
| `fetchDetails` | boolean | true | Open each listing page for fees, CEP, floor, description, amenities, nearby places |
| `includeClassifieds` | boolean | true | Include partner classified listings (`source: "classified"`) |
| `sortBy` | string | `url` | `url` (as in the pasted URL), `relevance`, `newest`, `lowest_price`, `highest_price` |
| `maxConcurrency` | integer | 8 | Listing pages opened in parallel |
| `proxy` | object | none | Leave empty. Only your own proxy URLs are used; Apify Proxy is ignored |

#### Example input: a neighbourhood with filters

```json
{
  "locations": ["Pinheiros, São Paulo, SP", "Cambuí, Campinas, SP"],
  "dealType": "rent",
  "maxPrice": 4000,
  "minBedrooms": 2,
  "propertyTypes": ["apartment"],
  "maxItems": 300
}
```

#### Example input: search URLs

```json
{
  "startUrls": [
    "https://www.quintoandar.com.br/alugar/imovel/pinheiros-sao-paulo-sp-brasil/apartamento/2-quartos",
    "https://www.quintoandar.com.br/comprar/imovel/rio-de-janeiro-rj-brasil"
  ],
  "maxItems": 500,
  "fetchDetails": true,
  "sortBy": "newest"
}
```

### Output

One row per listing. Sample (arrays shortened):

```json
{
  "listingId": "895755833",
  "url": "https://www.quintoandar.com.br/imovel/895755833/alugar",
  "source": "quintoandar",
  "businessContext": "RENT",
  "forRent": true,
  "forSale": true,
  "propertyType": "Apartamento",
  "rentPrice": 12300,
  "salePrice": 1950000,
  "condoFee": 1500,
  "iptu": 13,
  "condoPlusIptu": 1513,
  "homeInsurance": 156,
  "serviceFee": 318,
  "totalCost": 14287,
  "pricePerSqm": 144.71,
  "rentalYield": 0.0051,
  "area": 85,
  "bedrooms": 2,
  "suites": 2,
  "bathrooms": 3,
  "parkingSpaces": 1,
  "floorMin": 8,
  "floorMax": 11,
  "isFurnished": false,
  "acceptsPets": false,
  "nearSubway": true,
  "visitStatus": "ACCEPT_NEW",
  "street": "Avenida Pedroso de Morais",
  "neighborhood": "Pinheiros",
  "city": "São Paulo",
  "state": "SP",
  "zipCode": "05419-000",
  "latitude": -23.5638009,
  "longitude": -46.691754,
  "title": "Apartamento com 2 quartos para alugar em Pinheiros, São Paulo por R$ 12.300,00",
  "description": "Localizado na vibrante cidade de São Paulo, este apartamento…",
  "amenities": ["Varanda", "Armários no quarto", "Ar condicionado"],
  "buildingAmenities": ["Playground", "Piscina", "Academia"],
  "condominiumName": "737 Pedroso",
  "condominiumUrl": "https://www.quintoandar.com.br/condominio/737-pedroso-pinheiros-sao-paulo-djrsvrlw9k",
  "placesNearby": [{ "name": "E.E Fernão Dias Paes", "type": "SCHOOL" }],
  "coverImage": "https://www.quintoandar.com.br/img/xlg/original895755833-761.318981037293530092026EOSR0027.jpg",
  "photos": [{ "url": "https://www.quintoandar.com.br/img/xlg/original895755833-761.318981037293530092026EOSR0027.jpg", "caption": "Sala" }],
  "photoCount": 55,
  "firstPublishedAt": "2026-10-01T01:24:30.000Z",
  "lastPublishedAt": "2026-10-01T01:24:30.000Z",
  "detailFetched": true,
  "scrapedAt": "2026-10-18T21:10:22.714Z"
}
```

#### Key output fields

| Field | Description |
|---|---|
| `listingId`, `url` | QuintoAndar listing ID and page |
| `source` | `quintoandar` (own listing) or `classified` (partner listing) |
| `businessContext` | `RENT` or `SALE`, from the search the row came from |
| `rentPrice`, `salePrice` | Monthly rent and asking price in R$ |
| `condoFee`, `iptu`, `condoPlusIptu` | Condomínio and IPTU, separately and summed |
| `homeInsurance`, `serviceFee`, `totalCost` | Fire insurance, QuintoAndar service fee, total monthly cost |
| `pricePerSqm`, `rentalYield` | Rent (or sale price) per m², and QuintoAndar's monthly yield estimate |
| `area`, `bedrooms`, `suites`, `bathrooms`, `parkingSpaces` | Size and rooms |
| `floorMin`, `floorMax` | Floor range QuintoAndar publishes (exact floor is not public) |
| `street`, `neighborhood`, `region`, `city`, `state`, `zipCode` | Address with CEP |
| `latitude`, `longitude` | Coordinates |
| `amenities`, `buildingAmenities` | Unit features and building facilities marked yes |
| `condominiumName`, `condominiumUrl` | Building, with its QuintoAndar page |
| `placesNearby` | Nearby schools, hospitals, universities, metro stations |
| `photos`, `coverImage`, `photoCount` | Full-size photo URLs with room captions |
| `firstPublishedAt`, `lastPublishedAt` | Publication dates, from the listing page (null with `fetchDetails: false` and on classifieds: the search service does not return them) |
| `detailFetched` | Whether the listing page was read (false for classifieds or with `fetchDetails: false`) |

### Pricing

| Event | When | Price |
|---|---|---|
| Listing | One row in the dataset | $0.001 ($1 per 1,000) |
| Actor start | Once per run | $0.005 per GB of run memory (the default 512 MB run counts as one GB: $0.005) |

Rows from the listing page cost the same as rows from search alone.

### Free tier

| | Free Apify account |
|---|---|
| Listings per run | up to **60** |
| Searches per run | **1** (the first URL or location) |

Enough to check the fields against your own search. Paid plans lift both caps.

### FAQ

**Do I need a proxy?** No. QuintoAndar answers plain HTTP requests. If they start failing during a run, the actor moves to a residential proxy by itself, at no extra cost to you. The proxy field takes your own proxy URLs if you prefer to route through them; Apify Proxy is not used.

**What do I type in Locations?** The place as QuintoAndar names it: `City, UF` (`Belo Horizonte, MG`) or `Neighbourhood, City, UF` (`Vila Mariana, São Paulo, SP`). Accents and capitals do not matter. For the cities QuintoAndar serves you can leave out the state (`Campinas`, `Florianópolis`). A place QuintoAndar does not know is skipped with a message in the log.

**Why does a neighbourhood search return listings from next door?** QuintoAndar searches the map area around the neighbourhood, so a `Cambuí, Campinas` search also returns listings in Centro or Guanabara nearby, the same as the website.

**How long does a run take?** Measured on Apify on 26 October 2026: 3,000 listings with search fields only (`fetchDetails: false`) in 21 seconds, 100 listings with full details in 25 seconds, 500 with full details in about 2 minutes. Opening listing pages is the slow part, about 4 to 5 per second. A whole city with details takes hours: raise the run timeout above the default hour, or turn details off.

**How do I get every listing in São Paulo?** Paste the city search URL and set `maxItems` to `0`. The actor splits the search into price ranges that each fit under QuintoAndar's 1,000-result limit. A single exact price shared by more than 1,000 listings (rare) is capped at 1,000, and the log says so.

**Why are there rows from other cities in a city search?** QuintoAndar searches a map area, so a city search includes the edges of neighbouring towns (Nova Lima in a Belo Horizonte search, for example), the same as the website.

**Why are some fields null on classified listings?** Partner classifieds have no QuintoAndar listing page with the full record, so they keep what the search returns: prices, condo + IPTU combined, total cost, area, rooms, address, coordinates and photos. Fee breakdown, CEP, floor, description and nearby places are null for them.

**Is the exact apartment number or owner contact included?** No. QuintoAndar does not publish them; contact goes through its visit booking.

### Support

Found a bug or need a field? Open an issue on the actor's Issues tab.

### 🤖 For AI Agents & LLM Apps

**Purpose:** Turn QuintoAndar.com.br search or listing URLs into structured Brazilian rental and sale listings with every monthly cost broken out.

**Minimal input (tested):**

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

or

```json
{ "startUrls": ["https://www.quintoandar.com.br/alugar/imovel/pinheiros-sao-paulo-sp-brasil"], "maxItems": 20 }
```

**Output fields (flat):** `listingId`, `url`, `source`, `businessContext`, `propertyType`, `rentPrice`, `salePrice`, `condoFee`, `iptu`, `condoPlusIptu`, `homeInsurance`, `serviceFee`, `totalCost`, `pricePerSqm`, `rentalYield`, `area`, `bedrooms`, `suites`, `bathrooms`, `parkingSpaces`, `floorMin`, `floorMax`, `isFurnished`, `acceptsPets`, `nearSubway`, `street`, `neighborhood`, `city`, `state`, `zipCode`, `latitude`, `longitude`, `title`, `description`, `amenities[]`, `buildingAmenities[]`, `condominiumName`, `placesNearby[]`, `photos[]`, `firstPublishedAt`, `lastPublishedAt`.

**Behaviors agents should know:**

- `locations` take `City, UF` or `Neighbourhood, City, UF`; `dealType` picks rent or sale. `minPrice`, `maxPrice`, `minBedrooms` and `propertyTypes` filter any search.
- Search URLs are `/alugar/imovel/{region-slug}` (rent) or `/comprar/imovel/{region-slug}` (sale), with optional filter path segments copied from the website. Listing URLs are `/imovel/{id}`.
- `maxItems: 0` returns the full search, splitting past the 1,000-result limit by price.
- Prices are integers in BRL. `totalCost` is the monthly total QuintoAndar shows.
- Billing is per dataset row plus one actor start. Cap spend with `maxItems`.
- No browser, no proxy needed, no login.

### ⚠️ Disclaimer

This actor collects only publicly available listing data from QuintoAndar.com.br. Use it in line with QuintoAndar's Terms of Use and applicable law, including Brazil's LGPD. You are responsible for how you use the data. The actor does not bypass logins or access controls and does not collect personal contact data.

### SEO Keywords

QuintoAndar scraper, QuintoAndar API, QuintoAndar Campinas, QuintoAndar Belo Horizonte, QuintoAndar Porto Alegre, apartamentos para alugar, scrape QuintoAndar, QuintoAndar rentals, aluguel São Paulo dados, imóveis para alugar scraper, imóveis à venda scraper, Brazil real estate scraper, Brazil rental data, São Paulo rent data, Rio de Janeiro imóveis, condomínio IPTU dados, real estate Brazil API, QuintoAndar listings export, QuintoAndar CSV, QuintoAndar JSON, Apify QuintoAndar.

# Actor input Schema

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

QuintoAndar pages to scrape, any mix. Leave empty if you use Locations below.<br><br>🔍 <b>Search</b>: open quintoandar.com.br, pick a city or neighbourhood and filters, then copy the address bar. Examples: <code>https://www.quintoandar.com.br/alugar/imovel/sao-paulo-sp-brasil</code>, <code>https://www.quintoandar.com.br/comprar/imovel/pinheiros-sao-paulo-sp-brasil/apartamento/2-quartos</code>. Price, type, bedrooms, area, furnished, pets and other filters in the URL are applied.<br>🏠 <b>Listing</b>: <code>https://www.quintoandar.com.br/imovel/893021603</code><br><br>Each listing becomes one row.

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

Cities or neighbourhoods to search, one per line, written as on QuintoAndar: <code>São Paulo, SP</code>, <code>Cambuí, Campinas, SP</code>, <code>Copacabana, Rio de Janeiro, RJ</code>. For the cities QuintoAndar serves the state code can be left out (<code>Campinas</code>). Each location runs as its own search, combined with any URLs above.

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

Whether Locations search rentals or homes for sale. Search URLs already say which.

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

Monthly rent for rentals, asking price for sales. Example: 1500.

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

Monthly rent for rentals, asking price for sales. Example: 4000.

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

Example: 2 returns listings with 2 or more bedrooms.

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

Leave empty for every type.

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

Maximum listings for the whole run, across all searches. Example: 500. Default 100. Set 0 for every listing the searches return (large cities hold tens of thousands; the actor splits them by price to get past the website's 1,000-result limit). Free Apify plans are capped at 60 listings and the first search (URL or location) per run.

## `fetchDetails` (type: `boolean`):

When on (default), each QuintoAndar listing page is opened to add the description, condo fee and IPTU separately, home insurance, service fee, floor range, CEP (zip code), exact coordinates, condominium name, full amenity list, nearby places and first publication date. Turn off for a faster run with the search fields only (prices, total cost, area, rooms, address, photos). Partner classified listings always keep the search fields.

## `includeClassifieds` (type: `boolean`):

QuintoAndar search results mix its own listings with partner classifieds (row field source = classified). Default on, matching what the website shows. Turn off for QuintoAndar's own listings only.

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

Order of results, which decides the set you get when Max listings is lower than the search total. 'url' keeps the order in the pasted URL (relevance when none). Default url.

## `maxConcurrency` (type: `integer`):

How many listing pages are opened at the same time when 'Open each listing page' is on. Example: 8. Default 8.

## `proxy` (type: `object`):

Leave empty: QuintoAndar answers without a proxy. To route requests through your own proxies, add their URLs here. Apify Proxy is not used by this actor.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.quintoandar.com.br/alugar/imovel/sao-paulo-sp-brasil"
  ],
  "dealType": "rent",
  "maxItems": 100,
  "fetchDetails": true,
  "includeClassifieds": true,
  "sortBy": "url",
  "maxConcurrency": 8
}
```

# Actor output Schema

## `listings` (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 = {
    "startUrls": [
        "https://www.quintoandar.com.br/alugar/imovel/sao-paulo-sp-brasil"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/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 = { "startUrls": ["https://www.quintoandar.com.br/alugar/imovel/sao-paulo-sp-brasil"] }

# Run the Actor and wait for it to finish
run = client.actor("memo23/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 '{
  "startUrls": [
    "https://www.quintoandar.com.br/alugar/imovel/sao-paulo-sp-brasil"
  ]
}' |
apify call memo23/quintoandar-scraper --silent --output-dataset

```

## MCP server setup

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