Request a tool
All toolsAutomationsGuidesMCP serverRequest a toolPlatformsCategories
VivaReal & ZAP Imóveis Scraper icon

VivaReal & ZAP Imóveis Scraper

Scrape Brazilian real estate listings from VivaReal and ZAP Imóveis: price, condo fee, IPTU, area, rooms, address, coordinates, advertiser and photos.

61 runs on Apify $0.0014 per property ($1.4 / 1,000)
Run this in the cloudRun on Apify →

Developer & Research Tools

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust location, portal, business (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Pricing

$0.0014 per property = $1.4 per 1,000

You are charged forWhenPrice
Property returnedOne property listing returned in the dataset. Diagnostic rows and the labelled sample row are not charged.$0.0014

Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-09-20, and they are what you are actually charged.

Inputs

FieldWhat it doesType
locationA Brazilian city or neighbourhood, written the way it is written there: "Pinheiros, São Paulo", "Copacabana, Rio de Janeiro", "Curitiba", "Balneário Camboriú". The portal's own place lookup decides the match, and the run log tells you which one it picked.string
portalVivaReal and ZAP Imóveis run on one shared listing index, so both return the same properties. This only decides which site the listing URL points at, and the order results come back in.string
businessSale (venda) or rental (aluguel). Rental rows also carry the monthly total with condo fee and IPTU added.string
listingTypeUSED is the ordinary resale market. DEVELOPMENT is new-build launches (lançamentos), a much smaller pool, a few thousand nationally rather than millions.string
maxItemsHard cap on rows across every search in this run (1–5000). You are charged per listing returned. Sample and diagnostic rows are never charged.integer
startUrlsPaste search pages or single listing pages from either portal. A search page works best when it still carries its "?onde=" parameter, that is where the portal keeps the place id. A single listing page must end in -id-{number}/.array
unitTypesLeave empty for everything. These are the portal's own codes.array
bedroomsMinMinimum number of bedrooms (quartos).integer
bathroomsMinMinimum number of bathrooms (banheiros).integer
parkingMinMinimum number of parking spaces (vagas).integer
priceMinSale price, or monthly rent when you are searching rentals.integer
priceMaxSale price, or monthly rent when you are searching rentals.integer
areaMinMinimum área útil in square metres.integer
areaMaxMaximum área útil in square metres.integer
locationIdsFor repeat runs where you already know the exact place. These look like BR>Sao Paulo>NULL>Sao Paulo>Zona Oeste>Pinheiros and appear in the run log whenever a location is resolved. Using them skips the place lookup and guarantees the same area every time.array

What you get

A structured dataset — each result includes fields like:

imageUrltitlepricecondoFeeiptuusableAreabedroomsbathroomsparkingSpacesneighborhoodcitystateAcronymadvertiserTypeadvertiserNameupdatedAturllistingId

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

Related tools in Developer & Research Tools

Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.

GitHub Scraper iconDeveloper & Research Tools

GitHub Scraper

Search GitHub repos and users: stars, forks, language, topics, licence, plus user bio, company and followers. No token needed. $0.90 per 1,000 rows.

18 use cases

Stack Overflow / Stack Exchange Scraper iconDeveloper & Research Tools

Stack Overflow / Stack Exchange Scraper

Search Stack Overflow and Stack Exchange by keyword or tag. Score, answer count, views, reputation and body text. $2 per 1,000 questions.

2 use cases

Package Registry Scraper (npm + PyPI) iconDeveloper & Research Tools

Package Registry Scraper (npm + PyPI)

Get npm and PyPI package metadata as JSON. Version, license, author, repo, keywords and npm monthly downloads. $2 per 1,000 packages.

2 use cases

arXiv Scraper iconDeveloper & Research Tools

arXiv Scraper

Search arXiv papers by title, author, abstract or category. Get full abstracts, authors, categories, DOI, dates and PDF links. $2 per 1,000 papers.

2 use cases

OpenAlex Scholarly Works Scraper iconDeveloper & Research Tools

OpenAlex Scholarly Works Scraper

Search 250M+ OpenAlex papers with no API key. Get titles, authors, venue, year, citations, DOI, OA links and full abstracts. $2.00 per 1,000 papers.

2 use cases

Crossref Scholarly Works Scraper iconDeveloper & Research Tools

Crossref Scholarly Works Scraper

Search 150M+ papers on Crossref: DOI, title, authors, journal, publisher, date, citations and abstract. No API key. $1.00 per 1,000 works.

2 use cases

See all Developer & Research Tools →

VivaReal and Zap Imóveis Scraper: Brazilian property listings with price, fees and area

Name a Brazilian city or neighbourhood and get one row per listing: the asking price, the condo fee, the IPTU, usable and total area, bedrooms, bathrooms, suites, parking, the address down to the postcode, amenities, who is advertising it, their phone and WhatsApp, and every photo.

The two portals run on one shared listing index, so both return the same properties. Choosing between them only sets which site the url points at, and the order results come back in.

InputA Brazilian city or neighbourhood, or portal URLs
OutputOne row per listing
Ceiling5,000 listings per run, 1,500 per search
Account neededNone, and no API key
Price$1.40 per 1,000 listings, flat on every plan

🏠 What this scraper does

Write the place the way it is written in Brazil: "Pinheiros, São Paulo", "Copacabana, Rio de Janeiro", "Curitiba", "Balneário Camboriú". The portal's own place lookup decides the match, and the run log tells you which one it picked, along with the exact location id it resolved to.

Keep that id for repeat runs. It looks like BR>Sao Paulo>NULL>Sao Paulo>Zona Oeste>Pinheiros, and putting it in Portal location ids skips the lookup and guarantees the same area every time. Place names drift, ids do not.

Sale or rental, resale or new development. Rental rows also carry the monthly total with the condo fee and IPTU added on. New developments (lançamentos) are a far smaller pool, a few thousand nationally rather than millions.

One search reaches 1,500 listings. The portal stops paging there whatever its own count says. The log tells you when a search hit that wall, and splitting by neighbourhood or price band is how you get past it.

📥 What you give it

{
  "location": "Pinheiros, São Paulo",
  "portal": "vivareal",
  "business": "SALE",
  "listingType": "USED",
  "unitTypes": ["APARTMENT"],
  "bedroomsMin": 2,
  "priceMax": 1500000,
  "maxItems": 200
}
FieldDefaultWhat it is
locationnone, box starts at Pinheiros, São PauloA city or neighbourhood, in Brazilian spelling.
portalvivarealvivareal or zap. Decides the link target and the result order, not which properties you get.
businessSALESALE for venda, RENTAL for aluguel.
listingTypeUSEDUSED for the resale market, DEVELOPMENT for new-build launches.
maxItems100Rows across every search in the run, up to 5,000.
startUrlsnoneSearch pages or single listing pages from either portal. A search page works best while it still carries its ?onde= parameter, which is where the place id lives. A single listing must end -id-<number>/.
unitTypesnone, meaning everythingThe portal's own codes, from APARTMENT and HOME through FARM and PARKING_SPACE.
bedroomsMin, bathroomsMin, parkingMinnoneMinimum quartos, banheiros and vagas, 1 to 10.
priceMin, priceMaxnoneSale price, or monthly rent when you are searching rentals.
areaMin, areaMaxnoneUsable area (área útil) in square metres.
locationIdsnonePortal place ids, as described above.
proxyConfigurationnoneOptional. Leave it alone unless the run needs to go out through a network of your own.

📤 What you get back

A real row from a recent run, with the description and the photo list cut short:

{
  "listingId": "2814207417",
  "portal": "VivaReal",
  "url": "https://www.vivareal.com.br/imovel/apartamento-2-quartos-pinheiros-zona-oeste-sao-paulo-com-garagem-85m2-venda-RS2650000-id-2814207417/",
  "title": "Apartamento com 2 quartos à venda e para alugar em Pinheiros, São Paulo",
  "description": "Unidade disponível em um dos empreendimentos mais sofisticados de São Paulo...",
  "businessType": "SALE",
  "listingType": "USED",
  "propertyType": "UNIT",
  "unitTypes": ["APARTMENT"],
  "usageTypes": ["RESIDENTIAL"],
  "currency": "BRL",
  "price": 2650000,
  "rentalTotalPrice": null,
  "rentalPeriod": null,
  "condoFee": 2060,
  "iptu": null,
  "iptuPeriod": "YEARLY",
  "usableArea": 85,
  "totalArea": 85,
  "bedrooms": 2,
  "bathrooms": 2,
  "suites": 2,
  "parkingSpaces": 2,
  "unitFloor": null,
  "amenities": [],
  "street": null,
  "streetNumber": null,
  "neighborhood": "Pinheiros",
  "zone": "Zona Oeste",
  "city": "São Paulo",
  "state": "São Paulo",
  "stateAcronym": "SP",
  "zipCode": "05414020",
  "fullAddress": "Rua Francisco Leitão Pinheiros  São Paulo SP",
  "latitude": null,
  "longitude": null,
  "advertiserType": "agency",
  "advertiserName": "Cobens Negócios De Bens Móveis E Imóveis Ltda",
  "advertiserId": "cef4b87e-6256-8bb2-b798-cf23e10cd883",
  "advertiserLicense": null,
  "advertiserTier": "diamond",
  "phones": ["11944822247"],
  "whatsapp": "11944822247",
  "publicationType": "STANDARD",
  "status": "ACTIVE",
  "imageUrl": "https://resizedimgs.vivareal.com/img/vr-listing/439a18da.../imovel.jpg?action=fit-in&dimension=870x653",
  "imageCount": 30,
  "images": ["https://resizedimgs.vivareal.com/img/vr-listing/439a18da.../imovel.jpg?...", "..."],
  "createdAt": "2025-06-14T19:02:35.799Z",
  "updatedAt": "2026-08-22T05:00:44.261Z",
  "searchLocation": "Pinheiros, São Paulo, São Paulo",
  "position": 1,
  "scrapedAt": "2026-09-20T02:35:14.803Z"
}
FieldWhat it is
priceThe asking price on a sale, the monthly rent on a rental.
rentalTotalPriceRental rows only: the monthly figure with the condo fee and IPTU added.
condoFee, iptu, iptuPeriodThe monthly condo charge and the property tax, with the period the tax is quoted for.
usableArea, totalAreaÁrea útil and the total, in square metres.
street, streetNumber, latitude, longitudeFilled only where the advertiser published them. Plenty leave the exact address off, and then fullAddress is as precise as it gets.
advertiserType, advertiserTierAgency or private seller, and the advertiser's rank on the portal.
phones, whatsappThe contact numbers on the listing. See the legal note below.
createdAt, updatedAtWhen the listing went up and when the advertiser last touched it. updatedAt is the one worth sorting on.
images, imageCountEvery photo the listing carries. 30 on this one.

🧾 Reading the output

RowHow to spot itCharged
A listing_sample and _diagnostic both absentyes
The sample row_sample: trueno
A diagnostic_diagnostic: true and an errorCodeno

Run it with no location, no id and no URL and you get the one sample row. Every diagnostic carries a message and a hint next to its code.

CodeWhat it means
LOCATION_NOT_FOUNDThe portal does not recognise that place. Try the Brazilian spelling with the city attached.
LOCATION_LOOKUP_FAILEDThe place lookup itself did not answer. Usually temporary.
NO_LOCATIONNo place could be read out of a pasted URL. Use Where to search, or paste a URL that still has its onde= parameter.
URL_NOT_RECOGNISEDNot a VivaReal or Zap Imóveis address.
LISTING_NOT_FOUNDThat listing has left the index. Advertisers take them down and properties sell.
NO_RESULTSNothing matched. Widen the price or area range, drop a filter, or search the city rather than the neighbourhood.
BAD_FILTERSThe portal rejected that combination of filters.
PAGE_OUT_OF_RANGEThe search does not go that deep. Split it into neighbourhoods or price bands.

One bad search never stops the others, and a diagnostic row never fails the run.

▶️ How to run it

1. Open VivaReal and Zap Imóveis Scraper and click Try for free. 2. Type a city or neighbourhood into Where to search. 3. Pick For sale or to rent, then add filters like Bedrooms, at least or Price up to. 4. Set Maximum listings, then click Start. 5. Download the dataset as JSON, CSV or Excel, or read it from the Apify API.

💰 How much does it cost?

$1.40 per 1,000 listings. Flat on every Apify plan, no volume tiers.

You pay per listing row delivered. Diagnostic rows, a place the portal cannot find, a search that matches nothing, a listing that has left the index, and the sample row are all free.

💡 What people use it for

  • Tracking asking prices in a neighbourhood week by week and diffing on listingId.
  • Working out the real monthly cost of a rental, since rentalTotalPrice already has the condo fee

and IPTU in it.

  • Building a price-per-square-metre picture from price and usableArea across a city.
  • Watching new-build launches by switching Resale or new development to DEVELOPMENT.
  • Seeing which agencies hold the stock in an area, from advertiserName and advertiserTier.

🚧 What it does not do

  • 1,500 listings per search. The portal stops paging there. Split by neighbourhood or price band

to go deeper.

  • No sold prices and no history. Live listings only, and price is what is being asked today.
  • Exact addresses and coordinates are often missing, because the advertiser chose not to publish

them.

  • The two portals share one index, so running both does not get you more properties.
  • Amenities come from the advertiser, so two identical flats can list different ones.
  • Department-style browse pages are not the input. Use a place name, a place id, a search page

with onde=, or a listing page ending -id-<number>/.

  • Brazil only, in Portuguese and in reais.

🧭 Which property scraper do you need?

If you wantUse
Brazilian listings with fees, area and advertiserThis one
Brazilian classified ads, property includedOLX Brazil Scraper
US property details from ZillowZillow Property Details Scraper
Spanish and Portuguese listings on IdealistaIdealista Scraper

❓ Questions people ask

Do I need an account on either portal? No. No login, no API key.

Which portal should I choose? Whichever link you would rather click. The properties are the same; only the url and the ordering change.

How do I make repeat runs hit exactly the same area? Run it once, copy the location id out of the run log, and put it into Portal location ids from then on.

Why is the address incomplete? Because the advertiser left it that way. Many listings publish the neighbourhood and the street but not the number, and some publish no coordinates at all.

How do I get more than 1,500 from one city? Split it. Run each neighbourhood, or the same neighbourhood in price bands.

Is scraping these portals legal? These are public listing pages, but the rows carry advertiser names, phone numbers and WhatsApp numbers, which is personal data under Brazil's LGPD and under GDPR if you are in Europe. Have a lawful reason before you collect or contact, and read each portal's terms. Apify's write-up on scraping and the law is a starting point, and we are not lawyers.

🆘 If something breaks

Open the Issues tab on the actor page. Send the run ID and the location or URL you used. The errorCode on the diagnostic row usually names the problem on its own.