# ZAP Imóveis Scraper (`ribtools/zapimoveis-scraper`) Actor

Scrape ZAP Imóveis (zapimoveis.com.br) property listings for sale and rent: prices, condo fees, IPTU, areas, rooms, location and agency data. Brazilian proxies included.

- **URL**: https://apify.com/ribtools/zapimoveis-scraper.md
- **Developed by:** [RibTools](https://apify.com/ribtools) (community)
- **Categories:** Real estate, Lead generation, Automation
- **Stats:** 3 total users, 2 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

## ZAP Imóveis Scraper

Extract property listings from **ZAP Imóveis**, one of Brazil's largest real-estate portals. Each listing comes with price, condo fee, IPTU, areas, bedrooms, bathrooms, parking, amenities, full location and the advertiser, for sale, rent and new developments. Optional add-ons fetch the full ad description and the advertiser's contact data.

### What is ZAP Imóveis Scraper?

**ZAP Imóveis Scraper** collects property listings from [ZAP Imóveis](https://www.zapimoveis.com.br/), the Brazilian portal for 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 and subtype, sale or rent, and price in reais (including price per m²)
- monthly condo fee, IPTU and, for rentals, the monthly total
- usable and total area, bedrooms, suites, bathrooms, parking spaces and floor
- state, city, zone, neighborhood, street and CEP for agency and developer ads, and map coordinates
- amenities, photos, video and virtual tour links, badges and the date the ad was created
- the advertiser type (agency, developer or private owner) and the agency's or developer's business name and ZAP Imóveis page
- for new developments: construction status, starting price and the range of unit areas

Two optional add-ons go further. Ad details adds the full description, the advertiser's own title, the last update date and floor plans. Seller data adds the advertiser's name, CRECI, plan, logo, ZAP Imóveis page, phone numbers and 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, penthouses, studios, land, offices, shops, warehouses and new developments, for sale and for rent
- **Handle multiple entry points**: searches with any filters, map searches, single ad URLs, development URLs, agency pages and condominium pages
- **Automatic pagination**: crawls through every search result page, 30 properties per page, up to ZAP Imóveis' limit of 1,500 listings per search
- **Ad details add-on**: full description, the advertiser's title, last update date and floor plans
- **Seller data add-on**: the advertiser's name, CRECI, plan, logo, ZAP Imóveis page, phone numbers and WhatsApp
- **No duplicates**: each property is returned (and charged) once per run, even when promoted listings repeat across 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 ZAP Imóveis Scraper extract?

| Field | Description | Example |
| ----- | ----------- | ------- |
| **ID** | ZAP Imóveis listing identifier | 2914416454 |
| **Title** | Ad title as ZAP Imóveis shows it | Apartamento com 2 Quartos à venda, 64m² |
| **Property Type** | Unit type, subtype and usage | apartment, penthouse, residential |
| **Transaction** | Sale, rent or vacation rental | sale, rent |
| **Price** | Asking price or monthly rent in reais, price per m², monthly rental total | 750000, 11718.75 |
| **Condo fee / IPTU** | Monthly condo fee and IPTU in reais | 1170, 220 |
| **Areas** | Usable and total area in m² | 64, 64 |
| **Rooms** | Bedrooms, suites, bathrooms, parking spaces, floor | 2, 1, 2, 1 |
| **Location** | State, city, zone, neighborhood, street, CEP, coordinates | SP, São Paulo, Zona Sul, Parque Imperial |
| **Amenities** | Amenity codes the ad lists | POOL, BALCONY, GOURMET_BALCONY |
| **Development** | Construction status, starting price and unit area range | UNDER_CONSTRUCTION |
| **Seller** | Advertiser type, agency or developer name and ZAP Imóveis page | agency |
| **Media** | Photos, thumbnail, video and virtual tour links | |
| **Dates** | Date the ad was created | 2026-09-26T09:08:05.408Z |
| **Details** (add-on) | Description, advertiser's title, update date, floor plans | See below |
| **Seller** (add-on) | Name, CRECI, plan, logo, page, phones, WhatsApp | See below |

### How to scrape ZAP Imóveis

#### Step-by-step tutorial:

1. **Add starting URLs**: paste ZAP Imóveis search, ad, development, agency or condominium 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 in a city**: `https://www.zapimoveis.com.br/venda/apartamentos/sp+sao-paulo/`
- **Search for rent in a neighborhood**: `https://www.zapimoveis.com.br/aluguel/apartamentos/rj+rio-de-janeiro+zona-sul+copacabana/`
- **All property types in a state**: `https://www.zapimoveis.com.br/venda/imoveis/sp/`
- **Filtered search (bedrooms, price, sort)**: `https://www.zapimoveis.com.br/aluguel/imoveis/sp+sao-paulo/?quartos=2&precoMaximo=5000&ordem=Menor%20pre%C3%A7o`
- **Street search**: `https://www.zapimoveis.com.br/venda/imoveis/sp+sao-paulo/avenida-paulista/`
- **Any page after page 1** (with the `onde=` location the site adds): copy it as is
- **New developments**: `https://www.zapimoveis.com.br/lancamentos/apartamentos/sp+sao-paulo/`
- **Single ad**: `https://www.zapimoveis.com.br/imovel/venda-apartamento-3-quartos-com-piscina-vila-regente-feijo-zona-leste-sao-paulo-sp-89m2-id-2917187600/`
- **Single development**: `https://www.zapimoveis.com.br/lancamentos/auge-panamby-id-2896279476/`
- **Agency page (whole inventory, sale and rent)**: `https://www.zapimoveis.com.br/imobiliaria/234940/`
- **Condominium page**: `https://www.zapimoveis.com.br/condominio/sp-sao-paulo-republica-edificio-copan-id-c68891f1-92ab/`

**Important**: ZAP Imóveis returns at most **1,500 listings per search** (50 pages). A search with more results stops there and the run's status message says so: split it with filters (price ranges, bedrooms) or into neighborhoods to get everything. A URL whose location ZAP Imóveis doesn't know, or a page that isn't one of the forms above, is skipped and named in the status message. The scraper starts every search at page 1, whatever page you copied.

### How much does it cost to scrape ZAP Imóveis?

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

#### Is scraping ZAP Imóveis free?

The scraper follows Apify's PPR model with the following structure:

- **Base extraction**: one charge per scraped property (price, fees, areas, rooms, location, advertiser)
- **Ad details add-on**: one additional charge per property, only when the details add-on is on and the ad returns data
- **Seller data add-on**: one additional charge per property, only when the seller data add-on is on

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

### Input configuration

The scraper accepts the following inputs:

#### Start URLs

ZAP Imóveis URLs copied from your browser:

- searches for sale (`/venda/...`), rent (`/aluguel/...`) or new developments (`/lancamentos/...`), for any property type and place, with any filters applied, including map searches
- single ad URLs (`/imovel/...-id-2917187600/`) and development URLs (`/lancamentos/...-id-2896279476/`)
- agency pages (`/imobiliaria/234940/`) and condominium pages (`/condominio/...`)

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

- the full description and the advertiser's own title
- the date the ad was last updated
- floor plans

Charged per property with details.

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

Adds the advertiser's name, CRECI, plan, logo, ZAP Imóveis page, phone numbers and WhatsApp. Charged per property with seller data.

### Output example

```json
{
  "type": "property",
  "id": "2914416454",
  "url": "https://www.zapimoveis.com.br/imovel/venda-apartamento-2-quartos-com-piscina-saude-zona-sul-sao-paulo-sp-64m2-id-2914416454/",
  "title": "Apartamento com 2 Quartos à venda, 64m²",
  "property_type": "apartment",
  "property_subtype": null,
  "usage_type": "residential",
  "transaction": "sale",
  "price": 750000,
  "currency": "BRL",
  "price_per_m2": 11718.75,
  "price_is_starting_from": false,
  "rent_total_price": null,
  "condo_fee": 1170,
  "iptu": 220,
  "area_m2": 64.0,
  "total_area_m2": 64.0,
  "bedrooms": 2,
  "bathrooms": 2,
  "suites": 1,
  "parking_spaces": 1,
  "floor": null,
  "features": ["BALCONY", "AMERICAN_KITCHEN", "POOL", "KITCHEN", "GOURMET_BALCONY"],
  "region": "SP",
  "city": "São Paulo",
  "zone": "Zona Sul",
  "neighborhood": "Parque Imperial",
  "street": "Rua Doutor José Osório de Oliveira Azevedo, 35",
  "zip_code": "04302040",
  "latitude": -23.622484,
  "longitude": -46.630338,
  "location_precision": "GEOMETRIC_CENTER",
  "is_development": false,
  "construction_status": null,
  "developer_name": null,
  "development_area_max_m2": null,
  "seller_type": "agency",
  "seller_id": "e61a7111-2428-46df-c4ae-de4aafee525b",
  "seller_name": "Imobiliária Exemplo Ltda",
  "seller_url": "https://www.zapimoveis.com.br/imobiliaria/20098/",
  "advertiser_code": "111109",
  "publication_type": "SUPER_PREMIUM",
  "badges": [],
  "photos": [
    "https://resizedimgs.zapimoveis.com.br/img/vr-listing/35e73ed5d1d5bff50acc4cde22054eff/imovel.webp?action=fit-in&dimension=1920x1080"
  ],
  "thumbnail": "https://resizedimgs.zapimoveis.com.br/img/vr-listing/35e73ed5d1d5bff50acc4cde22054eff/imovel.webp?action=fit-in&dimension=1920x1080",
  "photo_count": 22,
  "video_count": 1,
  "video_url": "https://youtu.be/ZtQK48HXPco",
  "virtual_tour_url": null,
  "listed_at": "2026-09-26T09:08:05.408Z",
  "details": {
    "title": "Apartamento para comprar com 64 m², 2 quartos, 2 banheiros, 1 vaga",
    "description": "Apartamento com 2 dormitórios, sendo 1 suíte, varanda gourmet e 1 vaga…",
    "updated_at": "2026-10-13T19:54:44.124Z",
    "floor_plans": []
  },
  "seller": {
    "type": "agency",
    "id": "e61a7111-2428-46df-c4ae-de4aafee525b",
    "name": "Imobiliária Exemplo Ltda",
    "creci": "00000-J-SP",
    "plan": "diamond",
    "verified": true,
    "logo_url": "https://resizedimgs.zapimoveis.com.br/img/vr-listing/5745aa735e80e8a71afa5c40da0173f1/imovel.webp?action=fit-in&dimension=1920x1080",
    "profile_url": "https://www.zapimoveis.com.br/imobiliaria/20098/",
    "phones": ["11900000001", "11900000002"],
    "whatsapp": "11900000002"
  }
}
```

This example is shortened (one photo), and the advertiser's name, CRECI, phones and description are replaced with placeholders.

Single ad and development URLs come from the ad page, which doesn't carry `property_subtype`, `usage_type`, `zone`, `zip_code`, `total_area_m2`, `rent_total_price` or `location_precision`: those are empty for them.

You can download the dataset extracted by **ZAP Imóveis Scraper** as **JSON, HTML, CSV or Excel**. The data is already cleaned and normalized, ready for analysis tools, databases or business applications.

### Use cases and applications

- **Housing market research**: track asking prices, rents, condo fees, IPTU and price per m² by state, city, zone, neighborhood and property type
- **Property valuation**: compare listings by area, bedrooms, suites, parking, floor and amenities
- **New-development tracking**: follow launches, their construction status, starting prices and unit sizes
- **Agency monitoring and lead generation**: follow an agency's whole inventory on a schedule, or build lists of agencies with their contact data (seller data add-on)

### Integrations and API access

ZAP Imóveis Scraper integrates with these platforms:

- **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. There's nothing to configure.

#### Why do some listings have no street or advertiser name?

The core dataset ships street, number and CEP only for agency and developer ads, never for private owners, and the top-level `seller_name` only for agencies registered as companies (CRECI-J) and developers. A private owner's or an individual broker's name and phone numbers come only with the opt-in seller data add-on. The scraper follows each advertiser's address choice on ZAP Imóveis: the street number only when they show it, and no street, CEP or map pin when they show only the neighborhood.

#### Why did my search stop at 1,500 listings?

That is ZAP Imóveis' own limit per search: its pages end at 50. Split a large search by price ranges, bedrooms or neighborhoods and add each part as its own start URL. The status message tells you when a search hit the limit.

#### What are `condo_fee`, `iptu` and `rent_total_price`?

`condo_fee` is the monthly condominium fee and `iptu` the property tax as the ad publishes it (usually the yearly amount). `rent_total_price` is the monthly total ZAP Imóveis shows on rentals (rent plus fees). For new developments, `price` is the lowest unit price and `price_is_starting_from` is true.

#### How often is the data updated?

ZAP Imóveis updates listings in real time. For fresh data, schedule regular runs or call the API on demand.

#### What if some URLs don't work?

The scraper only supports the ZAP Imóveis URL patterns listed above. It skips any other URL, and any search whose location ZAP Imóveis doesn't recognise, and says so in the status message. A filter it can't pass on to ZAP Imóveis is ignored with a note in the status message.

#### Do you offer custom solutions?

Yes. We can customize the scraper for specific requirements, extra data points, or integration with your existing systems. Contact us through the Issues tab for enterprise solutions.

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

**ZAP Imóveis Scraper** extrai anúncios de imóveis à venda, para alugar e lançamentos do [ZAP Imóveis](https://www.zapimoveis.com.br/). Cada anúncio traz:

- tipo de imóvel e preço em reais (também o preço por m²), condomínio, IPTU e o total do aluguel
- área útil e total, quartos, suítes, banheiros, vagas e andar
- estado, cidade, zona, bairro, rua e CEP (imobiliárias e incorporadoras) e coordenadas
- comodidades, fotos, vídeo e tour virtual
- o tipo de anunciante e o nome da imobiliária ou incorporadora
- nos lançamentos: estágio da obra, preço "a partir de" e faixa de áreas

Proxy incluso, sem configuração.

**URLs aceitas:** buscas de venda (`/venda/...`), aluguel (`/aluguel/...`) e lançamentos (`/lancamentos/apartamentos/...`) com qualquer filtro, anúncios (`/imovel/...`), lançamentos (`/lancamentos/...-id-...`), páginas de imobiliárias (`/imobiliaria/...`) e de condomínios (`/condominio/...`). O ZAP Imóveis mostra no máximo 1.500 anúncios por busca: divida buscas maiores por filtros ou bairros.

**Add-ons:**

- **Detalhes do anúncio**: descrição completa, título do anunciante, data de atualização e plantas. Cobrado por imóvel com detalhes.
- **Dados do anunciante**: nome, CRECI, plano, logo, página no ZAP Imóveis, telefones e WhatsApp. Cobrado por imóvel com dados do anunciante.

# Changelog

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

# Actor input Schema

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

ZAP Imóveis URLs copied from your browser. Search URLs for sale (`/venda/...`), rent (`/aluguel/...`) or new developments (`/lancamentos/...`) of any property type and place, with any filters applied (bedrooms, price, area, amenities, sort, map area), e.g. `https://www.zapimoveis.com.br/venda/apartamentos/sp+sao-paulo+zona-sul+vl-mariana/`. Single ad URLs (`/imovel/...-id-2917187600/`), development URLs (`/lancamentos/...-id-2896279476/`), agency pages (`/imobiliaria/234940/`) and condominium pages (`/condominio/...`) also work. ZAP Imóveis shows at most 1,500 listings per search: split a larger search with filters or neighborhoods.

## `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 the full description, the advertiser's title, the last update date and floor plans (one extra request per listing). Charged per property with details.

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

Add the advertiser's name, CRECI, plan, logo, ZAP Imóveis page, phone numbers and WhatsApp. Charged per property with seller data.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.zapimoveis.com.br/venda/apartamentos/sp+sao-paulo+zona-sul+vl-mariana/"
    }
  ],
  "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.zapimoveis.com.br/venda/apartamentos/sp+sao-paulo+zona-sul+vl-mariana/"
        }
    ],
    "maxRequests": 10,
    "detailsAddon": false,
    "sellerDataAddon": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("ribtools/zapimoveis-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.zapimoveis.com.br/venda/apartamentos/sp+sao-paulo+zona-sul+vl-mariana/" }],
    "maxRequests": 10,
    "detailsAddon": False,
    "sellerDataAddon": False,
}

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

```

## MCP server setup

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