# ZonaProp Scraper (Cheap) (`data_api/zonaprop-scraper-cheap`) Actor

Extract structured property data from Argentina's largest real estate portal. Paste any ZonaProp search URL by location, type, or price range and get price, surface area, rooms, GPS coordinates, images, and agency details. Paginates automatically, up to 10,000 listings per URL.

- **URL**: https://apify.com/data\_api/zonaprop-scraper-cheap.md
- **Developed by:** [Data API](https://apify.com/data_api) (community)
- **Categories:** Real estate, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.99 / 1,000 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 Scraper

Researching the Argentine property market usually means clicking through ZonaProp listing by listing and copying out the price, surface area, rooms, and the agency behind each one. This scraper hands that job off. Paste a ZonaProp search URL and every listing comes back as a tidy row, with price, location, size, and agency already split into named fields, ready for a spreadsheet or a model. It runs fast, costs little, needs no code, and you pay only for what you scrape.

![ZonaProp Scraper](cover.jpg)

### What you get

Each listing arrives as one row, with the data sorted into a few groups:

- **Listing basics** — `listingId`, `referenceCode`, `listingTitle`, `autoTitle`, `listingUrl`, `dealType`, `propertyType`
- **Price and size** — `priceValue`, `priceCurrency`, `monthlyFees`, `feesCurrency`, `totalAreaSqm`, `coveredAreaSqm`, `roomCount`, `bedroomCount`, `bathroomCount`, `parkingSpaces`, `toiletCount`, `buildingAge`
- **Location** — `streetAddress`, `districtName`, `cityName`, `countryName`, `lat`, `lng`
- **Agency and media** — `brokerName`, `brokerUrl`, `brokerLicense`, `imageLinks`, `summary`, `updatedDate`, `videoFlag`, `virtualTourFlag`, `collectedAt`

### Quick start

1. Open zonaprop.com.ar, set your filters (location, property type, sale or rent), and copy the URL from the address bar.
2. Click **Try for free** and paste that URL into **Search URLs**.
3. Set a **Results limit** to cap how many listings each URL returns.
4. Hit **Start**, then export your rows as JSON, CSV, Excel, or XML.

![How it works](how-it-works.jpg)

### Use cases

- **Price tracking** — follow asking prices across a barrio or city and catch reductions as they land
- **Neighborhood comparison** — line up price per m², room counts, and building age between districts
- **Investment research** — assemble a dataset of for-sale or rental stock and score it against your own criteria
- **Agency analysis** — see which agencies list what, where, and at what price point
- **Market dashboards** — pipe fresh ZonaProp data into your own sheet, BI tool, or app

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `targetUrls` | array of strings | Yes | ZonaProp search-result URLs to scrape; each one runs on its own with full pagination. Prefilled with a Palermo rentals search. |
| `resultsLimit` | integer | No | How many listings to gather per search URL. Default `25`. |
| `timeoutSeconds` | integer | No | Seconds to wait on each request before it gives up. Default `45`. |

#### Example input

```json
{
    "targetUrls": [
        "https://www.zonaprop.com.ar/casas-venta-cordoba.html",
        "https://www.zonaprop.com.ar/departamentos-venta-rosario.html"
    ],
    "resultsLimit": 25,
    "timeoutSeconds": 45
}
````

### Output

Every listing on the search results turns into one row, with pages followed automatically up to your limit. When ZonaProp doesn't publish a field for a given property, that field comes back null rather than guessed.

#### Example output

```json
{
    "listingId": "54128893",
    "referenceCode": "CAP7850638",
    "listingTitle": "Departamento en venta en Palermo",
    "autoTitle": "Departamento 78m2 3 Ambientes",
    "listingUrl": "https://www.zonaprop.com.ar/propiedades/departamento-3-ambientes-palermo-54128893.html",
    "dealType": "Venta",
    "priceValue": 215000,
    "priceCurrency": "USD",
    "monthlyFees": 95000,
    "feesCurrency": "ARS",
    "totalAreaSqm": 78,
    "coveredAreaSqm": 70,
    "roomCount": 3,
    "bedroomCount": 2,
    "bathroomCount": 1,
    "parkingSpaces": 1,
    "toiletCount": 1,
    "buildingAge": 12,
    "streetAddress": "Gorriti 4500",
    "districtName": "Palermo",
    "cityName": "Capital Federal",
    "countryName": "Argentina",
    "lat": -34.5889,
    "lng": -58.4306,
    "imageLinks": [
        "https://imgar.zonapropcdn.com.ar/avisos/1/example-1.jpg",
        "https://imgar.zonapropcdn.com.ar/avisos/1/example-2.jpg"
    ],
    "brokerName": "Inmobiliaria Norte",
    "brokerUrl": "https://www.zonaprop.com.ar/inmobiliarias/inmobiliaria-norte_12345.html",
    "brokerLicense": "CUCICBA 1234",
    "propertyType": "Departamento",
    "summary": "Luminoso departamento de 3 ambientes en el corazón de Palermo, a pasos del subte y de Plaza Serrano.",
    "updatedDate": "2026-06-22",
    "videoFlag": false,
    "virtualTourFlag": true,
    "collectedAt": "2026-06-29T12:00:00.000000+00:00"
}
```

#### Output fields

| Field | Type | Description |
|-------|------|-------------|
| `listingId` | string | ZonaProp's internal identifier for the listing |
| `referenceCode` | string | Public reference code shown on the listing, e.g. CAP7850638 |
| `listingTitle` | string | Headline of the listing on the results page |
| `autoTitle` | string | Title built from the property features, e.g. Departamento 102m2 4 Ambientes |
| `listingUrl` | string | Direct link to the listing's detail page on ZonaProp |
| `dealType` | string | Venta (for sale) or Alquiler (for rent) |
| `priceValue` | integer | Asking price as a plain number |
| `priceCurrency` | string | Currency of the price, USD or ARS |
| `monthlyFees` | integer | Monthly building fees (expensas) |
| `feesCurrency` | string | Currency of the monthly fees, usually ARS |
| `totalAreaSqm` | number | Whole surface area in square meters |
| `coveredAreaSqm` | number | Roofed surface area in square meters |
| `roomCount` | integer | Number of rooms (ambientes) |
| `bedroomCount` | integer | Number of bedrooms (dormitorios) |
| `bathroomCount` | integer | Number of full bathrooms |
| `parkingSpaces` | integer | Number of parking spots (cocheras) |
| `toiletCount` | integer | Number of half-baths or toilets |
| `buildingAge` | integer | Age of the building in years |
| `streetAddress` | string | Street-level address of the property |
| `districtName` | string | Neighborhood (barrio) of the property |
| `cityName` | string | City or province of the property |
| `countryName` | string | Country of the property |
| `lat` | number | Map latitude |
| `lng` | number | Map longitude |
| `imageLinks` | array | Photo URLs for the listing (730x532) |
| `brokerName` | string | Name of the publishing agency or person |
| `brokerUrl` | string | Link to the agency profile on ZonaProp |
| `brokerLicense` | string | Professional license number of the agency |
| `propertyType` | string | Property category, e.g. Departamento, Casa, Oficina |
| `summary` | string | Full listing description from the publisher |
| `updatedDate` | string | ISO 8601 date the listing was last edited |
| `videoFlag` | boolean | True when the listing has video content |
| `virtualTourFlag` | boolean | True when the listing has a 360-degree virtual tour |
| `collectedAt` | string | ISO 8601 timestamp of when the row was captured |
| `errorMessage` | string | Reason extraction failed for this listing; null on success |

### Tips for best results

- **Filter on ZonaProp first.** A tighter search URL (barrio, price band, property type) gives you a cleaner, more useful dataset.
- **Start small with `resultsLimit`.** Pull 25 rows first to check the output fits your pipeline, then raise the limit for the full run.
- **Sale and rent both work.** A venta URL returns for-sale stock and an alquiler URL returns rentals; `dealType` tells the two apart per row.
- **Some fields are sparse.** Not every listing publishes expensas, building age, or coordinates, so those come back null while the rest of the row stays intact.
- **Raise `timeoutSeconds`** if large result sets start hitting timeouts.

### How can I use ZonaProp property data?

**How can I use the ZonaProp Scraper to track Argentine house prices?**
Paste a ZonaProp search URL for your target area and run it on a schedule. Each row carries `priceValue`, `priceCurrency`, `streetAddress`, and `updatedDate`, so you can chart asking prices over time and flag the listings that drop.

**How can I compare neighborhoods on ZonaProp by price per m²?**
Pull listings for a few barrios, then divide `priceValue` by `totalAreaSqm` on each row. With `districtName`, `roomCount`, and `buildingAge` alongside, you get a clean side-by-side read on where the value sits.

**How can I build an Argentina real estate dataset for investment research?**
Feed in one or more search URLs, set `resultsLimit` to the volume you want, and export to CSV or Excel. You end up with a structured property database (address, price, size, agency, coordinates) you can score against your own buy criteria.

**How can I collect ZonaProp agency listings in bulk?**
Each row includes `brokerName`, `brokerUrl`, and `brokerLicense`, so a full scrape lets you map which agencies dominate a given area and pull together a working list of who's listing what.

### Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses or private contact information. 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/).

### Support

Questions, feature requests, or a field you'd like added? Reach out at <data.apify@proton.me> and we'll get back to you.

# Actor input Schema

## `targetUrls` (type: `array`):

One or more ZonaProp search-result URLs to collect. Set your filters on the ZonaProp site (location, property type, sale or rent), then paste the link from the address bar. Each URL is paginated and scraped on its own.

## `resultsLimit` (type: `integer`):

How many listings to gather per search URL. URLs run independently, so two URLs at a limit of 500 can return up to 1,000 rows in total.

## `timeoutSeconds` (type: `integer`):

Seconds to wait on each request before it gives up. Bump this up if slow pages start timing out.

## Actor input object example

```json
{
  "targetUrls": [
    "https://www.zonaprop.com.ar/casas-venta-cordoba.html",
    "https://www.zonaprop.com.ar/departamentos-venta-rosario.html"
  ],
  "resultsLimit": 25,
  "timeoutSeconds": 45
}
```

# 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 = {
    "targetUrls": [
        "https://www.zonaprop.com.ar/departamentos-alquiler-palermo.html"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("data_api/zonaprop-scraper-cheap").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 = { "targetUrls": ["https://www.zonaprop.com.ar/departamentos-alquiler-palermo.html"] }

# Run the Actor and wait for it to finish
run = client.actor("data_api/zonaprop-scraper-cheap").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 '{
  "targetUrls": [
    "https://www.zonaprop.com.ar/departamentos-alquiler-palermo.html"
  ]
}' |
apify call data_api/zonaprop-scraper-cheap --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "ZonaProp Scraper (Cheap)",
        "description": "Extract structured property data from Argentina's largest real estate portal. Paste any ZonaProp search URL by location, type, or price range and get price, surface area, rooms, GPS coordinates, images, and agency details. Paginates automatically, up to 10,000 listings per URL.",
        "version": "0.0",
        "x-build-id": "t3M3YlUBhaSIu43jY"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/data_api~zonaprop-scraper-cheap/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-data_api-zonaprop-scraper-cheap",
                "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/data_api~zonaprop-scraper-cheap/runs": {
            "post": {
                "operationId": "runs-sync-data_api-zonaprop-scraper-cheap",
                "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/data_api~zonaprop-scraper-cheap/run-sync": {
            "post": {
                "operationId": "run-sync-data_api-zonaprop-scraper-cheap",
                "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": [
                    "targetUrls"
                ],
                "properties": {
                    "targetUrls": {
                        "title": "Search URLs",
                        "type": "array",
                        "description": "One or more ZonaProp search-result URLs to collect. Set your filters on the ZonaProp site (location, property type, sale or rent), then paste the link from the address bar. Each URL is paginated and scraped on its own.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "resultsLimit": {
                        "title": "Results limit",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "How many listings to gather per search URL. URLs run independently, so two URLs at a limit of 500 can return up to 1,000 rows in total.",
                        "default": 25
                    },
                    "timeoutSeconds": {
                        "title": "Timeout (seconds)",
                        "minimum": 5,
                        "maximum": 120,
                        "type": "integer",
                        "description": "Seconds to wait on each request before it gives up. Bump this up if slow pages start timing out.",
                        "default": 45
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
