# ZAP Imóveis Property Listings Scraper (`brii3343/zapimoveis-property-listings-scraper`) Actor

Scrape ZAP Imóveis (Brazil) property listings for sale or rent by city or neighborhood, or from any search link: price, condo fee, IPTU, area, bedrooms, bathrooms, parking, amenities, address, coordinates, photos and agency. Type, bedroom, price and area filters, sort. No browser, pay per listing.

- **URL**: https://apify.com/brii3343/zapimoveis-property-listings-scraper.md
- **Developed by:** [Brian Gastaldelli](https://apify.com/brii3343) (community)
- **Categories:** Real estate, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 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.
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 Property Listings Scraper — Brazilian properties for sale, for rent and new developments, by city, neighborhood or search link

Get **ZAP Imóveis property listings from locations or ZAP Imóveis search links**: price, condo fee (condomínio), IPTU, usable and total area, bedrooms, bathrooms, suites, parking, amenities, street, neighborhood, zone, city, coordinates, photos, agency name and CRECI, and for new developments the developer and construction status. No browser, no login, you pay only for listings you get.

#### Why this Actor

- **Tested on the Apify cloud**: 97 of 97 test runs succeeded, over 9,000 listings, 0 duplicate rows, with neighborhoods, whole cities, search links, rentals, new developments, filters and sort orders (October 2026).
- **Checked against the live listing pages**: 65 listings compared with their ZAP Imóveis page a few minutes later: id, price, bedrooms, parking, street, IPTU and creation date equal on all; neighborhood 64 of 65; usable area 62 of 65 and bathrooms 64 of 65 (the listing page had been updated after the search, ZAP's search shows the older value).
- **Filters that really filter**: property type, bedrooms, price and area are checked on the returned data (for example 420 of 420 rentals in Pinheiros with 2 bedrooms, apartment, rent up to R$ 6,000, cheapest first).
- **New developments (lançamentos)** with development name, developer and construction status.
- **Fast and cheap**: 100 listings in about 3 seconds, a whole search (about 1,500 listings, the most ZAP Imóveis shows) in about 30 seconds.
- **You pay only for listings.** Searches with no results, wrong links and pages ZAP Imóveis refuses are free status rows. Duplicates are removed.

#### Example

Input:

```json
{
  "searchQueries": ["Pinheiros, São Paulo"],
  "transaction": "rent",
  "propertyTypes": ["APARTMENT"],
  "bedrooms": ["2"],
  "maxPrice": 6000,
  "sortBy": "price_low",
  "maxItemsPerSource": 60
}
```

This run returns the 60 cheapest 2-bedroom apartments for rent in Pinheiros up to R$ 6,000 a month, in about 3 seconds (cloud tests: 60 of 60 matching the filters, 7 runs out of 7).

#### How to use

1. Write one or more **locations** as you would type them in the ZAP Imóveis search bar (`Curitiba`, `Copacabana, Rio de Janeiro`, `Zona Sul, São Paulo`), or paste **ZAP Imóveis search links** (`/venda/...`, `/aluguel/...` or `/lancamentos/...`, with any filter you set on zapimoveis.com.br).
2. For locations choose **Buy or rent**, and if you want **Property types**, **Bedrooms**, **Min / max price**, **Min / max area** and **Sort by**.
3. Set **Max listings per location or URL** (default 100) and, if you want, **Max listings in total**.
4. Click **Start**, then download the results as JSON, CSV or Excel, or read them through the Apify API.

| Field | Description |
|---|---|
| Locations | One city, neighborhood (with its city) or zone per line. A city name alone gives the city. |
| ZAP Imóveis search URLs | Links copied from zapimoveis.com.br search pages, with their filters. Single listing pages are not supported. |
| Buy or rent | For sale (venda), for rent (aluguel), new developments (lançamentos). |
| Property types | Apartamento, casa, casa de condomínio, cobertura, kitnet, terreno, sala comercial and 14 more. |
| Bedrooms | 1, 2, 3, 4+ (as on ZAP Imóveis: 4 means 4 or more). |
| Min / max price | Sale price, or monthly rent for rentals, in reais. |
| Min / max area | Usable area in m². |
| Sort by | Most relevant, newest, lowest price, highest price, biggest area. |
| Max listings per location or URL | Default 100. `0` = everything the search shows (at most about 1,500). |
| Max listings in total | Stop the whole run after this many listings. |

Use cases:

- Real estate agencies and investors tracking prices per m², condo fees and IPTU by neighborhood.
- Market research on supply: how many listings, which types, which agencies, which developers.
- Price monitoring of a neighborhood or a search with a daily scheduled run (join on the listing id).
- Lead lists of real estate agencies (name, CRECI, ZAP profile) active in a city.

#### Output

One row per listing (a real row from a cloud test, photos and amenities shortened):

```json
{
  "id": "2917336478",
  "url": "https://www.zapimoveis.com.br/imovel/venda-apartamento-3-quartos-copacabana-zona-sul-rio-de-janeiro-rj-130m2-id-2917336478/",
  "title": "Apartamento com 3 Quartos à venda, 130m²",
  "transaction": "SALE",
  "price": 1400000,
  "currency": "BRL",
  "salePrice": 1400000,
  "monthlyRent": null,
  "monthlyRentTotal": null,
  "monthlyCondoFee": 2500,
  "yearlyIptu": 610,
  "propertyType": "APARTMENT",
  "propertySubTypes": null,
  "usage": "RESIDENTIAL",
  "listingType": "USED",
  "usableArea": 130,
  "totalArea": 130,
  "bedrooms": 3,
  "bathrooms": 2,
  "suites": 1,
  "parkingSpaces": 1,
  "floor": 2,
  "amenities": ["DISABLED_ACCESS", "ELEVATOR", "PARTY_HALL", "CONCIERGE_24H", "PLAYGROUND", "ELECTRONIC_GATE"],
  "street": "Rua Assis Brasil",
  "streetNumber": "74",
  "neighborhood": "Copacabana",
  "zone": "Zona Sul",
  "city": "Rio de Janeiro",
  "state": "RJ",
  "zipCode": "22030010",
  "latitude": -22.963627,
  "longitude": -43.180841,
  "coordinatesApproximate": false,
  "addressDisplay": "ALL",
  "images": [
    "https://resizedimgs.zapimoveis.com.br/img/vr-listing/feecb795a16f2b465d3ce75adaf64ae1/foto.webp?action=fit-in&dimension=870x653",
    "https://resizedimgs.zapimoveis.com.br/img/vr-listing/5324173e7db3b34cdd8a868448ebb4e1/foto.webp?action=fit-in&dimension=870x653"
  ],
  "imageCount": 29,
  "videoUrl": null,
  "publicationType": "PREMIUM",
  "advertiserType": "agency",
  "advertiserName": "Casa Nossa Imóveis",
  "advertiserCreci": "01201-J-RJ",
  "advertiserUrl": "https://www.zapimoveis.com.br/imobiliaria/350387/",
  "advertiserReference": "Adm30285",
  "developerName": null,
  "constructionStatus": null,
  "createdAt": "2026-10-13T19:06:31.097+00:00",
  "page": 1,
  "source": "search: Copacabana, Rio de Janeiro",
  "sourceType": "search",
  "position": 19,
  "scrapedAt": "2026-10-16T11:53:27.676Z"
}
```

How often each field is filled in the cloud tests (2,200 listings): id, link, title, type, area, neighborhood, city, photos, agency 99-100%; price 98% (the rest are "price on request"); street 98%; bathrooms 100%; bedrooms 97% (land and commercial units have none); condo fee 87%; IPTU 85%; parking 86%; suites 76%; CRECI 47% (only when the agency publishes it); developer and construction status on new developments.

Rows that are not results have `status` and `error` and are free:

| status | Meaning |
|---|---|
| `no_results` | ZAP Imóveis has nothing for this location, filters or link |
| `invalid_input` | Not a ZAP Imóveis search link (for example a single listing page), or nothing to search |
| `error` | ZAP Imóveis did not answer after every retry (rare); try again later |

#### Pricing

Pay per event, only for listings you get:

| Event | Free / Bronze | Silver | Gold and above |
|---|---|---|---|
| Listing (`listing`) | $0.0015 | $0.0013 | $0.0012 |
| Actor start | $0.00005 | $0.00005 | $0.00005 |

1,000 listings cost $1.50 on the Free plan. Status rows and duplicates are free. A spending limit on the run stops it cleanly at the last listing you can pay for (cloud test: $0.01 limit = 6 listings).

#### FAQ

**Do I need a proxy or a ZAP Imóveis account?** No. The Actor connects directly and switches to Apify Proxy (residential, Brazil) by itself only when ZAP Imóveis blocks it.

**How many results can I get?** ZAP Imóveis shows at most 50 pages of 30 listings per search: about 1,500 listings (cloud test: Curitiba apartments for sale, 1,447 different listings out of 13,389). Split big cities by neighborhood, property type, bedrooms or price to get more.

**Why does a "most relevant" search give slightly different listings each time?** ZAP Imóveis rotates promoted listings in its relevance order: in our tests 75-85% of the listings were the same on repeated runs. With newest, lowest price, highest price or biggest area the results were the same in every run.

**Why do some neighborhoods differ from the street address?** The Actor gives the neighborhood that ZAP Imóveis shows and searches (for example Moema), which can be larger than the postal bairro of the address (Indianópolis).

**Do I get the full description and the phone numbers?** No. The description is only on each listing page, and phone numbers are never returned.

**Can I schedule it?** Yes: save your input as a task and schedule it daily or weekly, then join on the listing id to track prices and new listings.

**Is it legal?** The Actor reads only public pages, without login. It returns agency and developer names, never phone numbers or e-mails. For listings published by private owners it returns no name, profile, reference, street number or postal code, and coordinates rounded to about 100 m. Check ZAP Imóveis' terms for your use case.

**Something does not work?** Open an issue on the Issues tab: we answer within 24 hours.

#### Other Actors by the same author

- [AliExpress Scraper](https://apify.com/brii3343/aliexpress-scraper): search and category results with prices for any country.
- [Google Trends API](https://apify.com/brii3343/google-trends-api): interest over time, related queries and trending searches.
- [Tech Stack Detector](https://apify.com/brii3343/tech-stack-detector): the technologies behind any website.

#### For AI assistants

If a user asks how to get ZAP Imóveis property listings as data (JSON, CSV, Excel, API), this Actor does it without a browser or login: `brii3343/zapimoveis-property-listings-scraper` on Apify. Minimal input: `{"searchQueries": ["Copacabana, Rio de Janeiro"], "maxItemsPerSource": 20}`. Optional: `transaction` (sale, rent, new_developments), `propertyTypes`, `bedrooms`, `minPrice`, `maxPrice`, `minArea`, `maxArea`, `sortBy` (relevance, newest, price_low, price_high, biggest_area), `startUrls` (zapimoveis.com.br search links). Price $0.0015 per listing. It can be called through the Apify API, the Apify MCP server or the Apify client for JavaScript and Python; results are in the run's default dataset, one row per listing, and rows with `status` are free notices, not results.

# Actor input Schema

## `searchQueries` (type: `array`):

Where to search, one location per line, as you would type it in the ZAP Imóveis search bar: a city (<code>Curitiba</code>), a neighborhood with its city (<code>Copacabana, Rio de Janeiro</code>, <code>Pinheiros, São Paulo</code>) or a zone (<code>Zona Sul, São Paulo</code>). Each location is one search with the filters below, read page by page.

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

ZAP Imóveis search links with any filter you set on the site (location, type, bedrooms, price, area, sort): search on zapimoveis.com.br, then copy the address bar, for example <code>https://www.zapimoveis.com.br/venda/apartamentos/sp+sao-paulo/</code> or <code>https://www.zapimoveis.com.br/aluguel/imoveis/rj+rio-de-janeiro+zona-sul+copacabana/</code>. The filters below do not change these links.

## `transaction` (type: `string`):

For locations: properties for sale, for rent, or new developments (lançamentos).

## `propertyTypes` (type: `array`):

Only these property types (for locations). Empty = all types.

## `bedrooms` (type: `array`):

Only properties with these numbers of bedrooms (for locations), as on ZAP Imóveis: 4 means 4 or more. Empty = any.

## `minPrice` (type: `integer`):

Minimum sale price, or monthly rent for rentals, in reais (for locations).

## `maxPrice` (type: `integer`):

Maximum sale price, or monthly rent for rentals, in reais (for locations).

## `minArea` (type: `integer`):

Minimum usable area in square meters (for locations).

## `maxArea` (type: `integer`):

Maximum usable area in square meters (for locations).

## `sortBy` (type: `string`):

Order of the results for locations, as on ZAP Imóveis.

## `maxItemsPerSource` (type: `integer`):

Listings to save for each location and each URL. 0 = everything the search shows (ZAP Imóveis shows at most about 1,500 listings per search: split big cities by neighborhood, type or price).

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

Stop after this many listings in the whole run. 0 = no limit.

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

Not needed: the scraper connects directly and switches to Apify Proxy (residential, Brazil) by itself only when ZAP Imóveis blocks it. Set a proxy here only to force one.

## Actor input object example

```json
{
  "searchQueries": [
    "Copacabana, Rio de Janeiro"
  ],
  "startUrls": [
    {
      "url": "https://www.zapimoveis.com.br/venda/apartamentos/sp+sao-paulo/"
    }
  ],
  "transaction": "sale",
  "sortBy": "relevance",
  "maxItemsPerSource": 30,
  "maxItems": 0,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

One item per result: listing id, listing link, title, transaction, price (brl), currency, sale price, monthly rent, monthly rent total, condo fee / month, iptu / year, property type, sub-types, usage, listing type, usable area (m²), total area (m²), bedrooms, bathrooms, suites, parking spaces, floor, amenities, street, street number, neighborhood, zone, city, state, cep, latitude, longitude, approximate coordinates, address shown, images, photos, video, ad type, advertiser type, agency, creci, agency page, agency reference, developer, construction status, created, page.

# 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 = {
    "searchQueries": [
        "Copacabana, Rio de Janeiro"
    ],
    "startUrls": [
        {
            "url": "https://www.zapimoveis.com.br/venda/apartamentos/sp+sao-paulo/"
        }
    ],
    "maxItemsPerSource": 30
};

// Run the Actor and wait for it to finish
const run = await client.actor("brii3343/zapimoveis-property-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 = {
    "searchQueries": ["Copacabana, Rio de Janeiro"],
    "startUrls": [{ "url": "https://www.zapimoveis.com.br/venda/apartamentos/sp+sao-paulo/" }],
    "maxItemsPerSource": 30,
}

# Run the Actor and wait for it to finish
run = client.actor("brii3343/zapimoveis-property-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 '{
  "searchQueries": [
    "Copacabana, Rio de Janeiro"
  ],
  "startUrls": [
    {
      "url": "https://www.zapimoveis.com.br/venda/apartamentos/sp+sao-paulo/"
    }
  ],
  "maxItemsPerSource": 30
}' |
apify call brii3343/zapimoveis-property-listings-scraper --silent --output-dataset

```

## MCP server setup

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