# QuintoAndar Scraper — Brazil Property Data & API (`sian.agency/quintoandar-property-scraper`) Actor

QuintoAndar scraper & real estate data API for Brazil's largest rent & sale platform. Sale & rent listings in every city: price, condo, IPTU, size, bedrooms, suites, parking, address, GPS, neighbourhood, amenities, photos — clean JSON/CSV. Fast overview or full detail. No API key needed.

- **URL**: https://apify.com/sian.agency/quintoandar-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 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

## QuintoAndar 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) [![Smart Idealista Scraper](https://img.shields.io/badge/Store-Smart%20Idealista%20Scraper-E60023)](https://apify.com/sian.agency/smart-idealista-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) [![Bayut Property Scraper](https://img.shields.io/badge/Store-Bayut%20Property%20Scraper-93D500)](https://apify.com/sian.agency/bayut-property-scraper?fpr=sian)

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

---

### 📋 Overview

**Scrape QuintoAndar — Brazil's largest rent & sale property platform — into ready-to-use datasets.** Pull thousands of listings with price, condo fees, IPTU, size, bedrooms, suites, parking, full address, GPS coordinates, neighbourhood, amenities and photos — as JSON, CSV or Excel.

**Why proptech teams and investors choose us:**
- ✅ **Complete listings**: up to 45 fields per property — price, condo, IPTU, area, beds, baths, suites, parking, GPS, ZIP, 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 (comprar) **and** rent (alugar), in São Paulo, Rio, 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 code, condo/IPTU split, suites, floor range, descriptions and the full amenity list — 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**: comprar and alugar in one actor
- 📍 **Search by place, URL or listing ID**: type a location slug, paste a search URL, or feed exact listing URLs/IDs
- 💵 **Full pricing breakdown**: sale price, monthly rent, condo fee, IPTU, total cost, estimated yield
- 📐 **Rich specs**: area (m²), bedrooms, bathrooms, suites, parking, construction year, floor range
- 🧭 **Geo data**: full address, neighbourhood, city, state, ZIP code, latitude & longitude
- 📸 **High-resolution photos**: every listing image URL, plus a cover thumbnail
- 🗂️ **Amenities & installations**: pool, gym, 24h concierge, pet-friendly and more
- 📊 **Computed KPIs**: price-per-m² in BRL, ready for comparables and yield models
- 🔢 **Filters**: narrow by price, bedrooms and area; 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 IDs), 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~quintoandar-property-scraper/runs?token=YOUR_TOKEN \
-H 'Content-Type: application/json' \
-d '{"scrapeMode":"overview","searchMode":"byPlace","places":["sao-paulo-sp-brasil"],"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 QuintoAndar location slugs (e.g. `sao-paulo-sp-brasil`), paste a search URL, or — in Detail mode — paste listing URLs/IDs. 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 QuintoAndar listings with prices and specs
- GPS, ZIP 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 | QuintoAndar location slugs, e.g. `sao-paulo-sp-brasil`. |
| contract | string | No | `sale` (comprar) or `rent` (alugar). Default `sale`. |
| searchUrls | array | No | quintoandar.com.br search-results URLs. |
| listingUrls | array | No | Detail mode: listing URLs or bare numeric IDs. |
| typeSlug | string | No | Property-type slug (default `casa-apartamento`). |
| maxResults | integer | No | Cap listings per run. FREE: 25. PAID: unlimited. |
| minPrice / maxPrice | integer | No | Price filters (R$). |
| minBedrooms / minArea | integer | No | Minimum bedrooms / area (m²). |
| 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": ["sao-paulo-sp-brasil", "pinheiros-sao-paulo-sp-brasil"],
  "contract": "sale",
  "maxResults": 200
}
```

**Example — detail by listing ID:**

```json
{
  "scrapeMode": "detail",
  "searchMode": "byListingUrl",
  "listingUrls": ["https://www.quintoandar.com.br/imovel/894529391/comprar", "892800721"]
}
```

***

### 📤 Output

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

| Field | Type | Description |
|-------|------|-------------|
| listingId | integer | QuintoAndar listing identifier |
| url | string | Canonical listing URL |
| propertyTitle | string | Listing title |
| business\_context | string | sale, rent, or both |
| sale\_price | integer | Sale price (R$) |
| rent\_price | integer | Monthly rent (R$) |
| condo\_price | integer | Monthly condo fee (R$) |
| iptu | integer | Property tax IPTU (R$) |
| price\_per\_sqm\_brl | integer | Computed price per m² (R$) |
| area\_sqm | integer | Usable area (m²) |
| bedrooms / bathrooms / suites / parking\_spots | integer | Property specs |
| neighbourhood / city / state / zip\_code | string | Location |
| latitude / longitude | number | GPS coordinates (Detail mode) |
| amenities / installations | array | Pool, gym, concierge, pet-friendly, etc. |
| photos | array | High-resolution image URLs |
| thumbnail | string | Cover image |

**Example:**

```json
{
  "listingId": 894529391,
  "url": "https://www.quintoandar.com.br/imovel/894529391/comprar",
  "source": "detail",
  "propertyTitle": "Apartamento com 1 quarto à venda em Santo Amaro, São Paulo",
  "business_context": "both",
  "sale_price": 490000,
  "rent_price": 2800,
  "condo_price": 435,
  "iptu": 124,
  "price_per_sqm_brl": 15313,
  "area_sqm": 32,
  "bedrooms": 1,
  "bathrooms": 1,
  "suites": 1,
  "parking_spots": 0,
  "neighbourhood": "Santo Amaro",
  "city": "São Paulo",
  "state": "SP",
  "zip_code": "04702-000",
  "latitude": -23.6250841,
  "longitude": -46.6867475,
  "amenities": ["PODE_TER_ANIMAIS_DE_ESTIMACAO"],
  "installations": ["PORTARIA_24H"],
  "image_count": 48,
  "thumbnail": "https://www.quintoandar.com.br/img/xlg/original894529391-...jpg",
  "currency": "BRL"
}
```

***

### 💼 Use Cases & Examples

#### 1. Rental Yield & Investment Analysis

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

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

#### 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. Lead Generation

**Agencies sourcing seller and landlord inventory.**

**Input:** By-place searches across target cities.
**Output:** Listings with location, specs and contact-ready details (Detail mode).
**Use:** Feed a CRM with fresh, qualified property 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 QuintoAndar data.

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

**Relocation services and corporate housing teams.**

**Input:** Rent searches filtered by bedrooms and budget.
**Output:** Furnished/unfurnished 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/quintoandar-property-scraper').call({
  scrapeMode: 'overview',
  searchMode: 'byPlace',
  places: ['sao-paulo-sp-brasil'],
  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/quintoandar-property-scraper').call(
    run_input={
        'scrapeMode': 'overview',
        'searchMode': 'byPlace',
        'places': ['sao-paulo-sp-brasil'],
        '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~quintoandar-property-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"scrapeMode":"overview","searchMode":"byPlace","places":["sao-paulo-sp-brasil"],"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 and the full feature list.

🔗 [View current pricing](https://apify.com/sian.agency/quintoandar-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` (comprar) or `rent` (alugar). Detail records expose both prices when a listing offers both.

**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, floor range, full descriptions and the complete amenity list — and is also enriched with the overview fields so each row is complete.

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

**Q: Do I need a QuintoAndar 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 QuintoAndar.

**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 quintoandar.com.br and copy the slug from the URL after `/imovel/`.
- 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.

**Fewer rows than expected in Overview**

- Each search page returns a page of listings. Add more place slugs or use Detail-by-place discovery 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 QuintoAndar. "QuintoAndar" and related marks are trademarks of their respective owners. Use this actor in compliance with QuintoAndar'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 QuintoAndar's embedded page data (price, condo, size, bedrooms, baths, parking, neighbourhood, city, photos).

🔍 **DETAIL** — full fields per listing (GPS, ZIP code, condo/IPTU split, suites, floor range, construction year, descriptions, full amenity list, hi-res photos). 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 or the full feature list.

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

🧭 How to tell the scraper what to fetch:

- **By place** — type one or more QuintoAndar location slugs (e.g. "sao-paulo-sp-brasil", "pinheiros-sao-paulo-sp-brasil"). Combine with the filters below.
- **By search URL** — paste a quintoandar.com.br search-results URL; the location, contract and type are honored.
- **By listing URL/ID** — Detail mode only: paste listing URLs or bare numeric IDs to fetch specific properties.

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

📍 QuintoAndar location slugs, e.g. "sao-paulo-sp-brasil", "pinheiros-sao-paulo-sp-brasil". Used when **Search by = By place**.

**TIP:** Open the location on quintoandar.com.br and copy the slug from the URL after `/imovel/`. Add several — each place is searched in turn until **Max results** is reached.

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

🏷️ **Sale** (comprar) or **Rent** (alugar). Applies to By place searches.

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

🏠 QuintoAndar property-type slug used in the search path. Leave the default "casa-apartamento" for houses + apartments (the common case).

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

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

**TIP:** Build any search on quintoandar.com.br (pick the location, sale/rent, property type), 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.** quintoandar.com.br listing URLs (e.g. https://www.quintoandar.com.br/imovel/894529391/comprar) or bare numeric IDs.

**BULK EDIT:** Click "Bulk edit" to paste many URLs/IDs, 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 (By place mode).

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

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

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

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

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

📐 Optional. Minimum usable area in m² (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": [
    "sao-paulo-sp-brasil",
    "pinheiros-sao-paulo-sp-brasil"
  ],
  "contract": "sale",
  "typeSlug": "casa-apartamento",
  "searchUrls": [
    "https://www.quintoandar.com.br/comprar/imovel/sao-paulo-sp-brasil/casa-apartamento"
  ],
  "listingUrls": [
    "https://www.quintoandar.com.br/imovel/894529391/comprar"
  ],
  "maxResults": 100,
  "proxyCountry": ""
}
```

# Actor output Schema

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

Clean structured QuintoAndar 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": [
        "sao-paulo-sp-brasil"
    ]
};

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

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

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "QuintoAndar Scraper — Brazil Property Data & API",
        "description": "QuintoAndar scraper & real estate data API for Brazil's largest rent & sale platform. Sale & rent listings in every city: price, condo, IPTU, size, bedrooms, suites, parking, address, GPS, neighbourhood, amenities, photos — clean JSON/CSV. Fast overview or full detail. No API key needed.",
        "version": "1.0",
        "x-build-id": "LCFZh2RSKopwLL61G"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/sian.agency~quintoandar-property-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-sian.agency-quintoandar-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~quintoandar-property-scraper/runs": {
            "post": {
                "operationId": "runs-sync-sian.agency-quintoandar-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~quintoandar-property-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-sian.agency-quintoandar-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 QuintoAndar's embedded page data (price, condo, size, bedrooms, baths, parking, neighbourhood, city, photos).\n\n🔍 **DETAIL** — full fields per listing (GPS, ZIP code, condo/IPTU split, suites, floor range, construction year, descriptions, full amenity list, hi-res photos). 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 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 QuintoAndar location slugs (e.g. \"sao-paulo-sp-brasil\", \"pinheiros-sao-paulo-sp-brasil\"). Combine with the filters below.\n- **By search URL** — paste a quintoandar.com.br search-results URL; the location, contract and type are honored.\n- **By listing URL/ID** — Detail mode only: paste listing URLs or bare numeric IDs to fetch specific properties.",
                        "default": "byPlace"
                    },
                    "places": {
                        "title": "📍 Places",
                        "type": "array",
                        "description": "📍 QuintoAndar location slugs, e.g. \"sao-paulo-sp-brasil\", \"pinheiros-sao-paulo-sp-brasil\". Used when **Search by = By place**.\n\n**TIP:** Open the location on quintoandar.com.br and copy the slug from the URL after `/imovel/`. Add several — each place is searched in turn until **Max results** is reached.",
                        "default": [
                            "sao-paulo-sp-brasil"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "contract": {
                        "title": "🏷️ Contract",
                        "enum": [
                            "sale",
                            "rent"
                        ],
                        "type": "string",
                        "description": "🏷️ **Sale** (comprar) or **Rent** (alugar). Applies to By place searches.",
                        "default": "sale"
                    },
                    "typeSlug": {
                        "title": "🏠 Property type slug (optional)",
                        "type": "string",
                        "description": "🏠 QuintoAndar property-type slug used in the search path. Leave the default \"casa-apartamento\" for houses + apartments (the common case).",
                        "default": "casa-apartamento"
                    },
                    "searchUrls": {
                        "title": "🔗 Search URLs",
                        "type": "array",
                        "description": "🔗 quintoandar.com.br search-results URLs to scrape. Used when **Search by = By search URL**.\n\n**TIP:** Build any search on quintoandar.com.br (pick the location, sale/rent, property type), 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 or IDs",
                        "type": "array",
                        "description": "🆔 **Detail mode only.** quintoandar.com.br listing URLs (e.g. https://www.quintoandar.com.br/imovel/894529391/comprar) or bare numeric IDs.\n\n**BULK EDIT:** Click \"Bulk edit\" to paste many URLs/IDs, 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 (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)."
                    },
                    "minArea": {
                        "title": "📐 Min area (m²)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "📐 Optional. Minimum usable area in m² (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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
