# Argenprop Scraper - Argentina & Uruguay Property Listings (`igolaizola/argenprop-scraper`) Actor

Extract Argentina and Uruguay property listings from argenprop.com for sale, rent, and developments. Filter locations, prices, rooms, areas, features, services, and age, then export JSON, CSV, and Excel or connect via API and MCP for market research, lead generation, and investment analysis.

- **URL**: https://apify.com/igolaizola/argenprop-scraper.md
- **Developed by:** [Iñigo Garcia Olaizola](https://apify.com/igolaizola) (community)
- **Categories:** Real estate, Lead generation, Automation
- **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

## Argenprop Scraper - Argentina & Uruguay Property Listings

Argenprop Scraper collects structured property listings and new-development data from [argenprop.com](https://www.argenprop.com). Search by place, operation, property type, price, size, rooms, amenities, and development status for market research, lead generation, and investment analysis.

### 🤖 What does Argenprop Scraper do?

- Find properties for sale, rent, or temporary rent.
- Search apartments, houses, PHs, land, commercial premises, offices, farms, parking spaces, and other categories.
- Search new developments by financing, construction stage, and available bedrooms.
- Search by a city, neighborhood, province, district, region, or country, or around a latitude/longitude point.
- Narrow results by price, currency, monthly expenses, covered area, total area, bedrooms, rooms, bathrooms, parking, property age, urbanization, room types, features, services, and advertiser type.
- Keep listings with a published price, mortgage eligibility, or property-exchange acceptance.
- Optionally add expanded descriptions, media, advertiser, and contact information.

### 💡 Why use Argenprop data?

- Compare supply and asking prices between neighborhoods and cities.
- Build property and advertiser lead lists for a target market.
- Monitor rentals, sales, new developments, and price bands over time.
- Combine structured records with a CRM, spreadsheet, warehouse, or BI workflow.

### 🧠 Search modes

`properties` searches individual listings. `developments` searches new residential developments and enables the development-specific financing, construction-stage, and bedroom filters. Run each mode separately when you need both datasets.

### 🚀 Quick start

1. Open the actor in Apify Console and choose **Try for free**.
2. Set `location` (the prefilled example is **Buenos Aires**) and `maxItems`.
3. Choose an operation and property type, then add any optional filters.
4. Click **Start** and open the **Dataset** tab when the run finishes.
5. Download JSON, CSV, or Excel, or consume the dataset through the Apify API or MCP integrations.

Example API call with the Python client:

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("igolaizola/argenprop-scraper").call(run_input={
    "location": "Buenos Aires",
    "operations": ["sale"],
    "propertyTypes": ["apartment"],
    "maxItems": 100
})
items = list(client.dataset(run["defaultDatasetId"]).iterate_items())
```

### 💳 Pricing

Small tests can use the credits included with Apify's Free plan. Larger runs consume your account's available platform credits; see the actor's Store page for current pricing and limits.

### 📝 Input parameters

Supply these fields as JSON in Apify Console, the API, an SDK, or an MCP workflow.

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `maxItems` | Integer | No | Maximum listings to save. `0` means collect all available results. Default: `100`. |
| `location` | Text | No | City, neighborhood, province, district, region, or country name. Prefilled with `Buenos Aires`. |
| `locationType` | Enum | No | Disambiguate a place as `any`, `neighborhood`, `locality`, `district`, `region`, `province`, or `country`. |
| `latitude` | Number | No | Centre latitude in decimal degrees. Use with `longitude` for a radius search. |
| `longitude` | Number | No | Centre longitude in decimal degrees. Use with `latitude` for a radius search. |
| `radiusKm` | Number | No | Radius around the coordinate centre in kilometres. Default: `10`; allowed range: `1`–`100`. |
| `fetchDetails` | Boolean | No | Add expanded property, advertiser, media, and contact fields under `_details`. |
| `searchType` | Enum | No | `properties` for individual listings or `developments` for new developments. |
| `operations` | Array of enums | No | Transaction types: `sale`, `rent`, or `temporaryRent`. Select one or more. |
| `propertyTypes` | Array of enums | No | Property categories such as `apartment`, `house`, `ph`, `land`, `commercialPremises`, `countryHouse`, `warehouse`, `parkingSpace`, `office`, `farm`, `business`, `hotel`, and `specialBusiness`. |
| `sortBy` | Enum | No | Result order: `relevance`, `lowestPrice`, `highestPrice`, or `newest`. |
| `bedrooms` | Array of enums | No | Bedroom counts: `1`, `2`, `3`, `4`, or `5plus`. |
| `rooms` | Array of enums | No | Room counts: `studio`, `2`, `3`, `4`, or `5plus`. |
| `bathrooms` | Array of enums | No | Minimum bathroom choices from `1plus` through `5plus`. |
| `parkingSpaces` | Array of enums | No | `none` or a minimum of `1plus` through `5plus` spaces. |
| `urbanizationTypes` | Array of enums | No | `gatedCommunity`, `countryNeighborhood`, or `countryClub`. |
| `roomTypes` | Array of enums | No | Room and outdoor-space choices such as `bedroom`, `livingRoom`, `kitchen`, `bathroom`, `balcony`, `patio`, `garden`, `garage`, `terrace`, `laundryRoom`, `suite`, and `hall`; the input form lists every available choice. |
| `advertiserTypes` | Array of enums | No | `directOwner` or `realEstateAgency`. |
| `antiquity` | Array of enums | No | Property age: `new`, `upTo5Years`, `upTo10Years`, `upTo20Years`, `upTo30Years`, or `over30Years`. |
| `currency` | Enum | No | `ars`, `usd`, or empty for the automatic currency. |
| `minPrice` | Integer | No | Minimum price. `0` means no minimum. |
| `maxPrice` | Integer | No | Maximum price. `0` means no maximum. |
| `priceAvailability` | Enum | No | Empty for any listing, `withPrice` for a published price, or `withoutPrice` for price-on-request listings. |
| `mortgageEligible` | Boolean | No | Keep only listings marked as eligible for mortgage financing. |
| `acceptsTrade` | Boolean | No | Keep only listings whose advertiser accepts a property exchange. |
| `features` | Array of enums | No | Property characteristics such as heating, air conditioning, elevator, pool, grill, utilities, accessibility, pets, and equipment; the input form lists all choices. |
| `services` | Array of enums | No | Advertised services such as internet, security, cleaning, laundry, telephone, cable TV, towels, and bed linens. |
| `minExpenses` | Integer | No | Minimum monthly building expenses in ARS. `0` means no minimum. |
| `maxExpenses` | Integer | No | Maximum monthly building expenses in ARS. `0` means no maximum. |
| `minCoveredArea` | Integer | No | Minimum covered area in square metres. `0` means no minimum. |
| `maxCoveredArea` | Integer | No | Maximum covered area in square metres. `0` means no maximum. |
| `minTotalArea` | Integer | No | Minimum total area in square metres. `0` means no minimum. |
| `maxTotalArea` | Integer | No | Maximum total area in square metres. `0` means no maximum. |
| `street` | Text | No | Optional street name, for example `Santa Fe`. |
| `streetNumber` | Text | No | Optional street number, for example `3250`; use with `street`. |
| `financing` | Enum | No | For developments: empty for any, `withFinancing`, or `withoutFinancing`. |
| `developmentStage` | Array of enums | No | For developments: `preConstruction`, `underConstruction`, or `completed`. |
| `developmentBedrooms` | Array of enums | No | For developments: `1`, `2`, `3`, `4`, or `5+` bedrooms offered. |

### 🔎 Example inputs

#### Apartments for sale in Palermo

```json
{
  "location": "Palermo",
  "locationType": "neighborhood",
  "searchType": "properties",
  "operations": ["sale"],
  "propertyTypes": ["apartment"],
  "bedrooms": ["2"],
  "currency": "usd",
  "minPrice": 100000,
  "maxPrice": 250000,
  "minCoveredArea": 40,
  "maxCoveredArea": 90,
  "sortBy": "lowestPrice",
  "maxItems": 100
}
```

#### Coordinate search for rentals

```json
{
  "latitude": -34.588,
  "longitude": -58.421,
  "radiusKm": 5,
  "operations": ["rent"],
  "propertyTypes": ["apartment"],
  "parkingSpaces": ["1plus"],
  "maxPrice": 500000,
  "currency": "ars",
  "maxItems": 100
}
```

#### New developments with financing

```json
{
  "location": "Belgrano, Buenos Aires",
  "searchType": "developments",
  "developmentBedrooms": ["2", "3"],
  "developmentStage": ["underConstruction"],
  "financing": "withFinancing",
  "sortBy": "lowestPrice",
  "maxItems": 100
}
```

### 📊 Output fields

Each dataset item is a listing record. The Overview view highlights these useful fields:

- **Listing:** `IdAviso`, `Titulo_t`, `TipoPropiedad_t`, `TipoOperacion_t`, `UrlSeo_t`
- **Price and size:** `MontoOperacion_i`, `MonedaSimbolo_t`, `Expensas_i`, `SuperficieTotal_d`, `CantidadAmbientes_i`, `CantidadDormitorios_i`
- **Location:** `Direccion_NombreCalle_t`, `Direccion_Numero_i`, `Barrio_t`, `Localidad_t`, `Partido_t`, `Provincia_t`, `Pais_t`, `Direccion_Latitud_d`, `Direccion_Longitud_d`
- **Media and contact:** `Multimedia_s`, `Logo_s`, `NombreAnunciante_t`, `TelefonoWhatsApp_i`, `InformacionAdicional_t`, `DatosComunes_s`
- **Expanded details:** when `fetchDetails` is enabled, `_details` may include description, advertiser, logo, media, and contact fields.

Example result:

```json
{
  "IdAviso": 12345678,
  "Titulo_t": "Departamento de 2 ambientes en Palermo",
  "TipoPropiedad_t": "Departamento",
  "TipoOperacion_t": "Venta",
  "MontoOperacion_i": 185000,
  "MonedaSimbolo_t": "USD",
  "Expensas_i": 85000,
  "SuperficieTotal_d": 54,
  "CantidadAmbientes_i": 2,
  "CantidadDormitorios_i": 1,
  "Direccion_NombreCalle_t": "Avenida Santa Fe",
  "Direccion_Numero_i": 3250,
  "Barrio_t": "Palermo",
  "Localidad_t": "Ciudad de Buenos Aires",
  "Provincia_t": "Buenos Aires",
  "Pais_t": "Argentina",
  "Direccion_Latitud_d": -34.583,
  "Direccion_Longitud_d": -58.415,
  "UrlSeo_t": "https://www.argenprop.com/propiedades/departamento-12345678.html",
  "Multimedia_s": [{"Url": "https://www.argenprop.com/images/12345678.jpg", "IdTipoMultimedia": 1}],
  "NombreAnunciante_t": "Estudio Central",
  "TelefonoWhatsApp_i": "+54 11 5555 1234",
  "InformacionAdicional_t": "Living comedor, cocina y balcón.",
  "_details": {
    "TelefonoContacto_t": "+54 11 5555 1234",
    "LeyendaComercial_s": "Estudio Central"
  }
}
```

### 🧭 Tips and recipes

- Start with a neighborhood and a small `maxItems` value while checking filters.
- Use `locationType` when a place name has multiple possible levels.
- Use `latitude`, `longitude`, and `radiusKm` for a point-based search instead of a named place.
- Set `currency` explicitly when comparing prices across operations.
- Use `fetchDetails` only when the extra description or contact information is needed.
- Keep property type, currency, area range, and sort order consistent when comparing markets.

### ⚙️ Best practices

- Use a realistic `maxItems`; set it to `0` only when you truly need all available listings.
- Combine a focused location with two or three relevant filters to reduce noise.
- Save the dataset in JSON for automation, CSV/Excel for analysis, or consume it through the API and MCP.
- Treat contact fields as personal data and restrict access to people who need it.

### 🌍 Proxy usage

For larger or repeated runs, configure Apify Residential proxies in the run settings. A stable proxy configuration can improve consistency when collecting listings from several locations.

### ⚖️ Legal and ethical considerations

Use this actor responsibly and comply with Argenprop's terms, applicable laws, privacy requirements, and intellectual-property rights. Collect only data you are permitted to use, avoid excessive collection, and do not use contact information for unwanted outreach.

### ❓ FAQ

**Which locations can I search?**

Use a city, neighborhood, province, district, region, or country name. If a name is ambiguous, choose `locationType`.

**Why are some fields missing?**

Listings contain only information published by the advertiser. Enable `fetchDetails` when you need additional fields.

**Can I search developments and ordinary properties together?**

Run separate searches by setting `searchType` to `properties` or `developments`.

**What does `maxItems: 0` do?**

It collects all available results for the selected search.

### 🛟 Support

For questions or feature requests, contact [igolaizola.com/#contact](https://igolaizola.com/#contact).

# Actor input Schema

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

Maximum number of listings to save. Set to 0 to collect all available listings.

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

City, neighborhood, province, or another place name to search. Buenos Aires is a realistic example and can be replaced with any place name.

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

Optional way to disambiguate a location name when suggestions include more than one level.

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

Optional centre latitude for a radius search. Use together with longitude.

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

Optional centre longitude for a radius search. Use together with latitude.

## `radiusKm` (type: `number`):

Search radius around the coordinates. Defaults to 10 km when coordinates are supplied.

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

Fetch additional property and contact information for each listing. This may make runs significantly slower.

## `searchType` (type: `string`):

Choose whether to search individual properties or new developments.

## `operations` (type: `array`):

Select one or more transaction types, or leave empty to include all available types.

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

Select the kinds of property to include.

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

Order the returned listings.

## `bedrooms` (type: `array`):

Include listings with the selected bedroom counts.

## `rooms` (type: `array`):

Include listings with the selected room counts.

## `bathrooms` (type: `array`):

Select one or more minimum bathroom options.

## `parkingSpaces` (type: `array`):

Filter by parking availability.

## `urbanizationTypes` (type: `array`):

Select the gated or country-community type.

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

Include listings with the selected room or outdoor-space types.

## `advertiserTypes` (type: `array`):

Include listings published by the selected advertiser types.

## `antiquity` (type: `array`):

Include listings in the selected age ranges.

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

Currency used for the minimum and maximum price. Automatic uses the usual currency for the selected operation.

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

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

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

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

## `priceAvailability` (type: `string`):

Choose whether listings must show a price.

## `mortgageEligible` (type: `boolean`):

Include only listings marked as eligible for mortgage financing.

## `acceptsTrade` (type: `boolean`):

Include only listings whose advertiser accepts a property exchange.

## `features` (type: `array`):

Select property features and amenities to require.

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

Select services advertised as available with the listing.

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

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

Minimum indoor floor area. Use 0 for no minimum.

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

Maximum indoor floor area. Use 0 for no maximum.

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

Minimum total property area. Use 0 for no minimum.

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

Maximum total property area. Use 0 for no maximum.

## `street` (type: `string`):

Optional street name, for example Santa Fe.

## `streetNumber` (type: `string`):

Optional street number, for example 3250. Use together with Street name.

## `financing` (type: `string`):

Filter new developments by financing availability.

## `developmentStage` (type: `array`):

Include new developments at the selected construction stages.

## `developmentBedrooms` (type: `array`):

Include developments offering units with the selected bedroom counts.

## Actor input object example

```json
{
  "maxItems": 100,
  "location": "Buenos Aires",
  "locationType": "any",
  "radiusKm": 10,
  "fetchDetails": false,
  "searchType": "properties",
  "operations": [],
  "propertyTypes": [
    "apartment"
  ],
  "sortBy": "relevance",
  "bedrooms": [],
  "rooms": [],
  "bathrooms": [],
  "parkingSpaces": [],
  "urbanizationTypes": [],
  "roomTypes": [],
  "advertiserTypes": [],
  "antiquity": [],
  "currency": "",
  "minPrice": 0,
  "maxPrice": 0,
  "priceAvailability": "",
  "mortgageEligible": false,
  "acceptsTrade": false,
  "features": [],
  "services": [],
  "minExpenses": 0,
  "maxExpenses": 0,
  "minCoveredArea": 0,
  "maxCoveredArea": 0,
  "minTotalArea": 0,
  "maxTotalArea": 0,
  "financing": "",
  "developmentStage": [],
  "developmentBedrooms": []
}
```

# 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/argenprop-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/argenprop-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/argenprop-scraper --silent --output-dataset

```

## MCP server setup

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