VivaReal Brazil Real Estate Listings Scraper avatar

VivaReal Brazil Real Estate Listings Scraper

Pricing

from $6.15 / 1,000 results

Go to Apify Store
VivaReal Brazil Real Estate Listings Scraper

VivaReal Brazil Real Estate Listings Scraper

Extract real estate listings from VivaReal Brazil. Scrape prices, bedrooms, area, condo fees, neighborhood, images, advertiser and coordinates. Export to JSON, CSV, Excel or XML, run via API or schedule runs.

Pricing

from $6.15 / 1,000 results

Rating

0.0

(0)

Developer

Scrapers Lat

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

20 hours ago

Last modified

Share

VivaReal Brazil Real Estate Listings Scraper

VivaReal Brazil Real Estate Listings Scraper

Here is one real result, with every field the actor returns (images trimmed to 3 of 28 entries; all other values are exactly as returned):

{
"imageUrl": "https://youtu.be/dEnAl2vzE6U",
"title": "Imóvel para venda com 2 quartos em - São Paulo - SP",
"price": 355000,
"currency": "BRL",
"operationType": "venda",
"propertyType": "APARTMENT",
"bedrooms": 2,
"bathrooms": 1,
"suites": 0,
"parkingSpaces": 1,
"totalAreaM2": 55,
"usableAreaM2": 55,
"condoFee": 465,
"iptu": 0,
"totalMonthlyPrice": null,
"pricePerM2": 6454.55,
"listingType": "USED",
"constructionStatus": "ConstructionStatus_NONE",
"neighborhood": "Jardim Sarah",
"city": "São Paulo",
"state": "São Paulo",
"zone": "Zona Oeste",
"zipCode": "05382010",
"url": "https://www.vivareal.com.br/imovel/apartamento-2-quartos-butanta-zona-oeste-sao-paulo-com-garagem-55m2-venda-RS355000-id-2872143238/",
"listingId": "2872143238",
"advertiser": "Alonso Imoveis",
"advertiserPhone": "1137881000",
"advertiserWhatsapp": "11997106464",
"advertiserLogo": "https://resizedimgs.vivareal.com/img/vr-listing/1cb9df43419eca89e8e5c2bdf2f54e4f/crop.jpg?action=&dimension=300x300",
"publishedAt": "2026-02-25T20:39:12.909Z",
"updatedAt": "2026-06-22T17:01:43.109Z",
"description": "O imóvel está localizado no bairro Jardim Sarah com 55 metros quadrados com 2 quartos e 1 banheiro. Possui academia, espaço gourmet, salão para festas e eventos, área de brinquedo para as crianças, jardim. FALAR COM FERNANDO!!!",
"amenities": ["ALARM_SYSTEM", "POOL", "GYM", "PARTY_HALL", "CONCIERGE_24H", "ELEVATOR", "GATED_COMMUNITY", "GOURMET_SPACE", "GARDEN", "BALCONY", "PLAYGROUND", "SPORTS_COURT", "AIR_CONDITIONING", "BARBECUE_GRILL"],
"images": [
"https://youtu.be/dEnAl2vzE6U",
"https://resizedimgs.vivareal.com/img/vr-listing/47c8aa4ea101a5cb0ba0bf31e7436b69/crop.jpg?action=&dimension=870x653",
"https://resizedimgs.vivareal.com/img/vr-listing/170a09cdd9c1f065319b7510e5e5aa31/crop.jpg?action=&dimension=870x653"
],
"latitude": -23.574939,
"longitude": -46.760696,
"observedAt": "2026-08-10T14:40:30.330Z",
"error": null
}

The most complete VivaReal Brazil real estate scraper available. It returns every field the listing card and detail page expose, plus derived fields like pricePerM2, and gives you searching by location or URL plus filters for operation, property type, price, bedrooms, and area to target exactly the listings you need.

📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples

Apify Coverage Output Billing

Table of contents

What it does

The actor searches VivaReal Brazil by location (or a search URL you paste), paginates through the results, and writes one normalized record per property listing to the run's dataset. Prices are parsed into a numeric price plus currency, area and price are combined into pricePerM2 for valuation, and location is split into neighborhood, city, state, zone, and zipCode. With withDetails enabled (the default) each listing is enriched with description, amenities, all images, the advertiser name, advertiser phone and WhatsApp, and GPS coordinates.

Data covers VivaReal Brazil property listings only (sale and rent, used and new developments). You control coverage with the location or a search URL, and the filters below.

Quickstart

Open the actor, paste this into the input, and press Run. It returns 10 apartments for sale in São Paulo, enriched with advertiser contacts and coordinates.

{
"searchTerm": "Sao Paulo",
"business": "SALE",
"unitType": "APARTMENT",
"maxListings": 10,
"withDetails": true
}

Every field is optional. Pass a startUrl to reuse a filtered VivaReal search URL (it overrides the location and filter fields), or set business to RENTAL for rentals.

Input reference

FieldTypeRequiredDefaultDescription
searchTermstringnoSao PauloCity or neighborhood to search, for example Sao Paulo, Rio de Janeiro, Copacabana. Resolved automatically to the matching VivaReal location.
startUrlstringno(none)A VivaReal search results URL. The location, operation, and property type are read from the URL and override the filter fields.
businessenumnoSALEOperation: SALE (venda) or RENTAL (aluguel). Applied when no startUrl is given.
listingTypeenumnoUSEDUSED (resale) or DEVELOPMENT (new developments).
unitTypeenumnoAPARTMENTProperty type: APARTMENT, HOME, PENTHOUSE, ALLOTMENT_LAND, FARM, RESIDENTIAL_BUILDING, or ANY.
maxListingsintegerno10Maximum number of listings to collect.
withDetailsbooleannotrueWhen enabled, each listing also includes description, amenities, all images, advertiser, and coordinates.
minPriceintegerno(none)Only return listings priced at or above this amount (BRL).
maxPriceintegerno(none)Only return listings priced at or below this amount (BRL).
minBedroomsintegerno(none)Only return listings with at least this many bedrooms.
minAreaintegerno(none)Only return listings with at least this usable area in square metres.

Output reference

One dataset item per listing. Types: string, number, string[], or null when the source value is absent.

FieldTypeDescription
listingIdstringVivaReal listing ID (deduplication key).
urlstringFull URL of the listing detail page.
titlestringListing title.
pricenumberAsking price.
currencystringCurrency of the price (BRL).
operationTypestringOperation: venda (sale) or aluguel (rent).
propertyTypestringProperty type (APARTMENT, HOME, PENTHOUSE, and so on).
listingTypestringUSED (resale) or DEVELOPMENT (new).
constructionStatusstringConstruction status of the property.
bedroomsnumberNumber of bedrooms.
bathroomsnumberNumber of bathrooms.
suitesnumberNumber of en-suite bedrooms.
parkingSpacesnumberNumber of parking spaces.
usableAreaM2numberUsable area in square metres.
totalAreaM2numberTotal area in square metres.
condoFeenumberMonthly condominium fee (BRL).
iptunumberYearly property tax, IPTU (BRL).
totalMonthlyPricenumberTotal monthly price (rent + condo + IPTU, BRL), or null for sales.
pricePerM2numberPrice per usable square metre (BRL), the core comparable metric for valuation.
neighborhoodstringNeighborhood / bairro.
citystringCity.
statestringBrazilian state.
zonestringCity zone (for example Zona Oeste).
zipCodestringPostal code (CEP).
latitudenumberGPS latitude (detail).
longitudenumberGPS longitude (detail).
advertiserstringAdvertiser / agency name.
advertiserPhonestringAdvertiser phone (detail).
advertiserWhatsappstringAdvertiser WhatsApp / mobile (detail).
advertiserLogostringAdvertiser logo image URL (detail).
descriptionstringListing description text (detail).
amenitiesstring[]List of amenity codes (detail).
imageUrlstringPrimary listing image or video URL.
imagesstring[]Full image gallery URLs (detail).
publishedAtstringPublication timestamp (detail).
updatedAtstringLast update timestamp (detail).
observedAtstringISO 8601 timestamp of when the record was collected.
errorstringnull on success. On a failed run, a single item with a populated error field is written instead.

Example output record

See the hero record at the top of this page for a full real listing with advertiser contacts, amenities, and coordinates. Here is a compact card-level view of the same listing:

{
"listingId": "2872143238",
"title": "Imóvel para venda com 2 quartos em - São Paulo - SP",
"price": 355000,
"currency": "BRL",
"operationType": "venda",
"propertyType": "APARTMENT",
"bedrooms": 2,
"bathrooms": 1,
"parkingSpaces": 1,
"usableAreaM2": 55,
"pricePerM2": 6454.55,
"neighborhood": "Jardim Sarah",
"city": "São Paulo",
"state": "São Paulo",
"advertiser": "Alonso Imoveis",
"advertiserPhone": "1137881000",
"url": "https://www.vivareal.com.br/imovel/apartamento-2-quartos-butanta-zona-oeste-sao-paulo-com-garagem-55m2-venda-RS355000-id-2872143238/",
"observedAt": "2026-08-10T14:40:30.330Z",
"error": null
}

Run via API and CLI

Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.

Run synchronously and get dataset items in one call:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~vivareal-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"searchTerm":"Sao Paulo","business":"SALE","unitType":"APARTMENT","maxListings":25,"withDetails":true}'

Start a run asynchronously:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~vivareal-scraper/runs?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"startUrl":"https://www.vivareal.com.br/venda/sp/sao-paulo/apartamento_residencial/","maxListings":100}'

Apify CLI:

apify call scrapers_lat/vivareal-scraper \
--input '{"searchTerm":"Rio de Janeiro","business":"RENTAL","maxListings":20}'

Fetch results

Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:

# JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
# CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"
# Paginate large datasets
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"

<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.

Billing and limits

  • Pay per result. You are charged per record returned (result event). See the pricing tab for the current per-result price.
  • No charge on failure. If a run errors, the actor writes a single item with a populated error field and does not charge for it. Empty runs cost nothing.
  • Spend cap respected. Set maxTotalChargeUsd on the run; once reached, the actor stops emitting and charging further billable results.
  • Free Apify plans are capped at 10 records per run. Upgrade for higher maxListings.
  • Source pagination ceiling. VivaReal caps deep pagination; very large single searches end when the source stops returning pages. Split with tighter filters or separate locations for bigger pulls.

FAQ and troubleshooting

A run returned 0 records. Why? The location did not resolve, or the filters removed everything. Confirm the searchTerm matches a real VivaReal location, or paste a working startUrl, and loosen price/bedroom/area filters. Zero-result runs are not charged.

How do I get advertiser phone numbers and coordinates? Keep withDetails enabled (the default). It fetches each listing's detail page for contacts, amenities, all images, and GPS.

Can I reuse a filtered search from the website? Yes. Copy the VivaReal search URL after applying your filters and pass it as startUrl. It overrides the location, operation, and property-type fields.

Why is totalMonthlyPrice null? That field only applies to rentals (rent + condo + IPTU). For sale listings it is null. Missing values are returned as null, never invented.

What is pricePerM2? The price divided by the usable area, in BRL. It is the standard comparable metric for valuing property against similar listings.

Is this an official VivaReal tool? No. This actor is independent and has no affiliation with VivaReal or Grupo ZAP. It reads only data that is publicly available on the website.

More scrapers at scrapers.lat

Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.


Independent tool, not affiliated with VivaReal. Accesses only publicly available listing data.