# Zonaprop Listings Scraper (`piotrv1001/zonaprop-listings-scraper`) Actor

Export Zonaprop property listings from any search URL: price and operation (alquiler/venta), expensas, barrio and coordinates, total and covered area, ambientes, bedrooms, bathrooms, cocheras, photos, description and the listing agency. Argentina real estate data as JSON, CSV or Excel.

- **URL**: https://apify.com/piotrv1001/zonaprop-listings-scraper.md
- **Developed by:** [FalconScrape](https://apify.com/piotrv1001) (community)
- **Categories:** Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### 🚀 Zonaprop Listings Scraper

Export property listings from [Zonaprop](https://www.zonaprop.com.ar), Argentina's largest real estate portal. The **Zonaprop Listings Scraper** turns any Zonaprop search — departamentos en alquiler, casas en venta, PH, locales, terrenos, in any barrio or localidad — into structured data: price in USD or pesos, expensas, barrio and city, map coordinates, superficie total and cubierta, ambientes, dormitorios, baños, cocheras, photos, the full description and the listing inmobiliaria. Use it for rental market analysis, price monitoring, investment research or lead lists of agencies.

### ✨ Features

- 🔎 **Any search you can build on Zonaprop**: paste the results URL after choosing location, operation, property type, price range, rooms, sort order or any other filter — every page of that search is collected, not just the first few.
- 💰 **Prices by operation**: the main `price` follows your search (alquiler / venta); listings offered both ways also carry every price in `prices`. Currencies are ISO codes (ARS or USD).
- 📍 **Location down to the map pin**: address, barrio (`neighborhood`), city (`city`) and province (`region`, where Zonaprop gives one), plus latitude and longitude when the listing shows its location.
- 📐 **Property details**: total and built area (m²), dormitorios (and `rooms` = ambientes), bathrooms, cocheras, age, property type and expensas fees.
- 🏢 **Who is selling**: agency (inmobiliaria/imobiliária) name, ID and profile URL on every listing.
- 🖼️ **Photos and description**: full-size photo URLs and the complete listing text.
- ♻️ **No duplicates**: featured listings that Zonaprop repeats on every page — and listings shared by overlapping searches — are returned and charged once.

### 🛠️ How It Works

1. **Search on Zonaprop** – Open [Zonaprop](https://www.zonaprop.com.ar/departamentos-alquiler-capital-federal.html), set the location and filters you want and copy the URL of the results page.
2. **Paste the URL(s)** – Add one or more search URLs. A URL ending in `-pagina-3.html` starts from page 3.
3. **Set a limit** – `maxItems` caps the total number of listings (default 50).
4. **Run it** – Listings arrive page by page; the `SUMMARY` record shows, for each search, how many results Zonaprop reported and how many were collected.

### ⚙️ Input

| Field | Description |
|---|---|
| `startUrls` | Zonaprop search results URLs, e.g. `https://www.zonaprop.com.ar/departamentos-alquiler-capital-federal.html`. |
| `maxItems` | Maximum number of listings across all searches. Default 50. |
| `proxyConfiguration` | Apify Proxy; the default works. |

```json
{
    "startUrls": [
        { "url": "https://www.zonaprop.com.ar/departamentos-alquiler-capital-federal.html" },
        { "url": "https://www.zonaprop.com.ar/casas-venta-palermo.html" }
    ],
    "maxItems": 500
}
```

### 📊 Sample Output Data

```json
{
    "postingId": "59980806",
    "url": "https://www.zonaprop.com.ar/propiedades/clasificado/alclapin-depto-2-amb-urquiza-venta-balcon-corrido-59980806.html",
    "title": "Depto | 2 Amb | Urquiza | Venta | Balcón Corrido",
    "operation": "Alquiler",
    "price": 900000,
    "currency": "ARS",
    "prices": [
        {
            "operation": "Alquiler",
            "price": 900000,
            "currency": "ARS"
        }
    ],
    "expenses": 137000,
    "expensesCurrency": "ARS",
    "propertyType": "Departamentos",
    "postingType": "PROPERTY",
    "address": "Blanco Encalada 5600",
    "neighborhood": "Villa Urquiza",
    "city": "Capital Federal",
    "region": null,
    "latitude": -34.57969666,
    "longitude": -58.49328613,
    "totalArea": 45,
    "coveredArea": 41,
    "rooms": 2,
    "bedrooms": 1,
    "bathrooms": 1,
    "halfBathrooms": null,
    "suites": null,
    "parkingSpaces": null,
    "ageYears": 6,
    "description": "[mel-<span class='descripcionDatosAnunciante'><button class='btn btn-link js-verDatos' href='#'>Ver datos</button></span>] Espectacular 2 ambientes con amplio l…",
    "images": [
        "https://imgar.zonapropcdn.com/avisos/1/00/59/98/08/06/720x532/2074272661.jpg",
        "https://imgar.zonapropcdn.com/avisos/1/00/59/98/08/06/720x532/2074272716.jpg"
    ],
    "publisherName": "MEL PROPIEDADES",
    "publisherId": "17039851",
    "publisherUrl": "https://www.zonaprop.com.ar/inmobiliarias/mel-propiedades_17039851-inmuebles.html",
    "postingCode": "6523661",
    "modifiedAt": "2026-09-01T00:00:00-0400",
    "searchUrl": "https://www.zonaprop.com.ar/departamentos-alquiler-capital-federal-pagina-2.html",
    "scrapedAt": "2026-09-29T11:28:28.289Z"
}
```

### 💰 Pricing

This Actor uses pay-per-event pricing: **$1.50 per 1,000 listings** ($0.0015 per listing), plus a tiny start fee per run. You pay only for listings delivered to the dataset — repeats are never charged. Set a maximum cost per run in Apify Console and the Actor stops when it is reached.

### ❓ FAQ

**How many listings can I get from one search?**
All of them — the Actor walks every page of the search until Zonaprop runs out of results or your `maxItems` is reached. For very large searches, a narrower location or filter set keeps runs short.

**Does it return phone numbers or emails?**
No. Zonaprop shows agents' contact details only through its contact forms, so the output carries the agency name, ID and profile URL instead.

**Which price is `price` when a property is offered for sale and for rent?**
The one matching your search (alquiler / venta). All prices are listed in `prices`.

**Can I monitor new listings?**
Yes — schedule the Actor with a search sorted by newest and compare `postingId`s between runs; `modifiedAt` shows when each listing was last updated.

**Is scraping Zonaprop legal?**
The Actor collects publicly visible listing data. Make sure your use of it complies with Zonaprop's terms and with data-protection law in your country.

*Keywords: zonaprop scraper, zonaprop API, alquileres CABA, departamentos en venta Buenos Aires, precios de alquiler, inmobiliarias Argentina.*

# Actor input Schema

## `startUrls` (type: `array`):

Zonaprop search results pages, copied from the browser after choosing location, operation, property type and any filters or sort. Every page of each search is collected. A URL ending in -pagina-3.html starts from page 3.

## `maxItems` (type: `integer`):

Stop after this many listings across all searches. Each listing is returned once even when several searches include it.

## `proxyConfiguration` (type: `object`):

Zonaprop accepts connections from Argentina; the default works.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.zonaprop.com.ar/departamentos-alquiler-capital-federal.html"
    }
  ],
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "AR"
  }
}
```

# Actor output Schema

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

No description

## `summary` (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 = {
    "startUrls": [
        {
            "url": "https://www.zonaprop.com.ar/departamentos-alquiler-capital-federal.html"
        }
    ],
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "AR"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/zonaprop-listings-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 = {
    "startUrls": [{ "url": "https://www.zonaprop.com.ar/departamentos-alquiler-capital-federal.html" }],
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "AR",
    },
}

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

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

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

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://www.zonaprop.com.ar/departamentos-alquiler-capital-federal.html"
    }
  ],
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "AR"
  }
}' |
apify call piotrv1001/zonaprop-listings-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,piotrv1001/zonaprop-listings-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/769D35pO8iSFSWMkP/builds/X6j3yiR9CQY00hJGv/openapi.json
