# Zonaprop Scraper - Argentina Property Listings (`igolaizola/zonaprop-scraper`) Actor

Property listings from zonaprop.com.ar across Argentina: sales, long-term and temporary rentals, and new developments. Filter location, price, rooms, area, amenities, media, and advertiser type, then export JSON, CSV, Excel, or connect via API and MCP for fast market research and investment analysis

- **URL**: https://apify.com/igolaizola/zonaprop-scraper.md
- **Developed by:** [Iñigo Garcia Olaizola](https://apify.com/igolaizola) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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 Listings & Market Data

Zonaprop Scraper collects structured property listings from [zonaprop.com.ar](https://www.zonaprop.com.ar) in Argentina for sale, long-term rent, temporary rent, and new developments. Search by place or coordinates, apply detailed property filters, and download results for market research, lead generation, and investment analysis.

### 🤖 What does Zonaprop Scraper do?

- **Property listings** — capture titles, descriptions, prices, currencies, publication dates, and listing links.
- **Property details** — collect type, subtype, rooms, bedrooms, bathrooms, parking, and covered or total area.
- **Location data** — search by Argentine neighborhood, city, province, or region, or around a latitude/longitude point.
- **Media and contact data** — keep photo galleries, videos, virtual tours, floor plans, advertiser details, WhatsApp availability, and logos when published.
- **Flexible filters** — combine operation, price, expenses, size, amenities, services, age, publication date, and advertiser type.

**Great for:** price benchmarking, neighborhood research, rental monitoring, investor shortlists, and real-estate lead generation.

> SEO keywords: **Zonaprop scraper**, **Argentina real-estate scraper**, **scrape property listings**, **Zonaprop API alternative**, **Apify actor**.

### 💡 Why use Zonaprop data?

- 📈 **Track market prices** — compare asking prices, expenses, and area across neighborhoods and cities.
- 🎯 **Build focused lead lists** — target property types, room counts, amenities, advertiser types, and recent listings.
- 🏗️ **Monitor developments** — find new projects by construction stage, media, and location.
- 🧭 **Map opportunities** — use published addresses and coordinates alongside your own market data.

### 🚀 Quick start

1. **Add the actor** — Open **Zonaprop Scraper** in Apify Store.
2. **Choose a search** — Set operation and location (the form is prefilled with **Buenos Aires**).
3. **Set a limit** — Choose maxItems; 0 collects every available result, subject to your run limits.
4. **Add filters** — Narrow by property type, price, rooms, area, amenities, media, or publication date.
5. **Run and download** — Start the actor and download JSON, CSV, Excel, XML, or RSS from the Dataset tab.

### 💳 Pricing

Apify's **Free plan** includes monthly credits for small tests. Larger runs use the credits included with your Apify plan; see the Store page for current pricing and limits.

### 📝 Input parameters

All fields are optional except maxItems. Values shown in quotes are the friendly choices presented by the input form.

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| maxItems | Integer | Yes | Maximum listings to save. 0 means all available results. Default: 100. |
| fetchDetails | Boolean | No | Add expanded listing details under \_details. Default: false; increases run time and may add a pay-per-event charge. |
| operation | Enum | No | Search "sale" · "rent" · "temporary" · "development". Default: "sale". |
| location | Text | No | Neighborhood, city, province, or region. Prefilled with "Buenos Aires". Use coordinates or address for a point search. |
| locationType | Enum | No | Suggestion category: "" (any) · "neighborhood" · "area" · "department" · "province". |
| latitude | Number | No | Latitude in decimal degrees from -90 to 90. Use with longitude for a nearby search. |
| longitude | Number | No | Longitude in decimal degrees from -180 to 180. Use with latitude. |
| address | Text | No | Street address to search around. Takes precedence over coordinates and named location. |
| keyword | Text | No | Words to match in listings, such as balcony, pool, or furnished. |
| sortBy | Enum | No | "relevance" · "price-low-to-high" · "price-high-to-low" · "newest" · "largest-price-drop". Default: "relevance". |
| currency | Enum | No | Currency for price ranges: "" (automatic) · "ARS" (Argentine pesos) · "USD" (US dollars). |
| minPrice / maxPrice | Integer | No | Property price range in the selected currency. 0 means no boundary. |
| minPriceWithExpenses / maxPriceWithExpenses | Integer | No | Rental total including building expenses. 0 means no boundary. |
| minExpenses / maxExpenses | Integer | No | Monthly building-expense range. 0 means no boundary. |
| minRooms / maxRooms | Integer | No | Room-count range. 0 means no boundary. |
| minBedrooms / maxBedrooms | Integer | No | Bedroom-count range. 0 means no boundary. |
| minBathrooms / maxBathrooms | Integer | No | Bathroom-count range. 0 means no boundary. |
| minGarages / maxGarages | Integer | No | Parking-space range. 0 means no boundary. |
| noGarage | Boolean | No | Keep only listings without a garage or parking space. Default: false. |
| areaUnit | Enum | No | Area units: "square-meters" · "hectares" · "celemines". Default: "square-meters". |
| minTotalArea / maxTotalArea | Integer | No | Total property-area range in areaUnit. 0 means no boundary. |
| minCoveredArea / maxCoveredArea | Integer | No | Covered-area range in areaUnit. 0 means no boundary. |
| propertyType | Enum | No | One category, such as "house", "apartment", "ph", "land", "office", or "retail". |
| propertyTypes | Array of enums | No | Select multiple categories, including house, apartment, PH, land, office, warehouse, garage, hotel, and ranch. |
| propertySubtypes | Array of enums | No | Subtypes such as chalet, gated-community, studio, loft, penthouse, monoambiente, or residential-development. |
| roomTypes | Array of enums | No | Required spaces such as kitchen, living-dining-room, balcony, laundry, patio, terrace, or garden. |
| amenities | Array of enums | No | Amenities such as pool, grill, security, doorman, mortgage, accessible, gym, tennis-court, or expenses-included. |
| propertyFeatures | Array of enums | No | Features such as air-conditioning, heating, central-heating, furnished, jacuzzi, sauna, lift, or washing-machine. |
| services | Array of enums | No | Services and utilities such as electricity, running-water, natural-gas, internet, wifi, cable-tv, cleaning, or elevator. |
| multimediaTypes | Array of enums | No | Require one or more media types: photos, video, virtual-tour, or floor-plan. |
| publisherType | Enum | No | Advertiser: "" (any) · "professional" · "owner". |
| publishedWithin | Enum | No | Recency: "" (any) · "today" · "since-yesterday" · "last-7-days" · "last-15-days" · "last-30-days" · "last-45-days". |
| propertyAge | Enum | No | under-construction, brand-new, up-to-5-years, 5-to-10-years, 10-to-20-years, 20-to-50-years, or over-50-years. |
| mediaType | Enum | No | Require one media type: "" (any) · "photos" · "video" · "virtual-tour" · "floor-plan". |
| projectStage | Enum | No | For developments: "" (any) · "pre-construction" · "under-construction" · "completed". |
| suitableForMortgage | Boolean | No | Keep listings marked suitable for mortgage financing. Default: false. |
| petsAllowed | Boolean | No | Keep listings that allow pets. Default: false. |

#### Example inputs

**Apartments for sale in Capital Federal**

```json
{
  "maxItems": 100,
  "operation": "sale",
  "location": "Capital Federal",
  "propertyType": "apartment",
  "currency": "USD",
  "minPrice": 100000,
  "maxPrice": 350000,
  "minBedrooms": 2,
  "minTotalArea": 60,
  "areaUnit": "square-meters",
  "sortBy": "newest"
}
```

**Pet-friendly rentals from owners**

```json
{
  "maxItems": 50,
  "operation": "rent",
  "location": "GBA Norte",
  "locationType": "area",
  "propertyTypes": ["house", "apartment"],
  "publisherType": "owner",
  "publishedWithin": "last-30-days",
  "petsAllowed": true,
  "currency": "ARS",
  "maxPrice": 2000000,
  "sortBy": "price-low-to-high"
}
```

**Coordinate search with media and details**

```json
{
  "maxItems": 25,
  "latitude": -34.588,
  "longitude": -58.421,
  "propertyType": "apartment",
  "roomTypes": ["balcony", "living-dining-room"],
  "multimediaTypes": ["photos", "floor-plan"],
  "fetchDetails": true
}
```

### 📊 Output and results

The **Overview** dataset view highlights the fields most useful for analysis:

- **Listing:** id, title, url, image, images, description
- **Property:** propertyDetails.type, propertyDetails.subtype, propertyDetails.rooms, propertyDetails.bathrooms, propertyDetails.garages, propertyDetails.totalArea
- **Pricing:** pricing.operation, pricing.amount, pricing.currency, pricing.formatted
- **Location:** locationDetails.address, locationDetails.postalCode, locationDetails.latitude, locationDetails.longitude
- **Contact:** contact.publisherType, contact.publisherId, contact.license, contact.logo, contact.hasWhatsApp, contact.premier
- **Dates:** publishedAt and firstPublishedAt

Every result also retains the listing data supplied by Zonaprop. When fetchDetails is enabled, the expanded detail object is available under \_details.

Example result:

```json
{
  "id": "12345678",
  "title": "Departamento de 2 ambientes en Palermo",
  "url": "https://www.zonaprop.com.ar/propiedades/departamento-12345678.html",
  "image": "https://img.zonapropcdn.com/12345678/1.jpg",
  "images": [
    "https://img.zonapropcdn.com/12345678/1.jpg",
    "https://img.zonapropcdn.com/12345678/2.jpg"
  ],
  "propertyDetails": {
    "type": "Apartment",
    "subtype": "Standard apartment",
    "rooms": "2",
    "bathrooms": "1",
    "garages": "1",
    "totalArea": "54 m²"
  },
  "pricing": {
    "operation": "Sale",
    "amount": 185000,
    "currency": "USD",
    "formatted": "USD 185,000"
  },
  "locationDetails": {
    "address": "Avenida Santa Fe 3250",
    "postalCode": "C1425",
    "latitude": -34.583,
    "longitude": -58.415
  },
  "contact": {
    "publisherType": "Professional",
    "publisherId": "agency-4821",
    "license": "CUCICBA 1234",
    "logo": "https://img.zonapropcdn.com/publishers/4821/logo.jpg",
    "hasWhatsApp": true,
    "premier": false
  },
  "publishedAt": "2026-08-30T12:00:00Z",
  "description": "Bright apartment with balcony near public transport."
}
```

### 🧭 Tips and common recipes

- **Compare neighborhoods:** run the same price and area filters with a different location.
- **Disambiguate a place:** set locationType when a name can refer to more than one area or province.
- **Use a point search:** provide both latitude and longitude; address takes priority when supplied.
- **Find fresh opportunities:** combine publishedWithin with sortBy set to newest.
- **Focus on media:** use multimediaTypes or mediaType for floor plans, videos, or virtual tours.
- **Collect everything:** set maxItems to 0, while observing your Apify run limits.
- **Add expanded fields:** enable fetchDetails only when you need the additional property information.

### ⚙️ Best practices

- Start with a focused location and a small maxItems value while checking filter combinations.
- Keep currency and area units consistent when comparing markets.
- Use JSON for automation, CSV or Excel for analysis, and the Dataset API for downstream workflows.
- Treat advertiser and contact fields as personal data and limit access to people who need it.

### ⚖️ Legal and ethical considerations

- Respect Zonaprop's Terms of Service and applicable collection rules.
- Use reasonable request volumes and avoid disrupting the service.
- Handle advertiser and contact information responsibly and follow privacy laws such as GDPR or local requirements.
- Do not republish protected images or descriptions without permission.
- This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Zonaprop. All trademarks belong to their respective owners.

### ❓ FAQ

**What does maxItems: 0 do?**

It collects all available results for the selected search, subject to your Apify run limits.

**Can I search without a named location?**

Yes. Provide both latitude and longitude, or an address, when you want a point-based search instead of a named place.

**Can I combine multiple property types or amenities?**

Yes. Use array inputs such as propertyTypes, roomTypes, amenities, propertyFeatures, or services to select several choices.

**Why are some fields empty?**

Only information published by the advertiser is available. Enable fetchDetails when you need expanded listing data.

**Can I collect sales and rentals together?**

Each run uses one operation. Start separate runs for sales, long-term rentals, temporary rentals, or developments.

### 🛟 Support

Need a custom field or export? Open an issue or contact [igolaizola.com](https://igolaizola.com/#contact) with an example input and the result you expected.

# Actor input Schema

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

Maximum number of listings to save. Use 0 to collect every available result.

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

Fetch the full listing detail for each result and add it under \_details. This increases runtime and may incur an additional pay-per-event charge.

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

Choose whether to find properties for sale, long-term rent, temporary rent, or new developments.

## `location` (type: `string`):

Location name, neighborhood, city, or Argentine region to search. The default is ready to run; leave blank only when using coordinates or an address.

## `locationType` (type: `string`):

Optionally limit matching location suggestions to a neighborhood, area, department, or province.

## `latitude` (type: `number`):

Optional latitude for a nearby-property search. Use together with longitude; coordinates take precedence over region.

## `longitude` (type: `number`):

Optional longitude for a nearby-property search. Use together with latitude.

## `address` (type: `string`):

Optional street address to search around. An address takes precedence over coordinates and region.

## `keyword` (type: `string`):

Words that should appear in matching listings, such as balcony, pool, or furnished.

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

Order in which matching listings are returned.

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

Currency used by the minimum and maximum price filters.

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

Lowest property price to include. Use 0 for no minimum.

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

Highest property price to include. Use 0 for no maximum.

## `minPriceWithExpenses` (type: `integer`):

Lowest rent including building expenses. Use 0 for no minimum.

## `maxPriceWithExpenses` (type: `integer`):

Highest rent including building expenses. Use 0 for no maximum.

## `minExpenses` (type: `integer`):

Lowest monthly building expenses to include. Use 0 for no minimum.

## `maxExpenses` (type: `integer`):

Highest monthly building expenses to include. Use 0 for no maximum.

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

Minimum number of rooms. Use 0 for no minimum.

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

Maximum number of rooms. Use 0 for no maximum.

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

Minimum number of bedrooms. Use 0 for no minimum.

## `maxBedrooms` (type: `integer`):

Maximum number of bedrooms. Use 0 for no maximum.

## `minBathrooms` (type: `integer`):

Minimum number of bathrooms. Use 0 for no minimum.

## `maxBathrooms` (type: `integer`):

Maximum number of bathrooms. Use 0 for no maximum.

## `minGarages` (type: `integer`):

Minimum number of parking spaces. Use 0 for no minimum.

## `maxGarages` (type: `integer`):

Maximum number of parking spaces. Use 0 for no maximum.

## `noGarage` (type: `boolean`):

Return only properties that do not include a garage or parking space.

## `areaUnit` (type: `string`):

Unit used by total and covered area filters.

## `minTotalArea` (type: `integer`):

Minimum total property area. Use 0 for no minimum.

## `maxTotalArea` (type: `integer`):

Maximum total property area. Use 0 for no maximum.

## `minCoveredArea` (type: `integer`):

Minimum indoor or covered area. Use 0 for no minimum.

## `maxCoveredArea` (type: `integer`):

Maximum indoor or covered area. Use 0 for no maximum.

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

Limit results to one kind of property.

## `propertyTypes` (type: `array`):

Optionally include multiple property types in the same search.

## `propertySubtypes` (type: `array`):

Optionally narrow results to specific subtypes such as chalet, gated community, loft, or penthouse.

## `roomTypes` (type: `array`):

Require selected rooms or spaces, such as a kitchen, living-dining room, balcony, or laundry room.

## `amenities` (type: `array`):

Require amenities such as a pool, grill, doorman, security, or accessibility features.

## `propertyFeatures` (type: `array`):

Require additional property features such as air conditioning, heating, a gym, or furnished status.

## `services` (type: `array`):

Require services such as electricity, running water, natural gas, heating, internet, or cable TV.

## `multimediaTypes` (type: `array`):

Require one or more media types in the listing.

## `publisherType` (type: `string`):

Choose listings from real estate professionals, owners, or both.

## `publishedWithin` (type: `string`):

Limit results to recently published listings.

## `propertyAge` (type: `string`):

Limit results by construction status or property age.

## `mediaType` (type: `string`):

Return listings that include the selected kind of media.

## `projectStage` (type: `string`):

For new developments, choose a construction stage.

## `suitableForMortgage` (type: `boolean`):

Return listings marked as suitable for mortgage financing.

## `petsAllowed` (type: `boolean`):

Return listings that allow pets.

## Actor input object example

```json
{
  "maxItems": 100,
  "fetchDetails": false,
  "operation": "sale",
  "location": "Buenos Aires",
  "locationType": "",
  "sortBy": "relevance",
  "currency": "",
  "minPrice": 0,
  "maxPrice": 0,
  "minPriceWithExpenses": 0,
  "maxPriceWithExpenses": 0,
  "minExpenses": 0,
  "maxExpenses": 0,
  "minRooms": 0,
  "maxRooms": 0,
  "minBedrooms": 0,
  "maxBedrooms": 0,
  "minBathrooms": 0,
  "maxBathrooms": 0,
  "minGarages": 0,
  "maxGarages": 0,
  "noGarage": false,
  "areaUnit": "square-meters",
  "minTotalArea": 0,
  "maxTotalArea": 0,
  "minCoveredArea": 0,
  "maxCoveredArea": 0,
  "propertyType": "",
  "publisherType": "",
  "publishedWithin": "",
  "propertyAge": "",
  "mediaType": "",
  "projectStage": "",
  "suitableForMortgage": false,
  "petsAllowed": false
}
```

# Actor output Schema

## `results` (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 = {
    "location": "Buenos Aires"
};

// Run the Actor and wait for it to finish
const run = await client.actor("igolaizola/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 = { "location": "Buenos Aires" }

# Run the Actor and wait for it to finish
run = client.actor("igolaizola/zonaprop-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 '{
  "location": "Buenos Aires"
}' |
apify call igolaizola/zonaprop-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,igolaizola/zonaprop-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/hHQpgcF09l6KOXXQ8/builds/W3J3JJ6wnfbf3f0QN/openapi.json
