QuintoAndar Scraper - Property Listings, Prices & Amenities avatar

QuintoAndar Scraper - Property Listings, Prices & Amenities

Pricing

from $1.50 / 1,000 property results

Go to Apify Store
QuintoAndar Scraper - Property Listings, Prices & Amenities

QuintoAndar Scraper - Property Listings, Prices & Amenities

Scrape QuintoAndar property listings across Brazil with 80+ fields, including rent, sale price, condo fees, IPTU, area, rooms, parking, GPS, photos, amenities, and descriptions. Supports search, URLs, sorting, and price, area, and bedroom filters.

Pricing

from $1.50 / 1,000 property results

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

1

Monthly active users

3 days ago

Last modified

Share

QuintoAndar Scraper: Rentals, Sales, Prices & GPS

QuintoAndar Scraper turns quintoandar.com.br into structured property data. Search rental and for-sale listings across Brazil by location name with price, area and bedroom filters, or paste results-page URLs straight from your browser. Every enriched record carries the full price breakdown (rent, total monthly cost, condominium fee, IPTU, sale price), the area and room counts, the exact GPS coordinate, the full description, the complete photo gallery, in-unit and building amenities, and the furnished / pets-allowed / near-subway flags, in both English and Portuguese field names. Export to JSON, CSV or Excel, pull it through the API, or pipe results into the apps you already use.

Why This Scraper?

  • 80+ fields per listing. English and Portuguese keys, so records drop straight into any pipeline.
  • Full price picture. Rent, total monthly cost, condominium fee, IPTU and sale price side by side.
  • Exact location. GPS coordinate, postal code, neighborhood, city and state on every enriched listing.
  • Photos and description. The complete gallery and full property description, not just a card thumbnail.
  • Rich amenities. In-unit and building amenities listed separately, plus furnished, pets-allowed and near-subway flags.
  • Two ways in, built for monitoring. Search by location name, or paste results-page and property URLs (13 URL shapes supported); incremental mode returns only what changed on scheduled runs.
  • Native filters and views. Type, price, area, bedrooms, bathrooms, parking, amenities and five sort orders, with four ready-made dataset views and one Max listings cap.

Use Cases

  • Rental market research: compare rent, total monthly cost and condominium fees across neighborhoods before signing a lease.
  • Real estate investment analysis: pull sale prices, area and property specs to model returns on prospective properties.
  • Proptech and listings aggregators: feed structured Brazilian rental and sale data into your own search or comparison app.
  • Relocation and moving services: match clients to furnished, pet-friendly or subway-adjacent listings by city and neighborhood.
  • Academic and market research: build datasets of pricing and amenities across Brazilian cities over time.

Data You Get

Sample shape. Values are illustrative placeholders, not from a live listing.

FieldExample
id100000000
title"Apartamento · 2 quartos · Bairro Exemplo"
tipoOperacao"aluguel" (also "venda")
tipoImovel"Apartamento"
precoAluguel / precoTotalMensal2500 / 3200
precoVenda0
precoCondominio / precoIPTU500 / 200
area65
quartos / banheiros2 / 1
suites / vagas0 / 1
floor7
bairro"Bairro Exemplo"
cidade / estado"Cidade Exemplo" / "Estado Exemplo"
latitude / longitude-23.55 / -46.63
mobiliadofalse
aceitaPetstrue
pertoMetrotrue
comodidades["Varanda", "Ar condicionado"]
comodidadesPredio["Piscina", "Academia"]
imagens["https://www.quintoandar.com.br/img/xlg/photo-1.jpeg"]
url"https://www.quintoandar.com.br/imovel/100000000/alugar"

GPS coordinates, state and postal code, the full description, the condominium / IPTU breakdown, floor, the in-unit and building amenity lists (comodidades, comodidadesPredio), the listing date and the furnished / pets / subway flags are added by the per-property detail fetch (fetchDetails, on by default). With it off you still get the id, link, prices, area, rooms, neighborhood, city and photos from the listing card, and the detail-only fields come back empty.

How to Use

  1. Pick a mode: search (build searches from location names + filters) or url (paste one or more quintoandar.com.br results-page URLs).
  2. Fill in the fields for that mode: locations and operation for search mode, or URLs for URL mode. Property type, price, area, bedroom, bathroom, parking, furnished, pets, transit, amenity and sort filters apply to both modes.
  3. Set Max listings to cap the run's cost, and leave Fetch full detail on for the richest output.
  4. Click Start, then download the dataset as JSON, CSV or Excel, or read it through the API.

Search for rent, with filters:

{
"mode": "search",
"locations": ["São Paulo", "Pinheiros São Paulo"],
"operationType": "rent",
"propertyType": "apartment",
"minPrice": 1500,
"maxPrice": 4000,
"minBedrooms": 2,
"sortBy": "price-asc",
"fetchDetails": true,
"maxListings": 50
}

Search for sale:

{
"mode": "search",
"locations": ["Rio de Janeiro"],
"operationType": "sale",
"propertyType": "house",
"maxListings": 30
}

Paste results-page URLs, with a page ceiling:

{
"mode": "url",
"urls": [
"https://www.quintoandar.com.br/alugar/imovel/sao-paulo-sp-brasil",
"https://www.quintoandar.com.br/comprar/imovel/belo-horizonte-mg-brasil"
],
"maxPages": 3,
"maxListings": 100
}

Supported URL shapes (URL mode)

ShapeExample
City, renthttps://www.quintoandar.com.br/alugar/imovel/sao-paulo-sp-brasil
City, buyhttps://www.quintoandar.com.br/comprar/imovel/sao-paulo-sp-brasil
Neighbourhoodhttps://www.quintoandar.com.br/alugar/imovel/pinheiros-sao-paulo-sp-brasil
Property type segment (apartment).../alugar/imovel/sao-paulo-sp-brasil/apartamento
Property type segment (house).../alugar/imovel/sao-paulo-sp-brasil/casa
Bedrooms segment.../alugar/imovel/sao-paulo-sp-brasil/2-quartos
Furnished segment.../alugar/imovel/sao-paulo-sp-brasil/mobiliado
Sort and price query.../alugar/imovel/sao-paulo-sp-brasil?ordenar=menor-preco&preco=1000-3000
Bare domainhttps://quintoandar.com.br/comprar/imovel/belo-horizonte-mg-brasil
Property page, renthttps://www.quintoandar.com.br/imovel/894090267/alugar
Property page, buyhttps://www.quintoandar.com.br/imovel/895818343/comprar
Property page, id onlyhttps://www.quintoandar.com.br/imovel/894317939
Property page with slughttps://www.quintoandar.com.br/imovel/895097594/alugar/apartamento-2-quartos-pinheiros-sao-paulo

Filters and sort carried by a pasted results URL are applied and win over the matching input fields; any part of a URL that is not supported is logged as a warning that names the URL by its position and path, such as URL #3 (/alugar/imovel/pinheiros-sao-paulo-sp-brasil) (for example an ordenar= sort value other than menor-preco or maior-preco; use the Sort order field for newest or closest). Location and operation fields are ignored in URL mode. If none of the pasted locations can be matched, the run stops with a clear "No location matched" message instead of returning an empty dataset.

Default URL list: unlike a plain empty field, urls ships with a pre-filled list of one example per shape above, each pointing at a different results page or property. A run started in URL mode without editing it reads those 13 examples within Max listings: one slot is reserved for every pasted property page (up to the cap itself), and the remaining slots are shared evenly between the results pages, so property pages are read even at the default cap of 20 and at smaller caps. Replace the list with your own URLs before starting.

Fast, listing-card-only run:

{
"mode": "search",
"locations": ["Curitiba"],
"operationType": "rent",
"propertyType": "studio",
"fetchDetails": false,
"maxListings": 0
}

Run it from your code

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("abotapi/quintoandar-scraper").call(run_input={
"mode": "search",
"locations": ["São Paulo"],
"operationType": "rent",
"maxListings": 20,
})
for listing in client.dataset(run["defaultDatasetId"]).iterate_items():
print(listing["title"], listing["precoTotalMensal"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('abotapi/quintoandar-scraper').call({
mode: 'search',
locations: ['São Paulo'],
operationType: 'rent',
maxListings: 20,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.

With more than one location or URL, Max listings is divided evenly (rounded up) into a per-search share, so no single location can use up the whole budget. A location that returns fewer listings than its share does not free that room up for the others: each stays capped at its own fixed share. Across several locations a run can therefore finish under Max listings even though another location in the same run had more to give. Raise Max listings, or run fewer locations per job, to collect more from any one of them.

Max pages per search is an optional, separate safety stop on how many result pages one location or URL reads; when left empty or 0 it uses a built-in hard ceiling of 1000 pages per search (about 11,000 listings) that applies even when Max listings is 0; below that ceiling the run is bounded by Max listings.

Send results into your apps (MCP connectors)

Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape: the Apify dataset is never changed.

What gets written to the connector: a condensed, human-readable summary of each listing, not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.

  1. Authorize a connector once under Apify → Settings → Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
  3. For Notion, also set notionParentPageUrl to the page where items should be created.

The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.

Input Parameters

ParameterTypeDefaultDescription
modestringsearchsearch builds searches from location names + filters; url reads pasted results-page URLs.
locationsarray["São Paulo"]Location names to search, e.g. São Paulo, Rio de Janeiro, Pinheiros São Paulo. Only applies when mode = search.
operationTypestringrentRent or buy. Only applies when mode = search.
propertyTypestringallOne of all, apartment, house, studio, condo_house. Applies in search mode and URL mode, including a pasted URL.
propertyTypesarray(none)Pick several property types at once; when set it replaces the single property type.
minPriceinteger(none)Minimum total monthly cost (rent) or sale price, in BRL. Applies in search mode and URL mode, including a pasted URL.
maxPriceinteger(none)Maximum total monthly cost (rent) or sale price, in BRL. Applies in search mode and URL mode, including a pasted URL.
minAreainteger(none)Minimum area in square metres. Applies in search mode and URL mode, including a pasted URL.
maxAreainteger(none)Maximum area in square metres. Applies in search mode and URL mode, including a pasted URL.
minBedroomsinteger(none)Minimum number of bedrooms. Applies in search mode and URL mode, including a pasted URL.
minBathroomsinteger(none)Minimum number of bathrooms. Search and URL mode.
minParkinginteger(none)Minimum number of parking spaces. Search and URL mode.
neighborhoodstring(none)Neighbourhood added to every location, e.g. Pinheiros with São Paulo. Search mode only.
furnishedstringallall, furnished or unfurnished. Search and URL mode. furnished is applied by the site itself; unfurnished drops listings the site marks as furnished.
petsAllowedbooleanfalseOnly listings that accept pets. Search and URL mode.
nearTransitbooleanfalseOnly listings near a subway station. Search and URL mode.
amenitiesarray(none)Listings that have ALL selected in-unit amenities: air conditioning, barbecue grill, gas shower, walk-in closet, private garden or outdoor area, private pool, laundry sink, television, kitchen utensils, ceiling fan.
condoAmenitiesarray(none)Listings whose building has ALL selected amenities: gym, green area, playroom, barbecue area, elevator, swimming pool, playground, 24-hour concierge, sports court, party room, game room, sauna.
sortBystringrelevancerelevance, price-asc, price-desc, newest or closest. Applies in search mode and URL mode, including a pasted URL.
urlsarray13 sample URLsURL mode. See the table of supported shapes above. The default is a list with one example of each of the 13 shapes, every example a different results page or property. One slot of Max listings is reserved for each pasted property page (never more slots than the cap itself); the rest is shared evenly between results pages. Location and operation are ignored in this mode.
fetchDetailsbooleantrueFetch each property page to add GPS, the full description, in-unit and building amenities, condo and IPTU breakdown, floor, and furnished / pets / subway flags.
maxPagesinteger(none, hard ceiling 1000)Optional safety stop on result pages read per location or URL. Empty or 0 uses the built-in hard ceiling of 1000 pages per search; below it the run is bounded by Max listings.
maxListingsinteger20The run's single hard cap: maximum total listings across all searches. 0 means unlimited.
proxyobjectApify ProxyConnection used for requests.
resumeFromRunIdstring(none)Run or dataset ID of an interrupted run; listings it already collected are skipped and not charged again.
incrementalModebooleanfalseReturn only new, updated and reappeared listings on recurring runs over the same search.
stateKeystring(none)Name or share an incremental-mode monitoring campaign.
emitUnchangedbooleanfalseIncremental mode only: also return unchanged listings, marked UNCHANGED (they are delivered, so they are billed).
emitExpiredbooleanfalseIncremental mode only: also return listings no longer found, marked EXPIRED, after a complete scan only. EXPIRED rows are dataset rows and are charged as a Property result each.
ignoreFieldsForChangesarray(none)Incremental mode only. Fields whose change alone does not make a listing UPDATED and is not listed in changedFields; they are still returned. The run timestamps are always ignored.
mcpConnectorsarray(none)Optional: send a summary of each listing to apps you authorized under Integrations.
notionParentPageUrlstring(none)Notion connector only: page under which item pages are created.
maxNotifyListingsinteger50Cap on items written to each connector per run. Does not affect the dataset.

Output Example

Sample shape. Values are illustrative placeholders, not from a live listing.

{
"id": 100000000,
"idImovel": 100000000,
"url": "https://www.quintoandar.com.br/imovel/100000000/alugar",
"fonte": "quintoandar.com.br",
"title": "Apartamento · 2 quartos · Bairro Exemplo",
"titulo": "Apartamento · 2 quartos · Bairro Exemplo",
"tipoOperacao": "aluguel",
"tipoImovel": "Apartamento",
"propertyType": "Apartamento",
"modo": "rent",
"precoAluguel": 2500,
"precoTotalMensal": 3200,
"precoAtual": 3200,
"precoVenda": 0,
"precoCondominio": 500,
"precoIPTU": 200,
"area": 65,
"areaM2": 65,
"quartos": 2,
"banheiros": 1,
"suites": 0,
"vagas": 1,
"floor": 7,
"bairro": "Bairro Exemplo",
"cidade": "Cidade Exemplo",
"estado": "Estado Exemplo",
"endereco": "Rua Ficticia, 123",
"latitude": -23.55,
"longitude": -46.63,
"mobiliado": false,
"aceitaPets": true,
"pertoMetro": true,
"descricao": "Apartamento amplo e bem localizado, com dois quartos.",
"comodidades": ["Varanda", "Ar condicionado"],
"comodidadesPredio": ["Piscina", "Academia"],
"coverImage": "https://www.quintoandar.com.br/img/xlg/photo-1.jpeg",
"imagens": [
"https://www.quintoandar.com.br/img/xlg/photo-1.jpeg",
"https://www.quintoandar.com.br/img/xlg/photo-2.jpeg"
],
"listedAt": "2026-01-01T00:00:00.000Z",
"coletadoEm": "2026-01-01T00:00:00Z"
}

Output views

The dataset has four views, also linked from the run's Output tab:

  • Listings Overview: id, title, operation, type, rent, total monthly cost, sale price, condominium, IPTU, area, rooms, parking, neighbourhood, city, state, GPS and link.
  • Amenities & Features: furnished, pets, subway flags, floor, suites and the in-unit and building amenity lists.
  • Listing Details: description, GPS, address, condominium, IPTU, floor and flags.
  • Changes since the last run: incremental mode only; change type, changed fields, first and last seen.

At the end of every run a summary is saved to the key-value store under OUTPUT: total listings, details enriched, searches requested, unmatched locations and a per-source breakdown.

Plan Requirement

Works on any Apify plan with the default connection, including the free tier; no residential proxy is required. If the primary connection is unavailable or is repeatedly refused, the run automatically falls back to a shared, self-rotating backup connection, and a short message in the log says so ("Served over the backup connection (the default connection was unavailable)."). The backup can be rate-limited, so results may come back more slowly. On a free plan that selected a residential pool, the log explains that free plans do not include residential proxies and the run continues on the backup connection. You can also supply your own proxy URLs.

FAQ

How much does it cost?

Pricing is pay per event, and the Pricing tab shows the current rates:

EventUnitWhen it is charged
Actor startonce per runWhen the run starts.
Property resultone per listingFor each listing pushed to the dataset.
Detail enrichmentone per propertyFor each pushed listing whose property page was successfully read to add its detail fields. It is charged right after the batch is saved, so it is not lost if a run is stopped, and it is never charged when Fetch full detail is off or for a listing whose detail page could not be read. A pasted property-page URL follows the same rule: one detail enrichment while Fetch full detail is on, none when it is off.

A run that finds no matching listings saves no dataset row and so charges no listing event; the empty result is reported in the run's status message instead. Use Max listings to cap the cost of any run.

This actor collects only publicly available listing data. You are responsible for how you use it: follow quintoandar.com.br's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Property photos and descriptions may be subject to third-party rights.

Can I get only what changed since my last run?

Yes. Turn on Incremental mode and schedule the actor. The first run returns every matching listing as NEW; later runs return only NEW, UPDATED and REAPPEARED listings, with changedFields naming what moved (for example precoAluguel). Unchanged listings are not returned or billed unless you turn on emitUnchanged. emitExpired adds EXPIRED rows for listings that disappeared, only after a run that scanned the whole search (never when Max listings, Max pages, a failed page or Resume stopped it); EXPIRED rows are dataset rows and are charged as a Property result each. Rows are changeType, changedFields, firstSeenAt and lastSeenAt, shown in the Changes view. With Fetch details on, a listing whose detail page could not be read is skipped for that run and picked up on the next one. Resume from a previous run continues one specific interrupted run instead; the two are different features.

Can I schedule this to track a market over time?

Yes, schedule it from the Schedules tab. Each run reads the current live listings for your locations or URLs; there is no built-in change-tracking between runs, so keep the run's output (or your own downstream store) if you want to compare snapshots over time.

Why did I get fewer listings than Max listings?

With more than one location or URL, Max listings is split evenly across them, and an under-delivering location does not free its unused share up for the others. A location can also run dry before its share is filled, a results page that could not be read ends that location early, or Max pages per search can stop it first. Raise Max listings, raise or clear Max pages per search, or run fewer locations per job to collect more.

Why did my run fail instead of returning an empty dataset?

If nothing could be read, the run stops with a clear message so "no listings matched" is never confused with "nothing could be read". The messages are: the proxy connection was refused for this account (a paid plan is required, or check your own proxy credentials); residential proxies are unavailable on a free plan and the backup connection could not load the pages; or no results page could be loaded and it is a connection problem, not an empty search, so try again later. A URL-mode or location list where nothing matches stops with "No location matched". If the site answered but no listing matched your filters, the run succeeds with an empty dataset and the status message "No listings matched the given locations/URLs and filters." No row is saved or charged for it.

Can I use it with AI agents or MCP?

Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.

🔗 Want more real estate data?

Pair this actor with these related scrapers from the same team:

🏠 Zap Imóveis Scraper
Scrape Zap Imóveis sale, rental and new-development listings by city, filters or URL...
🏠 Zumper Scraper
Scrape Zumper.com rental listings: apartments, houses, condos and rooms. Pulls 60+ fields...
🛒 Americanas Brazil
Scrape Americanas Brazil (americanas.com.br) by keyword, department or pasted link...
🛒 Netshoes Brazil
Scrape sportswear and footwear from netshoes.com.br. Search by keyword with the store's...
🏠 Apartments.com Scraper
Scrape Apartments.com rentals by city, ZIP, neighborhood, address or URL. Extract rent...
🏠 Zonaprop Argentina
Scrape Zonaprop.com.ar property listings across Argentina. Extract 140+ fields including...

👉 Browse all abotapi scrapers

💬 Support

  • 🐞 Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
  • 🛠️ Need another site, extra fields or a private build? Email contact@abotapi.com.
  • ⭐ Enjoying it? A quick review on the actor page helps other users find it.