# VivaReal Scraper - Brazil Real Estate Imoveis (`logiover/vivareal-scraper`) Actor

Scrape VivaReal (Grupo OLX/ZAP) property listings for sale or rent across Brazil. Price, condo fee, IPTU, area, bedrooms, geo, photos, description & agent. Thousands of listings. No login.

- **URL**: https://apify.com/logiover/vivareal-scraper.md
- **Developed by:** [Logiover](https://apify.com/logiover) (community)
- **Categories:** Real estate, E-commerce
- **Stats:** 39 total users, 3 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.50 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## VivaReal Scraper — Brazil Real Estate (Imóveis) Listings

Extract property listings (imóveis) from VivaReal without a login or API key. This VivaReal scraper turns any city, search URL or filter into a clean Brazil real-estate dataset — with price, condo fee, IPTU, usable area and exact coordinates — that you can export to CSV, JSON or Excel.

Choose **for sale** (venda) or **for rent** (aluguel), pick a city and property type, or paste a vivareal.com.br search URL, and the actor paginates to pull thousands of listings across Brazil.

### What you get

Each listing is saved as a structured record. Fields include:

- **title** — listing headline
- **price** — price in BRL
- **condoFee** — monthly condominium fee
- **iptu** / **yearlyIptu** — property tax (IPTU)
- **operationType** — sale (venda) or rental (aluguel)
- **propertyType** — apartment, house, land, commercial, farm, penthouse
- **listingType** — used/resale or new development
- **bedrooms**, **bathrooms** — room counts
- **usableAreaM2** — usable floor area in m²
- **address** — neighborhood, city, state, ZIP, full address
- **lat** / **lng** — exact GPS coordinates
- **description** — listing description
- **account** — advertiser / agency name
- **videoTourLink** — video tour, when available
- **url** — direct link to the VivaReal listing

Download as **JSON, CSV, Excel or via the Apify API**, or push to your own storage.

### Use cases

- **Brazil real-estate market analysis** — track price, price-per-m², condo fees and IPTU across cities and neighborhoods.
- **Imóveis lead generation** — collect advertiser and agency names for outreach lists.
- **Investor deal sourcing** — filter by price, bedrooms and property type to surface rentals or resale opportunities.
- **Comparables & valuation** — assemble comps by neighborhood with area, beds and full address.
- **Mapping & dashboards** — feed geo-coded listings into a GIS map or BI dashboard.

### How to use

1. Click **Try for free** / **Start**.
2. Either paste **VivaReal search URLs** from vivareal.com.br (location, sale/rent, type and price filters are parsed from the URL), or use the builder: set **City** (e.g. `São Paulo`), **Operation** (sale/rent), **Property type** and optional **min/max price** and **min bedrooms**.
3. Set **Max results** and run.

Results stream into the dataset as the actor paginates. Export in any format or automate it on a schedule via the Apify API.

> **Tip:** VivaReal data is served from Brazil. Keep the default proxy (Apify Proxy · RESIDENTIAL · country BR) for reliable access.

### FAQ

#### Do I need a VivaReal account or API key?
No. The actor reads only public VivaReal listing data through Brazilian residential proxies — no login, no cookies and no API key.

#### Can I scrape both rentals and properties for sale?
Yes. Set **Operation** to **For sale** (venda) or **For rent** (aluguel), and optionally choose used/resale or new development listings.

#### Does it include condo fees and IPTU?
Yes. Each record includes `condoFee` (monthly condominium fee) and `iptu` / `yearlyIptu` (property tax) alongside the listing price in BRL.

#### Is scraping VivaReal legal?
This actor collects only publicly available listing data. You are responsible for using it in line with VivaReal's terms and applicable laws (such as Brazil's LGPD for personal data like advertiser details). Use it responsibly.

# Actor input Schema

## `searchUrls` (type: `array`):

Paste one or more vivareal.com.br search/result page URLs (e.g. https://www.vivareal.com.br/venda/sp/sao-paulo/apartamento_residencial/). The actor derives the location, operation (sale/rent), property type and price filters from each URL. Leave empty to use the builder fields below.
## `operationType` (type: `string`):

Buy (SALE) or rent (RENTAL). Used in builder mode when no search URLs are given.
## `listingType` (type: `string`):

USED = resale/used properties. DEVELOPMENT = new launches.
## `propertyType` (type: `string`):

Filter by property type (builder mode). Leave blank for all types.
## `city` (type: `string`):

City name in Portuguese, e.g. 'São Paulo', 'Rio de Janeiro', 'Curitiba' (builder mode).
## `state` (type: `string`):

State name in Portuguese, e.g. 'São Paulo', 'Rio de Janeiro' (optional, improves accuracy).
## `locationId` (type: `string`):

Optional VivaReal locationId to target a neighborhood precisely, e.g. 'BR>Sao Paulo>NULL>Sao Paulo>Zona Oeste>Pinheiros'. Overrides city/state when set.
## `minPrice` (type: `integer`):

Minimum price filter in Brazilian Reais.
## `maxPrice` (type: `integer`):

Maximum price filter in Brazilian Reais.
## `minBedrooms` (type: `integer`):

Minimum number of bedrooms.
## `maxResults` (type: `integer`):

Maximum listings to collect across all searches. A single query returns up to ~1,476 listings; add more cities/filters or URLs to reach more.
## `proxyConfiguration` (type: `object`):

VivaReal data is served from Brazil. Keep the default Apify Proxy · RESIDENTIAL group · country BR for reliable access.

## Actor input object example

```json
{
  "searchUrls": [
    "https://www.vivareal.com.br/venda/sp/sao-paulo/apartamento_residencial/"
  ],
  "operationType": "SALE",
  "listingType": "USED",
  "propertyType": "",
  "city": "São Paulo",
  "state": "São Paulo",
  "maxResults": 1000,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "BR"
  }
}
````

# Actor output Schema

## `title` (type: `string`):

Listing title

## `operationType` (type: `string`):

Sale / rental

## `price` (type: `string`):

Price in BRL

## `bedrooms` (type: `string`):

Bedrooms

## `usableAreaM2` (type: `string`):

Usable area in m²

## `url` (type: `string`):

Listing URL

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchUrls": [],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "BR"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/vivareal-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchUrls": [],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "BR",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("logiover/vivareal-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchUrls": [],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "BR"
  }
}' |
apify call logiover/vivareal-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=logiover/vivareal-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "VivaReal Scraper - Brazil Real Estate Imoveis",
        "description": "Scrape VivaReal (Grupo OLX/ZAP) property listings for sale or rent across Brazil. Price, condo fee, IPTU, area, bedrooms, geo, photos, description & agent. Thousands of listings. No login.",
        "version": "1.0",
        "x-build-id": "yyeCn3QBw6PocztR1"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/logiover~vivareal-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-logiover-vivareal-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/logiover~vivareal-scraper/runs": {
            "post": {
                "operationId": "runs-sync-logiover-vivareal-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/logiover~vivareal-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-logiover-vivareal-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchUrls": {
                        "title": "VivaReal search URLs",
                        "type": "array",
                        "description": "Paste one or more vivareal.com.br search/result page URLs (e.g. https://www.vivareal.com.br/venda/sp/sao-paulo/apartamento_residencial/). The actor derives the location, operation (sale/rent), property type and price filters from each URL. Leave empty to use the builder fields below.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "operationType": {
                        "title": "Operation",
                        "enum": [
                            "SALE",
                            "RENTAL"
                        ],
                        "type": "string",
                        "description": "Buy (SALE) or rent (RENTAL). Used in builder mode when no search URLs are given.",
                        "default": "SALE"
                    },
                    "listingType": {
                        "title": "Listing type",
                        "enum": [
                            "USED",
                            "DEVELOPMENT"
                        ],
                        "type": "string",
                        "description": "USED = resale/used properties. DEVELOPMENT = new launches.",
                        "default": "USED"
                    },
                    "propertyType": {
                        "title": "Property type",
                        "enum": [
                            "",
                            "APARTMENT",
                            "HOME",
                            "ALLOTMENT_LAND",
                            "BUSINESS",
                            "FARM",
                            "PENTHOUSE"
                        ],
                        "type": "string",
                        "description": "Filter by property type (builder mode). Leave blank for all types.",
                        "default": ""
                    },
                    "city": {
                        "title": "City",
                        "type": "string",
                        "description": "City name in Portuguese, e.g. 'São Paulo', 'Rio de Janeiro', 'Curitiba' (builder mode)."
                    },
                    "state": {
                        "title": "State",
                        "type": "string",
                        "description": "State name in Portuguese, e.g. 'São Paulo', 'Rio de Janeiro' (optional, improves accuracy)."
                    },
                    "locationId": {
                        "title": "Location ID (advanced)",
                        "type": "string",
                        "description": "Optional VivaReal locationId to target a neighborhood precisely, e.g. 'BR>Sao Paulo>NULL>Sao Paulo>Zona Oeste>Pinheiros'. Overrides city/state when set."
                    },
                    "minPrice": {
                        "title": "Min price (BRL)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum price filter in Brazilian Reais."
                    },
                    "maxPrice": {
                        "title": "Max price (BRL)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum price filter in Brazilian Reais."
                    },
                    "minBedrooms": {
                        "title": "Min bedrooms",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum number of bedrooms."
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum listings to collect across all searches. A single query returns up to ~1,476 listings; add more cities/filters or URLs to reach more.",
                        "default": 1000
                    },
                    "proxyConfiguration": {
                        "title": "Proxy",
                        "type": "object",
                        "description": "VivaReal data is served from Brazil. Keep the default Apify Proxy · RESIDENTIAL group · country BR for reliable access.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ],
                            "apifyProxyCountry": "BR"
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
