VivaReal Brazil Property Listing Scraper avatar

VivaReal Brazil Property Listing Scraper

Pricing

from $1.40 / 1,000 listings

Go to Apify Store
VivaReal Brazil Property Listing Scraper

VivaReal Brazil Property Listing Scraper

Extract property listings from VivaReal, Brazil's leading real estate portal: prices, location, rooms, amenities, media, and seller contact details. Search by city or neighborhood, or paste listing URLs directly.

Pricing

from $1.40 / 1,000 listings

Rating

0.0

(0)

Developer

ParseBird

ParseBird

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

VivaReal Property Listing Scraper

Extract property listings from VivaReal, Brazil's leading real estate portal. The VivaReal Property Listing Scraper searches by city or neighborhood — or a pasted listing URL — and returns clean, structured data: prices, rooms, usable area, amenities, location and coordinates, media, and seller/agency contact details.

Search any Brazilian city or neighborhood for sale or rental listings, filter by price, rooms, usable area, amenities, and below-market-price stamps, and get seller contact details (phone, WhatsApp) with every record.

Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

Apify Actor: parsebird/vivareal-property-scraper. Scrapes property listings from VivaReal (vivareal.com.br), Brazil's leading real estate portal. Call via ApifyClient: client.actor("parsebird/vivareal-property-scraper").call(run_input={"location": "Rio de Janeiro", "deal_type": "sale", "property_type": ["apartment"], "min_price": 250000, "max_price": 1200000, "limit": 100}). Also accepts startUrls (VivaReal listing URLs to scrape directly), amenities, min_bedroom/min_bathroom/min_parking ("1"-"4"), min_sqm/max_sqm, below_market_price, near_transit, maximize_coverage. Returns per listing a structured record with sections: identity (id/external_id/fingerprint), source_context, timestamps, content (title/description), pricing (amount + per-business-type offers), availability, location (address + coordinates), media (images/videos), attributes (property type, rooms, area, amenities, badges), entities.seller (agency/broker + contact), contact (phones/whatsapp). Full API spec: https://apify.com/parsebird/vivareal-property-scraper/api. Get your token: https://console.apify.com/settings/integrations.

What does VivaReal Property Listing Scraper do?

This actor reads the same structured listing data VivaReal's own search results and listing pages render — no manual clicking, no guessing at CSS selectors. You give it a city, a neighborhood, or a VivaReal listing URL, and it returns every matching property with price, rooms, usable area, amenities, coordinates, photos, and the agency's contact details.

  • 🔍 City or neighborhood search — search a whole city (e.g. "Rio de Janeiro") or narrow to a specific neighborhood (e.g. "Pinheiros, Sao Paulo").
  • 🔗 Direct listing URLs — paste one or more VivaReal listing URLs into Start URLs to scrape specific properties directly, skipping search entirely.
  • 🏠 Sale or rental — toggle deal type, with rental listings returning monthly condo fee, IPTU, and accepted warranty types where available.
  • 🎚️ Rich filtering — 21 property types, 30 amenities, minimum bedrooms/bathrooms/parking spaces, price range, usable area range, below-market-price stamp, and near-public-transit.
  • 📞 Public contact details — phone numbers and WhatsApp number for the listing agency or broker, when publicly shown.
  • 📊 Structured, analysis-ready output — identity, pricing, location, and attributes are each their own object, ready for deduplication, mapping, and portfolio-level reporting.

What data can you extract from VivaReal?

FieldDescription
identity.id / identity.fingerprintListing ID and a stable fingerprint for deduplication/change tracking
content.title / content.descriptionListing title and full description text
pricing.offers[]Price, currency, monthly condo fee, and IPTU per business type (sale/rent)
location.city / location.neighborhood / location.state_codeWhere the property is located
location.coordinatesLatitude/longitude for mapping
attributes.roomsBedrooms, bathrooms, suites, parking spaces
attributes.areaUsable and total area in square meters
attributes.amenities / attributes.badgesAmenity list and listing stamps (e.g. below-market-price)
media.images[] / media.videos[]Photo and video URLs
entities.sellerAgency/broker name, tier, license number, profile URL
contact.phones / contact.whatsappPublic contact numbers

See the full field reference for every field across all 11 output sections (identity, source_context, timestamps, content, pricing, availability, location, media, attributes, entities, contact).

Input parameters

ParameterTypeRequiredDefaultDescription
startUrlsarrayNoVivaReal listing URLs to scrape directly instead of a location search
locationstringNoRio de JaneiroA city or neighborhood, e.g. "Rio de Janeiro" or "Pinheiros, Sao Paulo"
deal_typestringNosalesale or rent
property_typearrayNoe.g. apartment, house, studio, penthouse (21 types)
amenitiesarrayNoe.g. pets_allowed, air_conditioning, balcony (30 amenities)
min_bedroom / min_bathroom / min_parkingstringNo"1""4" for 1+ to 4+
min_price / max_priceintegerNoWhole numbers, e.g. 250000
min_sqm / max_sqmintegerNoUsable area range in square meters
below_market_pricebooleanNofalseKeep only listings marked below market price
near_transitbooleanNofalseKeep only listings tagged near public transit
maximize_coveragebooleanNofalseRaises the default per-search result cap for broader retrieval
limitintegerNo100Maximum listings to save per search seed

Output example

{
"identity": { "id": "2880363892", "external_id": "PAAP31641", "fingerprint": "47c70add902f38bd61b5" },
"content": { "title": "Apartamento 3 quartos, dependência completa, 2 vagas em Irajá" },
"pricing": {
"amount": 295000,
"currency": "BRL",
"offers": [{ "business_type": "sale", "amount": 295000, "currency": "BRL", "monthly_condo_fee": 627, "yearly_iptu": 540 }]
},
"location": {
"neighborhood": "Irajá", "city": "Rio de Janeiro", "state_code": "RJ",
"coordinates": { "latitude": -22.836969, "longitude": -43.323003 }
},
"attributes": {
"property_type": "unit", "unit_types": ["apartment"],
"rooms": { "bedrooms": 3, "bathrooms": 3, "suites": 1, "parking_spaces": 2 },
"area": { "usable_area": 98 },
"amenities": ["builtin_wardrobe", "intercom", "pets_allowed"]
},
"entities": { "seller": { "name": "Patrimônio Rio Imobiliária", "tier": "diamond" } },
"contact": { "phones": ["21995819223"], "whatsapp": "21995819223" }
}

Download results as JSON, CSV, Excel, HTML, or XML directly from the Apify Console, or fetch them via the Apify API / dataset endpoint.

Use cases

  • Portfolio and market monitoring — track listing prices and availability by city or neighborhood over time.
  • Lead generation — pull agency/broker contact details for outreach or CRM enrichment.
  • Mapping and territory analysis — use location.coordinates to plot listings and analyze coverage by area.
  • Price benchmarking — compare sale and rental pricing, condo fees, and IPTU across neighborhoods.
  • Below-market deal sourcing — filter for below_market_price listings to surface underpriced opportunities.

How to scrape VivaReal property listings

  1. Set your search — enter a Location (city or "Neighborhood, City"), or paste listing URLs into Start URLs.
  2. Choose deal type and property type — sale or rent, and one or more property types.
  3. Apply filters — price range, usable area, minimum rooms/parking, amenities, below-market-price, and near-transit.
  4. Set a limit — cap how many listings to collect; enable Maximize Coverage for broader searches.
  5. Run the actor — click Start in the Apify Console, or trigger it via the API or on a schedule.
  6. Get your data — download the dataset as JSON/CSV/Excel, or pull it via the API.

How much does it cost to scrape VivaReal?

This actor uses Pay-Per-Event (PPE) pricing — you're charged per listing extracted, not per compute unit.

EventPrice per eventPrice per 1,000
listing-scraped (Free plan)$0.0019$1.90
listing-scraped (Bronze)$0.0018$1.80
listing-scraped (Silver)$0.0016$1.60
listing-scraped (Gold)$0.0014$1.40

A run collecting 500 listings costs roughly $0.70–$0.95 depending on your Apify plan. All Apify accounts include a free trial with credits to try the actor before committing to a paid plan.

FAQ

Why do some fields come back empty? VivaReal only discloses full street address and exact contact details on listings where the agency has enabled it; search results also mask the exact street for privacy until you view the listing. Fields are omitted (not fabricated) when VivaReal doesn't supply a value.

Which cities and neighborhoods does location support? Any city or neighborhood VivaReal indexes. State resolution (used internally to scope the search) is built in for state capitals and 50+ major metro areas; for less common cities, pass a full VivaReal search URL via Start URLs for precise targeting instead.

What's the difference between identity.id and identity.fingerprint? id is VivaReal's own listing ID. fingerprint is a stable content hash useful for detecting when the same listing has been reposted or duplicated across searches.

Does limit really cap "all available results"? Leaving limit empty collects up to a safety cap (500 listings, or 2,000 with maximize_coverage enabled) rather than a truly unbounded run, to keep runs predictable and cost-bounded. Set limit explicitly for full control.

What are the limitations of this actor? ⚠️

  • Listing detail via Start URLs returns a slightly smaller field set than location search (no portal/portals, checksum-based fingerprint, or seller trust/count fields — VivaReal's listing page doesn't expose these)
  • Property type and amenity filters are best-effort mappings from VivaReal's own filter taxonomy; verify results against your criteria for filter-critical workflows

Yes. This actor only accesses publicly available property listings that VivaReal and its advertisers have made visible for the purpose of marketing real estate. It does not bypass login walls or access private accounts. Scraping publicly available data is generally considered legal — see Apify's overview of web scraping legality for more detail. Users are responsible for ensuring their use of the collected data complies with applicable laws and VivaReal's Terms of Use.

Python and JavaScript usage

Python (apify-client):

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run_input = {
"location": "Rio de Janeiro",
"deal_type": "sale",
"property_type": ["apartment"],
"min_price": 250000,
"max_price": 1200000,
"limit": 100,
}
run = client.actor("parsebird/vivareal-property-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["content"]["title"], item["pricing"]["amount"])

JavaScript (apify-client):

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const input = {
location: 'Rio de Janeiro',
deal_type: 'sale',
property_type: ['apartment'],
min_price: 250000,
max_price: 1200000,
limit: 100,
};
const run = await client.actor('parsebird/vivareal-property-scraper').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Browse the full catalog on the ParseBird Apify Store page.