# Imovelweb Scraper (`ribtools/imovelweb-scraper`) Actor

Scrape Imovelweb.com.br property listings (apartments, houses, land, commercial, new developments) from any search, development, agency or ad URL: prices, condo fees, areas, location and agency contacts.

- **URL**: https://apify.com/ribtools/imovelweb-scraper.md
- **Developed by:** [RibTools](https://apify.com/ribtools) (community)
- **Categories:** Real estate, Lead generation, Automation
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.99 / 1,000 property data 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/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 Scraper

Extract property listings from **Imovelweb**, one of Brazil's largest real-estate portals. Each listing comes with price, condo fee, areas, bedrooms, suites, parking, full location, map coordinates and the full description, for sale or rent. Optional add-ons fetch every photo, the publication date and IPTU, and the seller's name and phone numbers.

### What is Imovelweb Scraper?

**Imovelweb Scraper** collects property listings from [Imovelweb](https://www.imovelweb.com.br/): apartments, houses, land, commercial property and new developments (lançamentos). You give it starting URLs and it returns structured data for each listing:

- property type, sale or rent, and price in reais (with price per m², and the rent of a for-sale ad that is also offered for rent)
- usable and total area, bedrooms, suites, bathrooms, parking spaces, property age and the monthly condo fee
- state (UF), city, neighborhood, street and map coordinates
- the full description, the main photo and the photo count
- for new developments: construction stage, delivery, number of units, unit area range, the lowest unit price and the developer

Two optional add-ons go further. Ad details adds every photo, the publication date, IPTU, unit and building amenities, and video and virtual-tour links. Seller data adds the seller's name, CRECI licence, Imovelweb page and phone numbers (WhatsApp).

The scraper handles pagination, retries and data normalization itself, so the dataset is ready to analyze or feed into your systems.

### What can this Actor do?

- **Extract every property type**: apartments, houses, land, commercial property and new developments, for sale and for rent
- **Handle multiple entry points**: searches with any filters, development searches, agency, broker or developer pages, and single ad URLs
- **Automatic pagination**: crawls through every result page, 30 properties per page, up to Imovelweb's limit of 30,000 results per search
- **Ad details add-on**: every photo, publication date, IPTU, amenities, video and virtual tour
- **Seller data add-on**: seller name, CRECI, Imovelweb page and phone numbers
- **No duplicates**: each property is returned (and charged) once per run, even when listings move between pages
- **Premium proxies included**: Brazilian residential proxies built in at no additional cost
- **Structured output**: JSON, CSV and Excel formats
- **API integration**: real-time data access through the Apify API
- **Scheduled runs**: automated daily or weekly collection

### What data can Imovelweb Scraper extract?

| Field | Description | Example |
| ----- | ----------- | ------- |
| **ID** | Imovelweb ad identifier | 2970403564 |
| **Title** | Ad title | Pronto para morar, duplex reformado |
| **Property Type** | Imovelweb's type label and id | Apartamentos (2) |
| **Transaction** | Sale or rent | sale, rent |
| **Price** | Asking price or monthly rent in reais, and price per m² | 2000000, 20000.0 |
| **Condo fee** | Monthly condominium fee in reais | 3600 |
| **Areas** | Usable (área útil) and total area in m² | 100, 100 |
| **Rooms** | Bedrooms, suites, bathrooms, parking spaces | 2, 2, 3, 2 |
| **Location** | State, city, neighborhood, street, coordinates | SP, São Paulo, Brooklin |
| **Development** | Construction stage, delivery, units, unit area range, developer | Na planta, Novembro 2028, 5 |
| **Seller type** | private, agency or developer | agency |
| **Badges** | Labels shown on the card | Varanda, Proprietário direto |
| **Media** | Thumbnail and photo count | |
| **Details** (add-on) | Photos, publication date, IPTU, amenities, video, tour | See below |
| **Seller** (add-on) | Name, CRECI, Imovelweb page, phones | See below |

### How to scrape Imovelweb

#### Step-by-step tutorial:

1. **Add starting URLs**: paste Imovelweb search, development, agency or ad URLs (see compatible formats below)
2. **Configure options** (optional): turn on the ad details and/or seller data add-ons
3. **Run the scraper**: click "Start" and watch progress in real time
4. **Download results**: export the data as JSON, CSV or Excel

Proxies are included automatically — no setup required.

#### Compatible URL examples:

- **Search for sale**: `https://www.imovelweb.com.br/apartamentos-venda-sao-paulo-sp.html`
- **Search for rent with filters**: `https://www.imovelweb.com.br/apartamentos-aluguel-sao-paulo-sp-2-quartos.html`
- **Neighborhood**: `https://www.imovelweb.com.br/apartamentos-venda-pinheiros-sao-paulo.html`
- **Price, keyword or private owners only**: `https://www.imovelweb.com.br/casas-venda-campinas-sp-menos-500000-reales.html`, `https://www.imovelweb.com.br/casas-venda-campinas-sp-q-terrea.html`, `https://www.imovelweb.com.br/imoveis-venda-campinas-sp-particular.html`
- **Starting at a later page**: `https://www.imovelweb.com.br/apartamentos-venda-sao-paulo-sp-pagina-7.html`
- **New developments**: `https://www.imovelweb.com.br/lancamentos-sao-paulo-sp.html`
- **Agency, broker or developer page**: `https://www.imovelweb.com.br/imobiliarias/revenda-imovel_47350192-imoveis.html`
- **Single ad**: `https://www.imovelweb.com.br/propriedades/apartamento-a-venda-na-vila-olimpia-sao-paulo-sp:-3-3041181837.html`

**Important**: copy search URLs from the site after choosing your filters. Imovelweb silently widens a URL it doesn't recognize (an unknown place or a guessed filter) into a broader search, sometimes the whole country. The scraper detects that, skips the URL and says so in the run's status message, so you never pay for results you didn't ask for. Imovelweb shows at most 30,000 results per search: split bigger searches by price, area or neighborhood.

### How much does it cost to scrape Imovelweb?

Imovelweb Scraper uses **pay-per-result (PPR)** pricing: you only pay for properties it successfully extracts.

- **Base extraction**: one charge per scraped property
- **Ad details add-on**: one additional charge per property, only when the details add-on is on and the ad page returns data
- **Seller data add-on**: one additional charge per property that returns seller data

The scraper keeps compute usage low while maintaining a high success rate. Contact support for volume discounts on large-scale projects.

### Input configuration

#### Start URLs

Imovelweb URLs copied from your browser: searches of any property type, operation and place with any filters, paged search URLs, new-development searches, agency, broker or developer pages, and single ads.

#### Maximum items

Maximum number of properties to scrape (each result is a charged event). Leave empty for no limit.

#### Fetch ad details (add-on)

Opens each ad to add every photo, the publication date, IPTU, unit and building amenities, and video and virtual-tour links. Charged per property with details.

#### Fetch seller data (add-on)

Adds the seller's name, CRECI licence, Imovelweb page and phone numbers (WhatsApp), for agencies, brokers, developers and private owners. Charged per property with seller data.

### Output example

```json
{
  "type": "property",
  "id": 2970403564,
  "url": "https://www.imovelweb.com.br/propriedades/pronto-para-morar-duplex-reformado-2970403564.html",
  "title": "Pronto para morar, duplex reformado",
  "property_type": "Apartamentos",
  "property_type_id": "2",
  "is_development": false,
  "transaction": "sale",
  "price": 2000000,
  "currency": "BRL",
  "price_is_starting_from": false,
  "price_per_m2": 20000.0,
  "rent_price": 9000,
  "sale_price": null,
  "condo_fee": 3600,
  "area_m2": 100.0,
  "total_area_m2": 100.0,
  "bedrooms": 2,
  "bathrooms": 3,
  "suites": 2,
  "parking_spaces": 2,
  "property_age_years": 13,
  "description": "Duplex equipado e decorado, cozinha planejada, lavanderia...",
  "region": "SP",
  "city": "São Paulo",
  "neighborhood": "Brooklin",
  "street": "R Ribeiro do Vale",
  "latitude": -23.6092253,
  "longitude": -46.6845995,
  "construction_status": null,
  "development_delivery": null,
  "development_units": null,
  "development_area_min_m2": null,
  "development_area_max_m2": null,
  "developer_name": null,
  "seller_type": "agency",
  "seller_id": "47009933",
  "reference_code": "IP17376",
  "badges": [],
  "complex_features": [],
  "thumbnail": "https://imgbr.imovelwebcdn.com/avisos/2/29/70/40/35/64/720x532/5672365288.jpg",
  "photo_count": 15,
  "details": {
    "photos": ["https://imgbr.imovelwebcdn.com/avisos/2/29/70/40/35/64/1200x1200/5672365288.jpg"],
    "listed_at": "2026-07-26T19:54:17Z",
    "iptu": 250,
    "features": ["Suítes"],
    "complex_features": ["Elevador", "Salão de festas", "Vigilância 24h"],
    "video_url": "https://www.youtube.com/watch?v=QrRgyAumih8",
    "virtual_tour_url": null
  },
  "seller": {
    "type": "agency",
    "id": "47009933",
    "name": "Imobiliária Exemplo",
    "profile_url": "https://www.imovelweb.com.br/imobiliarias/imobiliaria-exemplo_47009933-imoveis.html",
    "logo_url": null,
    "creci": "99999-F",
    "phones": ["+5511900000000"]
  }
}
```

This example is shortened and its seller is fictitious.

Single ad URLs come without coordinates, and with the ad page's singular type label ("Apartamento"); `property_type_id` is the same on both routes.

You can download the dataset extracted by **Imovelweb Scraper** as **JSON, HTML, CSV or Excel**.

### Use cases and applications

- **Housing market research**: track asking prices, rents, condo fees and price per m² by state, city, neighborhood and property type
- **Property valuation**: compare listings by area, bedrooms, suites, parking and age
- **New-development tracking**: follow launches, construction stage, delivery dates, unit counts and starting prices
- **Lead generation**: build lists of agencies, brokers and developers with their Imovelweb pages and phones (seller add-on)

### Integrations and API access

- **Zapier**: automate data workflows and notifications (via the [Apify Zapier integration](https://docs.apify.com/platform/integrations/zapier))
- **Make (Integromat)**: build multi-step automations (via the [Apify Make integration](https://www.make.com/en/integrations/apify))
- **Google Sheets**: export data directly for analysis
- **REST API**: programmatic access to the extracted data ([instructions here](https://docs.apify.com/academy/api/run-actor-and-retrieve-data-via-api))
- **Python/Node.js SDKs**: integrate the scraper into your applications ([instructions here](https://docs.apify.com/academy/api/run-actor-and-retrieve-data-via-api#javascript-and-python-client))

### FAQ and Support

#### Do I need to configure a proxy?

No. The Actor includes Brazilian residential proxies automatically at no additional cost.

#### Where are the sellers' names and phone numbers?

Only in the opt-in seller data add-on. The results themselves never carry a person's name or phone: `seller_type` says whether the seller is a private owner, an agency or a developer, and private owners' listings have no seller id. `street` follows the listing: it is filled when Imovelweb shows the street, private owners included, and empty when the listing says "Endereço não informado" (also when a single ad's page shows only a house number). With the seller add-on on, each property gets the seller's name, CRECI (when published), Imovelweb page and phone numbers, private owners included. Use this personal data in line with Brazil's LGPD.

#### What are `area_m2`, `total_area_m2` and `price`?

`area_m2` is the usable area (área útil) and `total_area_m2` the total area (área total). `price` follows the ad's operation; a for-sale ad also offered for rent has its rent in `rent_price` (and the reverse in `sale_price`). For new developments, `price` is the lowest unit price and `price_is_starting_from` is true.

#### Why did a URL return nothing?

Imovelweb answers a URL it doesn't recognize with a wider search. The scraper skips such URLs and says so in the run's status message: copy the URL again from the site.

#### Will I get every listing of my search?

Usually, yes. Imovelweb's default "relevant" order reshuffles every few minutes while you browse it, so a page can repeat ads from an earlier page and skip others. The scraper never ships an ad twice, and when a run ends with fewer ads than Imovelweb counts for the search, it goes through the search again (up to two more times) to pick up the ads it missed. On very large searches (about 100 pages or more) under the relevant order, complete coverage can't be guaranteed, and the run's status message says how many ads it could not reach: narrow the search (price, area, neighborhood) or pick a sort order on the site before copying the URL.

#### How often is the data updated?

Imovelweb updates listings in real time. For fresh data, schedule regular runs or call the API on demand.

#### Need help or have feedback?

- **Report issues**: use the Issues tab for bug reports and feature requests
- **Custom development**: contact us for tailored solutions and enterprise integrations

### Em português

**Imovelweb Scraper** extrai anúncios de imóveis à venda e para alugar do [Imovelweb](https://www.imovelweb.com.br/): apartamentos, casas, terrenos, imóveis comerciais e lançamentos. Cada anúncio traz preço, condomínio, área útil e total, quartos, suítes, banheiros, vagas, estado, cidade, bairro, rua, coordenadas e a descrição completa.

**URLs aceitas:** buscas com qualquer filtro (copiadas do site, inclusive páginas `-pagina-N`), lançamentos (`/lancamentos-...`), páginas de imobiliárias, corretores e construtoras (`/imobiliarias/..._<id>-imoveis.html`) e anúncios (`/propriedades/...-<id>.html`).

**Add-ons:**

- **Detalhes do anúncio**: todas as fotos, data de publicação, IPTU, itens do imóvel e do condomínio, vídeo e tour virtual.
- **Dados do anunciante**: nome, CRECI, página no Imovelweb e telefones (WhatsApp), inclusive de proprietários diretos. Trate esses dados pessoais conforme a LGPD.

Proxies brasileiros incluídos, sem configuração. O Imovelweb mostra no máximo 30.000 resultados por busca: divida buscas maiores por preço, área ou bairro.

A ordem "relevantes" do Imovelweb se reorganiza a cada poucos minutos: o scraper nunca repete um anúncio e, quando faltam anúncios em relação ao total da busca, percorre a busca de novo (até mais duas vezes) para recuperá-los. Em buscas muito grandes (cerca de 100 páginas ou mais) nessa ordem, a cobertura completa não pode ser garantida: refine a busca ou escolha uma ordenação no site antes de copiar a URL. A rua sai como o anúncio mostra, inclusive a de proprietários diretos.

# Changelog

This Actor's version history is a separate document: https://apify.com/ribtools/imovelweb-scraper/changelog.md

# Actor input Schema

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

Imovelweb URLs copied from your browser. Search URLs of any property type, operation and place, with any filters applied (bedrooms, price, keyword, private owners only, sort), e.g. `https://www.imovelweb.com.br/apartamentos-venda-sao-paulo-sp.html` or `https://www.imovelweb.com.br/apartamentos-aluguel-sao-paulo-sp-2-quartos.html`. Paged URLs (`...-pagina-3.html`) start at that page. New developments (`/lancamentos-sao-paulo-sp.html`), agency, broker or developer pages (`/imobiliarias/<name>_<id>-imoveis.html`) and single ads (`/propriedades/...-<id>.html`) also work. Imovelweb shows at most 30,000 results per search: split bigger searches by price, area or neighborhood.

## `maxRequests` (type: `integer`):

Maximum number of properties to scrape (each result is a charged event). Leave empty for no limit.

## `detailsAddon` (type: `boolean`):

Open each ad to add every photo, the publication date, IPTU, unit and building amenities, and video and virtual-tour links. Charged per property with details.

## `sellerDataAddon` (type: `boolean`):

Add the seller's name, CRECI licence, Imovelweb page and phone numbers (WhatsApp), for agencies, brokers, developers and private owners. Charged per property with seller data.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.imovelweb.com.br/apartamentos-venda-sao-paulo-sp.html"
    }
  ],
  "maxRequests": 10,
  "detailsAddon": false,
  "sellerDataAddon": false
}
```

# Actor output Schema

## `items` (type: `string`):

All scraped items.

# 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-venda-sao-paulo-sp.html"
        }
    ],
    "maxRequests": 10,
    "detailsAddon": false,
    "sellerDataAddon": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("ribtools/imovelweb-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-venda-sao-paulo-sp.html" }],
    "maxRequests": 10,
    "detailsAddon": False,
    "sellerDataAddon": False,
}

# Run the Actor and wait for it to finish
run = client.actor("ribtools/imovelweb-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-venda-sao-paulo-sp.html"
    }
  ],
  "maxRequests": 10,
  "detailsAddon": false,
  "sellerDataAddon": false
}' |
apify call ribtools/imovelweb-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ribtools/imovelweb-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/oB4ZNFJFfhpfPvWvk/builds/e7Y7seg70AoMkrhQU/openapi.json
