# Zonaprop Scraper — Argentina Property Data & API (`sian.agency/zonaprop-property-scraper`) Actor

Zonaprop scraper & real estate data API for Argentina's #1 property portal (Navent). Sale & rent listings: USD/ARS price, expenses, size, rooms, baths, parking, address, GPS, photos, publisher — clean JSON/CSV. Overview or detail. No API key needed.

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

## Zonaprop Scraper — Argentina Property Data & API 🇦🇷🏠

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

#### 🎉 The fast, no-code Zonaprop data API — a full property record per listing, with USD **and** ARS prices, no Zonaprop account or API key required
##### Built for property investors, inmobiliarias, proptech teams, and market researchers who need clean Argentine real-estate data — for sale and for rent — across every barrio in Argentina.

### 📋 Overview

**Pull listings from Zonaprop — Argentina's #1 real-estate portal — as clean JSON or CSV.** For sale (*venta*) and for rent (*alquiler*), across Capital Federal, Córdoba, Rosario, Mendoza, La Plata and every city in Argentina. Prices on Zonaprop mix US dollars and Argentine pesos — this actor **captures the listed currency and converts both ways** on every row, so your comparables are never broken by the currency split.

**Why investors and inmobiliarias choose us:**
- 💱 **USD + ARS on every row**: the listed price, its currency, plus a live-FX conversion to the other currency — comparables that actually compare
- ⚡ **Two depths, one actor**: a fast Overview scan for whole-market sweeps, or full Detail records when you need the complete long description
- 🔁 **Detail = Overview + more**: every Overview field is on a Detail row too, with the full description added on top — never less
- 💰 **Pay-per-result pricing**: only charged for listings actually extracted — Overview and Detail priced separately
- 📐 **Analysis-ready**: price, expensas, total/covered m², ambientes, baths, cocheras, **USD price-per-m²** and **GPS coordinates** on every row
- 🎯 **Three ways to search**: by operation + type + place, by a pasted Zonaprop search URL (your path filters honored), or by specific listing URLs
- 🆓 **Free to try**: up to 25 listings per run, no credit card

### ✨ Features

- 🧭 **Overview mode**: a full record per listing straight from the search page — price, expensas, specs, location, publisher, photo gallery — ideal for fast market sweeps
- 🔍 **Detail mode**: full per-listing record with the complete long description and structured specs
- 🗺️ **By place / search URL / listing URL**: pick operation + property type + place, paste a Zonaprop search link, or drop in specific listings
- 💱 **Dual currency**: every row carries the listed `currency`, `price`, plus computed `price_usd` and `price_ars` at the run's live FX rate
- 📐 **USD price-per-m² + thumbnail** computed on every row for instant comparison
- 📍 **GPS + full address + barrio breadcrumb** on every listing for mapping and territory analysis
- 🏢 **Publisher built in**: agency / inmobiliaria name and ID on every listing
- 🧾 **Self-documenting datasets**: every row carries a `metadata` object recording the exact search settings that produced it
- 📤 **Clean exports**: JSON, CSV, Excel, or the full REST API

### 🎬 Quick Start

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

```bash
curl -X POST "https://api.apify.com/v2/acts/sian.agency~zonaprop-property-scraper/runs?token=[YOUR_TOKEN]" \
-H 'Content-Type: application/json' \
-d '{"scrapeMode":"overview","searchMode":"byPlace","operation":"sale","propertyType":"departamentos","place":"capital-federal","maxResults":50}'
````

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Pick your scrape depth

**Overview** for a fast, full-record scan, or **Detail** for the complete long description.

#### Step 2: Choose how to search

**By place** (pick sale/rent, a type like `departamentos`, and a place like `capital-federal`), **By search URL** (paste a Zonaprop search link — path filters honored), or **By listing URL** (detail mode — drop in specific listings).

#### Step 3: Set the limit & run

Choose your property type, sort order and Max results — then hit **Start**.

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

- A clean dataset of Argentine property listings (JSON / CSV / Excel)
- Price in USD **and** ARS, expensas, size, ambientes, GPS, publisher and USD price-per-m² on every row
- A repeatable, no-code real-estate data feed

### 📥 Input Configuration

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| scrapeMode | string | No | `overview` (fast & cheap) or `detail` (full description). Default `overview`. |
| searchMode | string | No | `byPlace`, `bySearchUrl`, or `byListingUrl` (detail only). |
| operation | string | No | `sale` (venta) or `rent` (alquiler). Default `sale`. |
| propertyType | string | No | `inmuebles` (all), `departamentos`, `casas`, `ph`, `oficinas-comerciales`, … (byPlace). |
| place | string | No | Geo slug/name, e.g. `capital-federal`, `palermo`, `cordoba` (byPlace). |
| sort | string | No | `relevance`, `low_price`, `high_price`, `more_recent`, `most_visit`, `most_lowered`. |
| searchUrls | array | No | Zonaprop search URLs (bySearchUrl) — path filters honored. |
| listingUrls | array | No | Listing URLs (detail / byListingUrl). |
| maxResults | integer | No | Max listings this run. FREE tier capped at 25. |

**Example — by place:**

```json
{
  "scrapeMode": "overview",
  "searchMode": "byPlace",
  "operation": "sale",
  "propertyType": "departamentos",
  "place": "capital-federal",
  "sort": "low_price",
  "maxResults": 200
}
```

**Example — by search URL:**

```json
{
  "scrapeMode": "overview",
  "searchMode": "bySearchUrl",
  "searchUrls": ["https://www.zonaprop.com.ar/casas-alquiler-cordoba.html"],
  "maxResults": 100
}
```

### 📤 Output

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

| Field | Type | Description |
|-------|------|-------------|
| propertyTitle | string | Listing title |
| url | string | Listing URL |
| operation\_type | string | Venta / Alquiler |
| property\_type | string | Departamentos, Casas, PH, … |
| currency | string | Listed currency: `USD` or `ARS` |
| price | number | Asking price in the listed currency |
| price\_usd / price\_ars | number | Price converted to USD and ARS (live FX) |
| price\_per\_sqm\_usd | number | USD price per m² (computed) |
| expenses | number | Monthly expensas |
| total\_area / covered\_area | number | Surface area (m²) |
| rooms / bedrooms / bathrooms / parking | number | Specs (ambientes, dormitorios, baños, cocheras) |
| address / location\_name / location\_path | string | Address + barrio + full geo breadcrumb |
| latitude / longitude | number | GPS |
| publisher / publisher\_id | string | Agency / inmobiliaria |
| images / thumbnail | array / string | Photo gallery |
| description | string | Listing description (full in detail mode) |

**Example:**

```json
{
  "id": "58984926",
  "propertyTitle": "Departamento 4 Ambientes con Cochera y Dependencia en Caballito",
  "url": "https://www.zonaprop.com.ar/propiedades/clasificado/...-58984926.html",
  "operation_type": "Venta",
  "property_type": "Departamentos",
  "currency": "USD",
  "price": 230000,
  "price_usd": 230000,
  "price_ars": 271400000,
  "price_per_sqm_usd": 2170,
  "expenses": 530000,
  "total_area": 106,
  "rooms": 4,
  "bedrooms": 3,
  "bathrooms": 2,
  "parking": 1,
  "location_name": "Caballito Sur",
  "location_path": "Caballito Sur > Caballito > Capital Federal > Argentina",
  "latitude": -34.619,
  "longitude": -58.439,
  "publisher": "C21 Guerra Zanelli",
  "image_count": 8
}
```

### 💼 Use Cases & Examples

#### 1. Market research & price benchmarking

**Analysts sizing a city or barrio market.**
**Input:** `byPlace` Capital Federal, sale. **Output:** thousands of listings with USD price-per-m². **Use:** build a live price index per zone.

#### 2. Investment sourcing

**Investors hunting undervalued stock.**
**Input:** `byPlace` + `sort: low_price`. **Output:** filtered listings with USD/ARS price and GPS. **Use:** rank deals by USD price-per-m² vs barrio median.

#### 3. Inmobiliaria lead & competitor coverage

**Agencies mapping the market.**
**Input:** Overview scan of a target area. **Output:** publisher name + ID on every row. **Use:** see which agencies dominate which barrios.

#### 4. Proptech & valuation data feeds

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

#### 5. USD/ARS arbitrage & inflation tracking

**Analysts tracking the dollar-vs-peso property split.**
**Input:** `byPlace` runs over time. **Output:** listed currency + both conversions on every row. **Use:** track how pricing shifts between USD and ARS.

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

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

### 🔗 Integration Examples

#### JavaScript/Node.js

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

const run = await client.actor('sian.agency/zonaprop-property-scraper').call({
  scrapeMode: 'overview', searchMode: 'byPlace', operation: 'sale', propertyType: 'departamentos', place: 'capital-federal', maxResults: 50,
});

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

#### Python

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

run = client.actor('sian.agency/zonaprop-property-scraper').call(
    run_input={'scrapeMode': 'overview', 'searchMode': 'byPlace', 'operation': 'sale', 'propertyType': 'departamentos', 'place': 'capital-federal', 'maxResults': 50}
)

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

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~zonaprop-property-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"scrapeMode":"overview","searchMode":"byPlace","operation":"sale","propertyType":"departamentos","place":"capital-federal","maxResults":50}'
```

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

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

### 📊 Performance & Pricing

#### FREE Tier (Try It Now)

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

#### PAID Tier (Production Ready)

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

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

### ❓ Frequently Asked Questions

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

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

**Q: How are USD and ARS prices handled?**
A: Each listing keeps its listed `currency` and `price`. The actor also computes `price_usd` and `price_ars` using one live FX rate per run, stamped on every row — so you can compare across the dollar/peso split.

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

**Q: Can I use my own Zonaprop search filters?**
A: Yes — paste your search URL in `bySearchUrl` mode and the path filters are honored.

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

**Q: Does it work for both sale and rent?**
A: Yes — set `operation` to `sale` (venta) or `rent` (alquiler).

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

### 🐛 Troubleshooting

**No results returned**

- Check the place spelling (e.g. `capital-federal`, `cordoba`), or paste a working Zonaprop search URL instead.
- Make sure `propertyType` is a valid slug (e.g. `departamentos`, `casas`, `inmuebles` for all types).

**Fewer results than expected**

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

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

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

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

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

*This is an independent tool and is not affiliated with, endorsed by, or sponsored by Zonaprop, Navent Group, or their affiliates. "Zonaprop" is a trademark of its respective owner.*

### 🤝 Support

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

**Join our active support community**

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

***

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

# Actor input Schema

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

⚡ **OVERVIEW** — fast, cheap. Pulls a full record per listing straight from the Zonaprop search page (USD/ARS price, expensas, size, rooms, baths, parking, full address, GPS, photos, publisher, description).

🔍 **DETAIL** — same record plus the full long description and structured specs for a specific listing. Slower and priced higher per result.

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

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

🧭 How to tell the scraper what to fetch:

- **By place** — pick sale/rent, a property type and (optionally) a place (e.g. palermo, capital-federal).
- **By search URL** — paste a Zonaprop search-results URL; the path filters baked into the URL are honored.
- **By listing URL** — Detail mode only: paste Zonaprop listing URLs to fetch specific properties.

## `operation` (type: `string`):

🏷️ **Sale** (venta) or **Rent** (alquiler). Applies to By place searches.

## `propertyType` (type: `string`):

🏠 Property type. `inmuebles` = all types. Other options: `departamentos`, `casas`, `ph`, `oficinas-comerciales`, `locales-comerciales`, `terrenos`, `cocheras`, `depositos`, `galpones`, `quintas-vacacionales`, `campos`. Used in **By place** mode.

## `place` (type: `string`):

📍 Optional. Geo slug or name, e.g. `palermo`, `capital-federal`, `cordoba`, `belgrano` — automatically slugified. Used with **operation** + **property type** in **By place** mode.

**TIP:** leave blank for an Argentina-wide search.

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

↕️ Sort order for By place searches: relevance (default), low\_price, high\_price, more\_recent, most\_visit, most\_lowered.

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

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

**TIP:** Build any search on zonaprop.com.ar (set area, sale/rent, filters), then copy the URL from the address bar — the path filters are honored.

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

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

🆔 **Detail mode only.** Zonaprop listing URLs (e.g. https://www.zonaprop.com.ar/propiedades/clasificado/...-58319251.html).

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

## Actor input object example

```json
{
  "scrapeMode": "overview",
  "searchMode": "byPlace",
  "operation": "sale",
  "propertyType": "inmuebles",
  "place": "capital-federal",
  "sort": "relevance",
  "searchUrls": [
    "https://www.zonaprop.com.ar/departamentos-venta-capital-federal.html"
  ],
  "listingUrls": [
    "https://www.zonaprop.com.ar/propiedades/clasificado/veclapin-departamento-4-ambientes-con-cochera-y-dependencia-en-58984926.html"
  ],
  "maxResults": 100
}
```

# Actor output Schema

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

Scraped Zonaprop listings (JSON/CSV/Excel).

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/zonaprop-property-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/zonaprop-property-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call sian.agency/zonaprop-property-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Zonaprop Scraper — Argentina Property Data & API",
        "description": "Zonaprop scraper & real estate data API for Argentina's #1 property portal (Navent). Sale & rent listings: USD/ARS price, expenses, size, rooms, baths, parking, address, GPS, photos, publisher — clean JSON/CSV. Overview or detail. No API key needed.",
        "version": "1.0",
        "x-build-id": "1tHzRooXtXR85wPJ0"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/sian.agency~zonaprop-property-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-sian.agency-zonaprop-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~zonaprop-property-scraper/runs": {
            "post": {
                "operationId": "runs-sync-sian.agency-zonaprop-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~zonaprop-property-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-sian.agency-zonaprop-property-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "scrapeMode": {
                        "title": "⚡ Scrape mode",
                        "enum": [
                            "overview",
                            "detail"
                        ],
                        "type": "string",
                        "description": "⚡ **OVERVIEW** — fast, cheap. Pulls a full record per listing straight from the Zonaprop search page (USD/ARS price, expensas, size, rooms, baths, parking, full address, GPS, photos, publisher, description).\n\n🔍 **DETAIL** — same record plus the full long description and structured specs for a specific listing. Slower and priced higher per result.\n\n**TIP:** Start with Overview — the search page already carries almost every field. Use Detail only when you need the full description for specific listings.",
                        "default": "overview"
                    },
                    "searchMode": {
                        "title": "🧭 Search by",
                        "enum": [
                            "byPlace",
                            "bySearchUrl",
                            "byListingUrl"
                        ],
                        "type": "string",
                        "description": "🧭 How to tell the scraper what to fetch:\n\n- **By place** — pick sale/rent, a property type and (optionally) a place (e.g. palermo, capital-federal).\n- **By search URL** — paste a Zonaprop search-results URL; the path filters baked into the URL are honored.\n- **By listing URL** — Detail mode only: paste Zonaprop listing URLs to fetch specific properties.",
                        "default": "byPlace"
                    },
                    "operation": {
                        "title": "🏷️ Operation",
                        "enum": [
                            "sale",
                            "rent"
                        ],
                        "type": "string",
                        "description": "🏷️ **Sale** (venta) or **Rent** (alquiler). Applies to By place searches.",
                        "default": "sale"
                    },
                    "propertyType": {
                        "title": "🏠 Property type",
                        "enum": [
                            "inmuebles",
                            "departamentos",
                            "casas",
                            "ph",
                            "oficinas-comerciales",
                            "locales-comerciales",
                            "terrenos",
                            "cocheras",
                            "depositos",
                            "galpones",
                            "quintas-vacacionales",
                            "campos"
                        ],
                        "type": "string",
                        "description": "🏠 Property type. `inmuebles` = all types. Other options: `departamentos`, `casas`, `ph`, `oficinas-comerciales`, `locales-comerciales`, `terrenos`, `cocheras`, `depositos`, `galpones`, `quintas-vacacionales`, `campos`. Used in **By place** mode.",
                        "default": "inmuebles"
                    },
                    "place": {
                        "title": "📍 Place",
                        "type": "string",
                        "description": "📍 Optional. Geo slug or name, e.g. `palermo`, `capital-federal`, `cordoba`, `belgrano` — automatically slugified. Used with **operation** + **property type** in **By place** mode.\n\n**TIP:** leave blank for an Argentina-wide search."
                    },
                    "sort": {
                        "title": "↕️ Sort",
                        "enum": [
                            "relevance",
                            "low_price",
                            "high_price",
                            "more_recent",
                            "most_visit",
                            "most_lowered"
                        ],
                        "type": "string",
                        "description": "↕️ Sort order for By place searches: relevance (default), low_price, high_price, more_recent, most_visit, most_lowered.",
                        "default": "relevance"
                    },
                    "searchUrls": {
                        "title": "🔗 Search URLs",
                        "type": "array",
                        "description": "🔗 Zonaprop search-results URLs to scrape. Used when **Search by = By search URL**.\n\n**TIP:** Build any search on zonaprop.com.ar (set area, sale/rent, filters), then copy the URL from the address bar — the path filters are honored.\n\n**BULK EDIT:** Click \"Bulk edit\" to paste many URLs, one per line.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "listingUrls": {
                        "title": "🆔 Listing URLs",
                        "type": "array",
                        "description": "🆔 **Detail mode only.** Zonaprop listing URLs (e.g. https://www.zonaprop.com.ar/propiedades/clasificado/...-58319251.html).\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
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
