Zap Imóveis & VivaReal listings API (Brazil)
Zap Imóveis & VivaReal Scraper is a pay-per-record Apify Actor by Daemon Data that returns Brazil property listings from Zap Imoveis and VivaReal: price, condo fee, IPTU, area, rooms, coordinates, agency as JSON, CSV or Excel. It costs $0.001 per listing with the default options ($1.00 per 1,000); no login to the source site and no proxy or browser to set up on your side, and the same input runs from the Apify console, one REST call, Python, Node.js, n8n or an AI assistant through MCP.
Daemon Data Zap Imóveis & VivaReal Scraper on Apify Listing as plain text
Output fields
The most useful top-level fields with values from a real record; the full list is id, portal, url, title, business, listingType, priceBrl, rentalPeriod, monthlyCondoFeeBrl, yearlyIptuBrl, pricePerSqmBrl, usableAreaSqm, totalAreaSqm, bedrooms, bathrooms, suites, parkingSpaces, unitTypes, unitSubTypes, usageTypes, unitFloor, floors, constructionStatus, condominiumName, amenities, street, streetNumber, neighborhood, zone, city, state, stateCode, zipCode, latitude, longitude, createdAt, updatedAt, publicationType, advertiserName, advertiserCreci, advertiserId, imageCount, imageUrls, scrapedAt. Per-field notes and the OpenAPI definition are on the Apify API page.
| Field | Type | Example |
|---|---|---|
id | string | "2920089342" |
portal | string | "Zap Imóveis" |
url | string | "https://www.zapimoveis.com.br/imovel/venda-apartamento-4-quartos-c... |
title | string | "Apartamento com 4 Quartos à venda, 153m²" |
business | string | "sale" |
priceBrl | number | 1300000 |
monthlyCondoFeeBrl | number | 2395 |
yearlyIptuBrl | number | 5000 |
pricePerSqmBrl | number | 8496.73 |
usableAreaSqm | number | 153 |
bedrooms | number | 4 |
parkingSpaces | number | 3 |
neighborhood | string | "Santana" |
zone | string | "Zona Norte" |
city | string | "São Paulo" |
Input and how to call it
Example input. Fields and pricing were checked against the public listing on 2026-11-09; this build does not run paid example searches.
{
"locations": [
"São Paulo, SP"
],
"business": "sale",
"portals": [
"zap"
],
"maxResults": 50
}
One HTTP call starts a run, waits for it and returns the records (token from console.apify.com):
curl -X POST "https://api.apify.com/v2/acts/data_daemon~zap-imoveis-vivareal-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"locations": ["São Paulo, SP"], "business": "sale", "portals": ["zap"], "maxResults": 50}'
Python: ApifyClient(token).actor("data_daemon/zap-imoveis-vivareal-scraper").call(run_input=...). Python example · Node.js example · n8n workflow.
AI assistant (MCP): add the remote server https://mcp.apify.com/?tools=data_daemon/zap-imoveis-vivareal-scraper with header Authorization: Bearer YOUR_APIFY_TOKEN in Claude, ChatGPT, Cursor or VS Code and ask for the data in plain words.
All input fields
| Field | Type | Meaning |
|---|---|---|
locations | array | One per line: "City, UF" (e.g. São Paulo, SP, Curitiba, PR, Belo Horizonte, MG) or a state code alone (SC) for the whole state. Capitals and large cities also work without the state. Each location is its own search. City names are matched as the portals spell them, accents included. |
business | string | Listings for sale (sale) or for rent (rent; priceBrl is the rent per rentalPeriod, monthly by default). |
includeShortStays | boolean | Rentals only: also return listings priced per day (temporada / short stays). Off by default, so every rent is monthly. |
portals | array | zap (zapimoveis.com.br), vivareal (vivareal.com.br) or both. Both portals belong to OLX Brasil and read one listing database (1,610 of 1,612 listings were on both in a 31 Oct 2026 test), so one portal is enough; with both selected a listing id is delivered once. |
listingType | string | used: properties listed by owners and agencies (resale and rentals). development: new launches (lançamentos) from developers. both: run both. |
neighborhoods | array | Bairro names as the portals spell them, e.g. Pinheiros, Moema, Copacabana. Each neighborhood is searched in every location. |
propertyTypes | array | Keep only these types: apartment, house, condominium (casa de condomínio), penthouse, flat, studio, land, commercial, office, warehouse, farm, parking, or a raw code such as APARTMENT. Checked on each listing; others are not charged. |
minPrice | integer | Sale price, or monthly rent for rentals. Leave empty for no limit. |
maxPrice | integer | Sale price, or monthly rent for rentals. Leave empty for no limit. |
minBedrooms | integer | Keep listings with at least this many bedrooms. |
minArea | integer | Keep listings with at least this usable area. |
postedWithinDays | integer | Only listings created in the last N days (by the portal's createdAt). With the default newest-first order the run stops reading a search once it reaches older listings. |
sortBy | string | newest (created date, newest first) or relevance (the portal's default order). |
includeImages | boolean | Up to 10 photo URLs per listing in imageUrls. |
maxResultsPerSearch | integer | Cap per location (and neighborhood). 0 = no cap. Searches with more than ~1,000 listings are split into price bands automatically. |
maxResults | integer | Stop after this many saved listings (default 50, about $0.05). 0 = no cap (the run's maximum cost still applies). |
onlyNewSinceLastRun | boolean | Remember delivered listing ids in a key-value store named zap-vivareal-state in your account and skip them next time (not charged). Use with a schedule for a daily new-listings feed. |
stateName | string | Name of the only-new memory. By default it follows portals, sale/rent, locations and neighborhoods, so different feeds don't mix. |
skipIds | array | Listing ids you already have. They are neither saved nor charged. |
Price
$0.001 per listing ($1.00 per 1,000); $0.001 per run. List prices for Apify Free and Starter plans; Scale and Business plans pay 15% to 30% less.
| Event | Price | Per 1,000 | Charged when |
|---|---|---|---|
| Listing | $0.001 | $1.00 | One property listing saved to the dataset: price, condo fee, IPTU, areas, rooms, address with coordinates, created date, agency and CRECI, photos. Listings skipped by only-new mode, skipIds or the filters are never charged. |
| Actor Start | $0.001 | Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). |
Cost example: 50 listings with default options cost $0.051, including any start fee. This is an illustrative record count; set explicit row and total-charge caps for your run. Apify's free plan includes $5 of usage a month, about 5,000 listings before start fees; the Actor's own compute is included in the per-record price, and records skipped by filters, de-duplication or only-new mode are not charged.
Ready-made example pages
Saved inputs you can run with one click on Apify (Examples tab); each has its own page:
- São Paulo apartments for rent listed this week (Zap + VivaReal): Get São Paulo apartment rentals as JSON via API: the newest apartments for rent on Zap Imóveis and VivaReal in the last 7 days, 75 per portal (150 on 1 November 2026, all listed that day: Itaim Bibi, Vila Olímpia, Vila M
{"locations": ["São Paulo, SP"], "business": "rent", "portals": ["zap", "vivareal"], "propertyTypes": ["apartment"], "postedWithinDays": 7, "sortBy": "newest",
Alternatives, honestly
| Option | What it gives you | Where it falls short for this job |
|---|---|---|
| Zap Imóveis and VivaReal websites | Search and alerts for a person | No export; listing pages one at a time |
| Other Zap or VivaReal Actors on Apify Store | Same portals | Compare price per 1,000, condo fee and IPTU fields, both portals in one run and only-new mode |
| Build your own client | Full control | Each search returns at most about 1,000 listings; you split by price and zone and remove duplicates yourself |