# ChavesNaMão Scraper — Brazil Property Data & API (`sian.agency/chavesnamao-property-scraper`) Actor

ChavesNaMão scraper & real estate data API for one of Brazil's largest property marketplaces. Sale & rent listings nationwide: price, condo, IPTU, size, bedrooms, suites, garages, address, GPS, agent contact, amenities, photos — clean JSON/CSV. Fast overview or full detail. No API key needed.

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

## Pricing

from $1.60 / 1,000 overview listing extracteds

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

## ChavesNaMão Scraper 🇧🇷 — Brazil Property Data & Real Estate API 🏠

[![SIÁN Agency Store](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![QuintoAndar Scraper](https://img.shields.io/badge/Store-QuintoAndar%20Scraper-1AE392)](https://apify.com/sian.agency/quintoandar-property-scraper?fpr=sian) [![VivaReal Scraper](https://img.shields.io/badge/Store-VivaReal%20Scraper-1AE392)](https://apify.com/sian.agency/vivareal-property-scraper?fpr=sian) [![Immobiliare.it Scraper](https://img.shields.io/badge/Store-Immobiliare.it%20Scraper-00A933)](https://apify.com/sian.agency/immobiliare-property-scraper?fpr=sian)

#### 🎉 Turn ChavesNaMão listings into clean structured data — sale & rent, every Brazilian state, no API key
##### Built for real-estate analysts, proptech teams, investors and lead-gen agencies who need Brazil property data at scale

---

### 📋 Overview

**Scrape ChavesNaMão — one of Brazil's largest property marketplaces — into ready-to-use datasets.** Pull thousands of listings with price, condo fees, IPTU, size, bedrooms, suites, garages, full address, GPS coordinates, neighbourhood, amenities, agent contact and photos — as JSON, CSV or Excel.

**Why proptech teams and investors choose us:**
- ✅ **Complete listings**: up to 44 fields per property — price, condo, IPTU, area, beds, baths, suites, parking, GPS, ZIP, agent CRECI & phone, amenities, photos
- ⚡ **Fast & affordable Overview mode**: pull the search list straight from the page in seconds — the cheapest way to harvest volume
- 🎯 **Both contracts**: sale (à venda) **and** rent (para alugar), in São Paulo, Rio, Curitiba and every other city
- 💸 **Pay-per-result**: only pay for listings you actually extract — generous FREE tier, no credit card to start
- 💎 **Detail mode with everything**: GPS, ZIP/CEP, condo/IPTU split, suites, garages, agent phone & CRECI, descriptions and full amenity lists — each detail row is also enriched with the overview fields, so you always get a complete record
- ✨ **Investor KPIs built in**: automatic price-per-m² (R$/m²) and a thumbnail-first row for instant gallery views

---

### ✨ Features

- 🏠 **Sale & rent listings**: à venda and para alugar in one actor
- 📍 **Search by place, URL or listing URL**: type a location slug, paste a search URL, or feed exact listing URLs
- 💵 **Full pricing breakdown**: price, formatted price, condo fee, IPTU
- 📐 **Rich specs**: total & useful area (m²), bedrooms, bathrooms, suites, parking/garages
- 🧭 **Geo data**: full street address, neighbourhood, city, state, ZIP/CEP, latitude & longitude
- 🧑‍💼 **Agent contact**: agent/agency name, phone, CRECI registration, profile URL
- 📸 **Full photo gallery**: every listing image URL, plus a cover thumbnail
- 🗂️ **Amenities**: separate in-unit and building/condominium feature lists; trade-in & pet-friendly flags
- 📊 **Computed KPIs**: price-per-m² in BRL, ready for comparables and yield models
- 🔢 **Filters & sorting**: narrow by price, bedrooms and parking, order by price/area/newest; cap each run with Max results
- 📤 **Clean exports**: JSON, CSV and Excel directly from the dataset

---

### 🎬 Quick Start

Pick a mode (Overview for speed, Detail for full data), tell it where to look (a place slug, a search URL, or listing URLs), and run. Results stream into your dataset as clean rows you can export to JSON, CSV or Excel.

```bash
curl -X POST https://api.apify.com/v2/acts/sian.agency~chavesnamao-property-scraper/runs?token=YOUR_TOKEN \
-H 'Content-Type: application/json' \
-d '{"scrapeMode":"overview","searchMode":"byPlace","places":["sp-sao-paulo"],"contract":"sale","maxResults":100}'
````

***

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Choose your mode

Pick **Overview** (fast & cheap — the search-list fields) or **Detail** (full fields per listing).

#### Step 2: Tell it where to look

Type one or more ChavesNaMão location slugs (e.g. `sp-sao-paulo`), paste a search URL, or — in Detail mode — paste listing URLs. Choose **Sale** or **Rent**.

#### Step 3: Run it

Click **Start** (or call the API). Listings stream into your dataset in real time.

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

- A clean table of ChavesNaMão listings with prices and specs
- GPS, ZIP, agent contact and full amenities (Detail mode)
- A JSON / CSV / Excel export ready for your model or CRM

***

### 📥 Input Configuration

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| scrapeMode | string | No | `overview` (fast & cheap) or `detail` (full fields). Default `overview`. |
| searchMode | string | No | `byPlace`, `bySearchUrl`, or `byListingUrl` (detail only). |
| places | array | No | ChavesNaMão location slugs, e.g. `sp-sao-paulo`, `rj-rio-de-janeiro`. |
| contract | string | No | `sale` (à venda) or `rent` (para alugar). Default `sale`. |
| typeSlug | string | No | Property-type slug (default `imoveis`; e.g. `apartamentos`, `casas`). |
| sort | string | No | `relevance`, `price_asc`, `price_desc`, `area_asc`, `area_desc`, `newest`. |
| searchUrls | array | No | chavesnamao.com.br search-results URLs. |
| listingUrls | array | No | Detail mode: full chavesnamao.com.br listing URLs. |
| maxResults | integer | No | Cap listings per run. FREE: 25. PAID: unlimited. |
| maxPages | integer | No | Max search pages per place (15 listings each). Default 20. |
| minPrice / maxPrice | integer | No | Price filters (R$). |
| minBedrooms / minGarages | integer | No | Minimum bedrooms / parking spaces. |
| proxyCountry | string | No | Empty = direct (default). `BR` routes through a Brazilian residential proxy for very large runs. |

**Example — by place:**

```json
{
  "scrapeMode": "overview",
  "searchMode": "byPlace",
  "places": ["sp-sao-paulo", "rj-rio-de-janeiro"],
  "contract": "sale",
  "sort": "newest",
  "maxResults": 200
}
```

**Example — detail by listing URL:**

```json
{
  "scrapeMode": "detail",
  "searchMode": "byListingUrl",
  "listingUrls": ["https://www.chavesnamao.com.br/imovel/apartamento-a-venda-sp-sao-paulo/id-42593585/"]
}
```

***

### 📤 Output

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

| Field | Type | Description |
|-------|------|-------------|
| listingId | integer | ChavesNaMão listing identifier |
| url | string | Canonical listing URL |
| propertyTitle | string | Listing title |
| transaction | string | SELL or RENT |
| property\_type | string | Apartamento, Casa, Cobertura, Terreno, etc. |
| price | integer | Listing price (R$) |
| condo\_fee | string | Monthly condominium fee |
| iptu | string | Property tax (IPTU) |
| price\_per\_sqm\_brl | integer | Computed price per m² (R$) |
| area\_total / area\_useful | integer | Area (m²) |
| bedrooms / bathrooms / suites / garages | integer | Property specs |
| neighborhood / city / state / zip\_code | string | Location |
| latitude / longitude | number | GPS coordinates (Detail mode) |
| agent\_name / agent\_phone / agent\_creci | string | Agent / agency contact (Detail mode) |
| amenities\_unit / amenities\_building | array | In-unit and building features |
| images | array | Full-resolution image URLs |
| thumbnail | string | Cover image |

**Example:**

```json
{
  "listingId": 42593585,
  "url": "https://www.chavesnamao.com.br/imovel/apartamento-a-venda-5-quartos-sp-sao-paulo/id-42593585/",
  "source": "detail",
  "propertyTitle": "Cobertura Duplex na Chácara Klabin - ACEITA PERMUTA EM ALPHAVILLE!",
  "transaction": "SELL",
  "property_type": "Apartamento",
  "category": "residential",
  "price": 4540000,
  "price_formatted": "R$ 4.540.000",
  "condo_fee": "R$ 4.880",
  "iptu": "R$ 205",
  "price_per_sqm_brl": 12611,
  "area_total": 360,
  "bedrooms": 5,
  "bathrooms": 5,
  "suites": 3,
  "garages": 5,
  "city": "São Paulo",
  "state": "SP",
  "neighborhood": "Vila Mariana",
  "zip_code": "04116-250",
  "latitude": -23.59185,
  "longitude": -46.62391,
  "agent_name": "VIA VITRINE IMOVEIS ALPHAVILLE",
  "agent_phone": "(11) 94402-0093",
  "agent_creci": "197254-F",
  "accept_trade": true,
  "image_count": 30,
  "currency": "BRL"
}
```

***

### 💼 Use Cases & Examples

#### 1. Rental Yield & Investment Analysis

**Investors and proptech analysts modelling returns across São Paulo, Rio and Curitiba.**

**Input:** A list of neighbourhood/city slugs, contract = rent and sale.
**Output:** Price, condo, IPTU and computed R$/m² per listing.
**Use:** Build gross-yield and price-to-rent models for whole cities.

#### 2. Price & Rent Comparables (CMA)

**Brokers and appraisers needing fast comparables.**

**Input:** A search URL for a specific area and property type.
**Output:** Comparable listings with price, area and R$/m².
**Use:** Produce a comparative market analysis in minutes, not hours.

#### 3. Agent & Lead Generation

**Agencies sourcing seller and landlord inventory plus agent contacts.**

**Input:** By-place searches across target cities (Detail mode).
**Output:** Listings with location, specs and agent name, phone & CRECI.
**Use:** Feed a CRM with fresh, qualified property and agent leads.

#### 4. Market Research & Trend Dashboards

**Data teams tracking Brazil's housing market.**

**Input:** Scheduled daily runs across multiple cities.
**Output:** A time series of prices, inventory and condo costs.
**Use:** Power BI / Looker dashboards on supply and pricing trends.

#### 5. Powering a Real-Estate Data API

**Proptech startups building products on Brazil listings.**

**Input:** Programmatic API calls per region.
**Output:** Structured JSON ready to ingest.
**Use:** Back a search app or valuation API with live ChavesNaMão data.

#### 6. Relocation & Site-Selection Tools

**Relocation services and corporate housing teams.**

**Input:** Rent searches filtered by bedrooms and budget.
**Output:** Options with amenities and GPS.
**Use:** Shortlist properties for employees moving to Brazil.

***

### 🔗 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/chavesnamao-property-scraper').call({
  scrapeMode: 'overview',
  searchMode: 'byPlace',
  places: ['sp-sao-paulo'],
  contract: 'sale',
  maxResults: 100,
});

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/chavesnamao-property-scraper').call(
    run_input={
        'scrapeMode': 'overview',
        'searchMode': 'byPlace',
        'places': ['sp-sao-paulo'],
        'contract': 'sale',
        'maxResults': 100,
    }
)

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

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~chavesnamao-property-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"scrapeMode":"overview","searchMode":"byPlace","places":["sp-sao-paulo"],"contract":"sale","maxResults":100}'
```

#### 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, push to a CRM, or send an alert

***

### 📊 Performance & Pricing

#### FREE Tier (Try It Now)

- **25 listings** per run — full feature access, same data 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 successfully extracted
- Ideal for dashboards, comparables and data APIs

💰 **Transparent pay-per-result pricing** — the fast Overview event is the cheapest way to harvest Brazil property data at volume; upgrade to Detail only when you need GPS, ZIP, agent contact and the full feature list.

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

***

### ❓ Frequently Asked Questions

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

**Q: Does it cover both sale and rent?**
A: Yes — set `contract` to `sale` (à venda) or `rent` (para alugar).

**Q: What is the difference between Overview and Detail?**
A: Overview is the fast, cheap search-list view. Detail fetches each property page for GPS, ZIP, condo/IPTU split, suites, garages, agent phone & CRECI, full descriptions and the complete amenity lists — and is also enriched with the overview fields so each row is complete.

**Q: Why do detail URLs need the full link?**
A: ChavesNaMão detail pages use a full SEO slug, so paste the listing URL from a search result rather than a bare numeric ID.

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

**Q: Do I need a ChavesNaMão account or API key?**
A: No. The actor works straight out of the box.

**Q: What currency are prices in?**
A: Brazilian Real (BRL), as published on ChavesNaMão.

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

***

### 🐛 Troubleshooting

**No results returned**

- Check your location slug — open the search on chavesnamao.com.br and copy the slug from the URL (the `<uf>-<cidade>` part, e.g. `/imoveis-a-venda/sp-sao-paulo/`).
- Make sure `contract` matches what's available in that area (sale vs rent).

**A specific listing URL was skipped**

- Sold or removed listings return a stub page with no data and are skipped automatically. Try a currently-live listing, and always paste the full SEO URL.

**Fewer rows than expected in Overview**

- Each search page returns 15 listings. Add more place slugs or raise Max pages to gather more properties.

**Large runs slowing down**

- Set `proxyCountry` to `BR` to route through a Brazilian residential proxy and avoid IP rate-limits at scale.

***

### ⚖️ 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 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/).

> **Disclaimer:** This actor is an independent tool and is not affiliated with, endorsed by, or sponsored by ChavesNaMão. "ChavesNaMão" and related marks are trademarks of their respective owners. Use this actor in compliance with ChavesNaMão's terms and all applicable laws.

***

### 🤝 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 in the actor's repository
- 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 the search-list fields straight from ChavesNaMão's embedded page data (price, type, size, bedrooms, baths, city, state, agent, photo).

🔍 **DETAIL** — full fields per listing (GPS, ZIP/CEP, condo fee, IPTU, suites, garages, construction details, full amenity lists, agent CRECI & phone, descriptions, the complete photo gallery). Each detail record is enriched with the overview fields too, so you always get a complete row. Slower and priced higher per result.

**TIP:** Start with Overview — upgrade to Detail only when you need GPS, ZIP, agent phone or the full feature list.

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

🧭 How to tell the scraper what to fetch:

- **By place** — type one or more ChavesNaMão location slugs (e.g. "sp-sao-paulo", "rj-rio-de-janeiro", "pr-curitiba"). Combine with the contract, property type, sort and filters below.
- **By search URL** — paste a chavesnamao.com.br search-results URL; the location, contract, type and ordering are honored.
- **By listing URL** — Detail mode only: paste full chavesnamao.com.br listing URLs to fetch specific properties.

## `places` (type: `array`):

📍 ChavesNaMão location slugs, e.g. "sp-sao-paulo", "rj-rio-de-janeiro", "pr-curitiba". Use the `<uf>-<cidade>` pattern, a bare state ("sp"), or "brasil". Used when **Search by = By place**.

**TIP:** Open the location on chavesnamao.com.br and copy the slug from the URL (the part after the property type, e.g. `/imoveis-a-venda/sp-sao-paulo/`). Add several — each place is searched in turn until **Max results** is reached.

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

🏷️ **Sale** (à venda) or **Rent** (para alugar). Applies to By place searches.

## `typeSlug` (type: `string`):

🏠 ChavesNaMão property-type slug used in the search path. Leave the default "imoveis" for all property types, or set e.g. "apartamentos", "casas", "coberturas", "terrenos".

## `sort` (type: `string`):

↕️ Order the search results. Applies to By place searches (a `filtro=or:` token).

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

🔗 chavesnamao.com.br search-results URLs to scrape. Used when **Search by = By search URL**.

**TIP:** Build any search on chavesnamao.com.br (pick the location, à venda/para alugar, property type, ordering), then copy the URL from the address bar.

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

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

🆔 **Detail mode only.** Full chavesnamao.com.br listing URLs (e.g. https://www.chavesnamao.com.br/imovel/.../id-42593585/).

**NOTE:** ChavesNaMão detail URLs require the full SEO slug — paste the listing URL from a search result, not a bare numeric ID.

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

## `maxPages` (type: `integer`):

📄 Maximum search pages to fetch per place (15 listings each). Caps very large By place runs.

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

💵 Optional. Minimum price filter (By place mode).

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

💵 Optional. Maximum price filter (By place mode).

## `minBedrooms` (type: `integer`):

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

## `minGarages` (type: `integer`):

🚗 Optional. Minimum number of parking spaces / garages (By place mode).

## `proxyCountry` (type: `string`):

🌐 Leave empty to run **direct** (no proxy — the default, fastest & cheapest). Set to "BR" to route through a Brazilian residential proxy, only needed to dodge an IP rate-limit on very large runs.

## Actor input object example

```json
{
  "scrapeMode": "overview",
  "searchMode": "byPlace",
  "places": [
    "sp-sao-paulo",
    "rj-rio-de-janeiro"
  ],
  "contract": "sale",
  "typeSlug": "imoveis",
  "sort": "",
  "searchUrls": [
    "https://www.chavesnamao.com.br/imoveis-a-venda/sp-sao-paulo/"
  ],
  "listingUrls": [
    "https://www.chavesnamao.com.br/imovel/apartamento-a-venda-sp-sao-paulo/id-42593585/"
  ],
  "maxResults": 100,
  "maxPages": 20,
  "proxyCountry": ""
}
```

# Actor output Schema

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

Clean structured ChavesNaMão 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 = {
    "places": [
        "sp-sao-paulo"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/chavesnamao-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 = { "places": ["sp-sao-paulo"] }

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

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "ChavesNaMão Scraper — Brazil Property Data & API",
        "description": "ChavesNaMão scraper & real estate data API for one of Brazil's largest property marketplaces. Sale & rent listings nationwide: price, condo, IPTU, size, bedrooms, suites, garages, address, GPS, agent contact, amenities, photos — clean JSON/CSV. Fast overview or full detail. No API key needed.",
        "version": "1.0",
        "x-build-id": "pXYZusRhGKefkqNDe"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/sian.agency~chavesnamao-property-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-sian.agency-chavesnamao-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~chavesnamao-property-scraper/runs": {
            "post": {
                "operationId": "runs-sync-sian.agency-chavesnamao-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~chavesnamao-property-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-sian.agency-chavesnamao-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 the search-list fields straight from ChavesNaMão's embedded page data (price, type, size, bedrooms, baths, city, state, agent, photo).\n\n🔍 **DETAIL** — full fields per listing (GPS, ZIP/CEP, condo fee, IPTU, suites, garages, construction details, full amenity lists, agent CRECI & phone, descriptions, the complete photo gallery). Each detail record is enriched with the overview fields too, so you always get a complete row. Slower and priced higher per result.\n\n**TIP:** Start with Overview — upgrade to Detail only when you need GPS, ZIP, agent phone or the full feature list.",
                        "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** — type one or more ChavesNaMão location slugs (e.g. \"sp-sao-paulo\", \"rj-rio-de-janeiro\", \"pr-curitiba\"). Combine with the contract, property type, sort and filters below.\n- **By search URL** — paste a chavesnamao.com.br search-results URL; the location, contract, type and ordering are honored.\n- **By listing URL** — Detail mode only: paste full chavesnamao.com.br listing URLs to fetch specific properties.",
                        "default": "byPlace"
                    },
                    "places": {
                        "title": "📍 Places",
                        "type": "array",
                        "description": "📍 ChavesNaMão location slugs, e.g. \"sp-sao-paulo\", \"rj-rio-de-janeiro\", \"pr-curitiba\". Use the `<uf>-<cidade>` pattern, a bare state (\"sp\"), or \"brasil\". Used when **Search by = By place**.\n\n**TIP:** Open the location on chavesnamao.com.br and copy the slug from the URL (the part after the property type, e.g. `/imoveis-a-venda/sp-sao-paulo/`). Add several — each place is searched in turn until **Max results** is reached.",
                        "default": [
                            "sp-sao-paulo"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "contract": {
                        "title": "🏷️ Contract",
                        "enum": [
                            "sale",
                            "rent"
                        ],
                        "type": "string",
                        "description": "🏷️ **Sale** (à venda) or **Rent** (para alugar). Applies to By place searches.",
                        "default": "sale"
                    },
                    "typeSlug": {
                        "title": "🏠 Property type slug (optional)",
                        "type": "string",
                        "description": "🏠 ChavesNaMão property-type slug used in the search path. Leave the default \"imoveis\" for all property types, or set e.g. \"apartamentos\", \"casas\", \"coberturas\", \"terrenos\".",
                        "default": "imoveis"
                    },
                    "sort": {
                        "title": "↕️ Sort order (optional)",
                        "enum": [
                            "",
                            "relevance",
                            "price_asc",
                            "price_desc",
                            "area_asc",
                            "area_desc",
                            "newest"
                        ],
                        "type": "string",
                        "description": "↕️ Order the search results. Applies to By place searches (a `filtro=or:` token).",
                        "default": ""
                    },
                    "searchUrls": {
                        "title": "🔗 Search URLs",
                        "type": "array",
                        "description": "🔗 chavesnamao.com.br search-results URLs to scrape. Used when **Search by = By search URL**.\n\n**TIP:** Build any search on chavesnamao.com.br (pick the location, à venda/para alugar, property type, ordering), then copy the URL from the address bar.\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.** Full chavesnamao.com.br listing URLs (e.g. https://www.chavesnamao.com.br/imovel/.../id-42593585/).\n\n**NOTE:** ChavesNaMão detail URLs require the full SEO slug — paste the listing URL from a search result, not a bare numeric ID.\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
                    },
                    "maxPages": {
                        "title": "📄 Max pages per place",
                        "minimum": 1,
                        "type": "integer",
                        "description": "📄 Maximum search pages to fetch per place (15 listings each). Caps very large By place runs.",
                        "default": 20
                    },
                    "minPrice": {
                        "title": "💵 Min price (R$)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "💵 Optional. Minimum price filter (By place mode)."
                    },
                    "maxPrice": {
                        "title": "💵 Max price (R$)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "💵 Optional. Maximum price filter (By place mode)."
                    },
                    "minBedrooms": {
                        "title": "🛏️ Min bedrooms",
                        "minimum": 0,
                        "type": "integer",
                        "description": "🛏️ Optional. Minimum number of bedrooms (By place mode)."
                    },
                    "minGarages": {
                        "title": "🚗 Min parking spaces",
                        "minimum": 0,
                        "type": "integer",
                        "description": "🚗 Optional. Minimum number of parking spaces / garages (By place mode)."
                    },
                    "proxyCountry": {
                        "title": "🌐 Proxy country (optional)",
                        "enum": [
                            "",
                            "BR"
                        ],
                        "type": "string",
                        "description": "🌐 Leave empty to run **direct** (no proxy — the default, fastest & cheapest). Set to \"BR\" to route through a Brazilian residential proxy, only needed to dodge an IP rate-limit on very large runs.",
                        "default": ""
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
