QuintoAndar Scraper at a glance
QuintoAndar Scraper is a ready-to-run Apify actor from abotapi for collecting real estate data. Its documented output includes id, title, operation, type and rent, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $2.20 per 1,000 results on the Apify Free plan and from $1.50 on paid plans, with smaller per-run or optional feature charges listed on Apify.
- Runs on
- Apify cloud: console, API, schedules and integrations
- Data type
- Real Estate, Lead Generation, Automation
- Pricing
- $2.20 per 1,000 results (Free plan), from $1.50 on paid plans
- Output
- Documented below · JSON, CSV, Excel
- Inputs
- 32 options
- Run success
- 98.0% of completed public runs in the last 30 days
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.
What QuintoAndar Scraper can do
- 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.
Choose what to collect
These inputs let you configure QuintoAndar Scraper - Property Listings, Prices & Amenities. Open the actor on Apify to enter your values and review the current options.
| Input | What it controls |
|---|---|
modestring · required | search = build searches from location names + filters. url = paste one or more quintoandar results-page URLs. |
locationsarray | Location names to search, e.g. São Paulo, Rio de Janeiro, Pinheiros São Paulo, Belo Horizonte. Accents and spaces are handled automatically. Only applies when mode = search. |
operationTypestring | Rent or buy. Only applies when mode = search. |
propertyTypestring | Property category to search. 'All' covers every type. Applies in Search mode and URL mode, including a pasted URL. |
propertyTypesarray | Pick several property categories at once. When set, it replaces the single Property type above. Applies in Search mode and URL mode. |
minPriceinteger | Minimum total monthly cost (rent) or sale price, in BRL. Applies in Search mode and URL mode, including a pasted URL. |
maxPriceinteger | Maximum total monthly cost (rent) or sale price, in BRL. Applies in Search mode and URL mode, including a pasted URL. |
Show 25 more inputs
| Input | What it controls |
|---|---|
minAreainteger | Minimum area in square metres. Applies in Search mode and URL mode, including a pasted URL. |
maxAreainteger | Maximum area in square metres. Applies in Search mode and URL mode, including a pasted URL. |
minBedroomsinteger | Minimum number of bedrooms (quartos). Applies in Search mode and URL mode, including a pasted URL. |
minBathroomsinteger | Minimum number of bathrooms. Applies in Search mode and URL mode. |
minParkinginteger | Minimum number of parking spaces. Applies in Search mode and URL mode. |
neighborhoodstring | Optional neighbourhood (bairro) added to every location, e.g. Pinheiros with location São Paulo. Search mode only. |
furnishedstring | Furnished listings only, or exclude furnished listings (unfurnished is applied after the fetch, from the furnished flag when the site exposes it). Applies in Search mode and URL mode. |
petsAllowedboolean | Only listings that accept pets. Applies in Search mode and URL mode. |
nearTransitboolean | Only listings near a subway station. Applies in Search mode and URL mode. |
amenitiesarray | Only listings that have ALL selected in-unit amenities. |
condoAmenitiesarray | Only listings whose building has ALL selected amenities. |
sortBystring | Result ordering. Applies in Search mode and URL mode, including a pasted URL. |
urlsarray | Paste one or more quintoandar.com.br URLs: results pages (city or neighbourhood, with an optional property type, bedroom count, mobiliado segment or ?ordenar= / ?preco= query) or single property pages (/imovel/{id}). Filters and sort carried by a pasted results URL are applied and win over the fields above. Unsupported parts of a URL are logged as warnings. Location and operation above are ignored in this mode; property type, price, area, bedroom and sort filters above still apply to results URLs that do not set their own. |
fetchDetailsboolean | Fetch each property page to add GPS coordinates, the full description, in-unit and building amenities, condo and IPTU breakdown, floor, and furnished / pets / subway flags. Adds one request per property. Leave on for the richest output. |
maxPagesinteger | Optional safety stop on how many result pages to read per location/URL. This does NOT cap the run: leave it empty (or 0) to use the built-in hard ceiling of 1000 pages per search (about 11,000 listings), which applies even when Max listings is 0. Set a lower value if you want a tighter per-search page ceiling. |
maxListingsinteger | The run's single hard cap: maximum total listings across all searches. Defaults to 20. Set 0 for unlimited. This is the only default limit; Max pages falls back to a built-in hard ceiling of 1000 pages per search. |
resumeFromRunIdstring | Paste a previous run ID or dataset ID to continue a large catalogue pull without returning or charging for listings already collected there. Use this after an interrupted run. For recurring daily monitoring of the same search, use Incremental mode below instead. |
incrementalModeboolean | Turn this on for daily or recurring monitoring. The first run returns every matching listing as NEW. Later runs normally return only NEW, UPDATED and REAPPEARED listings, which is how a price cut or a stock change is spotted. Turn on Emit unchanged or Emit expired only when you also want those rows returned (and billed). State is kept separately for each search, filter and detail setup; use State key to name or deliberately share a monitoring campaign. To continue one specific interrupted run instead, use Resume from a previous run above. |
stateKeystring | Optional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently configured runs. Leave empty to let the actor derive a key automatically from the search, filters and detail settings, so different searches never mix state with each other. |
emitUnchangedboolean | Off by default. Turn on to also return listings that have not changed since the last run, marked UNCHANGED. This returns, and bills, extra rows you already have, so leave it off unless you want the full snapshot every run. |
emitExpiredboolean | Off by default. Turn on to also return listings that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked search, so never when Max listings capped it or when Resume was used. This returns, and bills, extra synthetic rows, so leave it off unless you need expiry tracking. |
ignoreFieldsForChangesarray | Incremental mode only. Fields whose changes do not count as an update: a change in them alone leaves the listing UNCHANGED and they are not listed in changedFields. They are still returned in every row. Use a dotted path for a nested field. The run timestamps (scrapedAt, coletadoEm, vistoPrimeiraVez, vistoUltimaVez) are always ignored. Add more field names here to ignore them as well, for example precoCondominio. |
mcpConnectorsarray | Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify, Settings, Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON; the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com). |
notionParentPageUrlstring | URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors. |
maxNotifyListingsinteger | Cap on items written to each connector per run. Does not affect the dataset. |
Fields in the output
The documented dataset includes the fields below. Availability can depend on the source page and selected mode.
idID (text)titleTitle (text)tipoOperacaoOperation (text)tipoImovelType (text)precoAluguelRent (number)precoTotalMensalTotal/mo (number)precoVendaSale (number)precoCondominioCondo (number)precoIPTUIPTU (number)areaArea m2 (number)quartosBeds (number)banheirosBaths (number)Show 20 more fields
vagasParking (number)bairroNeighborhood (text)cidadeCity (text)estadoState (text)latitudeLat (number)longitudeLng (number)urlURL (link)mobiliadoFurnished (boolean)aceitaPetsPets (boolean)pertoMetroNear subway (boolean)floorFloor (number)suitesSuites (number)comodidadesIn-unit (array)comodidadesPredioBuilding (array)descricaoDescription (text)enderecoAddress (text)changeTypeChangechangedFieldsChanged fields (array)firstSeenAtFirst seen (date)lastSeenAtLast seen (date)Example output
An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.
{
"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"
}Ways to use this data
- 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.
Before you run
Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.
Questions about this actor
What data does QuintoAndar Scraper return?
The documented output for QuintoAndar Scraper includes id, title, operation, type, rent, total/mo, sale and condo. Availability of each field depends on the source page and the selected mode.
How much does QuintoAndar Scraper cost?
It costs $2.20 per 1,000 results on the Apify Free plan and from $1.50 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.
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.
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.
