# ZAP Imóveis Scraper — Brazil Property Data & API (`sian.agency/zapimoveis-property-scraper`) Actor

ZAP Imóveis scraper & real estate data API for one of Brazil's biggest property portals (Grupo OLX). Sale & rent listings: price, condo fee, IPTU, size, rooms, baths, suites, parking, address, GPS, photos, broker phone — clean JSON/CSV. Overview or detail. No API key needed.

- **URL**: https://apify.com/sian.agency/zapimoveis-property-scraper.md
- **Developed by:** [SIÁN OÜ](https://apify.com/sian.agency) (community)
- **Categories:** Real estate, Automation, Lead generation
- **Stats:** 3 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.60 / 1,000 overview 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/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

## ZAP Imóveis Scraper — Brazil Property Data & API 🇧🇷🏠

[![SIÁN Agency Store](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![VivaReal Scraper](https://img.shields.io/badge/Store-VivaReal%20Scraper-1AE392)](https://apify.com/sian.agency/vivareal-property-scraper?fpr=sian) [![Immobiliare Scraper](https://img.shields.io/badge/Store-Immobiliare%20Scraper-009246)](https://apify.com/sian.agency/immobiliare-property-scraper?fpr=sian) [![Smart Idealista Scraper](https://img.shields.io/badge/Store-Idealista%20Scraper-E60023)](https://apify.com/sian.agency/smart-idealista-scraper?fpr=sian)

#### 🎉 The fast, no-code ZAP Imóveis data API — scrape a full property record per listing, no ZAP account or API key required
##### Built for property investors, brokers, proptech teams, and market researchers who need clean Brazilian real-estate data — for sale and for rent — across every city in Brazil.

### 📋 Overview

**Pull listings from ZAP Imóveis — one of Brazil's biggest real-estate portals (Grupo OLX) — as clean JSON or CSV.** For sale (*venda*) and for rent (*aluguel*), across São Paulo, Rio de Janeiro, Belo Horizonte, Curitiba, Brasília and every city in Brazil. Pick the depth that fits the job: a fast, low-cost overview scan for sizing a market, or the full per-property record with the authoritative description and complete photo gallery.

**Why investors and brokers choose us:**
- ⚡ **Two depths, one actor**: a fast Overview scan for whole-market sweeps, or full Detail records when you need the authoritative description and every photo
- 🔁 **Detail = Overview + more**: every Overview field is on a Detail row too, with the authoritative price/title/description and complete media added on top — never less
- 💰 **Pay-per-result pricing**: only charged for listings actually extracted — Overview and Detail priced separately
- 📐 **Analysis-ready**: price, condo fee, IPTU, size in m², rooms, baths, suites, parking, **price-per-m²** and **GPS coordinates** on every row
- 🎯 **Three ways to search**: by state + city, by a pasted ZAP Imóveis search URL (your filters honored), or by specific listing URLs
- 📞 **Broker contact built in**: advertiser name and phone on every listing — instant lead lists
- 🆓 **Free to try**: up to 25 listings per run, no credit card

### ✨ Features

- 🧭 **Overview mode**: a full record per listing straight from the search API — price, condo fee, IPTU, specs, location, broker, photo gallery — ideal for fast market sweeps
- 🔍 **Detail mode**: full per-listing record with the authoritative server-rendered price/title/description and the entire photo gallery
- 🗺️ **By place / search URL / listing URL**: pick a state + city + sale/rent, paste a ZAP Imóveis search link, or drop in specific listings
- 🎚️ **Filters**: contract (sale/rent), price range, min area, min bedrooms
- 📐 **Price-per-m² + thumbnail** computed on every row for instant comparison
- 📍 **GPS + full address** on every listing for mapping and territory analysis
- 📞 **Broker contact**: advertiser name + phone on every listing — instant lead lists
- 🧾 **Self-documenting datasets**: every row carries a `metadata` object recording the exact search settings that produced it
- 📤 **Clean exports**: JSON, CSV, Excel, or the full REST API

### 🎬 Quick Start

Pick a scrape depth, choose how to search, set filters, and run. Results stream to the Apify dataset as clean JSON/CSV.

```bash
curl -X POST "https://api.apify.com/v2/acts/sian.agency~zapimoveis-property-scraper/runs?token=[YOUR_TOKEN]" \
-H 'Content-Type: application/json' \
-d '{"scrapeMode":"overview","searchMode":"byPlace","contract":"sale","state":"SP","city":"São Paulo","maxResults":50}'
````

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Pick your scrape depth

**Overview** for a fast, full-record scan, or **Detail** for the authoritative description and entire photo gallery.

#### Step 2: Choose how to search

**By place** (pick sale/rent + a state like `SP` and a city like `São Paulo`), **By search URL** (paste a ZAP Imóveis search link — filters honored), or **By listing URL** (detail mode — drop in specific listings).

#### Step 3: Set filters & run

Price range, min area, min bedrooms, Max results — then hit **Start**.

**That's it! In under a minute, you'll have:**

- A clean dataset of Brazilian property listings (JSON / CSV / Excel)
- Price, condo fee, IPTU, size, rooms, GPS, broker contact and price-per-m² on every row
- A repeatable, no-code real-estate data feed

### 📥 Input Configuration

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| scrapeMode | string | No | `overview` (fast & cheap) or `detail` (authoritative description + all media). Default `overview`. |
| searchMode | string | No | `byPlace`, `bySearchUrl`, or `byListingUrl` (detail only). |
| contract | string | No | `sale` (venda) or `rent` (aluguel). Default `sale`. |
| state | string | No | Brazilian state acronym (UF), e.g. `SP`, `RJ` (byPlace). |
| city | string | No | City name, e.g. `São Paulo` (byPlace). |
| searchUrls | array | No | ZAP Imóveis search URLs (bySearchUrl) — on-page filters honored. |
| listingUrls | array | No | Listing URLs (detail / byListingUrl). |
| maxResults | integer | No | Max listings this run. FREE tier capped at 25. |
| minPrice / maxPrice | integer | No | Price range filter (R$). |
| minArea / minRooms | integer | No | Minimum area (m²) / bedrooms. |

**Example — by place:**

```json
{
  "scrapeMode": "overview",
  "searchMode": "byPlace",
  "contract": "sale",
  "state": "SP",
  "city": "São Paulo",
  "maxPrice": 900000,
  "minArea": 50,
  "maxResults": 200
}
```

**Example — by search URL:**

```json
{
  "scrapeMode": "overview",
  "searchMode": "bySearchUrl",
  "searchUrls": ["https://www.zapimoveis.com.br/aluguel/imoveis/rj+rio-de-janeiro/"],
  "maxResults": 100
}
```

### 📤 Output

Results are saved to the Apify dataset with **40+ fields** including:

| Field | Type | Description |
|-------|------|-------------|
| propertyTitle | string | Listing title |
| url | string | Listing URL |
| business\_type | string | `SALE` or `RENTAL` |
| unit\_type | string | Property type (APARTMENT, HOME, …) |
| price | number | Asking price (R$) |
| condo\_fee / iptu | number | Condo fee + property tax (R$) |
| price\_per\_sqm\_brl | number | Price per m² (computed) |
| area / total\_area | number | Usable / total area (m²) |
| bedrooms / bathrooms / suites / parking | number | Specs |
| city / state / neighborhood / zone / street | string | Location rollup |
| latitude / longitude | number | GPS |
| advertiser\_name / advertiser\_phone | string | Broker contact |
| amenities / images / thumbnail | array / string | Amenities + photo gallery |
| description | string | Listing description (full in detail mode) |

**Example:**

```json
{
  "id": "2528260885",
  "propertyTitle": "Apartamento para comprar com 60 m², 2 quartos, 1 vaga",
  "url": "https://www.zapimoveis.com.br/imovel/...-id-2528260885/",
  "business_type": "SALE",
  "unit_type": "APARTMENT",
  "price": 525000,
  "price_per_sqm_brl": 8750,
  "area": 60,
  "bedrooms": 2,
  "bathrooms": 1,
  "suites": 1,
  "parking": 1,
  "city": "São Paulo",
  "state_acronym": "SP",
  "neighborhood": "Jardim Ester",
  "zone": "Zona Oeste",
  "latitude": -23.55,
  "longitude": -46.75,
  "advertiser_name": "Imobiliária Exemplo",
  "advertiser_phone": "1133334444",
  "image_count": 18
}
```

### 💼 Use Cases & Examples

#### 1. Market research & price benchmarking

**Analysts sizing a city or neighbourhood market.**
**Input:** `byPlace` São Paulo, sale. **Output:** thousands of listings with price-per-m². **Use:** build a live price index per zone.

#### 2. Investment sourcing

**Investors hunting undervalued stock.**
**Input:** `byPlace` + `maxPrice` + `minArea`. **Output:** filtered listings with R$/m² and GPS. **Use:** rank deals by price-per-m² vs zone median.

#### 3. Broker lead generation

**Brokers building a contact list.**
**Input:** Overview scan of a target area. **Output:** `advertiser_name` and `advertiser_phone` on every row. **Use:** prospecting and competitive coverage.

#### 4. Proptech & valuation data feeds

**Proptech teams powering AVMs and dashboards.**
**Input:** scheduled `bySearchUrl` runs. **Output:** a clean, repeatable Brazilian real-estate data feed. **Use:** feed models without a ZAP Imóveis API.

#### 5. Rental-yield models

**Investors comparing rent vs sale stock.**
**Input:** `byPlace` rent + sale runs. **Output:** rent, condo fee, IPTU and price on every row. **Use:** compute gross/net yield by neighborhood.

#### 6. Comparative market analysis (CMA)

**Appraisers preparing valuations.**
**Input:** Detail mode on a set of comparable listings. **Output:** full description, complete media, specs. **Use:** defensible CMA inputs.

### 🔗 Integration Examples

#### JavaScript/Node.js

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });

const run = await client.actor('sian.agency/zapimoveis-property-scraper').call({
  scrapeMode: 'overview', searchMode: 'byPlace', contract: 'sale', state: 'SP', city: 'São Paulo', maxResults: 50,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);
```

#### Python

```python
from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')

run = client.actor('sian.agency/zapimoveis-property-scraper').call(
    run_input={'scrapeMode': 'overview', 'searchMode': 'byPlace', 'contract': 'sale', 'state': 'SP', 'city': 'São Paulo', 'maxResults': 50}
)

for item in client.dataset(run['defaultDatasetId']).iterate_items():
    print(item)
```

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~zapimoveis-property-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"scrapeMode":"overview","searchMode":"byPlace","contract":"sale","state":"SP","city":"São Paulo","maxResults":50}'
```

#### Automation Workflows (N8N / Zapier / Make)

1. **Trigger**: Schedule (e.g. daily) or webhook
2. **HTTP Request**: Call the actor API
3. **Process**: Handle the JSON results
4. **Action**: Save to a sheet/DB, notify, or transform

### 📊 Performance & Pricing

#### FREE Tier (Try It Now)

- **25 listings** per run — full feature access, same quality
- No credit card required
- Perfect for testing and small projects

#### PAID Tier (Production Ready)

- **Unlimited** listings per run
- Pay-per-result: only charged for listings actually extracted
- Overview and Detail priced separately so you only pay for the depth you use

🔗 [View current pricing](https://apify.com/sian.agency/zapimoveis-property-scraper?fpr=sian)

### ❓ Frequently Asked Questions

**Q: How many listings can I extract?**
A: FREE tier: 25 per run. PAID tier: unlimited.

**Q: Do I need a ZAP Imóveis API key?**
A: No. There's no setup and no ZAP Imóveis account or API key required.

**Q: What's the difference between Overview and Detail?**
A: Overview is a fast, low-cost scan that already returns a full record per listing (price, specs, location, broker contact, photo gallery). Detail adds the authoritative server-rendered description and the entire photo gallery — and includes everything Overview returns.

**Q: Can I use my own ZAP Imóveis search filters?**
A: Yes — paste your search URL in `bySearchUrl` mode and the path + on-page filters are honored.

**Q: What output formats are available?**
A: JSON, CSV, Excel — export directly from the Apify dataset.

**Q: Does it work for both sale and rent?**
A: Yes — set `contract` to `sale` (venda) or `rent` (aluguel).

**Q: Is this legal?**
A: We only extract publicly available data. See the legal note below.

### 🐛 Troubleshooting

**No results returned**

- Check the state acronym and city spelling (e.g. `SP` + `São Paulo`), or paste a working ZAP Imóveis search URL instead.
- Loosen filters — an overly tight price/area range can return zero listings.

**Fewer results than expected**

- FREE tier is capped at 25 listings per run. Upgrade to PAID for unlimited, or raise `maxResults`.

### ⚖️ Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the **GDPR** in the European Union, the **LGPD** in Brazil, and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

*This is an independent tool and is not affiliated with, endorsed by, or sponsored by ZAP Imóveis, Grupo OLX, or their affiliates. "ZAP Imóveis" is a trademark of its respective owner.*

### 🤝 Support

[![Telegram Support](https://img.shields.io/badge/Telegram-Support%20Group-0088cc?logo=telegram)](https://t.me/+vyh1sRE08sAxMGRi)

**Join our active support community**

- For issues or questions, open an issue from the actor page
- Check the [SIÁN Agency Store](https://apify.com/sian.agency?fpr=sian) for more automation tools
- 📧 <apify@sian-agency.online>

***

**Built by [SIÁN Agency](https://www.sian-agency.online)** | **[More Tools](https://apify.com/sian.agency?fpr=sian)**

# Actor input Schema

## `scrapeMode` (type: `string`):

⚡ **OVERVIEW** — fast, cheap. Pulls a full record per listing straight from the ZAP Imóveis search API (price, condo fee, IPTU, size, rooms, baths, suites, parking, full address, GPS, photos, broker phone, description).

🔍 **DETAIL** — authoritative server-rendered price/title/description plus the complete media gallery for a specific listing, merged with the structured record. Slower and priced higher per result.

**TIP:** Start with Overview — the search API already carries almost every field. Use Detail only when you need the full description / all photos for specific listings.

## `searchMode` (type: `string`):

🧭 How to tell the scraper what to fetch:

- **By place** — pick sale/rent and (optionally) a state + city (e.g. SP / São Paulo).
- **By search URL** — paste a ZAP Imóveis search-results URL; the path filters and on-page filters in the URL are honored.
- **By listing URL** — Detail mode only: paste ZAP Imóveis listing URLs to fetch specific properties.

## `contract` (type: `string`):

🏷️ **Sale** (venda) or **Rent** (aluguel). Applies to By place searches.

## `state` (type: `string`):

🗺️ Optional. Brazilian state acronym (UF), e.g. `SP`, `RJ`, `MG`. Used when **Search by = By place**.

**TIP:** Combine with City for a precise city search; leave both blank for nationwide.

## `city` (type: `string`):

🏙️ Optional. City name, e.g. `São Paulo`, `Rio de Janeiro` — automatically resolved to the portal's location ID. Used with **State** in **By place** mode.

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

🔗 ZAP Imóveis search-results URLs to scrape. Used when **Search by = By search URL**.

**TIP:** Build any search on zapimoveis.com.br (set your area, sale/rent, filters), then copy the URL from the address bar — the path and on-page filters are honored.

**BULK EDIT:** Click "Bulk edit" to paste many URLs, one per line.

## `listingUrls` (type: `array`):

🆔 **Detail mode only.** ZAP Imóveis listing URLs (e.g. https://www.zapimoveis.com.br/imovel/...-id-2528260885/).

**BULK EDIT:** Click "Bulk edit" to paste many URLs, one per line.

## `maxResults` (type: `integer`):

🔢 Maximum listings to extract this run.

- **FREE tier:** capped at 25 listings per run.
- **PAID tier:** unlimited — set as high as you need.

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

💰 Optional. Minimum price filter in Brazilian reais (By place mode).

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

💰 Optional. Maximum price filter in Brazilian reais (By place mode).

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

📐 Optional. Minimum usable area in m² (By place mode).

## `minRooms` (type: `integer`):

🛏️ Optional. Minimum number of bedrooms (By place mode).

## Actor input object example

```json
{
  "scrapeMode": "overview",
  "searchMode": "byPlace",
  "contract": "sale",
  "state": "SP",
  "city": "São Paulo",
  "searchUrls": [
    "https://www.zapimoveis.com.br/venda/imoveis/sp+sao-paulo/"
  ],
  "listingUrls": [
    "https://www.zapimoveis.com.br/imovel/venda-apartamento-2-quartos-jardim-ester-zona-oeste-sao-paulo-sp-60m2-id-2528260885/"
  ],
  "maxResults": 100
}
```

# Actor output Schema

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

Scraped ZAP Imóveis listings (JSON/CSV/Excel).

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/zapimoveis-property-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/zapimoveis-property-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 '{}' |
apify call sian.agency/zapimoveis-property-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "ZAP Imóveis Scraper — Brazil Property Data & API",
        "description": "ZAP Imóveis scraper & real estate data API for one of Brazil's biggest property portals (Grupo OLX). Sale & rent listings: price, condo fee, IPTU, size, rooms, baths, suites, parking, address, GPS, photos, broker phone — clean JSON/CSV. Overview or detail. No API key needed.",
        "version": "1.0",
        "x-build-id": "elUvcT9dmAJnTaA5O"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/sian.agency~zapimoveis-property-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-sian.agency-zapimoveis-property-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/sian.agency~zapimoveis-property-scraper/runs": {
            "post": {
                "operationId": "runs-sync-sian.agency-zapimoveis-property-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/sian.agency~zapimoveis-property-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-sian.agency-zapimoveis-property-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": {
                    "scrapeMode": {
                        "title": "⚡ Scrape mode",
                        "enum": [
                            "overview",
                            "detail"
                        ],
                        "type": "string",
                        "description": "⚡ **OVERVIEW** — fast, cheap. Pulls a full record per listing straight from the ZAP Imóveis search API (price, condo fee, IPTU, size, rooms, baths, suites, parking, full address, GPS, photos, broker phone, description).\n\n🔍 **DETAIL** — authoritative server-rendered price/title/description plus the complete media gallery for a specific listing, merged with the structured record. Slower and priced higher per result.\n\n**TIP:** Start with Overview — the search API already carries almost every field. Use Detail only when you need the full description / all photos for specific listings.",
                        "default": "overview"
                    },
                    "searchMode": {
                        "title": "🧭 Search by",
                        "enum": [
                            "byPlace",
                            "bySearchUrl",
                            "byListingUrl"
                        ],
                        "type": "string",
                        "description": "🧭 How to tell the scraper what to fetch:\n\n- **By place** — pick sale/rent and (optionally) a state + city (e.g. SP / São Paulo).\n- **By search URL** — paste a ZAP Imóveis search-results URL; the path filters and on-page filters in the URL are honored.\n- **By listing URL** — Detail mode only: paste ZAP Imóveis listing URLs to fetch specific properties.",
                        "default": "byPlace"
                    },
                    "contract": {
                        "title": "🏷️ Contract",
                        "enum": [
                            "sale",
                            "rent"
                        ],
                        "type": "string",
                        "description": "🏷️ **Sale** (venda) or **Rent** (aluguel). Applies to By place searches.",
                        "default": "sale"
                    },
                    "state": {
                        "title": "🗺️ State (UF)",
                        "type": "string",
                        "description": "🗺️ Optional. Brazilian state acronym (UF), e.g. `SP`, `RJ`, `MG`. Used when **Search by = By place**.\n\n**TIP:** Combine with City for a precise city search; leave both blank for nationwide."
                    },
                    "city": {
                        "title": "🏙️ City",
                        "type": "string",
                        "description": "🏙️ Optional. City name, e.g. `São Paulo`, `Rio de Janeiro` — automatically resolved to the portal's location ID. Used with **State** in **By place** mode."
                    },
                    "searchUrls": {
                        "title": "🔗 Search URLs",
                        "type": "array",
                        "description": "🔗 ZAP Imóveis search-results URLs to scrape. Used when **Search by = By search URL**.\n\n**TIP:** Build any search on zapimoveis.com.br (set your area, sale/rent, filters), then copy the URL from the address bar — the path and on-page filters are honored.\n\n**BULK EDIT:** Click \"Bulk edit\" to paste many URLs, one per line.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "listingUrls": {
                        "title": "🆔 Listing URLs",
                        "type": "array",
                        "description": "🆔 **Detail mode only.** ZAP Imóveis listing URLs (e.g. https://www.zapimoveis.com.br/imovel/...-id-2528260885/).\n\n**BULK EDIT:** Click \"Bulk edit\" to paste many URLs, one per line.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxResults": {
                        "title": "🔢 Max results",
                        "minimum": 1,
                        "type": "integer",
                        "description": "🔢 Maximum listings to extract this run.\n\n- **FREE tier:** capped at 25 listings per run.\n- **PAID tier:** unlimited — set as high as you need.",
                        "default": 100
                    },
                    "minPrice": {
                        "title": "💰 Min price (R$)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "💰 Optional. Minimum price filter in Brazilian reais (By place mode)."
                    },
                    "maxPrice": {
                        "title": "💰 Max price (R$)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "💰 Optional. Maximum price filter in Brazilian reais (By place mode)."
                    },
                    "minArea": {
                        "title": "📐 Min area (m²)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "📐 Optional. Minimum usable area in m² (By place mode)."
                    },
                    "minRooms": {
                        "title": "🛏️ Min bedrooms",
                        "minimum": 0,
                        "type": "integer",
                        "description": "🛏️ Optional. Minimum number of bedrooms (By place mode)."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
