L logiover
real-estate · Jun 1, 2026 · 9 min read

How to Scrape VivaReal Brazil Real Estate Listings (2026)

Scrape VivaReal imóveis for sale or rent across Brazil — price, condo fee, IPTU, area, bedrooms, geolocation, photos and agent — at scale, with no login or account risk.

If you want to scrape VivaReal at scale, you are reaching for one of the largest property datasets in Latin America. VivaReal (vivareal.com.br) is part of Grupo OLX / ZAP Imóveis, the dominant real-estate portal network in Brazil, and it carries hundreds of thousands of active imóveis — apartments, houses, land and commercial units — across every major metro from São Paulo to Recife. This guide covers what that data is worth, how the scraper’s two input modes work, how pagination caps behave, the exact output fields you get back, and the use cases that justify pulling it.

Why Brazilian real-estate data is worth scraping

Brazil’s housing market is huge, fragmented and almost entirely Portuguese-language, which means most international proptech and analytics tooling simply ignores it. That gap is the opportunity. A clean, structured feed of VivaReal listings lets you do things the portal’s own UI will never let you do: compute price-per-m² distributions by neighborhood, track how long inventory sits, benchmark condo fees and IPTU (the municipal property tax) across zones, or assemble a labelled dataset for a price-prediction model.

The portal exposes a lot more than a headline price. Each listing carries the monthly condo fee, the IPTU, usable and total area in m², room counts, geolocation down to lat/lng, the full photo set, and — critically for lead generation — the advertising agent or agency with their CRECI license number and phone. That advertiser block is what turns a market-research scrape into a B2B prospecting list of active brokers.

A few structural facts make VivaReal a good scraping target:

  • No login, no cookies, no API key. The scraper reads public listing data, so there is no account to get restricted and nothing to expire or rotate.
  • No headless browser. It hits the portal’s data layer directly over Brazil residential proxies rather than driving Chromium, so it stays fast and cheap even across thousands of listings.
  • Coverage of both sale and rent, and both resale (USED) and new launches (DEVELOPMENT), so you can model the whole market rather than one slice.

Run the VivaReal Scraper — every imóvel with price, condo fee, IPTU, area, bedrooms, geo, photos and agent, across all of Brazil. No login, no ban risk. $5 per 1,000 listings.

The scraper accepts input in two modes, and you can pick whichever fits your workflow.

URL mode

The simplest path: filter listings the way you want on vivareal.com.br in your browser, copy the resulting URL, and drop it into searchUrls. The scraper auto-derives the location, operation (sale vs rent), property type and price band straight from the URL — you don’t have to re-specify anything.

{
  "searchUrls": [
    "https://www.vivareal.com.br/venda/sp/sao-paulo/apartamento_residencial/",
    "https://www.vivareal.com.br/aluguel/rj/rio-de-janeiro/casa_residencial/"
  ],
  "maxResults": 2000
}

Note the URL grammar: /venda/ means for sale and /aluguel/ means for rent, followed by the state acronym (sp, rj), the city slug, and the property type. You can pass several URLs in one run to combine cities, neighborhoods or price bands into a single market-wide dataset.

Builder mode

If you’d rather not hand-craft URLs, fill the builder fields and the scraper assembles the query for you.

FieldTypeDescription
operationTypeenumSALE (buy) or RENTAL (rent).
listingTypeenumUSED (resale) or DEVELOPMENT (new launch).
propertyTypeenumAll / Apartment / House / Land / Commercial / Farm / Penthouse.
citystringCity in Portuguese, e.g. São Paulo, Rio de Janeiro.
statestringState in Portuguese (optional, improves accuracy).
locationIdstringAdvanced: exact VivaReal locationId to target a single neighborhood.
minPrice / maxPriceintegerPrice band in BRL.
minBedroomsintegerMinimum bedrooms.
maxResultsintegerCap on listings collected (default 1000).
proxyConfigurationobjectKeep the default Apify Proxy · RESIDENTIAL · country BR.

A typical builder run targeting two-bedroom resale apartments in São Paulo in the R$300k–600k band:

{
  "operationType": "SALE",
  "listingType": "USED",
  "propertyType": "APARTMENT",
  "city": "São Paulo",
  "state": "São Paulo",
  "minPrice": 300000,
  "maxPrice": 600000,
  "minBedrooms": 2,
  "maxResults": 500,
  "proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "BR" }
}

The locationId field is the power-user lever: it lets you target one neighborhood precisely rather than relying on a city-wide search, which matters when you’re building comparables for a specific area.

Pagination and the result-depth cap

Like most large portals, VivaReal does not let a single search query page infinitely. A single search returns up to roughly 1,476 listings before the portal cuts off result depth. That is a property of VivaReal, not the scraper — every tool faces the same ceiling.

The way around it is segmentation. Because each search segment paginates independently, you collect thousands of listings per run by splitting a broad query into narrower ones: multiple cities, multiple neighborhoods, or a series of price bands that each stay under the cap. Want all apartments in São Paulo? Don’t run one query — run a sequence of price bands (R$0–300k, R$300k–600k, R$600k–1M, and so on), each of which returns its own full page set. The scraper paginates every segment to the portal’s depth limit automatically.

This is also why the URL mode is convenient for big jobs: you can pre-build a list of segment URLs and feed them all in at once via searchUrls.

Sale and rent coverage

The scraper handles both operation types and both listing types in the same engine:

  • SALE — properties for purchase. Pairs with /venda/ URLs.
  • RENTAL — properties for rent. Pairs with /aluguel/ URLs.
  • USED — resale stock from the existing market.
  • DEVELOPMENT — new launches / off-plan developments straight from incorporators.

You set operationType in builder mode, or just use the right URL prefix in URL mode. Rental listings carry the same field set as sale listings, with the price field representing monthly rent rather than purchase price, and condoFee / iptu still populated where the advertiser disclosed them.

Output: exact fields you get back

Every listing comes back as one dataset record. Here is a realistic example record (fields exactly as the actor emits them):

{
  "id": "2718283450",
  "title": "Apartamento a venda com 65m², 2 dormitórios e 1 vaga no Cambuci",
  "operationType": "SALE",
  "listingType": "USED",
  "propertyType": "APARTMENT",
  "unitSubTypes": ["UnitSubType_NONE"],
  "price": 595000,
  "condoFee": 441,
  "iptu": 890,
  "yearlyIptu": 890,
  "currency": "BRL",
  "bedrooms": 2,
  "bathrooms": 1,
  "suites": 0,
  "parkingSpaces": 1,
  "usableAreaM2": 65,
  "totalAreaM2": null,
  "address": {
    "street": "Rua Dona Ana Neri",
    "streetNumber": "581",
    "neighborhood": "Cambuci",
    "zone": "Centro",
    "city": "São Paulo",
    "state": "São Paulo",
    "stateAcronym": "SP",
    "zipCode": "01522000",
    "fullAddress": "Rua Dona Ana Neri Cambuci São Paulo SP"
  },
  "lat": -23.559503,
  "lng": -46.615471,
  "amenities": ["Piscina", "Academia", "Churrasqueira"],
  "description": "Excelente apartamento...",
  "advertiser": {
    "name": "Santucci Broker Negócios Imobiliários",
    "licenseNumber": "31016-J-SP",
    "phone": "11999782608",
    "logo": null
  },
  "images": ["https://resizedimgs.vivareal.com/img/vr-listing/.../crop.jpg?..."],
  "videoTourLink": "https://my.matterport.com/show/?m=XTbnhrm",
  "url": "https://www.vivareal.com.br/imovel/apartamento-2-quartos-cambuci-...-id-2718283450/",
  "listingUrl": "https://www.vivareal.com.br/imovel/...-id-2718283450/",
  "portal": "GRUPOZAP",
  "publicationType": "PREMIUM",
  "createdAt": "2024-05-29T20:07:12.572Z",
  "updatedAt": "2026-05-12T10:31:57.638Z",
  "scrapedAt": "2026-06-04T00:00:00.000Z"
}

Field reference

FieldDescription
idVivaReal listing ID — your stable join key across runs.
titleListing headline (in Portuguese).
operationTypeSALE or RENTAL.
listingTypeUSED or DEVELOPMENT.
propertyType / unitSubTypesProperty type and sub-types.
pricePrice in BRL (sale price or monthly rent).
condoFeeMonthly condominium fee (BRL).
iptu / yearlyIptuProperty tax (BRL).
bedrooms / bathrooms / suites / parkingSpacesRoom and space counts.
usableAreaM2 / totalAreaM2Areas in square metres.
addressStreet, number, neighborhood, zone, city, state, ZIP, full address.
lat / lngGeographic coordinates.
amenitiesList of building/unit amenities.
descriptionFull listing description.
advertiserAgency/agent name, CRECI license, phone, logo.
imagesPhoto URLs.
videoTourLinkVirtual tour / video link.
url / listingUrlCanonical listing URL.
portal / publicationTypeSource portal and ad tier.
createdAt / updatedAt / scrapedAtListing and capture timestamps.

A couple of schema notes worth acting on early. Keep id as your dedup and join key — titles and prices get reworded, the ID doesn’t. Store images and amenities as arrays from day one. And always log scrapedAt: listings churn fast, so you need to know when each record was captured to reason about freshness and to track price changes over time by diffing updatedAt.

Use cases

  • Real estate investors & analysts — track inventory levels, asking prices and price-per-m² trends by city or neighborhood, and spot mispriced stock against comparables.
  • Proptech & portals — enrich and benchmark your own listings against the largest catalog in the market.
  • Agencies & brokers — monitor the competition and pull comparables for valuations and pitches.
  • Lead generation — the advertiser block (name, CRECI license, phone) turns a market scrape into a prospect list of active brokers and agencies.
  • Data science — assemble a labelled housing dataset (price, area, rooms, geo, amenities) for price-modelling and market research.

The pattern that pays is breadth plus freshness: a one-off snapshot of one city is a curiosity, but a scheduled feed across a whole metro, refreshed weekly and diffed against the prior run, is a sellable market-intelligence product.

Run the VivaReal Scraper — combine cities, neighborhoods and price bands into one market-wide imóveis dataset, sale or rent. Export to JSON, CSV or Excel. $5 per 1,000 listings.

FAQ

Do I need a VivaReal account or API key?

No. The scraper reads only public listing data — no login, no cookies, no API key. There is no account to get restricted and no session to maintain.

How many listings can I get in one run?

A single search query returns up to roughly 1,476 listings, because the portal caps result depth. To gather more, segment your query into multiple cities, neighborhoods, price bands or search URLs — each segment paginates independently, so you can collect thousands of listings per run.

Does it cover both sale and rental?

Yes. Set operationType to SALE or RENTAL in builder mode, or use a /venda/ (sale) versus /aluguel/ (rent) URL. Both new developments (DEVELOPMENT) and resale stock (USED) are supported.

Why does it need a Brazil residential proxy?

VivaReal serves its data from Brazil and sits behind anti-bot protection. The scraper reads the portal’s data layer over Brazil residential IPs, which is the reliable, login-free path. Keep the default proxy setting (Apify Proxy · RESIDENTIAL · country BR).

Can I just paste a normal VivaReal search URL?

Yes. Filter listings on vivareal.com.br, copy the URL from your browser, and paste it into searchUrls. The scraper derives the location, operation, property type and price filters automatically — no need to re-enter them in the builder.

Is the data in Portuguese?

Yes — titles, descriptions, amenities and addresses come back in Portuguese, matching the source portal. Structured fields (price, area, room counts, coordinates, timestamps) are language-neutral numbers, so most analytics works without any translation.


This guide — how-to-scrape-vivareal-brazil-real-estate.mdx — showed how to scrape VivaReal Brazil real-estate listings end to end: both input modes, pagination caps, sale and rent coverage, and the exact output schema you can build on.

Related guides