VivaReal Scraper | Brazil Real Estate BRL Pricing
Pricing
from $2.50 / 1,000 results
VivaReal Scraper | Brazil Real Estate BRL Pricing
VivaReal scraper & API for Brazilian real estate: search property for sale and rent and export address, price, condo fee, beds, baths, parking, area, type, amenities, photos and coordinates. Brazil property market data and real-estate lead generation — fast, no login.
Pricing
from $2.50 / 1,000 results
Rating
0.0
(0)
Developer
Haketa
Maintained by CommunityActor stats
0
Bookmarked
23
Total users
4
Monthly active users
5 days ago
Last modified
Categories
Share
VivaReal Scraper — Brazil Real Estate Data, BRL Pricing, Bairro-Level Apartamentos, Casas, Coberturas & Imobiliária Leads
Scrape VivaReal.com.br — Brazil's #1 real estate portal — straight from its own listings backend. This VivaReal scraper pulls live property listings and real-estate agency (imobiliária) profiles with BRL pricing, condomínio + IPTU costs, quartos/suítes/vagas counts, usable area in m², bairro-level location, FGTS/MCMV flags, CRECI licenses, agency contact details and full image galleries — structured, de-duplicated JSON ready for analytics, investor research, prop-tech and CRM. No login, no coding, no browser farm.
Export to JSON, CSV, Excel, or API.
Built for Brazilian real-estate investors, prop-tech & iBuying teams, mortgage and FGTS/MCMV analysts, FII/fund researchers, imobiliárias doing lead-gen, developers tracking lançamentos, and data teams that need clean imóveis data at scale.
🔎 Why scrape VivaReal?
VivaReal (part of OLX Brasil / Grupo ZAP, alongside sister portal ZAP Imóveis) is where millions of Brazilians search to comprar and alugar property every day. Its catalog spans every state (UF), every major metro, and every inventory class — apartamentos, casas, coberturas, kitnets, terrenos, salas comerciais and brand-new developer lançamentos. That makes it the single richest public source of Brazilian housing-market data.
The problem: that data is locked inside a search UI designed for human buyers, not analysts. Copy-pasting prices bairro by bairro doesn't scale, and Brazil's number format (R$ 1.500.000,50 — dot for thousands, comma for decimals) plus the UF → cidade → bairro address hierarchy makes manual collection error-prone. The locally-critical fields — IPTU (annual municipal tax), condomínio (monthly HOA), FGTS/MCMV financing eligibility, CRECI broker licenses, quartos vs suítes — are exactly the ones a spreadsheet loses.
This VivaReal scraper talks to the portal's own JSON listings backend and returns every field already normalized: price in BRL, condomínio and IPTU split out, area, rooms, parking, geocoordinates, agency, media and more — one clean row per listing.
Common reasons people scrape VivaReal:
- Price & R$/m² benchmarking across bairros, cidades and property types
- Rental-yield / cap-rate models that properly subtract condomínio + IPTU drag
- Lançamento (new-launch) tracking by developer and submarket
- FGTS / MCMV eligible inventory sizing for mortgage and subsidized-housing products
- Imobiliária & corretor lead lists with CRECI, CNPJ and contact details for B2B outreach
- AVM / CMA training data for prop-tech, iBuying and valuation tools
- Market monitoring — new listings, price drops and inventory churn via scheduled runs
✨ What this VivaReal scraper does
- ✅ Two modes in one actor.
Property Listingssearches the catalog (sale, rent, used & lançamentos, residential & commercial).Agency Directorypulls imobiliária profiles with license, tax ID and contacts for B2B lead generation. - ✅ Dual portal. Choose VivaReal or its sister ZAP Imóveis — both run on the same Glue backend, selected with one dropdown.
- ✅ Simple dropdown targeting. Pick deal type, listing type, usage, property types, states and cities from menus — no codes or URLs required. Add extra cities or bairros by slug for deep targeting.
- ✅ Automatic pagination. Walks the
fromoffset across pages, de-duplicates onlistingId, and returns hundreds to thousands of listings per run, bounded bymaxListings/maxPages. - ✅ Rich, normalized fields per listing:
listingId,url,priceBRL,condominioMonthlyBRL,iptuYearlyBRL,pricePerSqmBRL,totalMonthlyCostBRL,usableArea,totalArea,bedrooms(quartos),bathrooms,suites,parkingSpaces(vagas),unitType/category/subCategory,uf,city,neighborhood(bairro),zone,street,zipCode(CEP),latitude,longitude,amenities,imageUrls,thumbnailUrl,imageCount,listingQualityScore,publishedAtand more. - ✅ Brazilian financial flags:
isFGTSEligible,isMCMVEligible,isFinancing,isFiadorFree(sem fiador),acceptsExchange(permuta). - ✅ Lançamento intelligence:
isLancamento,launchName,launchPhase,constructorName,constructorCNPJ,deliveryDate,totalUnits. - ✅ Agency fields:
agencyName,agencyCRECI,agencyCNPJ,agencyPhone,agencyEmail,agencyWebsite,agencyAddress,agencyLogoUrl,agencyTier,agencyVerified,agencyTotalListings(richest in Agency Directory mode). - ✅ Server-side filters: price range, area range, min bedrooms, min parking, sem-fiador, plus sort by relevance / newest / price / area.
- ✅ Fast & reliable. Direct JSON API (no browser), with retry + proxy-session rotation and a tolerant parser that survives response-shape changes.
- ✅ Export to JSON, CSV, Excel, XML or HTML, or stream via the Apify API.
🎯 Use cases
- Real-estate investors & FIIs (fundos imobiliários) — benchmark R$/m², compute
aluguel/vendacap rates, and quantify condomínio + IPTU drag on net yield. - Prop-tech & iBuying (Loft, QuintoAndar, EmCasa-style) — bootstrap inventory, train AVM/CMA models with bairro-segmented comps.
- Mortgage & FGTS/MCMV teams (Caixa, Itaú, Bradesco, Santander, fintechs) — size FGTS/MCMV-eligible inventory per metro and find hot acquisition bairros.
- Imobiliárias & corretores — build owner- and agency-lead lists filtered by bairro and price; map competitor listing density per bairro.
- Developers (MRV, Cyrela, Eztec, Direcional…) — track lançamento prices and unit mix by competitor and submarket.
- CRM & sales teams — enrich Pipedrive / Salesforce / HubSpot / RD Station with live asking prices and agency contacts.
- Journalists & academics — study affordability, gentrification and interior migration with empirical listing data.
- Expat & relocation firms — build neighborhood briefs with median rent, IPTU and condomínio per zona.
📥 Input
Pick a mode, choose deal type / property type / location from dropdowns, and set your limits. Run it empty for a ready-made nationwide sample (defaults to Sale / Used / Residential). All parameters are optional.
| Field | Type | Description |
|---|---|---|
mode | string | listings (property search) or agencies (imobiliária directory for B2B leads). Default listings. |
portal | string | VIVA_REAL or ZAP — both share the same backend. Default VIVA_REAL. |
business | array | SALE, RENTAL, or both (empty). |
listingType | array | USED (resale/rental) or DEVELOPMENT (lançamentos). |
usageTypes | array | RESIDENTIAL or COMMERCIAL. |
unitTypes | array | Property types: APARTMENT, HOME, CONDOMINIUM, PENTHOUSE, FLAT, KITNET, FARM, LAND_LOT, OFFICE, COMMERCIAL_BUILDING, WAREHOUSE_SHED, HOTEL, etc. Empty = all. |
states | array | Brazilian states by UF: SP, RJ, MG, RS, PR, SC, BA, DF, … Empty = nationwide. |
cities | array | Major cities by slug: sao-paulo, rio-de-janeiro, belo-horizonte, brasilia, curitiba, … |
citiesCustom | array | Any extra cities by URL slug (lowercase, hyphenated, no accents), e.g. sao-bernardo-do-campo. |
neighborhoods | array | Narrow to specific bairros by slug, e.g. pinheiros, itaim-bibi, copacabana. Best with one city. |
minPrice / maxPrice | integer | Price range in BRL. 0 = no bound. |
minArea / maxArea | integer | Usable area range in m². 0 = no bound. |
minBedrooms | integer | Minimum quartos. |
minParkingSpaces | integer | Minimum vagas. |
semFiador | boolean | Only rentals that don't require a guarantor (fiador). |
sortBy | string | relevance, newest, lowest_price, highest_price, lowest_area, highest_area. |
agencyIds | array | Agency Directory mode: specific imobiliária IDs to pull. |
agencyIdRangeStart / agencyIdRangeEnd | integer | Agency Directory mode: discover agencies across a sequential ID range. |
fetchAgencyListings | boolean | Agency Directory mode: also pull each agency's active portfolio. |
maxListings | integer | Max total records. 0 = unlimited. Default 100. |
maxPages | integer | Max pages per search combination (~24 listings/page). Default 20. |
pageSize | integer | Listings per request (1–50). Default 24. |
proxyConfiguration | object | Proxy. Apify Residential + country BR strongly recommended. |
requestDelay | integer | Delay between requests in ms. Default 800. |
maxConcurrency | integer | Parallel searches (1–5). Keep low for reliability. |
maxRetries | integer | Retry attempts per failed request. Default 3. |
Example input — apartamentos for sale in Pinheiros, São Paulo
{"mode": "listings","portal": "VIVA_REAL","business": ["SALE"],"listingType": ["USED"],"usageTypes": ["RESIDENTIAL"],"unitTypes": ["APARTMENT"],"states": ["SP"],"cities": ["sao-paulo"],"neighborhoods": ["pinheiros"],"minPrice": 500000,"maxPrice": 1500000,"minBedrooms": 2,"sortBy": "lowest_price","maxListings": 500,"maxPages": 25,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "BR"}}
📤 Output
Each row is a flat JSON record (listing or agency). Listing records carry ~80+ fields; the recordType field tells you which kind you're looking at. Here is a real listing item (abridged image list):
{"recordType": "listing","listingId": "2434761908","portal": "VIVA_REAL","url": "https://www.vivareal.com.br/imovel/imovel-id-2434761908/","title": null,"business": "SALE","listingType": "USED","usageType": "RESIDENTIAL","unitType": "HOME","unitSubType": "TWO_STORY_HOUSE","category": "residential","subCategory": "casa","priceBRL": 1198000,"rentPeriod": null,"condominioMonthlyBRL": 550,"iptuYearlyBRL": 4500,"totalMonthlyCostBRL": null,"pricePerSqmBRL": 2445,"usableArea": 490,"bedrooms": 3,"bathrooms": 5,"suites": 3,"parkingSpaces": 5,"uf": "SP","city": "São Paulo","neighborhood": "Parque dos Príncipes","zone": "Zona Oeste","street": "Rua Cícero Fontão Caixeta","zipCode": "05396460","latitude": null,"longitude": null,"amenities": ["FIREPLACE", "FURNISHED", "AIR_CONDITIONING", "BARBECUE_BALCONY", "GARDEN"],"isLancamento": false,"isFGTSEligible": false,"isMCMVEligible": false,"isFiadorFree": false,"isFinancing": false,"acceptsExchange": false,"agencyId": "e070767f-cca9-445c-b59a-856c083aeeda","agencyName": "Fernanda Leite","agencyCRECI": null,"publisherType": "agency","publishedAt": "2019-02-12T20:24:44.027+00:00","imageCount": 20,"thumbnailUrl": "https://resizedimgs.vivareal.com/img/vr-listing/1c8b7a65b654ff41ca82d38f53cc4f5c/imovel.jpg?action=fit-in&dimension=800x600","imageUrls": ["https://resizedimgs.vivareal.com/img/vr-listing/1c8b7a65b654ff41ca82d38f53cc4f5c/imovel.jpg?action=fit-in&dimension=800x600"],"listingQualityScore": 25,"searchBusiness": "SALE","searchState": "SP","searchCity": "sao-paulo","scrapedAt": "2026-10-25T14:17:16.708Z"}
Field reference (main fields)
| Field | Description |
|---|---|
recordType | listing or agency |
listingId | Stable VivaReal/ZAP ID — primary key for dedup and diffing |
portal | VIVA_REAL or ZAP |
url | Canonical listing (or agency) URL |
title / description | Headline and full text — present when the portal exposes them on the record |
business | SALE or RENTAL |
listingType | USED or DEVELOPMENT (lançamento) |
usageType / unitType / category / subCategory | Residential vs commercial, and normalized property type |
priceBRL | Asking price in BRL (broker placeholder/sentinel prices filtered out) |
rentPeriod | Rental period (e.g. MONTHLY) for rentals |
condominioMonthlyBRL | Monthly condomínio (HOA) fee |
iptuYearlyBRL | Annual IPTU (municipal property tax) |
totalMonthlyCostBRL | Derived rent + condomínio + IPTU/12 (rentals) |
pricePerSqmBRL | Derived R$/m² |
usableArea / totalArea | Area in m² |
bedrooms / bathrooms / suites / parkingSpaces | Quartos / banheiros / suítes / vagas |
uf / city / neighborhood / zone / street / zipCode | UF → cidade → bairro → zona → logradouro → CEP |
latitude / longitude | Geocoordinates (present when published) |
amenities | Array of amenity/feature codes |
isFGTSEligible / isMCMVEligible / isFinancing / isFiadorFree / acceptsExchange | Best-effort Brazilian financing & rental flags |
isLancamento / launchName / launchPhase / constructorName / constructorCNPJ / deliveryDate / totalUnits | New-development (lançamento) details |
agencyName / agencyCRECI / agencyCNPJ / agencyPhone / agencyEmail / agencyWebsite / agencyAddress | Publisher / imobiliária fields |
agencyTier / agencyVerified / agencyTotalListings | Agency status & portfolio size |
publisherType | agency or owner |
publishedAt / updatedAt | Listing timestamps |
imageCount / thumbnailUrl / imageUrls | Resolved, ready-to-use image URLs |
listingQualityScore | 0–100 completeness/quality score |
scrapedAt | ISO-8601 UTC scrape timestamp |
Some fields populate only for certain records. Honest coverage notes: condominioMonthlyBRL (~80%), iptuYearlyBRL, totalArea, suites, latitude/longitude and agencyCRECI are data-dependent — they appear when the publisher provides them. In the listings search feed title/description and agencyPhone are often blank; for full agency contact (CRECI, CNPJ, phone, email, website) use Agency Directory mode, which is built for that. The Brazilian financing flags (isFGTSEligible, isMCMVEligible, isFinancing) are best-effort — true means it was detected in the listing's amenities/text, not a legal guarantee.
🔁 Pagination & scale
The actor calls VivaReal's Glue listings API with a from offset that advances by pageSize (default 24) each page. After every page it compares from + returned against the API's totalCount and stops when the result set is exhausted — so it collects hundreds to thousands of listings for a given search instead of just the first page. Every record is de-duplicated on listingId across pages and across search combinations within a run.
You bound the run with two inputs: maxListings (total records, default 100, 0 = unlimited) and maxPages (pages per search combination, default 20). When you select multiple states/cities/bairros/deal-types, the actor runs each combination as its own paginated search and merges the de-duplicated results. For very large pulls, set maxListings: 0 and raise maxPages.
⚙️ How to use
- Open the actor on the Apify Console and click Try for free.
- Choose mode (
listingsoragencies), then pick deal type, property types, states and cities — or leave empty for a nationwide sample. - Keep the default Apify Residential proxy, country BR (strongly recommended).
- Set
maxListings(e.g.50to sample,0for unlimited) and click Start. - Download results as JSON, CSV, Excel, XML or HTML, or pull them via the Apify API.
- Automate: run on a schedule (daily/weekly) and pipe results to Make, Zapier, n8n, Google Sheets, a webhook, or your warehouse (BigQuery / Snowflake / Postgres) for price-drop and inventory-churn tracking.
API example (cURL)
curl -X POST "https://api.apify.com/v2/acts/haketa~vivareal-scraper/runs?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"mode": "listings","business": ["SALE"],"states": ["SP"],"cities": ["sao-paulo"],"neighborhoods": ["pinheiros"],"maxListings": 200}'
💡 Tips
- Narrow first, then widen. Start with one city + one bairro and a small
maxListingsto validate your filters, then scale up. - Deep bairro coverage: select a single city and list several bairro slugs (lowercase, no accents) in
neighborhoods. - Rental economics: for
RENTALsearches,totalMonthlyCostBRLalready adds condomínio + IPTU/12 on top of rent. - Lead generation: switch
modetoagenciesand provideagencyIdsor an ID range to harvest imobiliária CRECI, CNPJ and contact details. - Lançamentos: set
listingType: ["DEVELOPMENT"]to track new developer projects and theirconstructorName/deliveryDate. - ZAP too: set
portal: "ZAP"to pull the sister portal's inventory with the same input and output shape.
❓ FAQ
Is scraping VivaReal legal? This actor collects only public listing and professional agency data that anyone can see on vivareal.com.br without logging in. CRECI license numbers and agency names are public professional registrations (CRECI display is mandated by Brazilian Lei 6.530/78). Use the data for analytics, research and CRM enrichment, respect VivaReal's Terms of Service, and consult counsel for your specific downstream use. No buyer/renter personal data is collected.
How many results can I get, and how fast?
A single hot bairro commonly exposes hundreds to a couple thousand listings; a whole city across types yields far more. The actor paginates automatically — use maxListings/maxPages to bound it. Because it hits the JSON API directly (no browser), a 50-record sample finishes in seconds and large pulls run quickly.
Do I need proxies or a login?
No login or API key. A Brazilian residential proxy is strongly recommended — the default proxyConfiguration uses Apify Residential with country BR. Datacenter IPs get challenged (403/503) quickly, so keep the Residential + BR default for reliable results.
Is there a VivaReal API? VivaReal has no public third-party API. This actor is effectively your VivaReal API: give it structured inputs and it returns clean JSON listing and agency records.
What export formats are supported? JSON, JSON Lines, CSV, Excel (XLSX), HTML, XML and RSS — from the Apify Console or the API.
How fresh is the data? Live at runtime. Every run queries the portal's live backend, so you get what a Brazilian buyer would see at that moment. Schedule daily/weekly runs to compute price drops and inventory churn.
Can I filter by price, area, bedrooms or bairro?
Yes — minPrice/maxPrice, minArea/maxArea, minBedrooms, minParkingSpaces, semFiador, plus states, cities and neighborhoods, and sortBy for ordering.
Why is title or description sometimes empty, and why no phone in listings mode?
The listings search feed doesn't always expose the headline, full text, or direct phone number on each card. Core structured fields (price, area, rooms, location, agency, images) are always present. For the richest agency contact data (CRECI, CNPJ, phone, email, website) use Agency Directory mode.
Do the image URLs work directly?
Yes. thumbnailUrl and every entry in imageUrls are returned as fully-resolved, ready-to-open image URLs (the portal's sizing template is expanded for you).
What's the difference between quartos and suítes?
bedrooms (quartos) is total bedrooms; suites is the subset with an en-suite bathroom. A "3 quartos / 1 suíte" listing has three bedrooms, one en-suite.
Does it cover both VivaReal and ZAP Imóveis?
Yes — set portal to VIVA_REAL or ZAP. Both share the same backend and return the same field shape.
🔗 Related scrapers
Working across more real-estate portals? These sibling scrapers share the same clean input/output conventions:
- Yad2 Scraper (Israel)
- ZAP Imóveis Scraper (Brazil)
- Boliga Scraper (Denmark)
- Kijiji Scraper (Canada)
- Realtor.ca Scraper (Canada)
- Domain.com.au Scraper (Australia)
Ready to pull Brazilian real-estate data? Click Try for free, pick your cidade and bairro, and get clean VivaReal listings and imobiliária leads in JSON, CSV or Excel in seconds.