VivaReal Scraper| $1.5 / 1k | Fast & Reliable
Pricing
from $1.50 / 1,000 results
VivaReal Scraper| $1.5 / 1k | Fast & Reliable
Extract structured Brazil property listings from VivaReal Imoveis with pricing, locations, seller details, media assets, and contact data. Built for enterprise-grade Brazil real estate intelligence, listing monitoring, lead enrichment and automated analytics pipelines.
Pricing
from $1.50 / 1,000 results
Rating
0.0
(0)
Developer
Fatih Tahta
Actor stats
1
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
VivaReal Imoveis Scraper
Slug: fatihtahta/vivareal-imoveis-scraper
Overview
VivaReal Imoveis Scraper turns VivaReal property searches and listing URLs into structured, production-ready real estate data. It returns normalized records with pricing, location, media, property attributes, seller details, and public contact fields so teams can move from raw listings to analysis, enrichment, reporting, and automation without manual cleanup.
Use it when you need consistent Brazilian property data for market intelligence, listing monitoring, CRM workflows, recurring exports, or operational dashboards. The output is designed to be easy to consume in Apify Console, the Apify API, the Apify CLI, and automation tools such as Zapier, Make, and n8n.
What You Get
- Structured property records: Clean JSON items ready for analytics, monitoring, and downstream processing.
- Normalized key fields: Pricing, location, media, property characteristics, seller metadata, and public contact data in one record.
- Flexible input options: Start from area-based searches, direct listing URLs, or a combination of both.
- Dataset-ready output: Results land in an Apify dataset for export to JSON, CSV, Excel, and connected workflows.
- Automation-friendly runs: Suitable for one-off jobs, recurring schedules, API-driven runs, and no-code integrations.
Best For
- Market intelligence: Track supply, pricing bands, neighborhood activity, and property mix across Brazilian markets.
- Listing monitoring: Watch active inventory, pricing updates, and new opportunities over time.
- Research pipelines: Feed structured real estate records into internal analysis, warehousing, or enrichment workflows.
- CRM enrichment: Add seller, agency, and property context to lead and account workflows.
- Internal reporting: Build recurring exports for spreadsheets, BI tools, and operational dashboards.
Quick Start
Paste a simple input like this into Apify Console to start a focused run:
{"location": "Rio de Janeiro","deal_type": "sale","limit": 100}
Typical run flow:
- Open the actor in Apify Console.
- Paste your JSON input and adjust any filters you want.
- Start the run.
- Open the run's dataset after completion.
- Export the results or connect them to your next workflow.
Input Parameters
Provide either location, startUrls, or both. Add filters to narrow the dataset to the market slice you want.
| Parameter | Type | Description | Default |
|---|---|---|---|
startUrls | array[string|object] | One or more VivaReal listing or search URLs. Apify Request-style objects are also accepted. | [] |
location | string | A city, neighborhood, district, avenue, or street in Brazil, such as Rio de Janeiro or Pinheiros, Sao Paulo. | – |
deal_type | string | Whether to collect sale or rental listings. Allowed values: sale, rent. | sale |
property_type | array[string] | One or more property types to include. Allowed values: apartment, studio, kitnet, house, gated_house, villa_house, penthouse, flat, loft, residential_land, townhouse, farm, store, office, commercial_house, hotel, corporate_floor, building, commercial_land, storage, garage. | – |
amenities | array[string] | One or more amenities to include. Allowed values: pets_allowed, heating, air_conditioning, service_area, builtin_wardrobe, bedroom_wardrobe, kitchen_cabinets, bathroom_cabinets, blindex_box, gas_shower, closet, internet_access, american_kitchen, gourmet_kitchen, large_kitchen, home_office, intercom, large_window, furnished, backyard, cable_tv, balcony, gourmet_balcony, natural_ventilation, bathtub, panoramic_view, freezer, cooker, deposit, private_pool. | – |
min_bedroom | string | Minimum bedroom count. Allowed values: 1, 2, 3, 4 for 1+, 2+, 3+, or 4+ bedrooms. | – |
min_bathroom | string | Minimum bathroom count. Allowed values: 1, 2, 3, 4 for 1+, 2+, 3+, or 4+ bathrooms. | – |
min_parking | string | Minimum parking space count. Allowed values: 1, 2, 3, 4 for 1+, 2+, 3+, or 4+ spaces. | – |
min_price | integer | Minimum listing price. Use whole numbers such as 400000. | – |
max_price | integer | Maximum listing price. Use whole numbers such as 3000000. | – |
below_market_price | boolean | When true, keeps only listings marked by VivaReal/DataZAP as below market price. | false |
min_sqm | integer | Minimum usable area in square meters. | – |
max_sqm | integer | Maximum usable area in square meters. | – |
near_transit | boolean | When true, keeps only listings tagged as near public transit. | false |
maximize_coverage | boolean | When true, prioritizes broader retrieval on larger searches when you want stronger dataset completeness. | false |
limit | integer | Maximum number of listings to save for each search seed. Leave empty to collect all available results. | – |
More Example Inputs
Scenario: Broad city sale search
{"location": "Rio de Janeiro","deal_type": "sale","property_type": ["apartment", "house"],"min_price": 250000,"max_price": 1200000,"limit": 250}
Scenario: Neighborhood search with size and amenity filters
{"location": "Vila Mariana, Sao Paulo","deal_type": "sale","property_type": ["apartment"],"min_sqm": 70,"max_sqm": 180,"amenities": ["balcony", "air_conditioning"],"limit": 200}
Scenario: Rental search with transit filter
{"location": "Pinheiros, Sao Paulo","deal_type": "rent","property_type": ["apartment", "studio"],"min_bedroom": "1","near_transit": true,"max_price": 6000,"limit": 150}
Scenario: Direct listing URLs
{"startUrls": ["https://www.vivareal.com.br/imovel/apartamento-3-quartos-iraja-rio-de-janeiro-com-garagem-98m2-venda-RS295000-id-2880363892/"]}
Output
Output destination
The actor writes results to an Apify dataset as JSON records. Each dataset item is a normalized listing record without an extra top-level wrapper like type, id, or url.
Record structure
Each output item can include these top-level sections when data is available:
identitysource_contexttimestampscontentpricingavailabilitylocationmediaattributesentitiescontact
Recommended deduplication keys:
identity.ididentity.fingerprintsource_context.url
Output Highlights
identity: Useful for deduplication, change tracking, record matching, and historical comparisons.pricing: Supports sale and rental analysis, price monitoring, and portfolio-level reporting.location: Makes it easy to group listings by city, neighborhood, state, and coordinates for mapping or territory analysis.attributes: Helps segment inventory by property type, area, room counts, amenities, and listing characteristics.entities: Adds seller and agency context for enrichment, account mapping, and market participation analysis.contact: Exposes public contact fields that can support research and lead qualification workflows when present.
Example output
This is an example VivaReal dataset item aligned with the actor's output format:
{"identity": {"id": "2880363892","external_id": "PAAP31641","source_id": "c4b61b04-d96b-363f-9774-635c34081d26","provider_id": "84945","fingerprint": "47c70add902f38bd61b5"},"source_context": {"url": "https://www.vivareal.com.br/imovel/apartamento-3-quartos-iraja-rio-de-janeiro-com-garagem-98m2-venda-RS295000-id-2880363892/","source_url": "https://www.vivareal.com.br/","page_index": 1,"seed": {"id": "02231b015915","type": "location","value": "rio de janerio"}},"timestamps": {"published_at": "2026-04-15T03:04:46.048000+00:00","created_at": "2026-04-12T02:51:25.013000+00:00","updated_at": "2026-04-15T03:04:46.048000+00:00"},"content": {"title": "Apartamento 3 quartos, dependência completa, 2 vagas em Irajá","description": "h6 Excelente apartamento no bairro de Irajá, amplo, composto de salão com piso parquet paulista, tres quartos ambos em parquet paulista, sendo um com armário planejado e suite com box blindex, banheiro social com box blindex, ampla cozinha com armarios planejados, area de serviço separada, dependencia completa de empregada, 2 vagas de garagem na escritura. , planta generosa. /h6 h6 Proxímo de todo comércio, escolas, condução e mercados. /h6 h6 Ligue e agende sua visita com um de nossos corretores. /h6 -Cod:PAAP31641 -Rev.14Abr"},"pricing": {"amount": 295000,"currency": "BRL","offers": [{"business_type": "sale","amount": 295000,"currency": "BRL","monthly_condo_fee": 627,"yearly_iptu": 540}]},"availability": {"status": "active","show_price": true,"accept_exchange": false,"resale": false,"non_activation_reason": "none"},"location": {"label": "Irajá","street": "Rua Honório de Almeida","street_number": "69","neighborhood": "Irajá","city": "Rio de Janeiro","state_code": "RJ","coordinates": {"latitude": -22.836969,"longitude": -43.323003,"source": "GOOGLE"},"geocoding": {"address_type": "all"}},"media": {"images": [{"id": "5e442a0a4aedf53f0329a2942a053fc1","url": "https://resizedimgs.vivareal.com/img/vr-listing/5e442a0a4aedf53f0329a2942a053fc1/{description}.webp?action=%7Baction%7D&dimension=%7Bwidth%7Dx%7Bheight%7D"},{"id": "bd9d437ca32121a62b2b18e37a573667","url": "https://resizedimgs.vivareal.com/img/vr-listing/bd9d437ca32121a62b2b18e37a573667/{description}.webp?action=%7Baction%7D&dimension=%7Bwidth%7Dx%7Bheight%7D"}],"videos": [{"id": "d733e4a4adf88af4a20dd64dd1517b0f","url": "https://www.youtube.com/watch?v=bkxUPamY1eM"}]},"attributes": {"business": "sale","contract_type": "real_estate","listing_type": "used","property_type": "unit","publication_type": "premium","construction_status": "none","display_address_type": "all","portal": "grupozap","portals": ["olx","vivareal","zap"],"unit_types": ["apartment"],"usage_types": ["residential"],"amenities": ["builtin_wardrobe","intercom","service_bathroom","aluminum_window","large_window","blindex_box","kitchen_cabinets","service_area","pets_allowed"],"badges": ["DATAZAP_APPROVED_SALE"],"buildings": 0,"floors": [3],"units_on_the_floor": 0,"unit_floor": 2,"rooms": {"bedrooms": 3,"bedroom_options": [3],"bathrooms": 3,"bathroom_options": [3],"suites": 1,"suite_options": [1],"parking_spaces": 2,"parking_space_options": [2]},"area": {"usable_area": 98,"usable_area_options": [98],"total_area": 98,"total_area_options": [98]}},"entities": {"seller": {"account_id": "832396ba-4c6d-4966-2a56-1af9a9d4db3c","advertiser_id": "832396ba-4c6d-4966-2a56-1af9a9d4db3c","name": "Patrimônio Rio Imobiliária","profile_url": "https://www.vivareal.com.br/imobiliaria/38595/","license_number": "06232-J-RJ","tier": "diamond","logo_url": "https://resizedimgs.vivareal.com/img/vr-listing/b848c2dc156eec51c85ec52c3ceca91b/{description}.webp?action=%7Baction%7D&dimension=%7Bwidth%7Dx%7Bheight%7D","show_address": true,"created_at": "2018-03-27T14:32:59+00:00","legacy_vivareal_id": 38595,"legacy_zap_id": 1737804}},"contact": {"phones": ["21995819223"],"whatsapp": "21995819223"}}
Field Reference
identity
identity.id(string, optional): VivaReal listing ID.identity.external_id(string, optional): Provider-facing listing reference.identity.legacy_id(string, optional): Legacy listing identifier when present.identity.source_id(string, optional): Source-system identifier.identity.provider_id(string, optional): Provider or advertiser reference ID.identity.fingerprint(string, optional): Stable fingerprint generated from listing identity data.
source_context
source_context.url(string, optional): Canonical listing URL used for the record.source_context.source_url(string, optional): Search or seed URL where the listing was discovered.source_context.page_index(number, optional): Search results page index.source_context.seed.id(string, optional): Identifier for the originating search seed.source_context.seed.type(string, optional): Seed category such aslocationorurl.source_context.seed.value(string, optional): Original seed value.
timestamps
timestamps.published_at(string, optional): Publication timestamp in ISO 8601 format.timestamps.created_at(string, optional): Original creation timestamp in ISO 8601 format.timestamps.updated_at(string, optional): Last update timestamp in ISO 8601 format.
content
content.title(string, optional): Listing title.content.description(string, optional): Listing description text.
pricing
pricing.amount(number, optional): Primary displayed price.pricing.currency(string, optional): Currency code for the main price.pricing.offers[](array[object], optional): Offer variants associated with the listing.pricing.offers[].business_type(string, optional): Offer type such assaleorrent.pricing.offers[].amount(number, optional): Offer amount.pricing.offers[].currency(string, optional): Offer currency code.pricing.offers[].monthly_condo_fee(number, optional): Monthly condo fee when available.pricing.offers[].yearly_iptu(number, optional): Yearly IPTU tax when available.pricing.offers[].iptu(number, optional): IPTU amount when reported in an alternate format.pricing.offers[].iptu_period(string, optional): IPTU recurrence period when available.pricing.offers[].rental_period(string, optional): Rental billing period when present.pricing.offers[].monthly_rental_total_price(number, optional): Total monthly rent cost when available.pricing.offers[].warranties[](array[string], optional): Accepted rental guarantees.
availability
availability.status(string, optional): Listing availability status.availability.show_price(boolean, optional): Whether price is publicly shown.availability.accept_exchange(boolean, optional): Whether exchanges are accepted.availability.resale(boolean, optional): Whether the listing is marked as resale.availability.non_activation_reason(string, optional): Reason a listing is inactive, when present.
location
location.label(string, optional): Short location label.location.street(string, optional): Street name.location.street_number(string, optional): Street number.location.neighborhood(string, optional): Neighborhood name.location.city(string, optional): City name.location.state_code(string, optional): State code.location.coordinates.latitude(number, optional): Latitude.location.coordinates.longitude(number, optional): Longitude.location.coordinates.source(string, optional): Coordinate source label.location.geocoding.address_type(string, optional): Address granularity classification.
media
media.images[](array[object], optional): Image assets.media.images[].id(string, optional): Image identifier.media.images[].url(string, optional): Image URL template or asset URL.media.videos[](array[object], optional): Video assets.media.videos[].id(string, optional): Video identifier.media.videos[].url(string, optional): Video URL.media.other[](array[object], optional): Additional media items when available.
attributes
attributes.business(string, optional): Business type such assaleorrent.attributes.contract_type(string, optional): Contract classification.attributes.listing_type(string, optional): Listing condition or class.attributes.property_type(string, optional): High-level property classification.attributes.publication_type(string, optional): Publication tier.attributes.construction_status(string, optional): Construction status.attributes.expansion_type(string, optional): Expansion or promotion type when available.attributes.display_address_type(string, optional): Address display mode.attributes.portal(string, optional): Primary portal label.attributes.portals[](array[string], optional): Related portal labels.attributes.unit_types[](array[string], optional): Unit type labels.attributes.unit_sub_types[](array[string], optional): Unit subtype labels.attributes.usage_types[](array[string], optional): Usage type labels.attributes.amenities[](array[string], optional): Amenity labels.attributes.badges[](array[string], optional): Listing stamps or badges such as below-market markers.attributes.condominium_name(string, optional): Condominium name when present.attributes.enhanced_development(boolean, optional): Enhanced development flag.attributes.listings_count(number, optional): Related listing count when provided.attributes.buildings(number, optional): Building count.attributes.floors[](array[number], optional): Floor options or floor values.attributes.units_on_the_floor(number, optional): Units on the floor.attributes.unit_floor(number, optional): Unit floor.attributes.capacity_limit(array|object|number|string, optional): Capacity-related value when present in source data.attributes.modality(array|object|string, optional): Listing modality when available.attributes.price_suggestion(array|object, optional): Price suggestion block when available.attributes.rooms.bedrooms(number, optional): Bedroom count.attributes.rooms.bedroom_options[](array[number], optional): Available bedroom count options.attributes.rooms.bathrooms(number, optional): Bathroom count.attributes.rooms.bathroom_options[](array[number], optional): Available bathroom count options.attributes.rooms.suites(number, optional): Suite count.attributes.rooms.suite_options[](array[number], optional): Available suite count options.attributes.rooms.parking_spaces(number, optional): Parking space count.attributes.rooms.parking_space_options[](array[number], optional): Available parking options.attributes.area.usable_area(number, optional): Usable area in square meters.attributes.area.usable_area_options[](array[number], optional): Available usable area values.attributes.area.total_area(number, optional): Total area in square meters.attributes.area.total_area_options[](array[number], optional): Available total area values.attributes.variants[](array[object], optional): Child listing or unit variants when provided by the source.
entities
entities.seller.account_id(string, optional): Seller account identifier.entities.seller.advertiser_id(string, optional): Advertiser identifier.entities.seller.name(string, optional): Seller or agency name.entities.seller.profile_url(string, optional): Seller profile URL.entities.seller.license_number(string, optional): License or registration number.entities.seller.tier(string, optional): Seller tier or badge level.entities.seller.logo_url(string, optional): Seller logo URL.entities.seller.verified(boolean, optional): Verification flag when available.entities.seller.show_address(boolean, optional): Whether seller address is displayed.entities.seller.created_at(string, optional): Seller profile creation timestamp in ISO 8601 format.entities.seller.legacy_vivareal_id(number, optional): Legacy VivaReal account identifier.entities.seller.legacy_zap_id(number, optional): Legacy ZAP account identifier.entities.seller.trust_score(number, optional): Seller trust score when provided.entities.seller.total_count_by_filter(number, optional): Seller count for the current filter.entities.seller.total_count_by_advertiser(number, optional): Total seller inventory count.entities.developers[](array[object], optional): Developer entities when present.
contact
contact.phones[](array[string], optional): Public phone numbers.contact.whatsapp(string, optional): Public WhatsApp number.
Data Notes
- The scraper returns the listing data publicly available at run time.
- Output fields are normalized for downstream analysis and automation.
- Some fields appear only when they are present on the listing.
- Dataset items are ready for exports, dashboards, spreadsheets, CRMs, and custom data pipelines.
- Cross-portal labels such as
olx,vivareal, orzapcan appear in portal-related fields when they are present in the listing data.
How Teams Commonly Use The Output
- Trend analysis: Compare pricing, property mix, and active inventory across cities, neighborhoods, or custom filter sets.
- Pricing dashboards: Feed BI tools or spreadsheets with normalized listing prices, condo fees, and location context.
- Lead qualification: Review seller, agency, and public contact data alongside listing characteristics.
- Location-based reporting: Build neighborhood or city-level views for research, coverage planning, or sales ops.
- Content and marketplace support: Populate internal collections, market pages, and property catalog workflows with structured records.
How to Run
Apify Console
- Open the actor in Apify Console.
- Enter a
location,startUrls, or both. - Add any optional filters you need and set
limitif you want to cap results per seed. - Click Start and wait for the run to finish.
- Export the dataset in JSON, CSV, Excel, or another supported format.
Apify API
Use the Apify API or Apify client libraries when you want to trigger runs programmatically from your application or backend workflow. Send the same JSON input you use in Console, wait for the run if needed, then read the output from the run's default dataset.
Apify CLI
Use the Apify CLI when you want to launch runs from scripts, terminals, CI jobs, or operator workflows. The CLI uses the same actor input structure as Apify Console, which makes it easy to move from manual runs to scripted execution.
Automation Tools
This actor fits well into no-code and low-code workflows:
- Zapier: Send run results into spreadsheets, alerts, or downstream business apps.
- Make: Chain the dataset output into multi-step automation scenarios.
- n8n: Trigger runs, process dataset items, and route the output to internal systems.
- Webhooks: Start follow-up jobs when a run finishes.
Scheduling and Automation
You can schedule recurring runs to keep your dataset fresh without starting each job manually.
- Create a schedule in Apify Console.
- Configure the actor input for the target location, URLs, and filters.
- Run it daily, weekly, or on a custom cron.
- Add webhooks or automation steps for downstream processing.
Integration options
- Apify API: Start runs from applications, backends, and internal tools.
- Apify CLI: Trigger runs from shell scripts and operational workflows.
- Webhooks: Trigger downstream jobs when a run completes.
- Zapier: Send output to spreadsheets, CRMs, and no-code flows.
- Make: Build multi-step automation workflows.
- n8n: Connect actor runs to custom automation and data routing pipelines.
- Google Sheets: Export and review listing data in a spreadsheet.
- Slack or email: Send alerts and summaries after runs.
Performance
- Small runs (< 1,000 outputs): ~2 to 3 minutes
- Medium runs (1,000 to 5,000 outputs): ~5 to 15 minutes
- Large runs (5,000+ outputs): ~15 to 30 minutes
Execution time varies with filters, source response times, and how much data is returned per listing.
Compliance and Responsible Use
This actor collects publicly available real estate listing information from https://www.vivareal.com.br/ for legitimate business purposes such as market analysis, listing monitoring, enrichment, and internal reporting workflows. Users are responsible for ensuring their use of collected data complies with applicable laws, regulations, and site terms. This section is informational and not legal advice.
- Use collected data in accordance with applicable laws and site terms.
- Respect privacy and personal information.
- Avoid disruptive or excessive collection.
- Do not use the actor for spam, harassment, or harmful activity.
- Follow relevant data protection requirements where applicable.
FAQ
Can I search by area instead of direct listing URLs?
Yes. Use the location input to run area-based searches such as cities, neighborhoods, districts, avenues, or streets in Brazil.
Can I use direct listing URLs?
Yes. Pass one or more listing URLs in startUrls when you want the run to start from specific properties or saved search pages.
Can I export the data into other tools?
Yes. The actor writes output to an Apify dataset that can be exported in formats such as JSON, CSV, and Excel, or consumed in your own applications and automations.
Can I run it on a schedule?
Yes. Apify schedules let you run the actor daily, weekly, or on a custom cron so your dataset stays current for recurring workflows.
Is the output suitable for analytics and enrichment?
Yes. The output is normalized for downstream analysis, reporting, enrichment, monitoring, and operational workflows.
Can I connect it to Zapier, Make, or n8n?
Yes. The actor works well with webhook-driven and dataset-driven automations, including Zapier, Make, and n8n workflows.
What should I include if I need support?
Share the input you used with sensitive values removed, the run ID, what you expected, what happened instead, and a small sample of the output if it helps explain the issue.
Support
If you need help, use the Issues tab or the support section on the actor page. Include the input you used with sensitive values redacted, the run ID, a short note on expected versus actual behavior, and, if helpful, a small output sample.