VivaReal Scraper | Brazil Real Estate BRL Pricing avatar

VivaReal Scraper | Brazil Real Estate BRL Pricing

Pricing

from $2.50 / 1,000 results

Go to Apify Store
VivaReal Scraper | Brazil Real Estate BRL Pricing

VivaReal Scraper | Brazil Real Estate BRL Pricing

Scrape vivareal.com.br, Brazil's top property portal. Apartamentos, casas, coberturas & terrenos. FGTS/MCMV eligibility, CRECI license, IPTU+condomínio, quartos/suítes & bairro location.

Pricing

from $2.50 / 1,000 results

Rating

0.0

(0)

Developer

Haketa

Haketa

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 hours ago

Last modified

Share

VivaReal Scraper — Brazil Real Estate, BRL Pricing, Bairro-Level Apartamentos, Casas, Coberturas & Terrenos

The most thorough VivaReal.com.br data extraction tool on Apify. Pull live property listings from Brazil's largest real estate portal — apartamentos in Pinheiros, coberturas in Leblon, casas in Belo Horizonte, terrenos in Brasília — with BRL pricing, IPTU + condomínio fees, FGTS/MCMV financing eligibility, CRECI agent licenses, quartos/suítes counts and bairro-level geocoding, structured and ready for analytics, investor research, prop-tech, and CRM workflows.

Apify Actor


What This Actor Does

The VivaReal Scraper is a production-ready Apify Actor that extracts the public property listings catalog from vivareal.com.br — Brazil's #1 real estate portal and a flagship property of OLX Brasil / Grupo ZAP. It powers the daily property search of millions of Brazilian buyers, renters, and investors across every state in the country.

In a single run the actor returns clean, normalized listing records with the full Brazilian real estate context — not just price and bedrooms, but the locally-specific fields that make a listing actually usable for Brazilian use cases: IPTU (annual municipal property tax), condomínio (HOA fees), FGTS/MCMV financing eligibility, CRECI broker license numbers, quartos vs suítes, and bairro-level location inside the standard UF → cidade → bairro hierarchy.

The actor covers every transaction type and inventory class VivaReal exposes:

  • Apartamentos — apartments, the dominant residential format in São Paulo and Rio
  • Casas — standalone houses (including casa em condomínio and casa de vila)
  • Coberturas — penthouses (a premium segment in São Paulo and Rio)
  • Kitnets and Studios — compact urban units for renters and students
  • Sobrados — two-story townhouses
  • Lofts and Flats — boutique/serviced residential formats
  • Terrenos and Lotes — vacant land for development
  • Chácaras, sítios, fazendas — rural properties
  • Salas comerciais, lojas, galpões — offices, retail spaces and warehouses

Every record carries listingId, title, transação (venda/aluguel/lançamento/temporada), price in BRL, condomínio, IPTU, quartos, suítes, banheiros, vagas (parking), area in m², UF, cidade, bairro, publisher type, CRECI license, listing URL, images and scrape timestamp — the complete payload a Brazilian property analytics pipeline needs.

Why scrape VivaReal yourself when this exists?

VivaReal is a modern, JavaScript-rendered single-page application sitting behind Cloudflare bot protection. Most teams who attempt a DIY scraper hit the same wall within a week:

  • Cloudflare challenges every request that looks even slightly automated — cf_clearance cookies expire and force re-challenge
  • Listings are rendered into a Next.js __NEXT_DATA__ blob whose schema changes between deploys (field names like bedrooms, quartos, unitType, propertyType are inconsistent run-to-run)
  • DOM selectors rotate frequently — class names are hashed (property-card__9xZ2k) and a release breaks every CSS query that worked yesterday
  • BRL price parsing is non-trivial — R$ 1.500.000,50 uses dots for thousands and a comma for decimal, which trips up every naive parseFloat
  • Address strings collapse bairro, cidade, UF into one comma-separated field with inconsistent ordering
  • Pagination silently caps at page 50 — you must detect the cap, not just iterate forever
  • IPTU and condomínio appear in different DOM positions depending on listing type (sale vs rent vs lançamento)
  • FGTS, MCMV and SFH eligibility are buried inside the free-text description, not in structured fields
  • Some search slugs redirect to a "showcase" error page when the query has zero results — naive scrapers crash here
  • Residential proxies in Brazil are mandatory for any non-trivial volume — datacenter IPs are challenged immediately
  • Detecting the Aguarde… / Just a moment… Cloudflare interstitial requires page-content inspection, not status codes

This actor solves every one of those problems: Playwright + pt-BR locale + São Paulo timezone + residential proxy session rotation + Next.js JSON-first extraction + DOM fallback + BRL parser + slug-based geocoding + Cloudflare challenge waiter — packaged as a single Apify run that returns clean JSON in seconds.


Quick Start

One-Click Run

  1. Open the actor page on Apify Store and click Try for free
  2. Pick a Transaction (venda for sale, aluguel for rent, lancamentos for new launches) and optionally a city/bairro
  3. Set Max Records to 50 for a test, or 0 for unlimited
  4. Click Start — your dataset is ready in seconds; download as JSON, CSV, Excel, or HTML

API Run (Python)

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("haketa/vivareal-scraper").call(run_input={
"transacao": "venda",
"propertyType": "apartamento_residencial",
"uf": "sp",
"cidade": "sao-paulo",
"bairro": "pinheiros",
"scrapeDetails": False,
"maxRecords": 200,
"requestDelay": 2500,
"proxyConfiguration": {
"useApifyProxy": True,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "BR"
}
})
for record in client.dataset(run["defaultDatasetId"]).iterate_items():
print(record["listingId"], record["bairro"], "R$", record["price"], "—", record["quartos"], "quartos")

API Run (Node.js / TypeScript)

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('haketa/vivareal-scraper').call({
transacao: 'aluguel',
propertyType: 'apartamento_residencial',
uf: 'rj',
cidade: 'rio-de-janeiro',
bairro: 'ipanema',
maxRecords: 100,
proxyConfiguration: {
useApifyProxy: true,
apifyProxyGroups: ['RESIDENTIAL'],
apifyProxyCountry: 'BR'
}
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} Ipanema rentals`);
items.slice(0, 5).forEach(it => console.log(it.title, '—', it.price, 'BRL'));

API Run (cURL)

curl -X POST "https://api.apify.com/v2/acts/haketa~vivareal-scraper/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"transacao": "venda",
"propertyType": "cobertura_residencial",
"uf": "sp",
"cidade": "sao-paulo",
"bairro": "itaim-bibi",
"maxRecords": 50
}'

API Run with direct Start URLs

If you already have hand-crafted VivaReal search URLs (saved searches, custom filters, multi-bairro queries), feed them in directly:

{
"startUrls": [
"https://www.vivareal.com.br/venda/sp/sao-paulo/pinheiros/",
"https://www.vivareal.com.br/venda/sp/sao-paulo/vila-madalena/",
"https://www.vivareal.com.br/aluguel/rj/rio-de-janeiro/leblon/"
],
"maxRecords": 300
}

How It Works

The actor is a Playwright Chromium browser fleet tuned for VivaReal's Next.js + Cloudflare stack. Each search task launches a fresh browser context with pt-BR locale, America/Sao_Paulo timezone, a current Chrome user-agent, and navigator.webdriver stealthed to false. A Brazilian residential proxy session is rotated per task to keep the IP-to-session mapping consistent for Cloudflare.

Source URL pattern

VivaReal uses a deterministic URL grammar:

https://www.vivareal.com.br/{transacao}/{uf}/{cidade}/{bairro}/{propertyType}/
URL segmentExampleNotes
transacaovenda, aluguel, lancamentos, temporadaRequired as the first path segment
ufsp, rj, mg, pr, rs, df, sc, baLowercase Brazilian state code
cidadesao-paulo, rio-de-janeiro, belo-horizonteSlugified, accents removed
bairropinheiros, ipanema, leblon, itaim-bibiSlugified neighborhood
propertyTypeapartamento_residencial, casa_residencial, cobertura_residencial, terreno, sala_comercialVivaReal's facet slug
?page=N?page=31-indexed pagination, hard cap around page 50

The actor builds these URLs automatically from your structured input, or accepts pre-built URLs via startUrls.

Extraction strategy

For each search page, the actor runs a two-tier extraction:

  1. Next.js JSON-first (script#__NEXT_DATA__) — VivaReal hydrates the search page with a JSON blob containing the full listing array (props.pageProps.listings / results / searchResults.listings). This is the cleanest source and is tried first.
  2. DOM fallback — if __NEXT_DATA__ shape changes or is missing, the actor falls back to direct DOM parsing of [data-type="property"], [class*="property-card"] and a[href*="/imovel/"] cards, augmented with URL-slug parsing to recover price (RS{amount}), quartos ({N}-quarto), area ({N}m2) and full bairro/cidade/UF from the listing's canonical slug.

Bairro-level geocoding

VivaReal listing URLs follow a slug grammar like /imovel/apartamento-3-quartos-pinheiros-zona-oeste-sao-paulo-85m2-venda-RS950000-id-2886184081/. The actor reverse-engineers this slug into bairro=Pinheiros, zona=Zona Oeste, cidade=São Paulo, uf=SP using a built-in map of all 27 BR state capitals plus the top metropolitan-area municipalities (Niterói, Santos, Campinas, Guarulhos, Osasco, São Bernardo do Campo, Santo André, Ribeirão Preto, Sorocaba, Joinville, Londrina, Maringá, Niterói, Petrópolis, Cabo Frio, Búzios, Praia Grande, Guarujá, etc.).

Anti-bot handling

  • Cloudflare interstitial detection — page title polled for Just a moment, Checking, Aguarde, 403; waits up to 30 seconds for clearance
  • Residential proxy session rotationsession-vrN per browser launch keeps Cloudflare's session-affinity logic happy
  • Stealth init scriptnavigator.webdriver = false, window.chrome = { runtime: {} }
  • Human-like delays — configurable requestDelay (default 2.5s) between page loads, jitter on every navigation
  • Showcase redirect detection — searches that return zero results redirect to a /showcase/ URL; the actor logs and exits the task cleanly instead of crashing

Engine summary

ComponentDetail
BrowserChromium via Playwright (headless)
Localept-BR
TimezoneAmerica/Sao_Paulo
ProxyApify RESIDENTIAL, Brazilian exit IPs strongly recommended
ConcurrencyOne browser per search task (parallelize by running multiple filtered configs)
DeduplicationIn-memory Set keyed on listingId, persisted across pages within a run
BRL parserStrips R$, dots as thousand separators, comma → dot decimal

Input Parameters

{
"startUrls": [],
"transacao": "venda",
"propertyType": "apartamento_residencial",
"uf": "sp",
"cidade": "sao-paulo",
"bairro": "pinheiros",
"scrapeDetails": false,
"maxRecords": 100,
"maxPages": 0,
"requestDelay": 2500,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "BR"
}
}

Parameter reference

ParameterTypeDefaultDescription
startUrlsarray<string>[]Direct VivaReal search URLs. Bypasses the structured filters below if non-empty. Useful for hand-crafted multi-bairro queries.
transacaostringvendaTransaction type: venda (for sale), aluguel (for rent), lancamentos (new launches / off-plan), temporada (vacation rental), or all (sale + rent).
propertyTypestringallProperty class: all, apartamento_residencial, casa_residencial, cobertura_residencial, kitnet_residencial, studio_residencial, terreno, sala_comercial.
ufstring""Brazilian state code, lowercase. Examples: sp, rj, mg, pr, rs, df, sc, ba, pe, ce. Empty = all states.
cidadestring""City slug. Examples: sao-paulo, rio-de-janeiro, belo-horizonte, brasilia, curitiba, porto-alegre, salvador, recife, fortaleza.
bairrostring""Neighborhood slug. Examples: pinheiros, vila-madalena, itaim-bibi, jardins, moema, ipanema, leblon, copacabana, barra-da-tijuca.
scrapeDetailsbooleanfalseIf true, visits each listing detail page for full description, amenities list, FGTS/MCMV eligibility, CRECI license, lat/lng coordinates, and the complete image gallery. Increases runtime significantly.
maxRecordsinteger0Cap on total listings returned. 0 = unlimited. Use a small value like 50 to sample before a full run.
maxPagesinteger0Cap on pages per search task. 0 = unlimited (VivaReal caps around 50 pages anyway).
requestDelayinteger2500Milliseconds between page loads. Min 1000, max 10000. Lower = faster but higher block risk.
proxyConfigurationobjectApify RESIDENTIALApify proxy configuration. Brazilian residential proxies strongly recommended — Cloudflare actively challenges datacenter IPs on vivareal.com.br.

Output Schema

Every record returned by the actor follows the same flat JSON schema, so downstream consumers (Postgres, BigQuery, Snowflake, Sheets, CRMs) can ingest the dataset without per-category branching.

Core listing fields

FieldTypeDescription
listingIdstringVivaReal internal listing ID (extracted from URL pattern id-{N}) — primary key for dedup and historical diffing
titlestringListing headline as displayed on the card, or built from parsed slug if missing
transacaostringTransaction: Venda, Aluguel, Lançamento, or Temporada
propertyTypestringNormalized type: Apartamento, Casa, Cobertura, Casa em Condomínio, Casa de Vila, Sobrado, Kitnet, Studio, Loft, Flat, Terreno, Chácara, Sítio, Fazenda, Sala Comercial, Loja, Galpão
pricenumberAsking price in BRL — null when listed as "Sob Consulta" / on request
currencystringAlways BRL
listingUrlstringCanonical VivaReal listing URL (query strings stripped)
scrapedAtstringISO-8601 UTC timestamp of the run

Brazilian financial context

FieldTypeDescription
condominionumberMonthly condomínio (HOA) fee in BRL
iptunumberAnnual IPTU (municipal property tax) in BRL
acceptsFGTSbooleantrue if listing description mentions FGTS (severance fund) financing accepted
acceptsMCMVbooleantrue if listing mentions "Minha Casa, Minha Vida" / MCMV federal housing program

Physical attributes

FieldTypeDescription
areanumberUsable area in square meters (m²)
quartosintegerTotal bedrooms (dormitórios)
suitesintegerBedrooms with en-suite bathroom
banheirosintegerTotal bathrooms
vagasintegerParking spaces (vagas de garagem)

Location (UF → Cidade → Bairro)

FieldTypeDescription
ufstringTwo-letter Brazilian state code (e.g., SP, RJ, MG, DF)
cidadestringMunicipality name (e.g., São Paulo, Rio De Janeiro, Belo Horizonte)
bairrostringNeighborhood name (e.g., Pinheiros, Ipanema, Itaim Bibi)
coordinatesobject{ "lat": number, "lng": number } — only populated when scrapeDetails: true

Publisher / agent

FieldTypeDescription
publisherTypestringProprietário (owner), Imobiliária (agency), Corretor (broker)
publisherCRECIstringReal estate broker license (CRECI registration number) when published
agencyNamestringReal estate agency / brokerage name

Detail-page fields (only when scrapeDetails: true)

FieldTypeDescription
descriptionstringFull listing description text
featuresarray<string>In-unit characteristics (e.g., Varanda gourmet, Cozinha planejada, Ar condicionado)
amenitiesarray<string>Building/condo amenities (e.g., Piscina, Academia, Salão de festas, Portaria 24h, Playground)
imagesarray<string>Full URL list for every photo in the gallery

Example: Apartamento for sale in Pinheiros, São Paulo

{
"listingId": "2886184081",
"title": "Apartamento — 3 quartos, 85m² — Pinheiros, São Paulo",
"transacao": "Venda",
"propertyType": "Apartamento",
"price": 950000,
"currency": "BRL",
"condominio": 1200,
"iptu": 350,
"quartos": 3,
"suites": 1,
"banheiros": 2,
"vagas": 1,
"area": 85,
"uf": "SP",
"cidade": "São Paulo",
"bairro": "Pinheiros",
"acceptsFGTS": true,
"acceptsMCMV": null,
"publisherType": "Imobiliária",
"publisherCRECI": "99999-J",
"agencyName": "Exemplo Imóveis",
"description": null,
"features": null,
"amenities": null,
"images": ["https://resizedimgs.vivareal.com/.../foto-1.jpg"],
"coordinates": null,
"listingUrl": "https://www.vivareal.com.br/imovel/apartamento-3-quartos-pinheiros-zona-oeste-sao-paulo-85m2-venda-RS950000-id-2886184081/",
"scrapedAt": "2026-05-16T09:00:00.000Z"
}

Example: Cobertura for rent in Leblon, Rio de Janeiro

{
"listingId": "2901234567",
"title": "Cobertura duplex — 4 quartos, 220m² — Leblon, Rio de Janeiro",
"transacao": "Aluguel",
"propertyType": "Cobertura",
"price": 28000,
"currency": "BRL",
"condominio": 4500,
"iptu": 1800,
"quartos": 4,
"suites": 3,
"banheiros": 5,
"vagas": 3,
"area": 220,
"uf": "RJ",
"cidade": "Rio De Janeiro",
"bairro": "Leblon",
"acceptsFGTS": null,
"acceptsMCMV": null,
"publisherType": "Imobiliária",
"publisherCRECI": "99999-RJ",
"agencyName": "Exemplo RJ Imóveis",
"description": null,
"features": null,
"amenities": null,
"images": ["https://resizedimgs.vivareal.com/.../foto-1.jpg"],
"coordinates": null,
"listingUrl": "https://www.vivareal.com.br/imovel/cobertura-4-quartos-leblon-zona-sul-rio-de-janeiro-220m2-aluguel-RS28000-id-2901234567/",
"scrapedAt": "2026-05-16T09:00:00.000Z"
}

Property Type Reference

VivaReal categorizes inventory in Portuguese — the actor normalizes these into a canonical set so downstream filters and dashboards stay consistent.

Residential

Normalized typePortuguese meaningTypical buyer
ApartamentoApartment in a multi-unit buildingUrban families, professionals — dominant in SP and RJ
CoberturaPenthouse (top-floor apartment, often duplex)Premium / luxury segment
CasaStandalone houseSuburban families, lower-density metros
Casa em CondomínioHouse inside a gated condominiumSecurity-conscious families
Casa de VilaTownhouse in a small private alleyBoutique central neighborhoods
SobradoTwo-story townhouseMiddle-class suburban
KitnetStudio apartment, small footprintStudents, single renters
StudioModern open-plan studioYoung professionals
LoftIndustrial-style open-plan unitUrban creatives
FlatServiced residential apartmentCorporate, short-term residents

Rural / Land

Normalized typePortuguese meaning
TerrenoLand lot for development
ChácaraSmall rural property with house
SítioMedium rural property
FazendaLarge rural farm

Commercial

Normalized typePortuguese meaning
Sala ComercialCommercial office unit
LojaRetail storefront
GalpãoWarehouse / industrial shed

Transaction types

ValuePortugueseEnglish
VendavendaFor sale
AluguelaluguelFor rent (long-term)
LançamentolançamentoNew off-plan launch / pre-construction
TemporadatemporadaShort-term vacation rental

Use Cases

Brazilian Real Estate Investor Research

Buy-to-let investors, real estate funds (FIIs), and property syndicates use the dataset to:

  • Benchmark cap rates by computing aluguel / venda ratios across the same bairro in São Paulo, Rio, Belo Horizonte and Brasília
  • Spot mispriced listings by joining price, area (R$/m²), and recent comparables in the same bairro
  • Track new launches (lançamentos) in Itaim Bibi, Vila Madalena, Pinheiros, Barra da Tijuca, Asa Sul and Águas Claras
  • Quantify condomínio + IPTU drag on yield — the two fees that DIY ROI calculators usually ignore
  • Identify FGTS/MCMV-eligible inventory for funds focused on the federally subsidized first-home segment

Prop-Tech Startups & iBuying

Brazilian prop-tech operators (avaliação, iBuying, marketplaces, mortgage origination) use the data to:

  • Train AVM (automated valuation) models with bairro-segmented hedonic regressions
  • Power CMA (Comparative Market Analysis) reports for new homeowner-acquisition flows
  • Bootstrap listings inventory before signing exclusive agreements with brokerages
  • Backfill SaaS dashboards for the Brazilian incumbents (Loft, QuintoAndar, Apto, EmCasa)
  • Validate AI-generated description quality against real VivaReal listings

IPTU & Condomínio Fee Benchmarking

Property managers, accountants, and individual owners use the dataset to:

  • Benchmark condomínio fees by building age, amenity tier, and bairro
  • Spot anomalies in IPTU assessments that may be worth appealing at the municipal level
  • Build expense models for landlord net-yield calculators (receita_aluguel − iptu/12 − condomínio − vacância)
  • Inform syndic / administradora pricing for new building takeovers

Expat & Diplomatic Relocation

International firms relocating staff to São Paulo, Rio, Brasília, Curitiba and Belo Horizonte use the dataset to:

  • Build neighborhood comparison briefs with median rent, IPTU, condomínio per zona
  • Identify FGTS-ineligible / cash-only luxury inventory for senior expat compensation packages
  • Benchmark school-adjacent rentals in Jardins, Moema, Leblon, Ipanema, Asa Sul
  • Map walkability and amenity density per bairro using the building amenities array

Mortgage Intelligence (Caixa, Itaú, Bradesco, Santander Brasil)

Mortgage origination teams at major Brazilian banks and fintechs use the data to:

  • Quantify FGTS/MCMV/SFH-eligible inventory share per metro for product marketing
  • Identify hot bairros for mortgage acquisition campaigns
  • Benchmark loan-to-value ratios against current asking prices
  • Build B2B partnership pipelines with high-volume listing agencies

Journalism, Academic & Public-Interest Research

Journalists at Folha, O Globo, Estadão, Valor Econômico and academic researchers use the dataset to:

  • Document gentrification patterns in Vila Madalena, Pinheiros, Vila Olímpia, Barra da Tijuca, Asa Sul, Praia do Canto
  • Quantify housing affordability vs. minimum-wage trends
  • Track the post-pandemic interior migration (São Paulo → Sorocaba, Campinas; Rio → Niterói, Petrópolis, Búzios)
  • Investigate informal-market integration with the formal listings ecosystem
  • Cover Real Estate Investment Trusts (Fundos Imobiliários — FIIs) with empirical price data

Real Estate Brokerage Lead Generation

Imobiliárias, corretores autônomos, and Brazilian PropTech CRMs use VivaReal data to:

  • Build owner-listed (Proprietário) lead lists filtered by bairro and price range — direct outreach for representation
  • Identify high-CRECI agencies dominating specific bairros for partnership / acquisition
  • Map competitive listing density per bairro to inform commission negotiation
  • Enrich Pipedrive / Salesforce / RD Station records with current asking prices

Construction & Developer Market Intelligence

Brazilian developers (MRV, Cyrela, Tecnisa, Eztec, Even, JHSF, Direcional) use the dataset to:

  • Track lançamento (new launch) prices by competitor in target submarkets
  • Identify high-demand bairros for land acquisition
  • Benchmark unit mix decisions (% 1-quarto vs 2-quartos vs 3-quartos vs 4-quartos) against actual listings
  • Monitor competitor sell-out velocity by re-scraping launch projects week-over-week

Tax & Compliance Advisory

Brazilian tax advisors and contadores use the dataset to:

  • Build "valor de mercado" comparables for capital-gains (ganho de capital) calculations on property sales
  • Support ITBI (Imposto sobre Transmissão) appeals against inflated municipal reference prices
  • Document arm's-length pricing for related-party transfers

Sample Queries & Recipes

Recipe 1: All for-sale apartamentos in Pinheiros, São Paulo

{
"transacao": "venda",
"propertyType": "apartamento_residencial",
"uf": "sp",
"cidade": "sao-paulo",
"bairro": "pinheiros",
"maxRecords": 500
}

Recipe 2: Premium coberturas in Leblon and Ipanema

{
"startUrls": [
"https://www.vivareal.com.br/venda/rj/rio-de-janeiro/leblon/cobertura_residencial/",
"https://www.vivareal.com.br/venda/rj/rio-de-janeiro/ipanema/cobertura_residencial/"
],
"maxRecords": 300
}

Recipe 3: Long-term aluguel inventory in Itaim Bibi, Vila Olímpia, Jardins

{
"startUrls": [
"https://www.vivareal.com.br/aluguel/sp/sao-paulo/itaim-bibi/",
"https://www.vivareal.com.br/aluguel/sp/sao-paulo/vila-olimpia/",
"https://www.vivareal.com.br/aluguel/sp/sao-paulo/jardins/"
],
"maxRecords": 600
}

Recipe 4: All new launches (lançamentos) in Brasília's Asa Sul and Águas Claras

{
"transacao": "lancamentos",
"uf": "df",
"cidade": "brasilia",
"maxRecords": 300,
"scrapeDetails": true
}

Recipe 5: Terrenos for development in greater Curitiba

{
"transacao": "venda",
"propertyType": "terreno",
"uf": "pr",
"cidade": "curitiba"
}

Recipe 6: Vacation rentals (temporada) in Búzios and Cabo Frio

{
"startUrls": [
"https://www.vivareal.com.br/temporada/rj/buzios/",
"https://www.vivareal.com.br/temporada/rj/cabo-frio/"
],
"maxRecords": 200
}

Recipe 7: Test run — sample 30 records before committing to a full city scrape

{
"transacao": "venda",
"uf": "mg",
"cidade": "belo-horizonte",
"maxRecords": 30
}
{
"transacao": "venda",
"propertyType": "casa_residencial",
"uf": "rj",
"cidade": "rio-de-janeiro",
"bairro": "barra-da-tijuca",
"scrapeDetails": true,
"maxRecords": 100
}

Integration Examples

Google Sheets (via Apify Integration)

  1. Schedule the actor in the Apify Console (e.g., daily at 07:00 BRT)
  2. Attach the "Save to Google Sheets" integration to the schedule
  3. Receive a fresh tab per run with every listing in your target bairros, ready for filtering and pivot tables

Make.com / Zapier / n8n

Use the Apify connector on any of these platforms. Trigger downstream workflows on:

  • New listings (today's run minus yesterday's, joined on listingId)
  • Price drops (price_today < price_yesterday for the same listingId)
  • Status removal (listing in yesterday's dataset but not today's = sold or withdrawn)
  • New CRECI agents appearing in a given bairro (lead-gen for franchise recruiters)

Power BI / Tableau / Looker / Metabase

Connect Apify's REST API as a JSON data source. Build dashboards covering:

  • Median R$/m² by bairro across São Paulo, Rio, Belo Horizonte
  • IPTU + condomínio drag on net rental yield
  • FGTS/MCMV eligible inventory share per metro
  • Lançamento launch velocity by developer
  • Listings-per-bairro density heatmaps

Postgres / Snowflake / BigQuery

Use the Apify webhook integration to POST run results to your warehouse ingestion endpoint. Recommended primary key: listingId. Recommended partition: scrapedAt::date. Recommended clustering: uf, cidade, bairro.

CREATE TABLE vivareal_listings (
listing_id TEXT,
snapshot_date DATE,
transacao TEXT,
property_type TEXT,
price_brl NUMERIC,
condominio NUMERIC,
iptu NUMERIC,
quartos INT,
suites INT,
banheiros INT,
vagas INT,
area_m2 NUMERIC,
uf CHAR(2),
cidade TEXT,
bairro TEXT,
creci TEXT,
listing_url TEXT,
raw JSONB,
PRIMARY KEY (listing_id, snapshot_date)
) PARTITION BY RANGE (snapshot_date);

Salesforce / HubSpot / RD Station CRM enrichment

Trigger a daily Apify run filtered by your target bairros, then upsert into your CRM keyed on listingId. Use price drops and status removals to auto-create Tasks or open Cases for your sales reps.

Webhooks for alerting

Wire Apify's run-finished webhook to your team's Slack/Discord/Telegram bot. Push a "new listings today in {bairro}" digest, or alert on luxury-tier coberturas matching a specific buyer's profile.


Major Brazilian Markets at a Glance

Metro / StatePopulationNotable bairros for scraping
São Paulo, SP22.6M (greater SP)Pinheiros, Vila Madalena, Itaim Bibi, Jardins, Moema, Vila Olímpia, Brooklin, Higienópolis, Perdizes, Vila Mariana
Rio de Janeiro, RJ13.6M (greater RJ)Ipanema, Leblon, Copacabana, Barra da Tijuca, Botafogo, Flamengo, Tijuca, Recreio, Jardim Botânico
Belo Horizonte, MG6.0MSavassi, Lourdes, Funcionários, Belvedere, Buritis, Sion
Brasília, DF4.7MAsa Sul, Asa Norte, Águas Claras, Lago Sul, Lago Norte, Sudoeste, Noroeste
Salvador, BA3.7MPituba, Barra, Graça, Itaigara, Caminho das Árvores
Curitiba, PR3.6MBatel, Água Verde, Bigorrilho, Ecoville, Cabral
Porto Alegre, RS4.4MMoinhos de Vento, Bela Vista, Petrópolis, Auxiliadora
Recife, PE4.1MBoa Viagem, Casa Forte, Pina, Aflitos
Fortaleza, CE4.1MMeireles, Aldeota, Cocó, Mucuripe, Varjota
Niterói, RJ0.5MIcaraí, Ingá, Santa Rosa, São Francisco
Campinas, SP3.4MCambuí, Nova Campinas, Jardim Chapadão
Florianópolis, SC1.2MJurerê Internacional, Lagoa da Conceição, Centro
Búzios / Cabo Frio, RJVacationGeribá, Manguinhos, Ferradura — temporada inventory

Cost & Performance

MetricValue
EnginePlaywright Chromium (headless), Brazilian residential proxy
Runtime (sample, 50 records, single bairro)~30–90 seconds
Runtime (full bairro, 500 records)5–15 minutes
Runtime (full city across all bairros)30–90 minutes
Memory footprint1 GB minimum, 2–4 GB recommended for parallel sessions
Pricing modelPay-per-event — actor start + per dataset item
Data freshnessLive at runtime — VivaReal listings update continuously
Auth requiredNone
Proxy requiredBrazilian RESIDENTIAL strongly recommended (Cloudflare active)
ConcurrencySafe — run multiple parallel filtered configs for different bairros
Captcha handlingCloudflare interstitial detected and waited on automatically

Cost note: because the actor uses pay-per-event pricing, a 50-record sample run costs cents; a full multi-bairro daily scrape across a metro costs a small predictable amount that scales linearly with records returned, not with browser runtime.


  • Public data only — every field this actor returns is publicly visible on vivareal.com.br without login
  • No personal data of buyers or renters — VivaReal does not expose buyer-side PII
  • CRECI license numbers are public registrations — Brazilian law mandates CRECI display on all real estate ads (Lei 6.530/78)
  • Photos remain copyright of the original publisher — store image URLs, not the binaries, unless you have a license
  • Respect VivaReal's Terms of Service — do not republish full listings or build a competing portal; analytics, internal CRM, dashboards and aggregated insights are the supported use cases
  • LGPD (Lei Geral de Proteção de Dados) — the dataset does not contain personal data of property buyers/renters; CRECI numbers and agency names are professional public registrations, generally outside LGPD's "dados pessoais" definition, but consult counsel for your specific downstream use
  • GDPR / CCPA — listing data is property-side, not consumer-side; standard scraping caveats apply
  • Rate-limit responsibly — keep requestDelay >= 2500ms and use Brazilian RESIDENTIAL proxies; do not run high-frequency aggressive scrapes that would degrade the site for legitimate users

Important: You are responsible for your downstream use. Do not use this dataset to harass owners, scrape personal phone numbers, build "owner finder" tools that expose individuals, or violate VivaReal's ToS in ways that go beyond reasonable analytics and CRM enrichment.


Frequently Asked Questions

How fresh is the data?

Live at runtime. VivaReal listings update continuously throughout the day as agents post, edit and remove inventory. Each actor run hits the live site, so what you get is what a Brazilian buyer would see in their browser at that exact moment.

How many records can I expect per run?

It depends entirely on your filters. A single hot bairro (e.g., Pinheiros for sale) typically exposes 500–2,000 listings before VivaReal's pagination cap. A full city (e.g., São Paulo, all transactions, all property types) yields tens of thousands. Use maxRecords to bound your run.

Do I need a VivaReal login or API key?

No. VivaReal does not expose a public API for third parties, and this actor does not need any account credentials. You only need an Apify account.

Are Brazilian residential proxies really mandatory?

For any non-trivial volume, yes. VivaReal sits behind Cloudflare bot protection, which actively challenges datacenter IPs and non-BR exit nodes. The default proxyConfiguration is set to Apify RESIDENTIAL with country preference BR — keep it that way unless you have a specific reason to change.

Does the actor handle Cloudflare's "Aguarde…" / "Just a moment…" challenge?

Yes. The browser navigation routine polls the page title and waits up to ~30 seconds for the interstitial to clear before parsing. Persistent challenges (proxy is fully burned) cause the task to log a warning and skip — try a fresh run if this happens.

Why does my run sometimes return zero listings for a valid-looking URL?

VivaReal silently redirects zero-result searches to a /showcase/...ERROR... URL. The actor detects and logs this. Most commonly it means the bairro slug is misspelled, the property type doesn't exist in that bairro, or the price filter excludes everything. Try removing filters and adding them back one at a time.

Yes — set scrapeDetails: true. The actor will visit each listing page individually and pull description, features, amenities, lat/lng coordinates and the entire image array. Expect 5–10x runtime versus listing-only mode.

Does it return phone numbers?

VivaReal hides direct phone numbers behind an "Entrar em contato" click that requires user interaction; the actor does not bypass this. You'll get agency name and CRECI license number when published, but contact details require contacting the publisher directly through VivaReal's flow.

How are BRL prices parsed?

The actor's BRL parser correctly handles the Brazilian number format R$ 1.500.000,50 — dot as thousand separator, comma as decimal. Output price is a clean number like 1500000.50, not a string.

What does condominio represent — monthly or annual?

Monthly. Condomínio fees in Brazil are universally quoted per month. Multiply by 12 for the annual figure.

What does iptu represent — monthly or annual?

Annual. IPTU is the municipal property tax assessed once per year (most municipalities allow installment payment over 10 months). VivaReal displays the annual value.

What's the difference between quartos and suítes?

quartos = total bedrooms (dormitórios). suites is a subset — bedrooms that have an attached private bathroom. A 3 quartos / 1 suíte listing has three bedrooms total, one of which is en-suite.

How does FGTS / MCMV / SFH detection work?

The actor scans the listing text for keywords: FGTS (severance fund used as down payment), Minha Casa Minha Vida / MCMV (federal subsidized housing), SFH (Sistema Financeiro de Habitação). Detection is best-effort from free text — true means it was mentioned, null means it wasn't (not necessarily that the listing is ineligible).

Does the actor cover both venda (sale) and aluguel (rent)?

Yes. Set transacao to venda, aluguel, lancamentos, temporada, or all (which scrapes both sale and rent in one run).

Can I run this on a schedule?

Yes — Apify's built-in Scheduler supports cron expressions. Most users run this daily or weekly per target metro. Daily scheduling lets you compute price-drop and inventory-churn analytics.

Does this work with the Apify Free Plan?

Yes — full functionality on the free tier. Small sample runs (e.g., maxRecords: 50) typically fit within free-plan compute units; large multi-metro daily scrapes should be on a paid plan for headroom.

Can I export to CSV / Excel / XML?

Yes — the Apify dataset view supports JSON, JSONL, CSV, Excel (XLSX), HTML, XML and RSS exports directly. The API also streams JSON Lines for large datasets.

What about ZAP Imóveis, OLX Imóveis, Imovelweb?

VivaReal and ZAP Imóveis are sister portals under the same parent (Grupo ZAP / OLX Brasil) but have separate inventory and presentation. Use the ZAP Imóveis Scraper for ZAP coverage — see the Related Actors section below.

How do I report a bug or request a feature?

Open an issue on the Apify Store actor page, or contact the developer directly through the Apify Console.

What happens if VivaReal redesigns its site?

The actor uses a JSON-first extraction path (__NEXT_DATA__) with a robust DOM fallback. Most VivaReal redesigns affect CSS class names but leave the Next.js JSON intact, so extraction usually survives without changes. Major schema changes are patched promptly — please open an issue if you spot one.


If you work across multiple international real estate portals, these sibling actors share the same input/output conventions:


Comparison vs. Alternatives

ApproachSetup timeData freshnessCloudflare handlingBRL price normalizationBairro geocodingCost (1K records)
This actor< 5 minutesLive at runtimeBuilt-inBuilt-inBuilt-inCents
Manual browsing + copy-pasteHoursManualn/aManualManualLabor
Custom Playwright DIY2–4 weeksLive, until it breaksDIYDIYDIYDev hours + infra
Paid real estate API (BR)Days–weeks contractingVariesn/aVariesVaries$500–5,000+/mo
Buy a dataset from a brokerWeeksStale (monthly snapshots)n/aVariesVaries$1,000+/dataset

Why Pay-Per-Event Pricing?

Most scrapers either charge a flat monthly subscription (you pay whether you use it or not) or per-Compute-Unit (unpredictable, browser-heavy actors blow budgets). This actor uses pay-per-event pricing instead:

  • You pay only when the actor actually runs
  • Charges scale with records delivered, not with browser wall-clock time
  • No monthly minimum — pause for a month, pay zero
  • Sampling a new bairro with maxRecords: 30 costs literal pennies
  • Transparent line-item billing inside the Apify Console
  • Predictable cost modeling for finance teams — records × per-event price = total

Changelog

VersionDateNotes
1.0.02026-05Initial public release — Playwright Chromium, BRL parser, FGTS/MCMV detection, CRECI extraction, bairro-level geocoding via URL slug parsing, Next.js JSON-first extraction with DOM fallback, residential proxy session rotation, pay-per-event pricing

Keywords

VivaReal scraper · VivaReal data · vivareal.com.br scraper · Brazil real estate scraper · Brazil property data API · Brasil imóveis API · BRL property price data · São Paulo apartment data · São Paulo apartamento scraper · Rio de Janeiro property scraper · Rio de Janeiro imóveis API · Belo Horizonte real estate data · Brasília property data · Curitiba imóveis scraper · Porto Alegre real estate · Salvador real estate data · Recife property scraper · Fortaleza imóveis API · VivaReal alugar comprar data · IPTU condomínio benchmarking · FGTS MCMV property eligibility · CRECI agent license data · cobertura penthouse Brazil scraper · apartamento residencial scraper · casa em condomínio data · terreno lote Brazil scraper · sala comercial Brazil scraper · Pinheiros real estate data · Vila Madalena scraper · Itaim Bibi property API · Jardins São Paulo scraper · Moema apartment data · Ipanema cobertura scraper · Leblon real estate data · Copacabana property data · Barra da Tijuca scraper · Asa Sul Brasília data · Águas Claras property API · Brazilian real estate analytics · FII fundos imobiliários data · Brazil property investor research · Apify Brazil scraper · Brazilian housing market data · imóveis residenciais Brasil API · imóveis comerciais Brasil scraper · lançamentos imobiliários scraper · temporada vacation rental Brazil


Support

  • Bug reports: Use the Issues tab on the Apify Store actor page
  • Feature requests: Same place — describe your use case (city, bairro, field, downstream system)
  • Direct contact: Through the Apify developer profile

If this actor saves you time, a 5-star rating on the Apify Store helps other Brazilian real estate teams discover it. Obrigado!