# QuintoAndar Scraper | $1.5/1K — Rent, Sale & Rental Yield (`gangary/quintoandar-scraper`) Actor

Scrape QuintoAndar rent and sale listings by city or neighborhood: rent, total monthly cost (rent + condo + IPTU + fees), sale price, rental yield, area, bedrooms, parking, address, amenities and photos. $1.50 per 1,000 listings plus $0.005 per run, proxies included. Failed locations free.

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

## Pricing

from $1.50 / 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

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

## QuintoAndar Scraper | $1.5/1K — Rent, Sale & Rental Yield

**US$1.50 per 1,000 listings + US$0.005 per run. Proxies are included; locations that fail or can't be found are never charged.**

**No URL needed: type a city or neighborhood.** Search QuintoAndar — one of Brazil's largest rental and sale property platforms — and get every listing back as structured data: **sale price, rent, total monthly cost (rent + condo + IPTU + fees), area, bedrooms, bathrooms, parking, rental yield, address, amenities and photos**. Filter by price, bedrooms, area and parking.

- **Up to 20 locations per run**, typed as plain text ("Pinheiros, São Paulo", "Campinas, SP").
- **Up to 1,000 listings per location**, the most QuintoAndar returns for a single search.
- **Total monthly cost and rental yield on every row** where QuintoAndar publishes them, plus up to 20 photo links.

**Em português:** raspe o QuintoAndar digitando só a cidade ou o bairro, sem colar URL, e receba preço de venda, aluguel, custo total mensal (aluguel + condomínio + IPTU + taxas), condomínio + IPTU, área, quartos, vagas, yield de aluguel estimado pelo próprio QuintoAndar, endereço, comodidades e fotos em tabela pronta pra planilha. Até 20 localizações por execução e até 1.000 anúncios por busca. Custa US$1,50 por 1.000 anúncios mais US$0,005 por execução; localização não encontrada ou que falhou não é cobrada. Feito pra análise de rentabilidade, comparação entre alugar e comprar, monitoramento de preços e relatórios de mercado.

> **Need Zap Imóveis or VivaReal too?** The **[Zap Imóveis Scraper](https://apify.com/gangary/zap-imoveis-scraper)** and the **[VivaReal Scraper](https://apify.com/gangary/vivareal-scraper)** take the same kind of location input and add condo fee and IPTU as separate fields, coordinates and the advertiser's CRECI. Run the three side by side for a fuller picture of a neighborhood.

### What `totalCost` and `rentalYield` mean

- **`totalCost`** is the monthly total QuintoAndar shows for a rental: rent + condo + IPTU + fees. `rent` alone is the base rent. Rent searches filter by this total, not by the base rent.
- **`condoPlusIptu`** is the condo fee plus property tax (IPTU) per month, when informed.
- **`rentalYield`** is QuintoAndar's own estimated monthly rental yield for a sale listing, delivered as published (0.0041 = 0.41% per month). The actor does not recalculate it.

### What you get

One row per listing, real output from a "Pinheiros, São Paulo" search (photo list shortened here):

```json
{
  "id": "894529324",
  "url": "https://www.quintoandar.com.br/imovel/894529324/comprar",
  "business": "sale",
  "salePrice": 465000,
  "rent": 2100,
  "totalCost": 3383,
  "condoPlusIptu": 1202,
  "area": 34,
  "bedrooms": 1,
  "bathrooms": 1,
  "suites": 1,
  "parkingSpaces": 1,
  "propertyType": "Apartamento",
  "street": "Rua Arruda Alvim",
  "neighborhood": "Pinheiros",
  "region": "Pinheiros",
  "city": "São Paulo",
  "isFurnished": false,
  "forSale": true,
  "forRent": true,
  "isPrimaryMarket": false,
  "rentalYield": 0.0041,
  "visitStatus": "ACCEPT_ALWAYS",
  "amenities": ["VISTA_LIVRE", "COZINHA_AMERICANA", "BOX", "VARANDA", "RUA_SILENCIOSA"],
  "installations": ["SALAO_DE_FESTAS", "AREA_VERDE", "PISCINA", "PERTO_DE_METRO_OU_TREM"],
  "description": "Aluguel de apartamento em Pinheiros com varanda, 1 suíte e pets permitidos.",
  "imageUrls": [
    "https://www.quintoandar.com.br/img/med/894529324-136.50359762623333EEML4645.jpg",
    "https://www.quintoandar.com.br/img/med/894529324-678.8602390051784EEML4646.jpg"
  ],
  "listingOrigin": "TRANSACTIONAL",
  "searchLocation": "Pinheiros, São Paulo",
  "resolvedLocation": "Pinheiros, São Paulo - SP",
  "scrapedAt": "2026-10-27T12:00:00.000Z"
}
```

| Field | Meaning |
|---|---|
| `salePrice` / `rent` / `totalCost` | Sale price, monthly rent, and total monthly cost (rent + condo + IPTU + fees). `null` when the listing is not offered that way |
| `condoPlusIptu` | Monthly condo fee plus property tax (IPTU), when informed |
| `rentalYield` | QuintoAndar's own estimated monthly rental yield on sale listings (0.0041 = 0.41% per month) |
| `area` / `bedrooms` / `bathrooms` / `suites` / `parkingSpaces` | Size and layout |
| `propertyType` | Property type as QuintoAndar labels it (Apartamento, Casa, Studio...) |
| `street` / `neighborhood` / `region` / `city` | Location; use `neighborhood` to filter precisely |
| `isFurnished` / `forSale` / `forRent` / `isPrimaryMarket` | Flags; many listings are available both ways |
| `amenities` / `installations` | Unit features and building facilities |
| `description` | Short listing text (sale text on sale searches, rent text on rent searches) |
| `imageUrls` | Up to 20 photo links |
| `searchLocation` / `resolvedLocation` | What you typed and what QuintoAndar understood |
| `error` | Set only on failed locations: those rows are **not charged** |

### Use cases

- **Rental-yield analysis for investors:** pull the same neighborhood for sale and for rent, then compare `salePrice` against `rent` and `totalCost` per square meter to find the best-yielding areas. `rentalYield` gives QuintoAndar's own estimate for each sale listing.
- **Rent vs. buy comparison:** put the monthly `totalCost` of rentals next to the `salePrice` of similar units (same neighborhood, bedrooms and area).
- **Price monitoring:** schedule weekly runs and track asking prices and rents per neighborhood.
- **Deal sourcing:** filter by price, size and bedrooms and export a ready shortlist.
- **Market reports and relocation research:** build rent and sale price indexes per city or neighborhood, with furnished flag, amenities and building facilities.

### How to use it

1. Type cities or neighborhoods into **Locations** the way you would on QuintoAndar ("Pinheiros, São Paulo", "Campinas, SP") — up to 20 per run.
2. Choose **For sale** or **For rent**, and optionally pick property types (apartment, house, studio).
3. Add filters: price, minimum bedrooms, area range, minimum parking spaces. On rent searches the price filter applies to the **total monthly cost**.
4. Set **Max items per location** (default 100, up to 1,000) and run. Export from the **Listings** dataset view as JSON, CSV or Excel.

| Input | Type | Default | Notes |
|---|---|---|---|
| `locations` | array of strings | — (required) | City or neighborhood as plain text; up to 20 per run |
| `business` | `sale` / `rent` | `sale` | |
| `propertyTypes` | array | empty = all | `apartment`, `house`, `studio`; each type is a separate search |
| `minPrice` / `maxPrice` | integer (R$) | — | Sale price, or total monthly cost (rent + condo + IPTU) on rent searches |
| `minBedrooms` | integer | — | At least this many bedrooms |
| `minArea` / `maxArea` | integer (m²) | — | Area range |
| `minParkingSpaces` | integer | — | At least this many parking spaces |
| `maxItemsPerLocation` | integer | 100 | 1 to 1,000, split across the selected property types |

#### Ready-to-copy inputs

2+ bedroom apartments for rent with total monthly cost up to R$ 6,000:

```json
{
  "locations": ["Pinheiros, São Paulo"],
  "business": "rent",
  "propertyTypes": ["apartment"],
  "minBedrooms": 2,
  "maxPrice": 6000,
  "maxItemsPerLocation": 200
}
```

Sale listings for a yield study in two cities:

```json
{
  "locations": ["Pinheiros, São Paulo", "Campinas, SP"],
  "business": "sale",
  "maxItemsPerLocation": 500
}
```

Studios for rent, up to 40 m²:

```json
{
  "locations": ["Pinheiros, São Paulo"],
  "business": "rent",
  "propertyTypes": ["studio"],
  "maxArea": 40,
  "maxItemsPerLocation": 100
}
```

### Pricing

Pay per event: a small start fee per run, then a flat fee per **listing delivered**. Failed locations and error rows are **never charged**, and every run respects the `maxTotalChargeUsd` budget you set on Apify. Proxies are included.

- **$0.005 per run**
- **$1.50 per 1,000 listings**

| Scenario | Approximate cost |
|---|---|
| 100 listings (1 location) | ~US$ 0.16 |
| 1,000 listings (1 location, the maximum) | ~US$ 1.51 |
| 5,000 listings (5 locations) | ~US$ 7.51 |

### 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~quintoandar-scraper/run-sync-get-dataset-items" \
  -H "Authorization: Bearer <YOUR_APIFY_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"locations": ["Pinheiros, São Paulo"], "business": "rent", "minBedrooms": 2, "maxItemsPerLocation": 100}'
```

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

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("gangary~quintoandar-scraper").call(
    run_input={"locations": ["Pinheiros, São Paulo"], "business": "sale", "maxItemsPerLocation": 100}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item.get("salePrice"), item.get("rentalYield"), item.get("area"), item.get("neighborhood"))
```

**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~quintoandar-scraper').call({
    locations: ['Pinheiros, São Paulo'],
    business: 'rent',
    maxItemsPerLocation: 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 (many locations × 1,000 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):** run the same neighborhoods every week to follow rents and asking prices.
- **[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 listings to Google Sheets, a database or your reporting tool.
- **[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/quintoandar-scraper
```

Then ask in plain words, e.g. *"Get sale listings in Pinheiros, São Paulo on QuintoAndar and show the 10 with the highest rental yield."* Setup details for each client: **[Apify MCP server docs](https://docs.apify.com/platform/integrations/mcp)**.

### FAQ

**Do I need to paste a QuintoAndar search URL?**
No. Type the city or neighborhood as plain text; the actor resolves it and shows what QuintoAndar understood in `resolvedLocation`.

**How many listings can I get per search?**
Up to 1,000 listings per location + property type search. That is the most QuintoAndar returns for a single search. For more volume, search several neighborhoods or narrower price ranges (each one is a separate search). When you select several property types, the item limit is shared between them.

**Why do neighborhood searches include other neighborhoods?**
QuintoAndar's search can include adjacent neighborhoods when a place has few listings. Every record carries its real `neighborhood` and `region`, so filter on those fields if you need an exact match.

**Is the rent price the total I would pay?**
Use `totalCost` for that: it is rent plus condo, IPTU and fees. `rent` alone is the base rent.

**Where does `rentalYield` come from?**
It is QuintoAndar's own estimate for sale listings, delivered as published. It is empty when QuintoAndar does not show one.

**What happens if a location is not found?**
You get one row with `error: "location-not-found"` and the text you searched. It is not charged.

**Are duplicates removed?**
Yes. A listing that shows up in more than one search of the same run is delivered once.

**Is scraping QuintoAndar legal? What about LGPD?**
The actor reads publicly listed search results: no login, no paywall bypass, and no personal contact data (no owner or agent names or phones). Review your use of the data against Brazil's LGPD before storing it.

**Is proxy included?**
Yes. The actor starts on datacenter proxies and switches to Brazilian residential proxies automatically if it is blocked. Nothing to configure.

**How do I cap what a run can cost?**
Set **Max total charge** on Apify before running. The actor stops as soon as that budget is reached.

### Changelog

- **2026-10-27:** first public release.

### From the same maker

- **[Zap Imóveis Scraper](https://apify.com/gangary/zap-imoveis-scraper)** — sale and rent listings from Zap Imóveis, with condo fee, IPTU and agency data.
- **[VivaReal Scraper](https://apify.com/gangary/vivareal-scraper)** — sale and rent listings from VivaReal, with condo fee, IPTU and agency data.
- **[OLX Brazil Scraper](https://apify.com/gangary/olx-brazil-scraper)** — OLX classifieds by keyword, state or URL, including real estate.

***

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: quintoandar scraper, raspar quintoandar, quintoandar api, aluguel quintoandar, imóveis para alugar, imóveis à venda, brazil real estate scraper, rental yield brazil, property price monitoring, apartamentos são paulo, real estate data brazil.*

# Actor input Schema

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

Cities or neighborhoods to search, as you would type them on QuintoAndar (e.g. "Pinheiros, São Paulo" or "Campinas, SP"). Up to 20 per run.

## `business` (type: `string`):

Search properties for rent or for sale.

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

Property types to include. Leave empty for all types. Each type is searched separately and the item limit is split between them.

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

Minimum price in R$: the sale price when searching for sale, or the total monthly cost (rent + condo + IPTU) when searching for rent.

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

Maximum price in R$: the sale price when searching for sale, or the total monthly cost (rent + condo + IPTU) when searching for rent.

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

Only listings with at least this many bedrooms.

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

Only listings with at least this many square meters.

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

Only listings with at most this many square meters.

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

Only listings with at least this many parking spaces.

## `maxItemsPerLocation` (type: `integer`):

Collect up to this many listings per location, following the site's pagination. QuintoAndar serves at most 1,000 results per search.

## Actor input object example

```json
{
  "locations": [
    "Pinheiros, São Paulo"
  ],
  "business": "sale",
  "maxItemsPerLocation": 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 = {
    "locations": [
        "Pinheiros, São Paulo"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("gangary/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": ["Pinheiros, São Paulo"] }

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

```

## MCP server setup

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