# Adondevivir Peru Real Estate Scraper & Monitor (`datamole/adondevivir-scraper`) Actor

Extract Adondevivir listings in Peru for rent and sale with price in soles and dollars, mantenimiento, monthly cost, price per m², bedrooms, parking, GPS, WhatsApp and photos. Filter by district, pool, pets, condominium or direct owners, and track new listings and price drops.

- **URL**: https://apify.com/datamole/adondevivir-scraper.md
- **Developed by:** [DataMole](https://apify.com/datamole) (community)
- **Categories:** Real estate, Lead generation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 result scrapeds

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

![DataMole](https://raw.githubusercontent.com/YoiderD/datamole-assets/main/banner.png)

## 🏙️ Adondevivir Peru Real Estate Scraper & Monitor

> **Extrae propiedades de Adondevivir (alquiler y venta) con precio en soles y en dólares, mantenimiento, costo mensual total, precio por m², dormitorios, estacionamientos, GPS, WhatsApp del anunciante y fotos.** Filtra por distrito, piscina, mascotas, condominio o dueño directo, y recibe solo las propiedades nuevas y las bajas de precio.

> 🕒 **Last updated:** 2026-10-20 · **50+ campos** por propiedad · **filtros reales de Adondevivir** · **todo el Perú** (Lima, Arequipa, Trujillo, Piura, Cusco...)

**Adondevivir Peru Real Estate Scraper** convierte las búsquedas de Adondevivir, uno de los portales inmobiliarios del Perú, en una base de datos lista para analizar. Escribe distritos o ciudades como `Miraflores`, `San Isidro`, `Santiago de Surco` o `Arequipa`, o pega una URL de búsqueda de adondevivir.com. Usa los mismos filtros que la web, convierte precios con el tipo de cambio del día y puede **monitorear** una búsqueda para traerte solo lo nuevo.

| 🎯 Para quién | 💡 Para qué |
|---|---|
| Inversionistas, inmobiliarias y corredores, constructoras, tasadores, bancos, proptech | Estudios de mercado, precio por m² por distrito, alertas de propiedades nuevas, captación de dueños directos, seguimiento de bajas de precio, comparables |

### 📋 Qué hace

- 💵 **Soles y dólares en cada propiedad:** `pricePEN` y `priceUSD` con el tipo de cambio de referencia del día. Cada fila trae la tasa usada.
- 🧾 **Mantenimiento y costo mensual total:** en alquileres, `totalMonthlyCostPEN` suma alquiler + mantenimiento.
- 📐 **Precio por m² en USD** sobre la superficie techada.
- 🛏️ **Dormitorios, baños, medios baños, estacionamientos, superficie techada y total, y antigüedad.**
- 📍 **GPS, dirección, urbanización, distrito, ciudad y departamento.**
- 📲 **WhatsApp del anunciante** cuando Adondevivir lo publica, sin costo extra.
- 🔎 **Todos los filtros reales de Adondevivir:**
  - Alquiler, venta, alquiler temporal y traspaso.
  - 20 tipos de propiedad: casa de playa, casa de campo, condominio, lote, cochera y más.
  - Precio en soles o dólares, mantenimiento, dormitorios, baños, estacionamientos, superficie y antigüedad.
  - **Generales** (piscina, amoblado, ascensor, **permite mascotas**, en condominio, frente a parque, vista al mar), **exteriores** (área de BBQ, piscina climatizada, jardín privado), **servicios** (gimnasio, video vigilancia, parrilla, co-working) y **ambientes** (suite, sala de estar, depósito, hidromasaje).
  - **Dueño directo**, fecha de publicación y multimedia.
- 🏗️ **Proyectos:** fecha de entrega, total de unidades y etapa (por ejemplo "En planos").
- 📉 **Orden "Bajaron de precio"** y el % que bajó cada propiedad.
- 👀 **Modo monitoreo:** corre la misma búsqueda cada día y recibe solo las propiedades **nuevas** y las que **cambiaron de precio**.
- 🔍 **Detalle completo (opcional):** todas las comodidades, antigüedad, teléfono, dirección, descripción completa y fecha de publicación.

> ℹ️ **Plan gratis de Apify:** cada corrida devuelve una muestra de hasta 10 propiedades. Cualquier plan pago de Apify desbloquea todos los resultados.

### ⚙️ Input

| Campo | Qué hace |
|---|---|
| `locations` | Distritos, urbanizaciones, ciudades o departamentos como aparecen en Adondevivir. |
| `operation` | `alquiler`, `venta`, `alquiler-temporal` o `traspaso`. |
| `propertyTypes` | Uno o varios de los 20 tipos de Adondevivir. |
| `searchUrls` | URLs de búsqueda de adondevivir.com con tus filtros aplicados. |
| `minPrice` / `maxPrice` / `priceCurrency` | Rango de precio en USD o soles. |
| `minMaintenance` / `maxMaintenance` | Rango de mantenimiento en soles. |
| `minBedrooms`, `minBathrooms`, `minParking`, `minArea`, `maxArea`, `antiquity` | Características. |
| `general`, `outdoor`, `services`, `roomTypes` | Filtros de comodidades del portal. |
| `publisherType`, `publishedWithin`, `multimedia`, `keyword`, `sort` | Anunciante (dueño directo), fecha, multimedia, palabra clave y orden. |
| `includeDetails` | Suma el detalle completo (costo adicional). |
| `monitorMode` / `monitorName` | Solo propiedades nuevas y cambios de precio entre corridas. |
| `maxItems` / `maxPagesPerSearch` | Límites de la corrida. |

**Ejemplo: departamentos en alquiler en Miraflores y Barranco con 2+ dormitorios que permiten mascotas**

```json
{
    "locations": ["Miraflores", "Barranco"],
    "operation": "alquiler",
    "propertyTypes": ["departamento"],
    "minBedrooms": 2,
    "general": ["permite-mascotas"]
}
```

**Ejemplo: monitoreo diario de casas en venta con piscina en La Molina, dueño directo**

```json
{
    "locations": ["La Molina"],
    "operation": "venta",
    "propertyTypes": ["casa"],
    "general": ["piscina"],
    "publisherType": "dueno-directo",
    "monitorMode": true
}
```

### 📊 Output

Propiedad real de una corrida (con detalle completo, listas acortadas):

```json
{
    "id": "151042448",
    "url": "https://www.adondevivir.com/propiedades/clasificado/alclapin--vive-a-pasos-del-malecon!-todo-lo-que-amas-de-151042448.html",
    "title": "¡Vive a Pasos del Malecón! Todo Lo Que Amas de Miraflores, a Pasos de Tu Hogar",
    "operationType": "Alquiler",
    "propertyType": "Departamentos",
    "price": 2850,
    "currency": "PEN",
    "pricePEN": 2850,
    "priceUSD": 828,
    "exchangeRate": 3.442111,
    "maintenanceFee": 520,
    "maintenanceFeeCurrency": "PEN",
    "totalMonthlyCostPEN": 3370,
    "pricePerM2USD": 10,
    "coveredArea": 80,
    "totalArea": 80,
    "bedrooms": 2,
    "bathrooms": 1,
    "halfBathrooms": 1,
    "parking": 1,
    "ageYears": 13,
    "address": "Calle Porta",
    "district": "Miraflores",
    "city": "Lima",
    "province": "Lima",
    "latitude": -12.1265382,
    "longitude": -77.0326576,
    "amenities": ["Amueblado/a", "Ascensor(es): 1", "Seguridad", "Mascotas", "Vista a la Ciudad"],
    "hasVideo": true,
    "publisherType": "Inmobiliaria",
    "whatsapp": "+51986086657",
    "publishedAt": "2026-09-09T18:08:15Z",
    "hasDetails": true
}
```

Sin detalle completo, cada propiedad igual trae precio, mantenimiento, superficies, dormitorios, GPS, WhatsApp, fotos y descripción. Las comodidades completas, el teléfono y la fecha de publicación llegan con `includeDetails`. En alquileres, `pricePerM2USD` es el alquiler mensual por m².

Campos que pueden venir vacíos:

- `maintenanceFee` cuando el anuncio no lo informa.
- En proyectos, las superficies y dormitorios, porque varían por unidad. En ese caso vienen `developmentDelivery`, `developmentUnits` y `developmentStage`, y el precio es el "desde".
- El teléfono en anuncios que lo ocultan. El actor nunca devuelve números incompletos.

### ✨ Por qué este

- ✅ **Soles y dólares** con la tasa del día, y **costo mensual real** (alquiler + mantenimiento).
- ✅ **WhatsApp incluido** en el resultado.
- ✅ **Todos los filtros de comodidades de Adondevivir** (más de 70 opciones reales del portal).
- ✅ **Monitoreo de propiedades nuevas y bajas de precio** para correrlo programado cada día.
- ✅ **Datos reales:** si un dato no está en Adondevivir, queda vacío.

### ❓ Preguntas frecuentes

**¿En qué se diferencia del scraper de Urbania?** Son portales distintos con avisos distintos. En una muestra de Miraflores no se repitió ningún aviso entre ambos. Para cubrir Lima completa conviene correr los dos.

**¿Qué tipo de cambio usa?** El de referencia del día (open.er-api.com). Cada fila trae `exchangeRate`.

**¿Cómo funciona el monitoreo?** La primera corrida guarda todas las propiedades de tu búsqueda. Las siguientes devuelven solo las nuevas y las que cambiaron de precio, con `previousPrice` y `priceChangePercent`.

**¿Necesito proxy?** El actor usa por defecto proxy residencial del Perú de Apify. No hace falta configurar nada.

### 🔌 Integraciones

Funciona con la API de Apify, schedules, webhooks, Google Sheets, Make, Zapier, n8n, Slack y cualquier herramienta que lea JSON.

### 🕳️ Más de DataMole

| Actor | Qué hace |
|---|---|
| [Urbania Peru Real Estate Scraper](https://apify.com/datamole/urbania-scraper-pro) | Avisos de Urbania (Perú) con soles, dólares y detalle |
| [Zonaprop Argentina Real Estate Scraper](https://apify.com/datamole/zonaprop-scraper) | Avisos de Zonaprop con dólar blue/MEP y monitoreo |
| [Plusvalía Ecuador Real Estate Scraper](https://apify.com/datamole/plusvalia-scraper) | Propiedades de Plusvalía con alícuota y monitoreo |

**¿Necesitas un campo o filtro que no está?** Abre un issue en este actor. Leemos todo.

### ⚖️ Disclaimer

Este actor recopila información pública de adondevivir.com y tipos de cambio públicos de open.er-api.com. No está afiliado ni respaldado por Adondevivir, Navent ni ExchangeRate-API. Usa los datos de forma responsable y conforme a las leyes aplicables (incluida la Ley 29733 de Protección de Datos Personales del Perú) y a los términos del sitio.

# Actor input Schema

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

Distritos, urbanizaciones, ciudades o departamentos como aparecen en Adondevivir, por ejemplo Miraflores, San Isidro, Santiago de Surco, Arequipa o Trujillo.

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

Alquiler, Venta, Alquiler temporal, Traspaso.

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

Uno o varios tipos.

## `searchUrls` (type: `array`):

Opcional. Pegá cualquier búsqueda del portal con tus filtros ya aplicados. Se recorren todas sus páginas.

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

Tope para toda la corrida. Vacío = sin tope.

## `maxPagesPerSearch` (type: `integer`):

Cada página trae 30 avisos. Vacío = todas.

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

Precio mínimo

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

Precio máximo

## `priceCurrency` (type: `string`):

Moneda del filtro de precio.

## `minMaintenance` (type: `integer`):

Mantenimiento mínimo.

## `maxMaintenance` (type: `integer`):

Mantenimiento máximo.

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

Dormitorios.

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

Baños (mínimo)

## `minParking` (type: `integer`):

Estacionamientos.

## `minArea` (type: `integer`):

Superficie techada.

## `maxArea` (type: `integer`):

Superficie techada.

## `antiquity` (type: `string`):

Antigüedad máxima del inmueble.

## `general` (type: `array`):

Piscina, amoblado, ascensor, permite mascotas, en condominio, frente a parque y más. Se exigen todas las elegidas.

## `outdoor` (type: `array`):

Área de BBQ, balcón, piscina al aire libre o climatizada, jardín privado, playa. Se exigen todas las elegidas.

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

Gimnasio, seguridad, video vigilancia, parrilla, áreas verdes, co-working y más. Se exigen todas las elegidas.

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

Suite, sala de estar, depósito, hidromasaje, terraza y más. Se exigen todas las elegidas.

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

Todos, inmobiliaria / dueño directo.

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

Solo avisos publicados en este período.

## `multimedia` (type: `array`):

Solo avisos con video, recorrido 360 o planos.

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

Buscador de palabras del portal. Es estricto y devuelve pocos avisos: para comodidades usá los filtros de comodidades.

## `sort` (type: `string`):

Más recientes recorre la búsqueda completa sin repetidos. Bajaron de precio muestra primero las rebajas.

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

Abre cada aviso para sumar todas las comodidades, antigüedad, teléfono del anunciante, dirección exacta, descripción completa y fecha de publicación. Es más lento y tiene un costo adicional por aviso.

## `monitorMode` (type: `boolean`):

Recuerda los avisos entre corridas y devuelve solo los nuevos y los que cambiaron de precio, con el precio anterior y el % de cambio. La primera corrida devuelve todo.

## `monitorName` (type: `string`):

Opcional. Usá el mismo nombre para compartir la memoria entre configuraciones. Vacío = se identifica por los filtros.

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

El portal exige IP residencial del país. Dejalo como está.

## Actor input object example

```json
{
  "locations": [
    "Miraflores"
  ],
  "operation": "alquiler",
  "propertyTypes": [
    "departamento"
  ],
  "priceCurrency": "USD",
  "publisherType": "todos",
  "sort": "more_recent",
  "includeDetails": false,
  "monitorMode": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "PE"
  }
}
```

# 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 = {
    "locations": [
        "Miraflores"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "PE"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("datamole/adondevivir-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 = {
    "locations": ["Miraflores"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "PE",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("datamole/adondevivir-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 '{
  "locations": [
    "Miraflores"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "PE"
  }
}' |
apify call datamole/adondevivir-scraper --silent --output-dataset

```

## MCP server setup

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