# Quintoandar Rental Listings Extractor (`kawsar/quintoandar-rental-listings-extractor`) Actor

QuintoAndar rental listings extractor that pulls rent, total cost, area, bedrooms, address, and photos from search results, so you can track prices and run property research without copying by hand.

- **URL**: https://apify.com/kawsar/quintoandar-rental-listings-extractor.md
- **Developed by:** [Kawsar](https://apify.com/kawsar) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.99 / 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/actors/running/actors-in-store.md#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 Rental Listings Extractor

Extract rental listings from QuintoAndar at scale and get clean, structured data for every property that matches your search. Enter a location or a search URL, set how many results you want, and the actor paginates through the listings for you and returns the rent, total cost, size, rooms, address, and photos for each one.

It is built for people who work with the Brazilian rental market and would rather have a spreadsheet than a browser full of tabs: real estate agents, property portals, buy-to-let investors, market analysts, and researchers.

### Why use it

- Pulls far more than a single page. Set `maxItems` and the actor keeps paging until it hits your number or the results run out.
- Returns real listing data, not just what fits on a card: bedrooms, bathrooms, parking, suites, furnished status, and the full photo list.
- Works from a plain location like `sao-paulo-sp-brasil` or from a search URL you copied off the site.
- Exports to JSON, CSV, or Excel and connects to Google Sheets, Make, and Zapier.
- No setup headaches. Type a location, press start, get data.

### How it works

QuintoAndar loads its search results in pages. This actor requests those pages one after another, collects each listing, removes duplicates, and stops as soon as it reaches the `maxItems` you set. That is why a run of 200 returns 200 listings, not the 24 you see before scrolling.

### Input

Start a run with a location, a list of search URLs, or both.

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `location` | string | one of the two | A location from a QuintoAndar rental URL, for example `sao-paulo-sp-brasil` or `rio-de-janeiro-rj-brasil`. |
| `searchUrls` | array of strings | one of the two | Full QuintoAndar rental search URLs. Handy when you copied a search straight from the site. |
| `maxItems` | integer | no | How many listings to collect per run. Default 20, maximum 1000. |
| `requestTimeoutSecs` | integer | no | Per request timeout in seconds. Default 30. |

#### Example input

```json
{
    "location": "sao-paulo-sp-brasil",
    "searchUrls": [
        "https://www.quintoandar.com.br/alugar/imovel/rio-de-janeiro-rj-brasil"
    ],
    "maxItems": 200,
    "requestTimeoutSecs": 30
}
```

You can find a location value by opening a rental search on QuintoAndar and copying the part of the address that comes after `/imovel/`. For `https://www.quintoandar.com.br/alugar/imovel/sao-paulo-sp-brasil`, the value is `sao-paulo-sp-brasil`.

### Output

Every listing becomes one dataset record. Results export to JSON, CSV, Excel, HTML, or an API endpoint.

```json
{
    "listingId": "894857316",
    "url": "https://www.quintoandar.com.br/imovel/894857316/alugar",
    "propertyType": "Apartamento",
    "listingDescription": "Alugar apartamento na Mooca, 1 quarto.",
    "rentPrice": 1830,
    "totalPrice": 2691,
    "currency": "BRL",
    "area": 50,
    "bedrooms": 1,
    "bathrooms": 1,
    "parkingSpaces": 1,
    "suites": 0,
    "isFurnished": false,
    "address": "Rua Coronel Bento Pires",
    "neighbourhood": "Mooca",
    "region": "Mooca",
    "city": "Sao Paulo",
    "specialConditions": ["Exclusivity"],
    "isExclusive": true,
    "visitStatus": "ACCEPT_NEW",
    "imageCount": 12,
    "mainImage": "https://www.quintoandar.com.br/img/crop/landscape/540x360/894857316-129.jpg",
    "images": [
        "https://www.quintoandar.com.br/img/crop/landscape/540x360/894857316-129.jpg"
    ],
    "sourceLocation": "sao-paulo-sp-brasil",
    "scrapedAt": "2026-09-07T12:00:00+00:00"
}
```

#### Output fields

| Field | Type | Description |
|-------|------|-------------|
| `listingId` | string | QuintoAndar listing identifier |
| `url` | string | Detail page URL |
| `propertyType` | string | Apartamento, Casa, StudioOuKitchenette, and similar |
| `listingDescription` | string | Short summary of the listing |
| `rentPrice` | integer | Monthly rent in reais |
| `totalPrice` | integer | Total monthly cost in reais, including fees when available |
| `currency` | string | Currency code, always BRL |
| `area` | integer | Floor area in square metres |
| `bedrooms` | integer | Number of bedrooms |
| `bathrooms` | integer | Number of bathrooms |
| `parkingSpaces` | integer | Number of parking spaces |
| `suites` | integer | Number of en suite bedrooms |
| `isFurnished` | boolean | True when the property is furnished |
| `address` | string | Street name |
| `neighbourhood` | string | Neighbourhood |
| `region` | string | Region or district name |
| `city` | string | City |
| `specialConditions` | array | Labels such as Exclusivity or Negotiated |
| `isExclusive` | boolean | True when the listing is exclusive to QuintoAndar |
| `visitStatus` | string | Whether the property is accepting visits |
| `imageCount` | integer | Number of photos |
| `mainImage` | string | First photo URL |
| `images` | array | All photo URLs |
| `sourceLocation` | string | The location the listing came from |
| `scrapedAt` | string | Extraction timestamp in UTC |

### Step by step

1. Open the actor and enter a location like `sao-paulo-sp-brasil`, or paste one or more search URLs.
2. Set `maxItems` to the number of listings you want.
3. Press Start and watch the dataset fill as the actor works through the pages.
4. Export to JSON, CSV, or Excel, or push the data to Google Sheets, Make, or Zapier.

### What you can build with it

- Rent trend tracking for a neighbourhood or an entire city
- Price and yield analysis for buy-to-let decisions
- A stocked listings feed for a property portal or comparison site
- Lead lists for agents chasing new inventory
- A dataset for research on the Brazilian housing market

### Tips

- One location covers a whole city. To focus on a district, paste a filtered search URL from the site into `searchUrls`.
- Combine several locations in one run by adding more entries to `searchUrls`.
- Raise `maxItems` gradually. Larger runs take longer because the actor visits more pages.

### Notes and fair use

This actor reads publicly visible rental listings. Use the data responsibly, respect QuintoAndar's terms of use, and follow the privacy and data rules that apply where you operate.

### Frequently asked questions

**Why did an earlier run return only 24 listings?**
QuintoAndar shows about two dozen results before you scroll. This actor pages past that limit automatically, so the number you get back matches your `maxItems`.

**Can I filter by price or number of bedrooms?**
Apply the filters on QuintoAndar first, then paste the resulting search URL into `searchUrls`. The actor follows the location in that URL.

**Which cities are supported?**
Any city QuintoAndar covers. Use the location value from that city's rental search URL.

**In what formats can I export the data?**
JSON, CSV, Excel, and HTML, or straight from the dataset API into your own tools.

# Actor input Schema

## `location` (type: `string`):

Location slug used in a QuintoAndar rental URL, for example sao-paulo-sp-brasil or rio-de-janeiro-rj-brasil. Leave blank if you are using search URLs below.

## `searchUrls` (type: `array`):

Full QuintoAndar rental search URLs. Use this to reuse a search with filters already applied. Each URL returns its rendered result page.

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

Maximum number of listings to extract per run. The actor paginates automatically until it reaches this number or runs out of results.

## `requestTimeoutSecs` (type: `integer`):

Per-request timeout in seconds.

## Actor input object example

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

# Actor output Schema

## `properties` (type: `string`):

Extract rental listings from QuintoAndar search results including rent price, total cost, area, bedrooms, address, tags, and images.

# 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 = {
    "location": "sao-paulo-sp-brasil",
    "searchUrls": [
        "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("kawsar/quintoandar-rental-listings-extractor").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 = {
    "location": "sao-paulo-sp-brasil",
    "searchUrls": ["https://www.quintoandar.com.br/alugar/imovel/sao-paulo-sp-brasil"],
}

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,kawsar/quintoandar-rental-listings-extractor"
        }
    }
}

```

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/KM9RUEMW6U5Pb8OdB/builds/EjrgMFTCBoj361iB8/openapi.json
