ZAP Imóveis Scraper
Pricing
from $3.00 / 1,000 results
ZAP Imóveis Scraper
Scrape ZAP Imóveis, Brazil's premium real estate portal (QuintoAndar Group): property listings, commercial real estate (sala, galpão, conjunto), lançamentos and 200K+ imobiliária profiles. Get price, condomínio, IPTU, CRECI, agency, building class, sem fiador and FGTS data.
Pricing
from $3.00 / 1,000 results
Rating
0.0
(0)
Developer
Haketa
Maintained by CommunityActor stats
0
Bookmarked
13
Total users
5
Monthly active users
17 days ago
Last modified
Categories
Share
ZAP Imóveis Scraper — Brazil Premium Real Estate Data Extractor for Apartamentos, Casas, Lançamentos & Salas Comerciais
The most complete ZAP Imóveis (zapimoveis.com.br) data extraction tool on Apify. Pull live property listings, lançamentos pipeline, and the full imobiliária directory from Brazil's premium broker-centric portal — structured with BRL pricing, condomínio, IPTU, CRECI, CNPJ and São Paulo / Rio / Belo Horizonte coverage, ready for investor research, prop-tech apps, premium-market analytics, journalism, and CRM enrichment.
What This Actor Does
The ZAP Imóveis Scraper is a production-ready Apify Actor that extracts structured property and agency data from ZAP Imóveis (zapimoveis.com.br) — one of the two flagship portals of Grupo OLX Brasil / QuintoAndar Group (alongside its sibling VivaReal). Where VivaReal indexes the broad mass market, ZAP historically skews premium, broker-centric and high-end: more apartamentos de alto padrão in Jardins and Vila Olímpia, more lançamentos from Cyrela, EZTec, Tegra and JFL, more salas comerciais Triple-A on Faria Lima and along Avenida das Nações Unidas, and a heavier weighting toward the imobiliárias that work the top of the market.
The actor talks directly to ZAP's internal Glue API (glue-api.zapimoveis.com.br) — no headless browser, no Cloudflare-cracking gymnastics inside the request loop — and normalizes every response into a flat, analytics-ready JSON record with Brazilian-specific fields baked in: preço, condomínio mensal, IPTU anual, CEP, CRECI da imobiliária, CNPJ da construtora, lançamento phase, sem fiador, FGTS e MCMV elegibilidade.
Each run can return:
- Residential listings — apartamento, casa, cobertura, flat, kitnet, condomínio fechado, sobrado, sítio
- Commercial real estate (CRE) — sala comercial, conjunto comercial, galpão / warehouse, loja, prédio comercial, ponto comercial
- Lançamentos — pre-launch and in-construction developer projects with constructor name, CNPJ, delivery date and total units
- Land lots (terrenos) — urban and rural plots
- Agency directory profiles — 200K+ imobiliárias with CRECI-J, CNPJ, phone, website, branch count, service areas and specializations
- Cross-portal flags — whether a ZAP listing also appears on VivaReal (and its VivaReal ID)
You can also flip the portal parameter from ZAP to VIVA_REAL to scrape the sibling portal from the same actor — useful for diffing inventory between the premium and mass-market sides of the same group.
Why scrape ZAP Imóveis yourself when this exists?
ZAP looks scrape-friendly until you actually try it. Then you hit the same wall every other team hits:
- Cloudflare in front of every page — datacenter IPs get 403/503 challenges within the first dozen requests
- The Glue API is undocumented — there are no public Swagger or OpenAPI specs; endpoint contracts change without notice
- Mandatory headers —
X-Domain,Origin, andReferermust all align to a specific portal or requests are rejected - Pricing is split across an array —
pricingInfos[]carries rental, sale, condomínio, IPTU, yearly IPTU and monthly condo as parallel entries you have to reconcile - Lançamento vs. used split — pre-launch developments use a different
listingType(DEVELOPMENT), different sort behavior, and carry constructor metadata the standard listings don't - Geography normalization — UF codes, accented city names, slug-form URLs and free-text neighborhoods all coexist, and the API insists on the unslugified accented version
- Bedrooms/areas as arrays —
bedrooms,bathrooms,usableAreas,parkingSpacescome back as[3]not3, so naive parsers crash - Cross-portal duplication — many listings are syndicated to both ZAP and VivaReal under different IDs; without a dedupe key your dataset double-counts
- Agency directory is paginated by ID range, not by listing — discovering imobiliárias requires sequential ID crawling, not a search endpoint
- Sort filter syntax is bizarre — price ordering needs a
sortFilter:pricingInfos.businessType='SALE'clause appended or the order silently misbehaves
This actor abstracts every one of those problems. You pass plain inputs (states, cities, business, usageTypes, minPrice, maxPrice), the actor handles Brazilian-residential proxy rotation, header forgery, pricing reconciliation, lançamento detection, duplicate flagging, and cross-portal switching, and you get back JSON ready to drop into Postgres, BigQuery or Power BI.
Quick Start
One-Click Run
- Click "Try for free" on the Apify Store page
- Pick your
states(defaultSP) andcities(defaultsao-paulo), chooseSALEorRENTAL - Leave the default Brazilian residential proxy enabled (highly recommended)
- Hit Start — the first 200 listings land in your dataset in 60-120 seconds
API Run (Python)
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("haketa/zapimoveis-scraper").call(run_input={"mode": "listings","portal": "ZAP","business": ["SALE"],"listingType": ["USED"],"usageTypes": ["RESIDENTIAL"],"unitTypes": ["APARTMENT", "PENTHOUSE"],"states": ["SP"],"cities": ["sao-paulo"],"neighborhoods": ["pinheiros", "itaim-bibi", "vila-olimpia"],"minPrice": 1_500_000,"maxPrice": 5_000_000,"minBedrooms": 2,"minParkingSpaces": 1,"sortBy": "newest","maxListings": 500,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["listingId"], item["neighborhood"], item["priceBRL"],item["usableArea"], item["agencyName"])
API Run (Node.js / TypeScript)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('haketa/zapimoveis-scraper').call({mode: 'listings',portal: 'ZAP',business: ['RENTAL'],usageTypes: ['RESIDENTIAL'],states: ['RJ'],cities: ['rio-de-janeiro'],neighborhoods: ['ipanema', 'leblon', 'copacabana'],minPrice: 5000,maxPrice: 25000,semFiador: true,sortBy: 'lowest_price',maxListings: 300,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Got ${items.length} sem-fiador rentals in Rio`);
API Run (cURL)
curl -X POST "https://api.apify.com/v2/acts/haketa~zapimoveis-scraper/runs?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"mode": "listings","business": ["SALE"],"listingType": ["DEVELOPMENT"],"usageTypes": ["RESIDENTIAL"],"states": ["SP"],"cities": ["sao-paulo"],"maxListings": 200}'
How It Works
ZAP Imóveis and VivaReal share the same Glue API backend under Grupo OLX, distinguished only by an X-Domain request header. This actor talks to that backend directly via got-scraping — no Puppeteer, no Playwright, no headless Chrome eating 1 GB of RAM per worker. The result: a full run that would take a browser-based scraper 10 minutes finishes here in under 90 seconds.
Endpoints used
| Endpoint | Purpose | Pagination |
|---|---|---|
GET glue-api.zapimoveis.com.br/v2/listings | Property search (residential, commercial, lançamentos) | from / size, max ~24-36 per page |
GET glue-api.zapimoveis.com.br/v2/account/{id} | Agency profile metadata (imobiliária) | Single record per call |
GET glue-api.zapimoveis.com.br/v2/account/{id}/listings | Agency listings portfolio | from / size paginated |
Engineering details
- Direct HTTPS API calls —
got-scrapingwith browser-class TLS fingerprint and rotated UA strings - Brazilian residential proxy — defaults to Apify Proxy
RESIDENTIALgroup withcountry=BRto evade Cloudflare's geo + ASN heuristics - Mandatory header set —
X-Domain,Origin,Refereraligned to eitherwww.zapimoveis.com.brorwww.vivareal.com.brdepending on theportalinput - UF + city slug normalization — input slugs (
sao-paulo) are mapped to the accented full names the API expects (São Paulo) using a built-in lookup of 50+ major Brazilian municipalities (fallback handles unknown slugs) - Pricing reconciliation —
pricingInfos[]is walked to extract sale price, monthly rent, monthly condomínio, yearly IPTU andtotalMonthlyCostBRLin one normalized row - Array unpacking —
bedrooms,bathrooms,suites,usableAreas,totalAreas,parkingSpacesare unwrapped from arrays to scalars - Lançamento detection —
listingType=DEVELOPMENTrecords getisLancamento: truealong withlaunchName,launchPhase,constructorName,constructorCNPJ,deliveryDate,totalUnits - Sort filter syntax handled — the
pricingInfos.businessType='{BUSINESS}'clause needed for price-ordered searches is built automatically - Cross-portal flagging —
alsoOnVivaRealandvivaRealIdare emitted when a listing appears under both portals so you can dedupe downstream - Polite by default —
requestDelay: 800ms andmaxConcurrency: 1to stay well under Cloudflare's challenge threshold; both are user-tunable - Retry-aware — 403/503 / Cloudflare-challenge responses retry up to
maxRetriestimes with exponential backoff
Input Parameters
{"mode": "listings","portal": "ZAP","business": ["SALE"],"listingType": ["USED"],"usageTypes": ["RESIDENTIAL"],"unitTypes": ["APARTMENT"],"states": ["SP"],"cities": ["sao-paulo"],"neighborhoods": ["pinheiros"],"minPrice": 0,"maxPrice": 0,"minArea": 0,"maxArea": 0,"minBedrooms": 0,"minParkingSpaces": 0,"semFiador": false,"sortBy": "relevance","maxListings": 200,"maxPages": 20,"pageSize": 24,"requestDelay": 800,"maxConcurrency": 1,"maxRetries": 3}
Parameter reference
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | listings | listings = property search; agencies = imobiliária directory crawl |
portal | string | ZAP | ZAP or VIVA_REAL. Both portals share one backend |
business | array<string> | ["SALE"] | SALE (venda), RENTAL (aluguel), or both |
listingType | array<string> | ["USED"] | USED = padrão resale/rental; DEVELOPMENT = lançamentos |
usageTypes | array<string> | ["RESIDENTIAL"] | RESIDENTIAL or COMMERCIAL (ZAP is strong in CRE) |
unitTypes | array<string> | [] | Property-type filter — see Unit Type Reference below |
states | array<string> | ["SP"] | 2-letter UF codes (SP, RJ, MG, RS, PR, SC, BA, DF, PE, CE...) |
cities | array<string> | ["sao-paulo"] | City slugs in ZAP URL format (lowercase, hyphenated, no accents) |
neighborhoods | array<string> | [] | Bairro slugs; requires a single city. E.g. ["pinheiros", "itaim-bibi"] |
minPrice / maxPrice | integer | 0 | Price floor/ceiling in BRL. 0 = open-ended |
minArea / maxArea | integer | 0 | Area floor/ceiling in m² |
minBedrooms | integer | 0 | Minimum quartos |
minParkingSpaces | integer | 0 | Minimum vagas |
semFiador | boolean | false | Filter rentals that don't require a guarantor (QuintoAndar-style) |
sortBy | string | relevance | relevance, newest, lowest_price, highest_price, lowest_area, highest_area |
agencyIds | array<string> | [] | Explicit imobiliária IDs (agencies mode) |
agencyIdRangeStart / agencyIdRangeEnd | integer | 0 | Sequential ID-range crawl for agency discovery. IDs go up to ~850000 |
fetchAgencyListings | boolean | false | In agencies mode, also pull each agency's listing portfolio |
maxListings | integer | 200 | Hard cap across all tasks. 0 = unlimited |
maxPages | integer | 20 | Cap per state/city/business task. Each page ≈ 24 records |
pageSize | integer | 24 | Page size (1-50, ZAP default 24) |
proxyConfiguration | object | BR Residential | Strongly recommended: Apify Proxy RESIDENTIAL group, country BR |
requestDelay | integer | 800 | Inter-request delay in ms (raise if Cloudflare bites) |
maxConcurrency | integer | 1 | Parallel tasks (1-5). Keep low to dodge rate limits |
maxRetries | integer | 3 | Retries per failed request (Cloudflare 403/503) |
Output Schema
Every record — listing or agency — uses the same flat JSON shape. Fields irrelevant to the record type come back null, so a single Postgres table or BigQuery schema covers everything.
Identification & taxonomy
| Field | Type | Description |
|---|---|---|
recordType | string | listing or agency |
listingId | string | ZAP-issued listing ID |
portal | string | ZAP or VIVA_REAL |
url | string | Canonical listing or agency URL |
title | string | Listing title as published |
description | string | Full free-text description |
business | string | SALE or RENTAL |
listingType | string | USED or DEVELOPMENT |
usageType | string | RESIDENTIAL or COMMERCIAL |
unitType | string | ZAP UnitType enum (APARTMENT, HOME, OFFICE, etc.) |
unitSubType | string | Granular sub-type (e.g. FLAT, LOFT, PENTHOUSE) |
category | string | Normalized top-level (residential, comercial, rural, other) |
subCategory | string | Normalized fine-grained category |
Pricing (all BRL)
| Field | Type | Description |
|---|---|---|
priceBRL | number | Sale price or monthly rent (depending on business) |
rentPeriod | string | MONTHLY / DAILY / YEARLY for rentals |
condominioMonthlyBRL | number | Monthly condo fee |
iptuYearlyBRL | number | Annual IPTU (municipal property tax) |
totalMonthlyCostBRL | number | Rent + condomínio + IPTU/12, pre-computed |
pricePerSqmBRL | number | BRL per m² (price / usableArea) |
Property metrics
| Field | Type | Description |
|---|---|---|
usableArea | number | Usable area in m² (área útil) |
totalArea | number | Total area in m² (área total) |
bedrooms | integer | Quartos |
bathrooms | integer | Banheiros |
suites | integer | Suítes |
parkingSpaces | integer | Vagas de garagem |
Address & geo
| Field | Type | Description |
|---|---|---|
uf | string | 2-letter state code |
city | string | Município |
neighborhood | string | Bairro |
zone | string | Zona (Zona Sul / Zona Oeste / Centro etc.) |
street | string | Logradouro |
streetNumber | string | Número |
zipCode | string | CEP |
latitude / longitude | number | Geolocation |
Building & amenities
| Field | Type | Description |
|---|---|---|
amenities | array | Piscina, academia, sauna, churrasqueira, salão de festas, portaria 24h, etc. |
buildingClass | string | Building classification when published |
buildingName | string | Edifício / condomínio name |
ceilingHeight | number | Ceiling height (m) — relevant for galpão listings |
isCommercialCondo | boolean | True for CRE inside a multi-tenant building |
zoning | string | Municipal zoning class (if exposed) |
Lançamento fields (when isLancamento is true)
| Field | Type | Description |
|---|---|---|
isLancamento | boolean | true for new-development records |
launchName | string | Project name (e.g. JK Faria Lima by Cyrela) |
launchPhase | string | Phase (pre-launch, launched, under-construction, ready) |
constructorName | string | Builder/developer (Cyrela, EZTec, Tegra, JFL, MRV, Eztec...) |
constructorCNPJ | string | Developer CNPJ (corporate tax ID) |
deliveryDate | string | Forecast delivery date |
totalUnits | integer | Total units in the project |
Brazilian financial flags
| Field | Type | Description |
|---|---|---|
isFiadorFree | boolean | True when rental does not require a fiador (guarantor) |
acceptsExchange | boolean | Aceita permuta |
isFinancing | boolean | Owner accepts mortgage financing |
isFGTSEligible | boolean | Buyer can use FGTS (severance fund) for down payment |
isMCMVEligible | boolean | Qualifies for the Minha Casa Minha Vida federal program |
Agency / imobiliária
| Field | Type | Description |
|---|---|---|
agencyId | string | ZAP-issued imobiliária ID |
agencyName | string | Imobiliária name |
agencyCRECI | string | CRECI registration (state realtor licence) |
agencyCNPJ | string | Corporate tax ID |
agencyPhone | string | Primary phone |
agencyEmail | string | Public email (when exposed) |
agencyWebsite | string | Imobiliária website |
agencyAddress | string | Physical office address |
agencyLogoUrl | string | Logo image URL |
agencyTier | string | ZAP-issued tier (DESTAQUE / SUPER_PREMIUM / PREMIUM / STANDARD) |
agencyVerified | boolean | Tier-verified flag |
agencyEstablishedYear | integer | Year of establishment |
agencyTotalListings | integer | Total active inventory on ZAP |
agencyServiceAreas | array | Cities/regions served |
agencySpecializations | array | Verticals (lançamento, alto padrão, comercial, rural...) |
agencyBranchCount | integer | Branch / filial count |
publisherType | string | OWNER / AGENCY / DEVELOPER |
Media & cross-portal
| Field | Type | Description |
|---|---|---|
publishedAt | string | Original publish timestamp |
updatedAt | string | Last update timestamp on ZAP |
imageCount | integer | Photo count |
thumbnailUrl | string | Primary thumbnail |
imageUrls | array | Full image URL list |
videoUrls | array | Video URL list |
hasVideo / hasFloorplan / hasVirtualTour | boolean | Media flags |
listingQualityScore | integer | ZAP-issued content-quality score |
alsoOnVivaReal | boolean | True if the same listing is syndicated to VivaReal |
vivaRealId | string | Sibling VivaReal listing ID for dedupe |
searchBusiness / searchState / searchCity / searchNeighborhood | string | The input filter that produced this record (audit-friendly) |
scrapedAt | string | ISO-8601 extraction timestamp |
Example: Pinheiros (São Paulo) sale listing
{"recordType": "listing","listingId": "2622080195","portal": "ZAP","url": "https://www.zapimoveis.com.br/imovel/venda-apartamento-3-quartos-com-piscina-pinheiros-zona-oeste-sao-paulo-sp-128m2-id-2622080195/","title": "Apartamento alto padrão, 128 m², 3 quartos, 2 vagas - Pinheiros","description": "Apartamento totalmente reformado no coração de Pinheiros...","business": "SALE","listingType": "USED","usageType": "RESIDENTIAL","unitType": "APARTMENT","category": "residential","priceBRL": 2150000,"condominioMonthlyBRL": 1850,"iptuYearlyBRL": 7200,"totalMonthlyCostBRL": 2450,"pricePerSqmBRL": 16797,"usableArea": 128,"totalArea": 145,"bedrooms": 3,"bathrooms": 3,"suites": 1,"parkingSpaces": 2,"uf": "SP","city": "São Paulo","neighborhood": "Pinheiros","zone": "Zona Oeste","street": "Rua dos Pinheiros","zipCode": "05422-001","latitude": -23.5658,"longitude": -46.6850,"amenities": ["Piscina", "Academia", "Portaria 24h", "Salão de festas"],"buildingName": "Edifício Pinheiros Prime","isLancamento": false,"isFGTSEligible": true,"isFinancing": true,"agencyId": "231067","agencyName": "Imobiliária Exemplo Alto Padrão","agencyCRECI": "J-99999","agencyTier": "PREMIUM","publisherType": "AGENCY","publishedAt": "2026-03-12T10:14:00Z","updatedAt": "2026-05-08T18:22:00Z","imageCount": 28,"hasFloorplan": true,"hasVirtualTour": true,"alsoOnVivaReal": true,"vivaRealId": "id-9999911","scrapedAt": "2026-05-16T09:00:00.000Z"}
Example: Lançamento (Vila Olímpia, São Paulo)
{"recordType": "listing","listingId": "2899200001","portal": "ZAP","title": "Lançamento JK Vila Olímpia - 1 a 4 dorms","business": "SALE","listingType": "DEVELOPMENT","usageType": "RESIDENTIAL","unitType": "APARTMENT","priceBRL": 1980000,"usableArea": 78,"bedrooms": 2,"parkingSpaces": 1,"uf": "SP","city": "São Paulo","neighborhood": "Vila Olímpia","zone": "Zona Sul","isLancamento": true,"launchName": "JK Vila Olímpia Residences","launchPhase": "under-construction","constructorName": "Cyrela Brazil Realty","constructorCNPJ": "73.178.600/0001-18","deliveryDate": "2027-12-31","totalUnits": 240,"isFGTSEligible": false,"isFinancing": true,"agencyName": "Cyrela Vendas Diretas","publisherType": "DEVELOPER","scrapedAt": "2026-05-16T09:01:00.000Z"}
Reference Tables
Unit Type enum (most common)
unitType | Português | Notes |
|---|---|---|
APARTMENT | Apartamento | Most common residential type |
HOME | Casa | Standalone house |
CONDOMINIUM | Casa de condomínio | House inside gated condominium |
PENTHOUSE | Cobertura | Top-floor / duplex penthouse |
FLAT | Flat / apart-hotel | Hotel-serviced unit |
KITNET | Kitnet / studio | Studio apartment |
FARM | Fazenda / sítio / chácara | Rural property |
LAND_LOT | Terreno / lote | Land plot |
OFFICE | Sala comercial | Standalone office |
COMMERCIAL_BUILDING | Prédio comercial | Entire commercial building |
COMMERCIAL_PROPERTY | Conjunto comercial | Office floor / suite |
BUSINESS | Ponto comercial | Business / storefront with goodwill |
WAREHOUSE_SHED | Galpão | Industrial warehouse |
GARAGE | Vaga de garagem | Parking spot |
Business + Listing-Type Matrix
business × listingType | Means |
|---|---|
SALE × USED | Resale / secondhand sale (the bulk of inventory) |
SALE × DEVELOPMENT | Lançamento — pre-construction or under-construction sale |
RENTAL × USED | Standard rental — long-term or short-term per rentPeriod |
RENTAL × DEVELOPMENT | Rare — pre-leasing in mixed-use developments |
Agency Tier reference
| Tier | Meaning |
|---|---|
DESTAQUE / SUPER_PREMIUM | Top-paying advertisers — surfaced first in search |
PREMIUM | Standard paid plan with featured listings |
STANDARD | Free or basic plan |
Use Cases
Real Estate Investor & Family-Office Research (Brazil)
International and domestic investors evaluating Brazilian residential and CRE opportunities use this dataset to:
- Benchmark BRL price per m² across Pinheiros, Itaim Bibi, Vila Olímpia, Faria Lima, Jardins, Moema, Brooklin (SP) and Ipanema, Leblon, Lagoa, Barra da Tijuca (RJ)
- Track yield potential by joining sale price against
RENTALlistings in the same building orneighborhood - Spot stale inventory by monitoring
publishedAtvs.updatedAt— long stagnation often signals overpriced or distressed assets - Filter for FGTS / MCMV-eligible inventory when modelling first-time buyer demand
- Compare lançamento vs. resale spreads in the same bairro to gauge developer premium pricing
- Pull commercial inventory only (
usageTypes: ["COMMERCIAL"]) for triple-A office and galpão analysis on the Faria Lima / Anhanguera / Castelo Branco corridors
Brazilian Prop-Tech & Listings Aggregator Apps
Aggregators, off-portal CRM tools and consumer-facing buyer apps use the actor as their ZAP / VivaReal ingestion layer:
- Bootstrap a multi-portal listings index in days, not months — flip
portalto add VivaReal coverage from the same actor - Dedupe automatically using
alsoOnVivaReal+vivaRealIdso users don't see the same apartamento three times - Refresh on Apify Scheduler every few hours so the app always reflects current inventory
- Enrich with agency metadata (
agencyName,agencyCRECI,agencyTier) for trust signals - Power "lançamentos near me" features using
isLancamento,constructorName,deliveryDate
IPTU, Condomínio & Total-Cost Benchmarking
Brazilian buyers, accountants and property-tax consultants need real condomínio and IPTU data to make informed decisions:
- Compute median condomínio per m² by bairro to flag overpriced buildings
- Benchmark IPTU progressivo changes across SP / RJ / BH municipalities year-over-year
- Estimate total monthly carrying cost using
totalMonthlyCostBRLinstead of headline rent - Cross-reference with sale price to compute effective gross yield net of condomínio + IPTU
- Identify FII (Real Estate Investment Trust) sub-markets with the lowest condomínio-to-rent ratios
Premium-Market Analytics (Alto Padrão / Triple-A)
ZAP's premium skew makes it the right portal for high-end research:
- Map "alto padrão" inventory by combining
unitType=PENTHOUSE,minPrice=5_000_000and bairros like Jardins, Vila Nova Conceição, Leblon - Track Triple-A office vacancies along Avenida Faria Lima, Avenida Brigadeiro Faria Lima and Avenida Berrini
- Benchmark developer pricing strategy for Cyrela, EZTec, Tegra, JFL, Even, Tecnisa via lançamento records
- Quantify amenity adoption (rooftop pool, concierge, EV-charging) across premium buildings
- Build "ultra-luxury" feeds filtered to
priceBRL > 10_000_000for private bank wealth-management teams
Journalism, Data Reporting & Public Interest
Brazilian newsrooms (Folha, Estadão, Valor, Piauí, Agência Pública) and international outlets use real-estate data for housing-affordability and gentrification reporting:
- Document price escalation in gentrifying bairros (Vila Madalena, Pinheiros, Botafogo, Gloria, Centro de SP)
- Visualize lançamento concentration by neighborhood and constructor
- Trace developer dominance by joining
constructorCNPJagainst CVM filings - Investigate "sem fiador" rental displacement of traditional fiador-based contracts
- Compare ZAP vs. VivaReal pricing for the same listing using
alsoOnVivaReal
B2B Lead Generation — Selling To Brazilian Imobiliárias
Vendors selling CRM, photography, virtual-tour, mortgage origination, insurance and SaaS to Brazilian agencies use the agency directory to:
- Build an imobiliária prospect list across all 200K+ ZAP-registered agencies
- Segment by tier — target
PREMIUMandSUPER_PREMIUMagencies first - Filter by inventory size (
agencyTotalListings > 100) to find serious operators - Geo-route reps by
agencyServiceAreas - Score lead quality with
agencyVerified,agencyEstablishedYear,agencyBranchCount
Mortgage, Financing & FinTech Origination
Mortgage brokers, financiamento imobiliário FinTechs (CrediHome, MelhorTaxa, Truffi etc.) and FGTS-leverage products need clean listing inventory:
- Score FGTS-eligible apartamentos with
isFGTSEligible: truefor first-buyer marketing - Filter MCMV-eligible inventory (
isMCMVEligible: true) for federal-program lead funnels - Compute LTV scenarios at scale across active inventory
- Identify "isFinancing" friendly sellers for warm-handoff campaigns
Insurance & Underwriting
Residential property insurers and pet/contents insurers use the dataset for:
- Geo-risk modelling by joining
latitude/longitudewith flood, fire and crime risk layers - Building-class underwriting based on
buildingClass,amenities,buildingName - Bulk quote generation against active rental inventory for renter-insurance tie-ins
- Property-replacement-cost estimation using
pricePerSqmBRLbenchmarks
Academic & Public-Policy Research
Universities (USP, FGV, UFRJ, Insper), urban-economics researchers and Brazilian think tanks (Cebrap, IPEA) leverage longitudinal scraped data to:
- Quantify housing affordability by metro / bairro / cohort
- Measure construction pipeline elasticity through lançamento phase tracking
- Study commercial-real-estate vacancy patterns post-pandemic
- Inform urban-planning thesis work at neighborhood granularity
Relocation, Expat & Corporate Mobility
International HR teams and relocation specialists (Cushman & Wakefield, JLL, Crown Relocations) placing executives in Brazil use the dataset to:
- Surface "sem fiador" rentals for foreign hires who can't easily provide a Brazilian guarantor
- Filter premium furnished flats in Itaim Bibi, Vila Olímpia, Pinheiros for short-term stays
- Benchmark monthly cost-of-living packages across SP / RJ / BH / Brasília
- Compare schools-proximity options for family relocations
Sample Queries & Recipes
Recipe 1 — Premium 3-bedroom apartamentos for sale in Pinheiros / Itaim Bibi
{"mode": "listings","business": ["SALE"],"listingType": ["USED"],"usageTypes": ["RESIDENTIAL"],"unitTypes": ["APARTMENT", "PENTHOUSE"],"states": ["SP"],"cities": ["sao-paulo"],"neighborhoods": ["pinheiros", "itaim-bibi", "vila-olimpia"],"minBedrooms": 3,"minParkingSpaces": 2,"minPrice": 1500000,"maxPrice": 6000000,"sortBy": "newest","maxListings": 500}
Recipe 2 — Sem-fiador rentals in Rio de Janeiro
{"mode": "listings","business": ["RENTAL"],"usageTypes": ["RESIDENTIAL"],"states": ["RJ"],"cities": ["rio-de-janeiro"],"neighborhoods": ["copacabana", "ipanema", "leblon", "botafogo"],"semFiador": true,"sortBy": "lowest_price","maxListings": 300}
Recipe 3 — All São Paulo lançamentos this quarter
{"mode": "listings","business": ["SALE"],"listingType": ["DEVELOPMENT"],"usageTypes": ["RESIDENTIAL"],"states": ["SP"],"cities": ["sao-paulo"],"sortBy": "newest","maxListings": 1000}
Recipe 4 — Triple-A office space (sala / conjunto comercial) on Faria Lima
{"mode": "listings","business": ["RENTAL"],"usageTypes": ["COMMERCIAL"],"unitTypes": ["OFFICE", "COMMERCIAL_PROPERTY"],"states": ["SP"],"cities": ["sao-paulo"],"neighborhoods": ["itaim-bibi", "vila-olimpia", "faria-lima"],"minArea": 200,"sortBy": "highest_area","maxListings": 200}
Recipe 5 — Galpões / warehouses in Greater SP for logistics tenants
{"mode": "listings","business": ["SALE", "RENTAL"],"usageTypes": ["COMMERCIAL"],"unitTypes": ["WAREHOUSE_SHED"],"states": ["SP"],"cities": ["sao-paulo", "guarulhos", "osasco", "cajamar"],"minArea": 1000,"maxListings": 500}
Recipe 6 — Discover new imobiliárias by sequential ID scan
{"mode": "agencies","agencyIdRangeStart": 700000,"agencyIdRangeEnd": 705000,"fetchAgencyListings": false,"maxListings": 0}
Recipe 7 — Mirror to VivaReal from the same actor
{"mode": "listings","portal": "VIVA_REAL","business": ["SALE"],"states": ["MG"],"cities": ["belo-horizonte"],"neighborhoods": ["savassi", "lourdes", "funcionarios"],"maxListings": 500}
Integration Examples
Google Sheets
Schedule the actor daily at 7:00 BRT, attach the Apify → Google Sheets integration to the schedule, and your operations team opens a fresh inventory tab every morning — no manual export.
Make.com / Zapier / n8n
The official Apify connector runs on all three platforms. Common workflows:
- New listing in a target neighborhood → Slack notification + CRM record
priceBRLdrops by >5% vs. last run → email alert to a watchlist of investors- New
isLancamento: true→ push to a Notion development tracker - Agency tier upgrade (
STANDARD→PREMIUM) → log to outreach pipeline
Power BI / Tableau / Looker Studio
Connect Apify's REST API (https://api.apify.com/v2/datasets/{id}/items?format=json) as a JSON data source. Auto-refresh on Apify schedule. Build dashboards covering:
- BRL price per m² heatmap by bairro
- Total active inventory by UF
- Average condomínio mensal by building age
- Lançamento pipeline by constructor and delivery year
- Cross-portal duplication rate (ZAP vs. VivaReal)
Postgres / Snowflake / BigQuery
Use Apify webhooks to POST RUN.SUCCEEDED events to a small ingestion endpoint that streams items into your warehouse. The flat output schema maps directly to a single table — no nested-JSON unpacking required.
Salesforce / HubSpot / RD Station / Pipedrive
For agency-mode runs, upsert each agency by agencyId. Trigger Salesforce Lead creation when agencyTier=SUPER_PREMIUM, or RD Station Oportunidade when agencyTotalListings>500.
Webhooks & Event Streams
Apify supports outbound webhooks for RUN.SUCCEEDED, RUN.FAILED, RUN.TIMED_OUT. Wire them to Datadog, PagerDuty or a Slack incident channel for production pipelines.
Major Brazilian Markets Covered
| Metro / Capital | UF | City Slug | Why it matters |
|---|---|---|---|
| São Paulo | SP | sao-paulo | Largest market, premium core (Faria Lima, Jardins, Itaim, Pinheiros, Vila Olímpia, Moema, Brooklin) |
| Rio de Janeiro | RJ | rio-de-janeiro | Iconic Zona Sul (Ipanema, Leblon, Copacabana), Barra da Tijuca, Botafogo |
| Belo Horizonte | MG | belo-horizonte | Mineiro premium (Savassi, Lourdes, Funcionários, Belvedere, Sion) |
| Brasília | DF | brasilia | Federal capital, Asa Sul / Asa Norte / Lago Sul / Sudoeste |
| Salvador | BA | salvador | Northeast hub, Pituba, Barra, Graça, Horto Florestal |
| Curitiba | PR | curitiba | Strong middle-class market, Batel, Água Verde, Bigorrilho |
| Porto Alegre | RS | porto-alegre | Southern capital, Moinhos de Vento, Bela Vista, Petrópolis |
| Recife | PE | recife | Boa Viagem, Pina, Casa Forte premium corridors |
| Fortaleza | CE | fortaleza | Beira-Mar, Meireles, Aldeota — beach-front premium |
| Florianópolis | SC | florianopolis | Beach / lifestyle market, Jurerê Internacional, Lagoa |
| Goiânia | GO | goiania | Setor Bueno, Marista, Jardim Goiás |
| Campinas | SP | campinas | Tech hub, Cambuí, Nova Campinas |
| Vitória | ES | vitoria | Praia do Canto, Jardim Camburi, Mata da Praia |
| Manaus | AM | manaus | Amazonas capital — Adrianópolis, Ponta Negra |
| Niterói | RJ | niteroi | Icaraí, Charitas — across the bay from Rio |
All 26 Brazilian states plus the Federal District are supported via the states parameter (UF codes).
Cost & Performance
| Metric | Value |
|---|---|
| Engine | Direct Glue API via got-scraping — no browser |
| Runtime (200 listings, single city) | 60-120 seconds |
| Runtime (1,000 listings, multi-city) | 4-7 minutes |
| Runtime (agency-mode 5,000 ID scan) | 10-20 minutes (range-dependent) |
| Cost per run | Pay-per-event — varies with record count |
| Pricing model | Pay-per-event (per-record transparency) |
| Data freshness | Live at run time — pulls current ZAP API state |
| Auth required | None (ZAP user account not required) |
| Proxy required | Strongly recommended (Brazilian residential, Apify Proxy default) |
| Concurrency | Default 1, max 5 — keep low to dodge Cloudflare |
| Memory footprint | 256 MB sufficient; 512 MB for large agency-mode scans |
Compliance, Privacy & Legal Notes
- Public data only. Every field this actor extracts is shown to anonymous visitors of
zapimoveis.com.brand the public Glue API surface — no login, no paywall, no scraping of "members-only" content. - No buyer/seller PII. ZAP intentionally redacts buyer/seller identity from public listings. Only agency contact details (CRECI, CNPJ, phone, email, address) — which are themselves regulatory-mandated public information under Brazilian law — appear in the dataset.
- CRECI compliance. Real-estate brokers in Brazil are legally required to display their CRECI registration on every listing; extracting that field reflects regulator intent, not circumvention.
- LGPD (Lei Geral de Proteção de Dados). All data is publicly published commercial information about real estate inventory and licensed real-estate agencies, processed under legitimate interest (Art. 7, IX). Personal data of natural persons (buyer/seller) is not collected. As the data controller of any derived database, you are responsible for downstream LGPD compliance (purpose limitation, retention, subject rights).
- robots.txt deference. ZAP exposes a public robots.txt; the actor respects published search and listing pages and uses the same Glue API the public web app uses.
- No CAPTCHA bypass code is shipped. When the actor encounters a Cloudflare challenge, it backs off and retries on a new residential IP rather than attempting to break the challenge.
- Terms of Service. Users are responsible for their own use of the data, including ZAP's Terms of Service and Grupo OLX policies. Commercial republishing of full listing photos may require licensing.
- GDPR / CCPA. No EU- or California-personal data is collected by design (this is Brazilian-real-estate inventory).
Important: This actor is intended for legitimate research, analytics, prop-tech development, journalism, and lead-generation use cases. It is not intended to facilitate scraping of personal data, evasion of any portal's stated commercial restrictions, or any practice prohibited by Brazilian law.
Frequently Asked Questions
How fresh is the data?
Live at run time. Each run pulls the current state of the Glue API at the moment of execution. There is no caching layer between the actor and ZAP — what you get is what a logged-out visitor sees in their browser right now.
How many records will I get?
Up to your maxListings cap, subject to the actual inventory matching your filters. A single São Paulo city-wide SALE × RESIDENTIAL query routinely exceeds 50,000 matching listings; the actor's maxPages and pageSize cap how deep it paginates per task. For unlimited, set maxListings: 0 and maxPages: 0 — but expect proportional runtime and cost.
Does this require a ZAP Imóveis login or API key?
No. ZAP's Glue API is consumed by the public web client without authentication; the actor uses the same path. You only need an Apify account.
Why do I need a Brazilian residential proxy?
ZAP is fronted by Cloudflare, which aggressively blocks datacenter IPs (especially non-Brazilian ones). The default proxyConfiguration uses Apify Proxy's RESIDENTIAL group with country=BR, which is the most reliable configuration. You can supply your own BR residential proxies if you have them.
What's the difference between this and the VivaReal actor?
VivaReal and ZAP are sibling portals under Grupo OLX sharing the same Glue API backend. This actor lets you flip portal: "VIVA_REAL" to scrape VivaReal from the same code path — but the dedicated VivaReal Brazil Real Estate Scraper is tuned for VivaReal's slightly different metadata defaults and is the recommended option for VivaReal-primary workloads. Use ZAP for premium / alto padrão / lançamento research; use VivaReal for mass-market coverage and broader inventory breadth.
Can I scrape commercial real estate (CRE)?
Yes — set usageTypes: ["COMMERCIAL"] and optionally narrow unitTypes to OFFICE, COMMERCIAL_BUILDING, COMMERCIAL_PROPERTY, BUSINESS, or WAREHOUSE_SHED. ZAP has strong inventory for sala comercial, conjunto comercial and galpão.
Can I scrape lançamentos specifically?
Yes — set listingType: ["DEVELOPMENT"]. The output will include isLancamento: true, launchName, launchPhase, constructorName, constructorCNPJ, deliveryDate and totalUnits.
How do I dedupe against VivaReal?
Records carry alsoOnVivaReal: true and vivaRealId when the same listing is syndicated to both portals. Build a composite key on (listingId, vivaRealId) or use the building+address fingerprint for cross-portal matching.
Can I filter by CEP (zip code)?
Not at API level — ZAP filters by city + neighborhood. Pull broader inventory and apply a zipCode filter post-extraction in SQL or Python.
Can I get phone numbers and emails of property owners?
No. ZAP redacts owner personal data; only agency (imobiliária) contact details are exposed publicly and returned by this actor.
How does pagination work?
The Glue API uses from + size offset pagination. The actor walks each search until either maxPages is reached, maxListings is hit, or the API returns no more records. Each from step equals pageSize (default 24).
What happens if Cloudflare challenges me?
The actor retries up to maxRetries times with backoff (default 3). If you see persistent failures, raise requestDelay to 1500-3000 ms, lower maxConcurrency to 1, or supply higher-quality Brazilian residential proxies.
Can I run this on the Apify free plan?
Yes. Modest runs (a few hundred listings) fit comfortably in free-tier limits. Larger workloads should be on a paid plan to take advantage of higher concurrency and longer run timeouts.
Can I schedule this?
Yes — Apify's built-in Scheduler supports cron-style schedules. Common patterns: hourly for hot-watching specific neighborhoods, daily for full-market refresh, weekly for agency-directory updates.
What export formats are supported?
JSON, JSON Lines, CSV, Excel (XLSX), HTML, XML and RSS — directly from the Apify dataset view or via the REST API.
How do I crawl all imobiliárias in Brazil?
Run mode: "agencies" with agencyIdRangeStart: 1 and agencyIdRangeEnd: 850000. Note this is slow; in production, parallelize across several runs by partitioning the range (e.g. 100K chunks). Set fetchAgencyListings: false first to get just profile metadata.
Will the actor break if ZAP changes their API?
The Glue API has been stable for over two years, but if endpoint shapes drift, raise an issue on the actor's Apify Store page and a patched version is usually shipped within 24-48 hours.
Can I use this data commercially?
This actor is a tool. You — as the data controller — are responsible for ensuring your use complies with ZAP's Terms of Service, LGPD, applicable Brazilian commercial law, and the regulations of any jurisdiction in which you operate.
Can I track price changes over time?
Yes — schedule the actor daily, archive each dataset, and diff priceBRL per listingId over time. Apify retains run datasets indefinitely on most plans.
Related Apify Actors by Haketa
If you're building a multi-market real-estate or LATAM data pipeline, these sibling actors cover adjacent geographies and verticals:
- VivaReal Brazil Real Estate Scraper — sibling Brazilian portal (Grupo OLX), mass-market focus
- Lamudi Philippines Real Estate Scraper — emerging-Asia residential & condo inventory
- Zameen.com Pakistan Real Estate Scraper — South-Asia property data
- Realestate.com.kh Cambodia Scraper — Cambodia / Phnom Penh property inventory
- Realtor.ca Scraper (Canada) — Canadian MLS-syndicated listings
- Immoweb.be Belgium Property Scraper — Belgian residential / commercial market
- Domain.com.au Property Scraper (Australia) — Australian metro property data
- Apartments.com Scraper (US) — US rental inventory
- Rent.com Scraper (US) — US rental inventory alternative
- BBB Business Scraper — North American business directory for B2B enrichment
Comparison vs. Alternatives
| Approach | Setup time | Premium / Lançamento support | Cross-portal (VivaReal) | Cloudflare handling | Schema normalization | Cost (1,000 listings) |
|---|---|---|---|---|---|---|
| This actor | < 1 minute | Full | Built-in via portal switch | Handled (BR residential) | Built-in | A few BRL cents |
| Manual browsing | N/A | Manual | Manual | N/A | None | Free, unscalable |
| Custom Python + Playwright | 2-4 weeks | DIY | DIY | DIY (hard) | DIY | $$$ infra |
| Custom Python + raw HTTP | 1-3 weeks | DIY | DIY | Likely blocked | DIY | $$ infra |
| Paid real-estate data vendor | Days-weeks | Sometimes | Rare | Built-in | Built-in | $1K-10K/mo |
| ZAP partner API | Months (sales cycle) | Yes | Yes | N/A | Built-in | Enterprise contract |
Why Pay-Per-Event Pricing?
This actor uses pay-per-event pricing on the Apify Store rather than a flat monthly fee or unpredictable per-Compute-Unit rate, which means:
- You only pay when the actor actually runs and emits data
- Charges scale with what you consume — sampling 50 records costs pennies
- Transparent line-item billing inside the Apify Console
- No monthly minimums, no commit, no "seat licenses"
- Free to evaluate — run a tiny
maxListings: 25sample before committing - Predictable unit economics for prop-tech apps that bill end-users per query
Changelog
| Version | Date | Notes |
|---|---|---|
| 1.0.0 | 2026-05 | Initial public release — listings + agency modes, ZAP and VivaReal portals, lançamento support, BR residential proxy default, pay-per-event pricing |
Keywords
ZAP Imóveis scraper · ZAP Imoveis data · zapimoveis.com.br scraper · ZAP API alternative · Brazil real estate scraper · Brazil premium real estate scraper · Brasil real estate API · BRL price data Brasil · imóveis Brasil API · São Paulo apartamento scraper · São Paulo imóveis scraper · Rio imóvel data · Rio de Janeiro real estate API · Belo Horizonte imóveis scraper · Brasília imóveis scraper · Salvador real estate data · Curitiba imóveis API · Porto Alegre real estate scraper · Recife imóveis data · Fortaleza real estate data · Florianópolis imóveis scraper · lançamento imobiliário scraper · Cyrela EZTec Tegra lançamento data · sala comercial scraper Brasil · galpão warehouse scraper Brasil · CRE Brasil data · imobiliária CRECI scraper · CNPJ imobiliária Brasil · sem fiador rental scraper · QuintoAndar alternative data · FGTS eligible apartamento data · MCMV Minha Casa Minha Vida scraper · condomínio mensal data · IPTU benchmark data · preço por m² Brasil · Pinheiros Itaim Vila Olímpia scraper · Faria Lima office data · Ipanema Leblon Copacabana rental scraper · Barra da Tijuca property scraper · Jardins Moema Brooklin alto padrão data · Brazil prop-tech API · LATAM real estate data · Apify Brazil scraper · real estate lead generation Brasil · agency CRECI directory Brasil · Grupo OLX real estate data · Cloudflare-bypass real estate scraper · investor research Brazil real estate · BR residential proxy scraper
Support
- Bug reports: Use the Issues tab on the Apify Store page
- Feature requests: Same place — describe your use case and target portal/region
- Direct contact: Reach the developer through the Apify Console developer profile
If this actor saves your team hours of Cloudflare-fighting and pricing-array reconciliation, a 5-star rating on the Apify Store helps other prop-tech, investor and journalist teams discover it. Obrigado!