# Brazil Rental & Sale Listings by City (QuintoAndar) (`dataspryva/brazil-rental-and-sale-listings-by-city`) Actor

Search Brazilian rental and sale property listings by city and transaction type: price breakdown, bedrooms, bathrooms, area, furnishing, and address across 15 major cities.

- **URL**: https://apify.com/dataspryva/brazil-rental-and-sale-listings-by-city.md
- **Developed by:** [Dataspryva](https://apify.com/dataspryva) (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 $0.49 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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?

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

## Brazil Rental & Sale Listings by City (QuintoAndar)

QuintoAndar is one of Brazil's largest home rental and sale marketplaces, covering São Paulo, Rio de Janeiro, Belo Horizonte and dozens of other metro areas. This actor searches its public listings by city or neighborhood and returns structured property records: transaction prices, monthly costs, size, rooms, address, amenities, photos and optional detail-page enrichment. No account, cookie or proxy setup is needed.

### What this actor does

- **Three modes:** search rentals (`rent`), search properties for sale (`buy`), or load specific listings by URL or numeric ID (`byUrls`)
- **99 locations**, with optional neighborhood search inside any city
- **Server-side filters:** property type, price (base rent, total monthly cost or sale price), area, bedrooms, bathrooms, parking, suites, furnished, pets, near subway, amenities, building facilities, availability and sort order (`cheapest`/`expensive` use total monthly cost; `highestRent` is the rental-return order)
- **Large result sets:** up to 1,000 listings per query and up to 5,000 per run through automatic price-slice partitioning
- **Optional detail enrichment:** description, separate condo fee and IPTU, ZIP code, state, coordinates, full photo gallery with captions, construction year, floor range and project data
- **Empty fields are omitted** from each record instead of being returned as null

### Output per property

- `propertyId` — QuintoAndar property ID
- `title` — composed title with property type, bedrooms, neighborhood and city
- `propertyType` — Apartamento, Casa, CasaCondominio or StudioOuKitchenette
- `rentPrice` — base monthly rent in BRL
- `salePrice` — sale price in BRL
- `totalMonthlyCost` — rent plus condo fee and IPTU, in BRL
- `condoAndIptu` — combined condo fee and IPTU, in BRL
- `condoFee` — monthly condo fee in BRL (with detail enrichment)
- `iptu` — monthly IPTU in BRL (with detail enrichment)
- `iptuPeriod` — always `monthly` when `iptu` is present
- `currency` — always `BRL`
- `areaSqM` — usable area in square metres
- `bedrooms`, `bathrooms`, `suites`, `parkingSpots` — room counts; real zero values are kept
- `street`, `neighborhood`, `region`, `city` — address fields
- `state`, `stateCode`, `zipCode` — state and postal code (with detail enrichment)
- `latitude`, `longitude` — map coordinates (with detail enrichment)
- `amenities[]` — unit feature codes, e.g. `VARANDA`, `AR_CONDICIONADO`
- `amenitiesText[]` — human-readable amenity labels (with detail enrichment)
- `installations[]` — building facility codes, e.g. `PISCINA`, `ACADEMIA`
- `installationsText[]` — human-readable facility labels (with detail enrichment)
- `photos[]` — every property photo as a working image URL
- `photoCaptions[]` — captions parallel to `photos[]` when every photo has one
- `imageUrl` — primary property image URL
- `isFurnished`, `forSale`, `forRent`, `acceptsPets`, `nearSubway` — listing flags
- `yieldRate`, `yieldStrategy` — rental yield and its calculation basis, when published
- `visitStatus` — current visit availability
- `lastPublishedDate`, `firstPublishedDate` — publication timestamps
- `listingTags[]`, `specialConditions[]` — listing tags and exclusivity-style conditions
- `isPrimaryMarket`, `developmentId`, `developmentName`, `constructionStatus`, `forecastDeliveryDate` — new-development fields
- `condoName`, `condoSlug` — condominium/project name and slug
- `constructionYear`, `floorMin`, `floorMax` — building year and floor range
- `shortDescription`, `description` — short and long listing text
- `propertyUrl` — canonical QuintoAndar listing page
- `mode` — transaction type of the record (`rent`, `buy` or `byUrls`)
- `recordType` — always `property`
- `scrapedAt` — ISO 8601 timestamp of when the listing was scraped

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | string | `rent` | `rent`, `buy` or `byUrls` |
| `city` | string | `sao-paulo-sp-brasil` | One of 99 QuintoAndar locations (mode=rent or buy) |
| `neighborhood` | string | – | Optional neighborhood inside the city, e.g. Pinheiros (mode=rent or buy) |
| `propertyType` | string | `ANY` | `ANY`, `APARTMENT`, `HOUSE`, `HOUSE_CONDO` or `STUDIO` |
| `priceBasis` | string | `rent` | `rent` or `total` (mode=rent); ignored for buy |
| `priceMin` / `priceMax` | integer | – | Price range in BRL |
| `areaMin` / `areaMax` | integer | – | Usable area range in m² |
| `bedroomsMin` / `bedroomsMax` | integer | – | Bedroom range |
| `bathroomsMin` / `bathroomsMax` | integer | – | Bathroom range |
| `parkingMin` / `parkingMax` | integer | – | Parking space range |
| `suitesMin` / `suitesMax` | integer | – | Suite range |
| `furnished` | string | `any` | `any`, `yes` or `no` |
| `acceptsPets` | string | `any` | `any` or `yes` |
| `nearSubway` | string | `any` | `any` or `yes` |
| `amenities` | array | – | Required unit feature codes |
| `installations` | array | – | Required building facility codes |
| `availability` | string | `any` | `any`, `immediate` or `soon` (mode=rent) |
| `sortBy` | string | `relevance` | `relevance`, `newest`, `cheapest`, `expensive` or `highestRent` (highest rental return / yield) |
| `developmentsOnly` | boolean | `false` | Show only new developments (mode=buy) |
| `exactCityOnly` | boolean | `false` | Drop listings from neighbouring municipalities |
| `includeDetails` | boolean | `true` | Load description, condo/IPTU split, ZIP, coordinates and full captions |
| `listingUrls` | array | – | Listing URLs or numeric IDs (mode=byUrls) |
| `maxItems` | integer | `500` | Hard cap, 1–5,000 |

#### Example: rentals in São Paulo

```json
{
  "mode": "rent",
  "city": "sao-paulo-sp-brasil",
  "maxItems": 200,
  "includeDetails": false
}
```

#### Example: family-sized apartments for sale in Rio de Janeiro

```json
{
  "mode": "buy",
  "city": "rio-de-janeiro-rj-brasil",
  "propertyType": "APARTMENT",
  "bedroomsMin": 3,
  "priceMin": 800000,
  "priceMax": 2500000,
  "sortBy": "newest",
  "maxItems": 100
}
```

#### Example: pet-friendly rentals in Pinheiros with a pool

```json
{
  "mode": "rent",
  "city": "sao-paulo-sp-brasil",
  "neighborhood": "Pinheiros",
  "acceptsPets": "yes",
  "installations": ["PISCINA"],
  "priceMax": 6000,
  "maxItems": 50
}
```

#### Example: load specific listings

```json
{
  "mode": "byUrls",
  "listingUrls": [
    "https://www.quintoandar.com.br/imovel/893977588",
    "895686771"
  ]
}
```

### Use cases

- **Rental budgeting** — compare base rent, condo fee, IPTU and total monthly cost across neighborhoods
- **Relocation research** — scan a new city or a single neighborhood before an apartment hunt
- **Market analysis** — measure price per square metre by city, property type and size band
- **Investment screening** — compare sale prices and published rental yields for similar properties
- **Portfolio monitoring** — re-run the same city and filters to spot new listings and price changes
- **Project tracking** — follow new developments with construction status and delivery forecasts

### FAQ

#### Is this actor affiliated with QuintoAndar?

No. It is an independent, third-party tool that reads publicly visible QuintoAndar listings. It is not operated by or affiliated with QuintoAndar.

#### Do I need a QuintoAndar account, cookies or a proxy?

No. All supported modes work without an account or cookies, and no proxy setup is required.

#### What is the difference between `rentPrice`, `totalMonthlyCost` and `condoAndIptu`?

`rentPrice` is the base rent. `condoAndIptu` is the combined condo fee and IPTU. `totalMonthlyCost` adds those extras to the rent, matching the total QuintoAndar displays for rent listings.

#### Why does a rental listing sometimes have a `salePrice`?

Some owners list the same property for both rent and sale. When QuintoAndar publishes both prices, both fields are included.

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

A single location query yields at most 1,000 listings, which is QuintoAndar's own per-query limit. Runs above 1,000 automatically split the price range into slices and merge the results, up to `maxItems` (5,000). If the source has fewer matching listings, the run stops honestly with the real count.

#### Why do results include cities other than the one I selected?

QuintoAndar city searches cover the surrounding metro region, so a São Paulo search can include Mauá or Guarulhos. Set `exactCityOnly` to keep only the city you selected.

#### Why are `suites`, `iptu`, `description` or coordinates missing on some records?

Those fields are conditional in the source: some listings do not publish a suite count, IPTU value or description. They are omitted rather than filled with a placeholder. Turning on `includeDetails` fills them whenever the listing page has them.

#### Can I get the agent's name, phone or email?

No. QuintoAndar does not expose listing-agent contact details on public pages, so the actor cannot return them.

#### What do the amenity and facility codes mean?

They are QuintoAndar's own codes, such as `VARANDA` (balcony), `AR_CONDICIONADO` (air conditioning), `PISCINA` (pool) and `ACADEMIA` (gym). With `includeDetails` enabled, the actor also returns the Portuguese labels in `amenitiesText` and `installationsText`.

### Limitations

- **1,000 listings per location query.** Larger requests are split by price, but a slice with more than 1,000 listings at the same price can still be capped.
- **Source inventory is finite.** A run cannot return more listings than QuintoAndar currently has for the chosen location and filters.
- **City searches include metro municipalities.** Use `exactCityOnly` when you need the city boundary only.
- **No agent or advertiser contact details.** QuintoAndar does not publish them.
- **No total area or land area.** QuintoAndar exposes usable area (`areaSqM`) only.
- **Some fields are conditional.** Suites, IPTU, descriptions, construction year and project data appear only when the listing provides them.
- **Price-slice partitioning changes ordering.** Runs above 1,000 are assembled from multiple price slices, so the final order differs from a single sorted page.

# Actor input Schema

## `mode` (type: `string`):

Search rentals, search properties for sale, or load specific listings by URL or ID.

## `city` (type: `string`):

QuintoAndar location to search (mode=rent or buy).

## `neighborhood` (type: `string`):

Optional neighborhood inside the selected city, e.g. Pinheiros or Copacabana (mode=rent or buy).

## `propertyType` (type: `string`):

Restrict results to one property type (mode=rent or buy).

## `priceBasis` (type: `string`):

Whether price filters apply to the base rent or the total monthly cost (mode=rent). Buy mode always uses the sale price.

## `priceMin` (type: `integer`):

Lowest price to include, in Brazilian reais.

## `priceMax` (type: `integer`):

Highest price to include, in Brazilian reais.

## `areaMin` (type: `integer`):

Smallest usable area to include, in square metres.

## `areaMax` (type: `integer`):

Largest usable area to include, in square metres.

## `bedroomsMin` (type: `integer`):

Fewest bedrooms a listing may have.

## `bedroomsMax` (type: `integer`):

Most bedrooms a listing may have.

## `bathroomsMin` (type: `integer`):

Fewest bathrooms a listing may have.

## `bathroomsMax` (type: `integer`):

Most bathrooms a listing may have.

## `parkingMin` (type: `integer`):

Fewest parking spaces a listing may have.

## `parkingMax` (type: `integer`):

Most parking spaces a listing may have.

## `suitesMin` (type: `integer`):

Fewest suites a listing may have.

## `suitesMax` (type: `integer`):

Most suites a listing may have.

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

Include only furnished listings, only unfurnished listings, or both.

## `acceptsPets` (type: `string`):

Include only listings that accept pets, or all listings.

## `nearSubway` (type: `string`):

Include only listings marked close to a metro or train station, or all listings.

## `amenities` (type: `array`):

Property feature codes that must all be present, e.g. VARANDA, AR_CONDICIONADO (mode=rent or buy).

## `installations` (type: `array`):

Building facility codes that must all be present, e.g. PISCINA, ACADEMIA (mode=rent or buy).

## `availability` (type: `string`):

When the property can be occupied (mode=rent).

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

Order of the returned listings. Cheapest and most expensive use total monthly cost; highest rental return is the investor yield order.

## `developmentsOnly` (type: `boolean`):

Show only new-development listings (mode=buy).

## `exactCityOnly` (type: `boolean`):

Drop listings from neighbouring municipalities that QuintoAndar includes in a city search.

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

Load each listing's detail page for description, separate condo fee and IPTU, ZIP code, coordinates and full photo captions.

## `listingUrls` (type: `array`):

QuintoAndar listing links or numeric property IDs (mode=byUrls). Duplicates are ignored.

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

Hard cap on the number of listings returned (1-5000). Values above 1000 use price-slice partitioning.

## Actor input object example

```json
{
  "mode": "rent",
  "city": "sao-paulo-sp-brasil",
  "propertyType": "ANY",
  "priceBasis": "rent",
  "furnished": "any",
  "acceptsPets": "any",
  "nearSubway": "any",
  "availability": "any",
  "sortBy": "relevance",
  "developmentsOnly": false,
  "exactCityOnly": false,
  "includeDetails": true,
  "maxItems": 3
}
```

# Actor output Schema

## `listings` (type: `string`):

Dataset containing all scraped QuintoAndar property listings.

# 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 = {
    "mode": "rent",
    "city": "sao-paulo-sp-brasil",
    "propertyType": "ANY",
    "priceBasis": "rent",
    "furnished": "any",
    "acceptsPets": "any",
    "nearSubway": "any",
    "availability": "any",
    "sortBy": "relevance",
    "developmentsOnly": false,
    "exactCityOnly": false,
    "includeDetails": false,
    "maxItems": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("dataspryva/brazil-rental-and-sale-listings-by-city").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 = {
    "mode": "rent",
    "city": "sao-paulo-sp-brasil",
    "propertyType": "ANY",
    "priceBasis": "rent",
    "furnished": "any",
    "acceptsPets": "any",
    "nearSubway": "any",
    "availability": "any",
    "sortBy": "relevance",
    "developmentsOnly": False,
    "exactCityOnly": False,
    "includeDetails": False,
    "maxItems": 3,
}

# Run the Actor and wait for it to finish
run = client.actor("dataspryva/brazil-rental-and-sale-listings-by-city").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 '{
  "mode": "rent",
  "city": "sao-paulo-sp-brasil",
  "propertyType": "ANY",
  "priceBasis": "rent",
  "furnished": "any",
  "acceptsPets": "any",
  "nearSubway": "any",
  "availability": "any",
  "sortBy": "relevance",
  "developmentsOnly": false,
  "exactCityOnly": false,
  "includeDetails": false,
  "maxItems": 3
}' |
apify call dataspryva/brazil-rental-and-sale-listings-by-city --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,dataspryva/brazil-rental-and-sale-listings-by-city"
        }
    }
}
```

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/L7dXVmQ0gTb3XRpsx/builds/zT1Qzg0VWyjBONG32/openapi.json
