# Zonaprop AR 11k💰 Prices, Photos & Agencies (`abotapi/zonaprop-scraper`) Actor

Scrape zonaprop.com.ar property listings across Argentina. 140+ fields: price (USD/ARS), price per m², expenses, area, rooms, bedrooms, bathrooms, GPS, full description, every photo, agency name, phone and WhatsApp. Buy, rent and temporary; search and URL modes; sort and price/area/room filters.

- **URL**: https://apify.com/abotapi/zonaprop-scraper.md
- **Developed by:** [AbotAPI](https://apify.com/abotapi) (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.00 / 1,000 property results

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 Property Scraper

Extract property listings from zonaprop.com.ar, Argentina's largest property portal, at any volume. Search by location and filters or paste search URLs, and get back a clean, flat record per property with price in USD and ARS, expenses, area, rooms, bedrooms, bathrooms, GPS coordinates, the full description, every photo, and the agency or owner contact including phone and WhatsApp. Results from every page of a search are collected up to your chosen limit.

### Why this scraper?

- 140+ fields per property, including both USD and ARS prices, price per square metre, monthly expenses, total and covered area, rooms, bedrooms, bathrooms, garages, age, GPS, full description and the complete photo set.
- Agency and owner contacts: name, type, profile URL, phone and WhatsApp number.
- Two input modes: build searches from location names plus filters, or paste any number of zonaprop search URLs.
- Buy, rent and temporary rent, every property type (apartment, house, PH, land, office, store, warehouse and more), and every location in Argentina.
- Sort by relevance, price low to high, price high to low, or newest, plus price, currency, area, room and bedroom filters.
- Results from every page of a search collected, with a single hard cap on total listings, so a run is easy to size and budget.
- Optional detail fetch adds the full untruncated description; results already carry a description, location, GPS, contacts, prices and photos, so most runs never need it.

### Data you get

> Sample shape, values are illustrative placeholders, not from a live listing.

| Field | Example |
| --- | --- |
| postingId | 00000000 |
| title | Bright 2-bedroom apartment in Palermo |
| operationType | Venta |
| propertyType | Departamentos |
| price | 185000 |
| currency | USD |
| priceArs | 0 |
| expenses | 80000 |
| totalArea | 72 |
| coveredArea | 65 |
| rooms | 3 |
| bedrooms | 2 |
| bathrooms | 1 |
| garages | 1 |
| neighborhood | Palermo |
| city | Capital Federal |
| province | Capital Federal |
| latitude | -34.588000 |
| longitude | -58.430000 |
| publisherName | Jane Doe Propiedades |
| publisherPhone | 5491100000000 |
| publisherWhatsapp | 5491100000000 |
| mainImage | https://example.com/photo-1.jpg |
| photoCount | 12 |
| url | https://www.zonaprop.com.ar/propiedades/clasificado/example-00000000.html |

### How to use

Search by location and filters:

```json
{
  "mode": "search",
  "locations": ["Palermo", "Belgrano"],
  "operationType": "sale",
  "propertyType": "apartment",
  "minPrice": 100000,
  "maxPrice": 300000,
  "currency": "USD",
  "sortBy": "price-asc",
  "maxListings": 100
}
````

Paste one or more search URLs:

```json
{
  "mode": "url",
  "urls": [
    "https://www.zonaprop.com.ar/casas-venta-cordoba.html",
    "https://www.zonaprop.com.ar/departamentos-alquiler-palermo.html"
  ],
  "maxPages": 5,
  "maxListings": 200
}
```

Search with the full description fetched per property:

```json
{
  "mode": "search",
  "locations": ["Capital Federal"],
  "operationType": "rent",
  "fetchDetails": true,
  "maxListings": 50
}
```

### Input parameters

| Parameter | Type | Description |
| --- | --- | --- |
| mode | select | search = build searches from locations and filters. url = paste search URLs. |
| locations | array | Location names to search (search mode), e.g. Capital Federal, Palermo, Cordoba. |
| operationType | select | Buy (sale), rent or temporary rent (search mode). |
| propertyType | select | Property category: all, apartment, house, ph, land, office, store, warehouse, country\_house, farm, office\_practice, building (search mode). |
| minPrice | integer | Minimum price in the listing currency (search mode). |
| maxPrice | integer | Maximum price in the listing currency (search mode). |
| currency | select | Keep only listings in this currency: any, USD or ARS (search mode). |
| minArea | integer | Minimum total area in square metres (search mode). |
| maxArea | integer | Maximum total area in square metres (search mode). |
| minRooms | integer | Minimum number of rooms / ambientes (search mode). |
| maxRooms | integer | Maximum number of rooms / ambientes (search mode). |
| minBedrooms | integer | Minimum number of bedrooms / dormitorios (search mode). |
| sortBy | select | relevance, price-asc, price-desc or newest (search mode). |
| urls | array | One or more zonaprop search URLs (url mode). Filters above are ignored. |
| fetchDetails | boolean | Fetch each property page to add the full untruncated description. Off by default. |
| maxPages | integer | Optional page cap per location/URL. Empty means no page cap; the run is bounded by Max listings. |
| maxListings | integer | Hard cap on total listings across all searches. 0 means unlimited. Defaults to 20. |
| proxy | proxy | Proxy configuration. An Argentina residential proxy is required. |
| allowProxyDowngrade | boolean | Allow a cheaper backup connection when the primary keeps failing, and stay on it if the site serves results from it. On by default; saves residential quota. |
| residentialCap | integer | Optional cap on residential requests per run. Once reached, the run switches to the cheaper backup connection. Empty/0 = no cap. |
| trafficBudgetMb | integer | Optional cap on total downloaded data per run, in MB. Once reached, the run switches to the cheaper backup connection. Empty/0 = no budget. |
| mcpConnectors | array | Optional MCP connectors to pipe results into Notion, Linear, Airtable or Apify. |
| notionParentPageUrl | string | Notion parent page URL or id (Notion connector only). |
| maxNotifyListings | integer | Cap on items sent to each connector per run. Does not affect the dataset. |

#### Export to your apps (MCP connectors)

This actor can optionally push a condensed, human-readable summary of each result into the apps you already use, through Model Context Protocol (MCP) connectors. Authorize a connector once under Apify, Settings, Integrations, then list it in `mcpConnectors`. Supported connectors include Notion, Linear, Airtable and Apify. The connector receives a short per-item summary (title plus key fields); the complete record always stays in the dataset. For the Notion connector, set `notionParentPageUrl` to the page under which item pages should be created. Use `maxNotifyListings` to cap how many items are sent per connector per run. Leave `mcpConnectors` empty to skip this entirely.

### Output example

> Sample shape, values are illustrative placeholders, not from a live listing.

```json
{
  "postingId": "00000000",
  "postingCode": "AAAAAA",
  "url": "https://www.zonaprop.com.ar/propiedades/clasificado/example-00000000.html",
  "title": "Bright 2-bedroom apartment in Palermo",
  "description": "Sunny apartment, fully equipped, close to transport and shops.",
  "propertyType": "Departamentos",
  "operationType": "Venta",
  "status": "ONLINE",
  "price": 185000,
  "currency": "USD",
  "priceUsd": 185000,
  "priceArs": null,
  "expenses": 80000,
  "expensesCurrency": "$",
  "totalArea": 72,
  "coveredArea": 65,
  "rooms": 3,
  "bedrooms": 2,
  "bathrooms": 1,
  "garages": 1,
  "age": 8,
  "address": "Example St 100",
  "neighborhood": "Palermo",
  "city": "Capital Federal",
  "province": "Capital Federal",
  "country": "Argentina",
  "latitude": -34.588,
  "longitude": -58.43,
  "mainImage": "https://example.com/photo-1.jpg",
  "images": ["https://example.com/photo-1.jpg", "https://example.com/photo-2.jpg"],
  "photoCount": 12,
  "amenities": ["Pool", "Gym"],
  "publisherName": "Jane Doe Propiedades",
  "publisherType": "agency",
  "publisherPhone": "5491100000000",
  "publisherWhatsapp": "5491100000000",
  "hasWhatsapp": true,
  "modifiedDate": "2026-01-01T00:00:00-0300",
  "scrapedAt": "2026-01-01T00:00:00+00:00"
}
```

### Plan requirement

zonaprop.com.ar serves results only to Argentine residential connections, so this actor needs an Apify plan that includes residential proxy. Keep the default proxy configuration (residential, country Argentina) for reliable results. Datacenter connections are turned away by the site.

If you run without a residential proxy, the actor logs a clear warning and tries a cheaper backup connection so the run still has a chance of returning results, but residential is strongly recommended.

#### Cost controls

The actor automatically recovers from a failed request and retries with backoff. To bound proxy spend you can also:

- set `residentialCap` to limit how many requests use the residential proxy per run;
- set `trafficBudgetMb` to cap total downloaded data per run;
- leave `allowProxyDowngrade` on (the default) so the run falls back to, and stays on, a cheaper backup connection whenever the site accepts it.

When either the residential cap or the traffic budget is reached, the run continues on the cheaper backup connection instead of stopping.

# Actor input Schema

## `mode` (type: `string`):

search = build searches from location names + filters. url = paste one or more zonaprop search URLs.

## `locations` (type: `array`):

Location names to search, e.g. Capital Federal, Palermo, Cordoba, Mendoza. Accents and spaces are handled automatically. Only applies when mode = search.

## `operationType` (type: `string`):

Buy, rent or temporary rent. Only applies when mode = search.

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

Property category to search. 'All' covers every type. Only applies when mode = search.

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

Minimum price in the listing currency. Only applies when mode = search.

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

Maximum price in the listing currency. Only applies when mode = search.

## `currency` (type: `string`):

Keep only listings priced in this currency. Argentine listings are quoted in USD or ARS. Only applies when mode = search.

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

Minimum total area in square metres. Only applies when mode = search.

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

Maximum total area in square metres. Only applies when mode = search.

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

Minimum number of rooms (ambientes). Only applies when mode = search.

## `maxRooms` (type: `integer`):

Maximum number of rooms (ambientes). Only applies when mode = search.

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

Minimum number of bedrooms (dormitorios). Only applies when mode = search.

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

Result ordering. Only applies when mode = search.

## `urls` (type: `array`):

Paste one or more zonaprop search URLs. Multi-URL supported. Filter fields above are ignored in this mode. Results are collected starting from the page in the URL.

## `fetchDetails` (type: `boolean`):

Fetch each property page to add the full untruncated description. The search results already include a description, location, GPS, agency contact, prices and all photos, so leave this off for the fastest, cheapest run. Adds one request per property.

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

Optional safety stop on how many result pages to read per location/URL (about 30 listings per page). This does NOT cap the run: leave it empty (or 0) for unlimited pages and the run is bounded solely by Max listings. Set a value only if you also want a per-search page ceiling.

## `maxListings` (type: `integer`):

The run's single hard cap: maximum total listings across all searches. Defaults to 20. Set 0 for unlimited. This is the only default limit; Max pages is unlimited by default and defers to this.

## `proxy` (type: `object`):

An Argentina residential proxy is required: zonaprop serves results only to Argentine residential connections. The actor defaults the country to Argentina.

## `allowProxyDowngrade` (type: `boolean`):

When on, the run may fall back to a cheaper backup connection if the primary connection keeps failing, and will stay on the cheaper connection if the site serves results from it. This saves residential proxy quota. Turn off to always use the configured proxy only.

## `residentialCap` (type: `integer`):

Optional ceiling on how many requests may use the residential proxy in one run. Once reached, the run switches to the cheaper backup connection. Leave empty or 0 for no cap. Use this to bound residential proxy spend.

## `trafficBudgetMb` (type: `integer`):

Optional cap on total downloaded data per run, in megabytes. Once reached, the run switches to the cheaper backup connection. Leave empty or 0 for no budget.

## `mcpConnectors` (type: `array`):

Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify, Settings, Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON; the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com).

## `notionParentPageUrl` (type: `string`):

URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors.

## `maxNotifyListings` (type: `integer`):

Cap on items written to each connector per run. Does not affect the dataset.

## Actor input object example

```json
{
  "mode": "search",
  "locations": [
    "Capital Federal"
  ],
  "operationType": "sale",
  "propertyType": "all",
  "currency": "any",
  "sortBy": "relevance",
  "urls": [
    "https://www.zonaprop.com.ar/departamentos-venta-palermo.html"
  ],
  "fetchDetails": false,
  "maxListings": 20,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "AR"
  },
  "allowProxyDowngrade": true,
  "maxNotifyListings": 50
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# 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 = {
    "locations": [
        "Capital Federal"
    ],
    "urls": [
        "https://www.zonaprop.com.ar/departamentos-venta-palermo.html"
    ],
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "AR"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("abotapi/zonaprop-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 = {
    "locations": ["Capital Federal"],
    "urls": ["https://www.zonaprop.com.ar/departamentos-venta-palermo.html"],
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "AR",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("abotapi/zonaprop-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 '{
  "locations": [
    "Capital Federal"
  ],
  "urls": [
    "https://www.zonaprop.com.ar/departamentos-venta-palermo.html"
  ],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "AR"
  }
}' |
apify call abotapi/zonaprop-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Zonaprop AR 11k💰 Prices, Photos & Agencies",
        "description": "Scrape zonaprop.com.ar property listings across Argentina. 140+ fields: price (USD/ARS), price per m², expenses, area, rooms, bedrooms, bathrooms, GPS, full description, every photo, agency name, phone and WhatsApp. Buy, rent and temporary; search and URL modes; sort and price/area/room filters.",
        "version": "1.0",
        "x-build-id": "ptdHfVWzA368z4FL5"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/abotapi~zonaprop-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-abotapi-zonaprop-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/abotapi~zonaprop-scraper/runs": {
            "post": {
                "operationId": "runs-sync-abotapi-zonaprop-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/abotapi~zonaprop-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-abotapi-zonaprop-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",
                "required": [
                    "mode"
                ],
                "properties": {
                    "mode": {
                        "title": "Search mode",
                        "enum": [
                            "search",
                            "url"
                        ],
                        "type": "string",
                        "description": "search = build searches from location names + filters. url = paste one or more zonaprop search URLs.",
                        "default": "search"
                    },
                    "locations": {
                        "title": "Locations",
                        "type": "array",
                        "description": "Location names to search, e.g. Capital Federal, Palermo, Cordoba, Mendoza. Accents and spaces are handled automatically. Only applies when mode = search.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "operationType": {
                        "title": "Operation",
                        "enum": [
                            "sale",
                            "rent",
                            "temporary"
                        ],
                        "type": "string",
                        "description": "Buy, rent or temporary rent. Only applies when mode = search.",
                        "default": "sale"
                    },
                    "propertyType": {
                        "title": "Property type",
                        "enum": [
                            "all",
                            "apartment",
                            "house",
                            "ph",
                            "land",
                            "office",
                            "store",
                            "warehouse",
                            "country_house",
                            "farm",
                            "office_practice",
                            "building"
                        ],
                        "type": "string",
                        "description": "Property category to search. 'All' covers every type. Only applies when mode = search.",
                        "default": "all"
                    },
                    "minPrice": {
                        "title": "Min price",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum price in the listing currency. Only applies when mode = search."
                    },
                    "maxPrice": {
                        "title": "Max price",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum price in the listing currency. Only applies when mode = search."
                    },
                    "currency": {
                        "title": "Currency",
                        "enum": [
                            "any",
                            "USD",
                            "ARS"
                        ],
                        "type": "string",
                        "description": "Keep only listings priced in this currency. Argentine listings are quoted in USD or ARS. Only applies when mode = search.",
                        "default": "any"
                    },
                    "minArea": {
                        "title": "Min area (m2)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum total area in square metres. Only applies when mode = search."
                    },
                    "maxArea": {
                        "title": "Max area (m2)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum total area in square metres. Only applies when mode = search."
                    },
                    "minRooms": {
                        "title": "Min rooms",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Minimum number of rooms (ambientes). Only applies when mode = search."
                    },
                    "maxRooms": {
                        "title": "Max rooms",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of rooms (ambientes). Only applies when mode = search."
                    },
                    "minBedrooms": {
                        "title": "Min bedrooms",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Minimum number of bedrooms (dormitorios). Only applies when mode = search."
                    },
                    "sortBy": {
                        "title": "Sort order",
                        "enum": [
                            "relevance",
                            "price-asc",
                            "price-desc",
                            "newest"
                        ],
                        "type": "string",
                        "description": "Result ordering. Only applies when mode = search.",
                        "default": "relevance"
                    },
                    "urls": {
                        "title": "Search URLs",
                        "type": "array",
                        "description": "Paste one or more zonaprop search URLs. Multi-URL supported. Filter fields above are ignored in this mode. Results are collected starting from the page in the URL.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "fetchDetails": {
                        "title": "Fetch full description from each property page",
                        "type": "boolean",
                        "description": "Fetch each property page to add the full untruncated description. The search results already include a description, location, GPS, agency contact, prices and all photos, so leave this off for the fastest, cheapest run. Adds one request per property.",
                        "default": false
                    },
                    "maxPages": {
                        "title": "Max pages per search",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Optional safety stop on how many result pages to read per location/URL (about 30 listings per page). This does NOT cap the run: leave it empty (or 0) for unlimited pages and the run is bounded solely by Max listings. Set a value only if you also want a per-search page ceiling."
                    },
                    "maxListings": {
                        "title": "Max listings",
                        "minimum": 0,
                        "type": "integer",
                        "description": "The run's single hard cap: maximum total listings across all searches. Defaults to 20. Set 0 for unlimited. This is the only default limit; Max pages is unlimited by default and defers to this.",
                        "default": 20
                    },
                    "proxy": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "An Argentina residential proxy is required: zonaprop serves results only to Argentine residential connections. The actor defaults the country to Argentina."
                    },
                    "allowProxyDowngrade": {
                        "title": "Allow cheaper proxy when the site permits",
                        "type": "boolean",
                        "description": "When on, the run may fall back to a cheaper backup connection if the primary connection keeps failing, and will stay on the cheaper connection if the site serves results from it. This saves residential proxy quota. Turn off to always use the configured proxy only.",
                        "default": true
                    },
                    "residentialCap": {
                        "title": "Residential request cap (per run)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Optional ceiling on how many requests may use the residential proxy in one run. Once reached, the run switches to the cheaper backup connection. Leave empty or 0 for no cap. Use this to bound residential proxy spend."
                    },
                    "trafficBudgetMb": {
                        "title": "Traffic budget (MB, per run)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Optional cap on total downloaded data per run, in megabytes. Once reached, the run switches to the cheaper backup connection. Leave empty or 0 for no budget."
                    },
                    "mcpConnectors": {
                        "title": "Pipe results into your apps (optional)",
                        "type": "array",
                        "description": "Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify, Settings, Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON; the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com)."
                    },
                    "notionParentPageUrl": {
                        "title": "Notion parent page (Notion connector only)",
                        "type": "string",
                        "description": "URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors."
                    },
                    "maxNotifyListings": {
                        "title": "Max items to export per connector",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Cap on items written to each connector per run. Does not affect the dataset.",
                        "default": 50
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
