VivaReal Brazil Property Listing Scraper
Pricing
from $1.40 / 1,000 listings
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
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
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?
| Field | Description |
|---|---|
identity.id / identity.fingerprint | Listing ID and a stable fingerprint for deduplication/change tracking |
content.title / content.description | Listing 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_code | Where the property is located |
location.coordinates | Latitude/longitude for mapping |
attributes.rooms | Bedrooms, bathrooms, suites, parking spaces |
attributes.area | Usable and total area in square meters |
attributes.amenities / attributes.badges | Amenity list and listing stamps (e.g. below-market-price) |
media.images[] / media.videos[] | Photo and video URLs |
entities.seller | Agency/broker name, tier, license number, profile URL |
contact.phones / contact.whatsapp | Public 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
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
startUrls | array | No | — | VivaReal listing URLs to scrape directly instead of a location search |
location | string | No | Rio de Janeiro | A city or neighborhood, e.g. "Rio de Janeiro" or "Pinheiros, Sao Paulo" |
deal_type | string | No | sale | sale or rent |
property_type | array | No | — | e.g. apartment, house, studio, penthouse (21 types) |
amenities | array | No | — | e.g. pets_allowed, air_conditioning, balcony (30 amenities) |
min_bedroom / min_bathroom / min_parking | string | No | — | "1"–"4" for 1+ to 4+ |
min_price / max_price | integer | No | — | Whole numbers, e.g. 250000 |
min_sqm / max_sqm | integer | No | — | Usable area range in square meters |
below_market_price | boolean | No | false | Keep only listings marked below market price |
near_transit | boolean | No | false | Keep only listings tagged near public transit |
maximize_coverage | boolean | No | false | Raises the default per-search result cap for broader retrieval |
limit | integer | No | 100 | Maximum 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.coordinatesto 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_pricelistings to surface underpriced opportunities.
How to scrape VivaReal property listings
- Set your search — enter a Location (city or
"Neighborhood, City"), or paste listing URLs into Start URLs. - Choose deal type and property type — sale or rent, and one or more property types.
- Apply filters — price range, usable area, minimum rooms/parking, amenities, below-market-price, and near-transit.
- Set a limit — cap how many listings to collect; enable Maximize Coverage for broader searches.
- Run the actor — click Start in the Apify Console, or trigger it via the API or on a schedule.
- 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.
| Event | Price per event | Price 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
Is it legal to scrape VivaReal?
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 ApifyClientclient = 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);
Related Actors
- PropertyFinder Scraper — real estate listings from the Gulf region
- MagicBricks Scraper — property listings from India
- NoBroker Scraper — broker-free property listings from India
- Craigslist Real Estate Scraper — real estate listings from Craigslist
Browse the full catalog on the ParseBird Apify Store page.