ZAP Imóveis Scraper avatar

ZAP Imóveis Scraper

Pricing

from $3.00 / 1,000 results

Go to Apify Store
ZAP Imóveis Scraper

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

Haketa

Maintained by Community

Actor stats

0

Bookmarked

13

Total users

5

Monthly active users

17 days ago

Last modified

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.

Apify Actor


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 headersX-Domain, Origin, and Referer must all align to a specific portal or requests are rejected
  • Pricing is split across an arraypricingInfos[] 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 arraysbedrooms, bathrooms, usableAreas, parkingSpaces come back as [3] not 3, 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

  1. Click "Try for free" on the Apify Store page
  2. Pick your states (default SP) and cities (default sao-paulo), choose SALE or RENTAL
  3. Leave the default Brazilian residential proxy enabled (highly recommended)
  4. Hit Start — the first 200 listings land in your dataset in 60-120 seconds

API Run (Python)

from apify_client import ApifyClient
client = 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

EndpointPurposePagination
GET glue-api.zapimoveis.com.br/v2/listingsProperty 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}/listingsAgency listings portfoliofrom / size paginated

Engineering details

  • Direct HTTPS API callsgot-scraping with browser-class TLS fingerprint and rotated UA strings
  • Brazilian residential proxy — defaults to Apify Proxy RESIDENTIAL group with country=BR to evade Cloudflare's geo + ASN heuristics
  • Mandatory header setX-Domain, Origin, Referer aligned to either www.zapimoveis.com.br or www.vivareal.com.br depending on the portal input
  • 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 reconciliationpricingInfos[] is walked to extract sale price, monthly rent, monthly condomínio, yearly IPTU and totalMonthlyCostBRL in one normalized row
  • Array unpackingbedrooms, bathrooms, suites, usableAreas, totalAreas, parkingSpaces are unwrapped from arrays to scalars
  • Lançamento detectionlistingType=DEVELOPMENT records get isLancamento: true along with launchName, launchPhase, constructorName, constructorCNPJ, deliveryDate, totalUnits
  • Sort filter syntax handled — the pricingInfos.businessType='{BUSINESS}' clause needed for price-ordered searches is built automatically
  • Cross-portal flaggingalsoOnVivaReal and vivaRealId are emitted when a listing appears under both portals so you can dedupe downstream
  • Polite by defaultrequestDelay: 800 ms and maxConcurrency: 1 to stay well under Cloudflare's challenge threshold; both are user-tunable
  • Retry-aware — 403/503 / Cloudflare-challenge responses retry up to maxRetries times 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

ParameterTypeDefaultDescription
modestringlistingslistings = property search; agencies = imobiliária directory crawl
portalstringZAPZAP or VIVA_REAL. Both portals share one backend
businessarray<string>["SALE"]SALE (venda), RENTAL (aluguel), or both
listingTypearray<string>["USED"]USED = padrão resale/rental; DEVELOPMENT = lançamentos
usageTypesarray<string>["RESIDENTIAL"]RESIDENTIAL or COMMERCIAL (ZAP is strong in CRE)
unitTypesarray<string>[]Property-type filter — see Unit Type Reference below
statesarray<string>["SP"]2-letter UF codes (SP, RJ, MG, RS, PR, SC, BA, DF, PE, CE...)
citiesarray<string>["sao-paulo"]City slugs in ZAP URL format (lowercase, hyphenated, no accents)
neighborhoodsarray<string>[]Bairro slugs; requires a single city. E.g. ["pinheiros", "itaim-bibi"]
minPrice / maxPriceinteger0Price floor/ceiling in BRL. 0 = open-ended
minArea / maxAreainteger0Area floor/ceiling in m²
minBedroomsinteger0Minimum quartos
minParkingSpacesinteger0Minimum vagas
semFiadorbooleanfalseFilter rentals that don't require a guarantor (QuintoAndar-style)
sortBystringrelevancerelevance, newest, lowest_price, highest_price, lowest_area, highest_area
agencyIdsarray<string>[]Explicit imobiliária IDs (agencies mode)
agencyIdRangeStart / agencyIdRangeEndinteger0Sequential ID-range crawl for agency discovery. IDs go up to ~850000
fetchAgencyListingsbooleanfalseIn agencies mode, also pull each agency's listing portfolio
maxListingsinteger200Hard cap across all tasks. 0 = unlimited
maxPagesinteger20Cap per state/city/business task. Each page ≈ 24 records
pageSizeinteger24Page size (1-50, ZAP default 24)
proxyConfigurationobjectBR ResidentialStrongly recommended: Apify Proxy RESIDENTIAL group, country BR
requestDelayinteger800Inter-request delay in ms (raise if Cloudflare bites)
maxConcurrencyinteger1Parallel tasks (1-5). Keep low to dodge rate limits
maxRetriesinteger3Retries 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

FieldTypeDescription
recordTypestringlisting or agency
listingIdstringZAP-issued listing ID
portalstringZAP or VIVA_REAL
urlstringCanonical listing or agency URL
titlestringListing title as published
descriptionstringFull free-text description
businessstringSALE or RENTAL
listingTypestringUSED or DEVELOPMENT
usageTypestringRESIDENTIAL or COMMERCIAL
unitTypestringZAP UnitType enum (APARTMENT, HOME, OFFICE, etc.)
unitSubTypestringGranular sub-type (e.g. FLAT, LOFT, PENTHOUSE)
categorystringNormalized top-level (residential, comercial, rural, other)
subCategorystringNormalized fine-grained category

Pricing (all BRL)

FieldTypeDescription
priceBRLnumberSale price or monthly rent (depending on business)
rentPeriodstringMONTHLY / DAILY / YEARLY for rentals
condominioMonthlyBRLnumberMonthly condo fee
iptuYearlyBRLnumberAnnual IPTU (municipal property tax)
totalMonthlyCostBRLnumberRent + condomínio + IPTU/12, pre-computed
pricePerSqmBRLnumberBRL per m² (price / usableArea)

Property metrics

FieldTypeDescription
usableAreanumberUsable area in m² (área útil)
totalAreanumberTotal area in m² (área total)
bedroomsintegerQuartos
bathroomsintegerBanheiros
suitesintegerSuítes
parkingSpacesintegerVagas de garagem

Address & geo

FieldTypeDescription
ufstring2-letter state code
citystringMunicípio
neighborhoodstringBairro
zonestringZona (Zona Sul / Zona Oeste / Centro etc.)
streetstringLogradouro
streetNumberstringNúmero
zipCodestringCEP
latitude / longitudenumberGeolocation

Building & amenities

FieldTypeDescription
amenitiesarrayPiscina, academia, sauna, churrasqueira, salão de festas, portaria 24h, etc.
buildingClassstringBuilding classification when published
buildingNamestringEdifício / condomínio name
ceilingHeightnumberCeiling height (m) — relevant for galpão listings
isCommercialCondobooleanTrue for CRE inside a multi-tenant building
zoningstringMunicipal zoning class (if exposed)

Lançamento fields (when isLancamento is true)

FieldTypeDescription
isLancamentobooleantrue for new-development records
launchNamestringProject name (e.g. JK Faria Lima by Cyrela)
launchPhasestringPhase (pre-launch, launched, under-construction, ready)
constructorNamestringBuilder/developer (Cyrela, EZTec, Tegra, JFL, MRV, Eztec...)
constructorCNPJstringDeveloper CNPJ (corporate tax ID)
deliveryDatestringForecast delivery date
totalUnitsintegerTotal units in the project

Brazilian financial flags

FieldTypeDescription
isFiadorFreebooleanTrue when rental does not require a fiador (guarantor)
acceptsExchangebooleanAceita permuta
isFinancingbooleanOwner accepts mortgage financing
isFGTSEligiblebooleanBuyer can use FGTS (severance fund) for down payment
isMCMVEligiblebooleanQualifies for the Minha Casa Minha Vida federal program

Agency / imobiliária

FieldTypeDescription
agencyIdstringZAP-issued imobiliária ID
agencyNamestringImobiliária name
agencyCRECIstringCRECI registration (state realtor licence)
agencyCNPJstringCorporate tax ID
agencyPhonestringPrimary phone
agencyEmailstringPublic email (when exposed)
agencyWebsitestringImobiliária website
agencyAddressstringPhysical office address
agencyLogoUrlstringLogo image URL
agencyTierstringZAP-issued tier (DESTAQUE / SUPER_PREMIUM / PREMIUM / STANDARD)
agencyVerifiedbooleanTier-verified flag
agencyEstablishedYearintegerYear of establishment
agencyTotalListingsintegerTotal active inventory on ZAP
agencyServiceAreasarrayCities/regions served
agencySpecializationsarrayVerticals (lançamento, alto padrão, comercial, rural...)
agencyBranchCountintegerBranch / filial count
publisherTypestringOWNER / AGENCY / DEVELOPER

Media & cross-portal

FieldTypeDescription
publishedAtstringOriginal publish timestamp
updatedAtstringLast update timestamp on ZAP
imageCountintegerPhoto count
thumbnailUrlstringPrimary thumbnail
imageUrlsarrayFull image URL list
videoUrlsarrayVideo URL list
hasVideo / hasFloorplan / hasVirtualTourbooleanMedia flags
listingQualityScoreintegerZAP-issued content-quality score
alsoOnVivaRealbooleanTrue if the same listing is syndicated to VivaReal
vivaRealIdstringSibling VivaReal listing ID for dedupe
searchBusiness / searchState / searchCity / searchNeighborhoodstringThe input filter that produced this record (audit-friendly)
scrapedAtstringISO-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)

unitTypePortuguêsNotes
APARTMENTApartamentoMost common residential type
HOMECasaStandalone house
CONDOMINIUMCasa de condomínioHouse inside gated condominium
PENTHOUSECoberturaTop-floor / duplex penthouse
FLATFlat / apart-hotelHotel-serviced unit
KITNETKitnet / studioStudio apartment
FARMFazenda / sítio / chácaraRural property
LAND_LOTTerreno / loteLand plot
OFFICESala comercialStandalone office
COMMERCIAL_BUILDINGPrédio comercialEntire commercial building
COMMERCIAL_PROPERTYConjunto comercialOffice floor / suite
BUSINESSPonto comercialBusiness / storefront with goodwill
WAREHOUSE_SHEDGalpãoIndustrial warehouse
GARAGEVaga de garagemParking spot

Business + Listing-Type Matrix

business × listingTypeMeans
SALE × USEDResale / secondhand sale (the bulk of inventory)
SALE × DEVELOPMENTLançamento — pre-construction or under-construction sale
RENTAL × USEDStandard rental — long-term or short-term per rentPeriod
RENTAL × DEVELOPMENTRare — pre-leasing in mixed-use developments

Agency Tier reference

TierMeaning
DESTAQUE / SUPER_PREMIUMTop-paying advertisers — surfaced first in search
PREMIUMStandard paid plan with featured listings
STANDARDFree 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 RENTAL listings in the same building or neighborhood
  • Spot stale inventory by monitoring publishedAt vs. 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 portal to add VivaReal coverage from the same actor
  • Dedupe automatically using alsoOnVivaReal + vivaRealId so 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 totalMonthlyCostBRL instead 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_000 and 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_000 for 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 constructorCNPJ against 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 PREMIUM and SUPER_PREMIUM agencies 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: true for 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/longitude with 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 pricePerSqmBRL benchmarks

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
  • priceBRL drops by >5% vs. last run → email alert to a watchlist of investors
  • New isLancamento: true → push to a Notion development tracker
  • Agency tier upgrade (STANDARDPREMIUM) → 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 / CapitalUFCity SlugWhy it matters
São PauloSPsao-pauloLargest market, premium core (Faria Lima, Jardins, Itaim, Pinheiros, Vila Olímpia, Moema, Brooklin)
Rio de JaneiroRJrio-de-janeiroIconic Zona Sul (Ipanema, Leblon, Copacabana), Barra da Tijuca, Botafogo
Belo HorizonteMGbelo-horizonteMineiro premium (Savassi, Lourdes, Funcionários, Belvedere, Sion)
BrasíliaDFbrasiliaFederal capital, Asa Sul / Asa Norte / Lago Sul / Sudoeste
SalvadorBAsalvadorNortheast hub, Pituba, Barra, Graça, Horto Florestal
CuritibaPRcuritibaStrong middle-class market, Batel, Água Verde, Bigorrilho
Porto AlegreRSporto-alegreSouthern capital, Moinhos de Vento, Bela Vista, Petrópolis
RecifePErecifeBoa Viagem, Pina, Casa Forte premium corridors
FortalezaCEfortalezaBeira-Mar, Meireles, Aldeota — beach-front premium
FlorianópolisSCflorianopolisBeach / lifestyle market, Jurerê Internacional, Lagoa
GoiâniaGOgoianiaSetor Bueno, Marista, Jardim Goiás
CampinasSPcampinasTech hub, Cambuí, Nova Campinas
VitóriaESvitoriaPraia do Canto, Jardim Camburi, Mata da Praia
ManausAMmanausAmazonas capital — Adrianópolis, Ponta Negra
NiteróiRJniteroiIcaraí, Charitas — across the bay from Rio

All 26 Brazilian states plus the Federal District are supported via the states parameter (UF codes).


Cost & Performance

MetricValue
EngineDirect 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 runPay-per-event — varies with record count
Pricing modelPay-per-event (per-record transparency)
Data freshnessLive at run time — pulls current ZAP API state
Auth requiredNone (ZAP user account not required)
Proxy requiredStrongly recommended (Brazilian residential, Apify Proxy default)
ConcurrencyDefault 1, max 5 — keep low to dodge Cloudflare
Memory footprint256 MB sufficient; 512 MB for large agency-mode scans

  • Public data only. Every field this actor extracts is shown to anonymous visitors of zapimoveis.com.br and 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.


If you're building a multi-market real-estate or LATAM data pipeline, these sibling actors cover adjacent geographies and verticals:


Comparison vs. Alternatives

ApproachSetup timePremium / Lançamento supportCross-portal (VivaReal)Cloudflare handlingSchema normalizationCost (1,000 listings)
This actor< 1 minuteFullBuilt-in via portal switchHandled (BR residential)Built-inA few BRL cents
Manual browsingN/AManualManualN/ANoneFree, unscalable
Custom Python + Playwright2-4 weeksDIYDIYDIY (hard)DIY$$$ infra
Custom Python + raw HTTP1-3 weeksDIYDIYLikely blockedDIY$$ infra
Paid real-estate data vendorDays-weeksSometimesRareBuilt-inBuilt-in$1K-10K/mo
ZAP partner APIMonths (sales cycle)YesYesN/ABuilt-inEnterprise 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: 25 sample before committing
  • Predictable unit economics for prop-tech apps that bill end-users per query

Changelog

VersionDateNotes
1.0.02026-05Initial 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!