ZAP Imóveis Scraper
Pricing
from $1.59 / 1,000 listings
ZAP Imóveis Scraper
Scrape property listings from ZAP Imóveis and VivaReal: prices, condomínio, IPTU, bedrooms, area, location, amenities, lançamentos, and seller contacts. No browser required.
Pricing
from $1.59 / 1,000 listings
Rating
0.0
(0)
Developer
ParseBird
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
ZAP Imóveis Scraper
ZAP Imóveis Scraper extracts property listings from ZAP Imóveis and VivaReal — Brazil's two largest real estate portals, both run on the same Grupo OLX backend — without a browser or a single line of scraping code.
| Search by business type, listing type, usage type, unit type, state, city, and neighborhood — get price, condomínio, estimated IPTU, area, bedrooms, amenities, lançamento (new development) details, and seller contact, ready for analysis, lead generation, or market monitoring. |
Copy to your AI assistant
Use the Apify Actor "parsebird/zap-imoveis-scraper" (ZAP Imóveis Scraper) to extract property listings from zapimoveis.com.br and vivareal.com.br. Call it with the ApifyClient: `from apify_client import ApifyClient; client = ApifyClient("<APIFY_TOKEN>"); run = client.actor("parsebird/zap-imoveis-scraper").call(run_input={"portal": "ZAP", "business": ["SALE"], "listingType": ["USED"], "usageTypes": ["RESIDENTIAL"], "states": ["SP"], "cities": ["sao-paulo"], "neighborhoods": ["Pinheiros"], "maxListings": 100})`. Key inputs: portal (ZAP/VIVA_REAL), business (array: SALE/RENTAL), listingType (array: USED/DEVELOPMENT for lançamentos), usageTypes (RESIDENTIAL/COMMERCIAL), unitTypes (array, e.g. APARTMENT/HOME/PENTHOUSE), states (array of 2-letter UF codes), cities/neighborhoods (arrays of free-text names), minPrice/maxPrice (BRL integers), minArea/maxArea (m², applied client-side), minBedrooms/minParkingSpaces (integers), guarantorFreeOnly (boolean, rental only), sortBy (relevance/newest/lowest_price/highest_price/lowest_area/highest_area), maxListings (0 = unlimited), and proxyConfiguration (Brazil residential proxy recommended). Output is one JSON object per listing with listingId, portal, url, title, business, priceBRL, condominioMonthlyBRL, iptuMonthlyEstimateBRL, usableArea, bedrooms, uf/city/neighborhood, latitude/longitude, amenities, isLancamento fields, advertiserId/advertiserPhones, imageUrls, and more. Full API spec: https://apify.com/parsebird/zap-imoveis-scraper/api. Get an API token at https://console.apify.com/account/integrations.
What does ZAP Imóveis Scraper do?
ZAP Imóveis Scraper is a ZAP Imóveis and VivaReal API alternative that calls the shared Grupo OLX search backend directly — no Puppeteer, no Playwright, no headless Chrome. It returns structured data for sale and rental listings: price, condomínio, estimated IPTU, address and GPS coordinates, bedrooms/bathrooms/suites/parking, usable and total area, amenities, publication tier, seller phone numbers, and photo galleries.
- 🏠 Search sale (venda) and rental (aluguel) listings, both used/resale and lançamentos (new developments/pre-construction)
- 🏢 Filter by residential or commercial usage, and by 14 unit types (apartamento, casa, cobertura, sala comercial, galpão, and more)
- 📍 Search any Brazilian state, city, or neighborhood (bairro)
- 💰 Filter by price, area, bedrooms, and parking spaces — and keep only guarantor-free rentals (
guarantorFreeOnly, based on the accepted rental warranty types) - 🏗️ Lançamento-specific fields: construction phase, developer name, estimated delivery date, and units available
- 🔀 Detects when a listing is cross-listed on both ZAP Imóveis and VivaReal
- 📊 Runs on the Apify platform: schedule recurring runs, trigger via API or webhook, and export results as JSON, CSV, Excel, or HTML
What data can you extract from ZAP Imóveis and VivaReal?
| Field | Description |
|---|---|
listingId / url | Stable listing ID and canonical listing URL |
title / description | Listing title and marketing description |
priceBRL / condominioMonthlyBRL | Asking price or monthly rent, and condomínio fee (BRL) |
iptuMonthlyEstimateBRL / totalMonthlyCostBRL | Estimated IPTU and total monthly cost (rentals) |
usableArea / totalArea | Usable and total area (m²) |
bedrooms / bathrooms / suites / parkingSpaces | Room counts |
uf / city / neighborhood / zone / latitude / longitude | Location and GPS coordinates |
amenities / buildingName | Building/condomínio amenities and name |
isLancamento / constructorName / launchPhase | New-development details |
advertiserId / advertiserPhones | Seller/agency contact |
imageUrls / imageCount | Photo gallery |
alsoOnOtherPortal | Whether the same listing is syndicated across ZAP and VivaReal |
How to scrape ZAP Imóveis and VivaReal
- Open ZAP Imóveis Scraper in the Apify Console and click Try for free.
- Set
portal(ZAP or VIVA_REAL),business(e.g.SALE), and location —states,cities, and optionallyneighborhoods. - Optionally narrow results with
unitTypes,minPrice/maxPrice,minArea/maxArea,minBedrooms,minParkingSpaces, orguarantorFreeOnly(rentals). - Set
maxListingsto cap how many listings to collect, and click Start. - Download results as JSON, CSV, or Excel from the Storage tab, or pull them via the Dataset API.
How much does it cost to scrape ZAP Imóveis?
ZAP Imóveis Scraper uses pay-per-event pricing — you only pay for listings actually returned, no compute-unit math required.
| Plan | Price per listing | Price per 1,000 listings |
|---|---|---|
| Free | $0.00189 | $1.89 |
| Bronze | $0.00179 | $1.79 |
| Silver | $0.00169 | $1.69 |
| Gold | $0.00159 | $1.59 |
Example: collecting 1,000 apartment listings for sale in São Paulo costs $1.89 on the Free plan. New Apify accounts include free platform usage credit that covers testing this Actor.
Input / Output
The input schema exposes every filter above through the Apify Console UI, or as JSON via the API — no need to hand-craft ZAP Imóveis search URLs.
{"portal": "ZAP","business": ["SALE"],"listingType": ["USED"],"usageTypes": ["RESIDENTIAL"],"states": ["SP"],"cities": ["sao-paulo"],"neighborhoods": ["Pinheiros"],"maxListings": 100}
Output — one JSON object per listing:
{"recordType": "listing","listingId": "2814207417","portal": "ZAP","url": "https://www.zapimoveis.com.br/imovel/2814207417/","title": "Apartamento com 2 quartos à venda e para alugar em Pinheiros, São Paulo","business": "SALE","priceBRL": 2650000,"condominioMonthlyBRL": 2060,"pricePerSqmBRL": 31176.47,"usableArea": 85,"bedrooms": 2,"parkingSpaces": 2,"uf": "SP","city": "São Paulo","neighborhood": "Pinheiros","latitude": -23.563579,"longitude": -46.691607,"isLancamento": false,"advertiserPhones": ["11944822247"],"imageCount": 30}
Results can be downloaded as JSON, CSV, Excel, or HTML from the Storage tab, or fetched via the Apify API.
Python
from apify_client import ApifyClientclient = ApifyClient("<APIFY_TOKEN>")run = client.actor("parsebird/zap-imoveis-scraper").call(run_input={"portal": "ZAP","business": ["SALE"],"states": ["SP"],"cities": ["sao-paulo"],"neighborhoods": ["Pinheiros"],"maxListings": 100,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["title"], item["priceBRL"])
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<APIFY_TOKEN>' });const run = await client.actor('parsebird/zap-imoveis-scraper').call({portal: 'ZAP',business: ['SALE'],states: ['SP'],cities: ['sao-paulo'],neighborhoods: ['Pinheiros'],maxListings: 100,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Use cases
- Market research — track average price per m² by neighborhood or city over time.
- Lead generation — pull seller phone numbers for a target neighborhood and price range.
- Lançamento tracking — monitor new developments by developer, delivery date, or construction phase.
- Rental hunting — filter guarantor-free rentals (
guarantorFreeOnly) for renters without a fiador. - Portfolio monitoring — re-run on a schedule to catch new listings matching your investment criteria.
- Feed a PropTech app — combine with Data Deduplicator to keep a clean, de-duplicated property feed.
Is it legal to scrape ZAP Imóveis and VivaReal?
Yes. ZAP Imóveis Scraper only collects publicly available listing data, the same information any visitor sees on ZAP Imóveis or VivaReal. Scraping publicly accessible data is generally legal, but you're responsible for complying with the target site's terms of service and applicable data protection laws (such as Brazil's LGPD) for your specific use case. See Apify's blog post on the legality of web scraping for more detail.
Related Actors
- Imovelweb Scraper — property listings from Imovelweb.com.br, Brazil's other major real estate portal
- Data Deduplicator — remove duplicate listings across multiple scraper runs
- HTTP Request Actor — call any REST API from your Apify workflow
FAQ
How fresh is the data? Every run fetches live data directly from the ZAP Imóveis/VivaReal backend at the time it executes — nothing is cached.
What's the difference between ZAP Imóveis and VivaReal here?
Both portals are run by Grupo OLX and share the same search backend. Set portal to ZAP or VIVA_REAL to control which brand's listing URLs and headers are used; the alsoOnOtherPortal output field tells you when a listing is syndicated to both.
Does this cover rentals and new developments, not just resale sales?
Yes. Set business to RENTAL for aluguel, and listingType to DEVELOPMENT for lançamentos (pre-construction/under-construction developments).
Why do states and cities behave as a cross-product?
Every combination of states × cities × neighborhoods is searched. If you provide states: ["SP", "RJ"] and cities: ["sao-paulo", "rio-de-janeiro"], mismatched combinations (e.g. SP + Rio de Janeiro) simply return zero results — no error, just wasted requests. For independent city/state pairs, run separate Actor calls.
Why does a city name sometimes return zero results?
The search API matches on the full accented Portuguese state/city name (e.g. "São Paulo"), not a 2-letter code or URL slug. 60+ major municipalities are normalized automatically from common slugs (sao-paulo, rio-de-janeiro, etc.); for an unrecognized city, provide the full accented name directly.
Can I schedule recurring runs? Yes. Use Apify's built-in Scheduler to run daily, weekly, or at any interval, and trigger downstream automations via webhooks.
Can I access this via API instead of the Console? Yes — every input field is available through the Apify API, with client libraries for Python, JavaScript/Node.js, and more.
Found a bug or missing field? Please open an issue on the Actor's Issues tab — feedback is reviewed regularly and helps prioritize fixes.