# Imovelweb Listings Scraper (`piotrv1001/imovelweb-listings-scraper`) Actor

Export Imovelweb property listings from any search URL: price and operation (aluguel/venda), condomínio fees, bairro and coordinates, area, quartos, suítes, bathrooms, vagas, photos, description and the listing agency. Brazil real estate data as JSON, CSV or Excel.

- **URL**: https://apify.com/piotrv1001/imovelweb-listings-scraper.md
- **Developed by:** [FalconScrape](https://apify.com/piotrv1001) (community)
- **Categories:** Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### 🚀 Imovelweb Listings Scraper

Export property listings from [Imovelweb](https://www.imovelweb.com.br), one of Brazil's largest real estate portals. The **Imovelweb Listings Scraper** turns any Imovelweb search — apartamentos para alugar, casas à venda, salas comerciais, terrenos, in any city or bairro — into structured data: price for aluguel and venda, condomínio fee, bairro, city and state, map coordinates, área total and útil, quartos, suítes, banheiros, vagas, photos, the full description and the listing imobiliária. Use it for rental market analysis, price monitoring, investment research or lead lists of agencies.

### ✨ Features

- 🔎 **Any search you can build on Imovelweb**: paste the results URL after choosing location, operation, property type, price range, rooms, sort order or any other filter — every page of that search is collected, not just the first few.
- 💰 **Prices by operation**: the main `price` follows your search (aluguel / venda); listings offered both ways also carry every price in `prices`. Currencies are ISO codes (BRL or USD).
- 📍 **Location down to the map pin**: address, bairro (`neighborhood`), city (`city`) and state (`region`), plus latitude and longitude when the listing shows its location.
- 📐 **Property details**: total and built area (m²), quartos (and `suites`), bathrooms, vagas, age, property type and condomínio fees.
- 🏢 **Who is selling**: agency (inmobiliaria/imobiliária) name, ID and profile URL on every listing.
- 🖼️ **Photos and description**: full-size photo URLs and the complete listing text.
- ♻️ **No duplicates**: featured listings that Imovelweb repeats on every page — and listings shared by overlapping searches — are returned and charged once.

### 🛠️ How It Works

1. **Search on Imovelweb** – Open [Imovelweb](https://www.imovelweb.com.br/apartamentos-aluguel-sao-paulo-sp.html), set the location and filters you want and copy the URL of the results page.
2. **Paste the URL(s)** – Add one or more search URLs. A URL ending in `-pagina-3.html` starts from page 3.
3. **Set a limit** – `maxItems` caps the total number of listings (default 50).
4. **Run it** – Listings arrive page by page; the `SUMMARY` record shows, for each search, how many results Imovelweb reported and how many were collected.

### ⚙️ Input

| Field | Description |
|---|---|
| `startUrls` | Imovelweb search results URLs, e.g. `https://www.imovelweb.com.br/apartamentos-aluguel-sao-paulo-sp.html`. |
| `maxItems` | Maximum number of listings across all searches. Default 50. |
| `proxyConfiguration` | Apify Proxy; the default works. |

```json
{
    "startUrls": [
        { "url": "https://www.imovelweb.com.br/apartamentos-aluguel-sao-paulo-sp.html" },
        { "url": "https://www.imovelweb.com.br/casas-venda-rio-de-janeiro-rj.html" }
    ],
    "maxItems": 500
}
```

### 📊 Sample Output Data

```json
{
    "postingId": "3033288162",
    "url": "https://www.imovelweb.com.br/propriedades/casa-em-condominio-em-recreio-dos-bandeirantes-rio-3033288162.html",
    "title": "Casa em Condominio em Recreio dos Bandeirantes  -  Rio de Janeiro",
    "operation": "Venda",
    "price": 2350000,
    "currency": "BRL",
    "prices": [
        {
            "operation": "Venda",
            "price": 2350000,
            "currency": "BRL"
        }
    ],
    "expenses": null,
    "expensesCurrency": null,
    "propertyType": "Casas",
    "postingType": "PROPERTY",
    "address": null,
    "neighborhood": "Recreio dos Bandeirantes",
    "city": "Rio de Janeiro",
    "region": "Rio De Janeiro",
    "latitude": -23.011075,
    "longitude": -43.4726055,
    "totalArea": 306,
    "coveredArea": 306,
    "rooms": null,
    "bedrooms": 4,
    "bathrooms": 5,
    "halfBathrooms": null,
    "suites": 4,
    "parkingSpaces": 2,
    "ageYears": 9,
    "description": "Concetto bianco - recreio dos bandeirantesmaravilhosa Casa Duplex de 306 m², no condomínio Concetto Bianco1º pavimento: amapla sala em 2 ambientes, piso em porc…",
    "images": [
        "https://imgbr.imovelwebcdn.com/avisos/2/30/33/28/81/62/720x532/7261798727.jpg",
        "https://imgbr.imovelwebcdn.com/avisos/2/30/33/28/81/62/720x532/7261812360.jpg"
    ],
    "publisherName": "Trinità Lemonde",
    "publisherId": "47858541",
    "publisherUrl": "https://www.imovelweb.com.br/imobiliarias/trinita-lemonde_47858541-imoveis.html",
    "postingCode": "7795",
    "modifiedAt": "2026-09-28T23:26:05-0400",
    "searchUrl": "https://www.imovelweb.com.br/casas-venda-rio-de-janeiro-rj.html",
    "scrapedAt": "2026-09-29T11:41:20.205Z"
}
```

### 💰 Pricing

This Actor uses pay-per-event pricing: **$1.50 per 1,000 listings** ($0.0015 per listing), plus a tiny start fee per run. You pay only for listings delivered to the dataset — repeats are never charged. Set a maximum cost per run in Apify Console and the Actor stops when it is reached.

### ❓ FAQ

**How many listings can I get from one search?**
All of them — the Actor walks every page of the search until Imovelweb runs out of results or your `maxItems` is reached. For very large searches, a narrower location or filter set keeps runs short.

**Does it return phone numbers or emails?**
No. Imovelweb shows agents' contact details only through its contact forms, so the output carries the agency name, ID and profile URL instead.

**Which price is `price` when a property is offered for sale and for rent?**
The one matching your search (aluguel / venda). All prices are listed in `prices`.

**Can I monitor new listings?**
Yes — schedule the Actor with a search sorted by newest and compare `postingId`s between runs; `modifiedAt` shows when each listing was last updated.

**Is scraping Imovelweb legal?**
The Actor collects publicly visible listing data. Make sure your use of it complies with Imovelweb's terms and with data-protection law in your country.

*Keywords: imovelweb scraper, imovelweb API, apartamentos para alugar São Paulo, imóveis à venda, preço de aluguel, imobiliárias Brasil.*

# Actor input Schema

## `startUrls` (type: `array`):

Imovelweb search results pages, copied from the browser after choosing location, operation, property type and any filters or sort. Every page of each search is collected. A URL ending in -pagina-3.html starts from page 3.

## `maxItems` (type: `integer`):

Stop after this many listings across all searches. Each listing is returned once even when several searches include it.

## `proxyConfiguration` (type: `object`):

Imovelweb accepts connections from Brazil; the default works.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.imovelweb.com.br/apartamentos-aluguel-sao-paulo-sp.html"
    }
  ],
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "BR"
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `summary` (type: `string`):

No description

# 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 = {
    "startUrls": [
        {
            "url": "https://www.imovelweb.com.br/apartamentos-aluguel-sao-paulo-sp.html"
        }
    ],
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "BR"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/imovelweb-listings-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 = {
    "startUrls": [{ "url": "https://www.imovelweb.com.br/apartamentos-aluguel-sao-paulo-sp.html" }],
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "BR",
    },
}

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

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

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

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://www.imovelweb.com.br/apartamentos-aluguel-sao-paulo-sp.html"
    }
  ],
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "BR"
  }
}' |
apify call piotrv1001/imovelweb-listings-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,piotrv1001/imovelweb-listings-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/wcT9b9b5RlIeBEZu1/builds/uN2noDvIrnD20oucU/openapi.json
