# Argenprop Rental Listings Extractor (`kawsar/argenprop-rental-listings-extractor`) Actor

Argenprop Rental Listings Extractor scrapes rental ads from any Argenprop search URL or city, so you get rent, expenses, rooms, area, address, agency and photos for every listing in one clean dataset.

- **URL**: https://apify.com/kawsar/argenprop-rental-listings-extractor.md
- **Developed by:** [Kawsar](https://apify.com/kawsar) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.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/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

## Argenprop Rental Listings Extractor: Scrape Argenprop Rentals in Argentina

Argenprop Rental Listings Extractor collects rental listings from [Argenprop](https://www.argenprop.com), one of the largest property portals in Argentina. Paste an Argenprop search URL or type a location, and you get one clean row per listing with rent, expenses (expensas), rooms, bedrooms, bathrooms, covered area, address, advertiser, and photo URLs.

Turn on **Include listing details** and each row also gets map coordinates, the full address, the full description, every labelled feature, amenities, and the complete photo gallery.

It works for apartments, houses, PH, offices, retail spaces, parking spaces, and every other property type Argenprop lists for rent.

### What you can use it for

- **Rent monitoring.** Track asking rents by neighborhood in Córdoba, Buenos Aires, Rosario, or any other city, and see how they move month to month.
- **ARS vs USD analysis.** Every row has a numeric price and a separate currency field, so you can split peso and dollar listings without parsing text.
- **Total cost of renting.** Rent and expenses come as separate numbers, so you can add them up or compare them.
- **Lead lists for agencies.** See which real estate agencies publish the most listings in an area, with their Argenprop advertiser IDs.
- **Maps and dashboards.** With details on, you get latitude and longitude for each listing, ready for a map in Looker Studio, Power BI, or QGIS.
- **Relocation and student housing research.** Filter by rooms, area, pets allowed, or building age after export.

### What data does it extract?

Fields that a listing does not publish are left out of that row. You will not get empty `null` values.

#### From the results page (always)

| Field | Type | Example |
| --- | --- | --- |
| `listingId` | string | `20477721` |
| `url` | string | `https://www.argenprop.com/departamento-en-alquiler-en-general-paz-5-ambientes--20477721` |
| `listingTitle` | string | `Alquiler depto amoblado` |
| `address` | string | `Viamonte 400, General Paz` |
| `neighborhood` | string | `General Paz` |
| `price` | number | `850000` |
| `currency` | string | `ARS` or `USD` |
| `priceText` | string | `$ 850.000` |
| `expenses` / `expensesCurrency` | number / string | `95000` / `ARS` |
| `rooms` / `bedrooms` / `bathrooms` / `toilets` | number | `5` / `1` / `1` / `1` |
| `coveredAreaM2` | number | `45` |
| `ageYears` / `isNew` | integer / boolean | `10` / `true` for "a estrenar" |
| `condition` / `layout` | string | `Muy Bueno` / `Contrafrente` |
| `listingDescription` | string | Description text shown on the results card |
| `advertiserName` / `advertiserId` | string | `Laura Perez Bienes Raíces` / `311557` |
| `mainImage` / `images` | string / array | Full-size photo URLs |
| `photoCount` | integer | `10` |
| `page` / `positionOnPage` | integer | `1` / `2` |
| `sourceUrl` / `scrapedAt` | string | Input URL and UTC timestamp |

#### Added with "Include listing details"

| Field | Type | Example |
| --- | --- | --- |
| `latitude` / `longitude` | number | `-31.41084` / `-64.16599` |
| `fullAddress` | string | `viamonte 400, General Paz, Córdoba, Capital, Córdoba` |
| `headline` | string | Title from the listing page |
| `fullDescription` | string | Complete description without truncation |
| `features` | object | Every labelled value, such as `Sup. Total`, `Tipo Expensas`, `Cant. Pisos` |
| `totalAreaM2` / `landAreaM2` | number | `47` |
| `parkingSpaces` / `orientation` / `unitType` | number / string | `1` / `Norte` / `Departamento` |
| `amenities` | array | `["Permite Mascotas", "Ascensores principales"]` |
| `petsAllowed` | boolean | `true` |
| `images` | array | The full photo gallery, not only the first 8 card photos |

### How to use it

1. Go to [argenprop.com](https://www.argenprop.com), pick **Alquilar**, and search for a city or neighborhood.
2. Apply any filters you want (rooms, price, property type). The filters are part of the URL.
3. Copy the URL from your browser and paste it into **Argenprop search URLs**.
4. Set **Max items** and decide whether you need **Include listing details**.
5. Click **Start**, then export the dataset as JSON, CSV, Excel, or XML.

No search URL? Put location slugs in **Locations** (for example `palermo`, `rosario`, `cordoba-arg`) and choose a **Property type**. The actor builds the rental search URL for you.

The actor follows Argenprop's pagination (20 listings per page) until it reaches your **Max items** limit or the last page.

### Input

| Field | Type | Default | Notes |
| --- | --- | --- | --- |
| `startUrls` | array of strings | Córdoba apartments | Argenprop rental search URLs or single listing URLs |
| `locations` | array of strings | empty | Location slugs, used when you have no URL |
| `propertyType` | string | `departamentos` | Used with `locations` only |
| `includeDetails` | boolean | `false` | Opens each listing page. Slower, and billed as an extra event per listing |
| `maxItems` | integer | `20` | 1 to 1000, counted across all sources |
| `requestTimeoutSecs` | integer | `60` | Per request |

#### Example input

```json
{
    "startUrls": [
        "https://www.argenprop.com/departamentos/alquiler/cordoba-arg"
    ],
    "locations": ["palermo"],
    "propertyType": "casas",
    "includeDetails": true,
    "maxItems": 20
}
```

### Example output

```json
{
    "listingId": "19723564",
    "url": "https://www.argenprop.com/departamento-en-alquiler-en-centro-2-ambientes--19723564",
    "listingTitle": "1 dorm 1 baño piscina asador seguridad excelente",
    "address": "Humberto Primo 200, Piso 8°, Centro",
    "neighborhood": "Centro",
    "operation": "Alquiler",
    "price": 650000,
    "currency": "ARS",
    "priceText": "$ 650.000",
    "expenses": 95000,
    "expensesCurrency": "ARS",
    "rooms": 2,
    "bedrooms": 1,
    "bathrooms": 1,
    "coveredAreaM2": 47,
    "totalAreaM2": 47,
    "ageYears": 4,
    "condition": "Excelente",
    "layout": "Frente",
    "unitType": "Departamento",
    "advertiserName": "Castanos - Negocios Inmobiliarios",
    "advertiserId": "167837",
    "latitude": -31.40927,
    "longitude": -64.18446,
    "fullAddress": "Humberto Primo 200, Piso 8°, Centro, Córdoba, Capital, Córdoba",
    "amenities": ["Apto Profesional", "Ascensores principales", "Pavimento"],
    "mainImage": "https://www.argenprop.com/static-content/46532791/c31220fa-6031-44ac-8197-4de845ce513e.jpg",
    "photoCount": 29,
    "page": 2,
    "positionOnPage": 3,
    "sourceUrl": "https://www.argenprop.com/departamentos/alquiler/cordoba-arg",
    "scrapedAt": "2026-09-24T12:00:00+00:00"
}
```

### Pricing

This actor uses pay-per-event pricing. Apart from a small start fee, you only pay for listings that are saved to your dataset.

| Event | When it is charged |
| --- | --- |
| Actor start | Once per run |
| Listing result | Each listing saved to the dataset |
| Listing details | Each listing enriched with its detail page, only when **Include listing details** is on |

A run with details off costs the start fee plus one listing result per row. With details on, each row also adds one listing details event. See the **Pricing** tab for current prices.

If you set a maximum cost per run, the actor stops cleanly when the next listing would go over it, and keeps everything collected so far.

### Tips

- **Start small.** Run with the default `maxItems: 20` first to check that your search URL returns what you expect.
- **Details cost time and money.** Leave `includeDetails` off when you only need prices and room counts. Turn it on when you need coordinates, full text, or every photo.
- **Duplicates are removed.** A listing that shows up in two of your searches is saved once.
- **Prices "a consultar".** Some listings hide the rent. Those rows keep `priceText` and leave out `price`.

### FAQ

**Does it scrape properties for sale?**
No. It is built and tested for rentals. Use search URLs that contain `/alquiler/`.

**Can I schedule it?**
Yes. Use Apify Schedules to run it daily or weekly and keep a history of rents.

**Can I connect it to Google Sheets, Make, or Zapier?**
Yes, through Apify integrations or by reading the dataset through the Apify API.

**Is scraping Argenprop legal?**
The actor collects public listing data that anyone can see without logging in. You are responsible for how you use it. Personal data rules in Argentina (Ley 25.326) and elsewhere may apply to advertiser names, so check with a lawyer if you plan to store or resell that data.

### Support

Found a listing that parsed wrong, or need a field that is missing? Open an issue on the actor's **Issues** tab with the listing URL and I will take a look.

# Actor input Schema

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

Argenprop rental search pages or single listing pages. Open argenprop.com, apply your filters (city, neighborhood, rooms, price), then paste the URL from your browser. Example: https://www.argenprop.com/departamentos/alquiler/cordoba-arg

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

Optional. Location slugs as they appear in Argenprop URLs, used when you do not have a search URL. Examples: cordoba-arg, palermo, rosario, mar-del-plata.

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

Property type used with the Locations field. Ignored for search URLs.

## `includeDetails` (type: `boolean`):

Open each listing page to add map coordinates, the full address, full description, all features, amenities, and the complete photo gallery. Slower, and each listing with details is billed as an extra event (see the Pricing tab).

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

Maximum number of Argenprop listings to collect per run, across all sources.

## `requestTimeoutSecs` (type: `integer`):

Per-request timeout in seconds.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.argenprop.com/departamentos/alquiler/cordoba-arg",
    "https://www.argenprop.com/casas/alquiler/palermo"
  ],
  "locations": [
    "palermo",
    "rosario"
  ],
  "propertyType": "departamentos",
  "includeDetails": false,
  "maxItems": 20,
  "requestTimeoutSecs": 60
}
```

# Actor output Schema

## `properties` (type: `string`):

Scrape Argenprop rental listings from any search URL or city. Get rent, expenses, rooms, area, address, advertiser, and photos, plus optional map coordinates and full descriptions for apartments and houses for rent in Argentina.

# 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": [
        "https://www.argenprop.com/departamentos/alquiler/cordoba-arg"
    ],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("kawsar/argenprop-rental-listings-extractor").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": ["https://www.argenprop.com/departamentos/alquiler/cordoba-arg"],
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("kawsar/argenprop-rental-listings-extractor").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": [
    "https://www.argenprop.com/departamentos/alquiler/cordoba-arg"
  ],
  "maxItems": 20
}' |
apify call kawsar/argenprop-rental-listings-extractor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,kawsar/argenprop-rental-listings-extractor"
        }
    }
}
```

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/UjXc0AMSPv1LtRai1/builds/DNHnaMuxCz11RCWvs/openapi.json
