# Urbania Peru Real Estate Scraper (`datamole/urbania-scraper-pro`) Actor

Extract Urbania.pe real estate listings for rent and sale in Peru with price in soles and dollars, maintenance fee, area, bedrooms, bathrooms, GPS coordinates, amenities, photos, agency and publish date. Search by district, like Miraflores or Surco, or paste any Urbania URL.

- **URL**: https://apify.com/datamole/urbania-scraper-pro.md
- **Developed by:** [DataMole](https://apify.com/datamole) (community)
- **Categories:** Real estate
- **Stats:** 13 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

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

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)

## 🏠 Urbania Real Estate Scraper Pro (Perú)

> **Extrae todos los avisos de Urbania.pe (alquiler y venta) con precio en soles y dólares, coordenadas GPS, mantenimiento, características, amenidades, fotos en alta resolución, inmobiliaria, teléfono y fecha de publicación.** Busca por distrito o pega cualquier URL de búsqueda.

**Urbania Real Estate Scraper Pro** convierte las búsquedas de Urbania, el portal inmobiliario más grande del Perú, en una base de datos lista para analizar. Escribe distritos como `Miraflores`, `Surco` o `La Molina` (se reconocen los 43 distritos de Lima y los de Callao), o pega una URL de urbania.pe con tus filtros. El actor recorre **todas las páginas**, evita avisos repetidos y, si lo activas, entra a cada aviso para traer los datos completos.

| 🎯 Para quién | 💡 Para qué |
|---|---|
| Inversionistas, inmobiliarias, corredores, bancos y financieras, tasadores, proptech, investigadores | Estudios de mercado, precio por m² por distrito, captación de propietarios, monitoreo de competencia, alertas de nuevos avisos, modelos de valorización |

### 📋 Qué hace

- 📍 **Búsqueda por distrito** (Lima, Callao y ciudades como Arequipa o Cusco) con operación (alquiler, venta, alquiler temporal) y tipo de inmueble (departamentos, casas, oficinas, locales, terrenos, habitaciones...).
- 🔗 **Búsqueda por URL.** Pega cualquier búsqueda filtrada de urbania.pe.
- 📄 **Todas las páginas, sin repetidos.** Con orden fijo se obtiene el 100% de los avisos de la búsqueda.
- 🔎 **Detalle completo (opcional):** precio en S/ y USD, mantenimiento, área total y techada, dormitorios, baños, medios baños, estacionamientos, antigüedad, **latitud y longitud**, dirección exacta, amenidades, descripción completa, galería de fotos en 1200x1200, inmobiliaria o propietario, teléfono de contacto, código del aviso y fecha de publicación.
- 🧮 **Precio por m² en USD** calculado automáticamente.
- 🧹 **Filtros:** precio mínimo y máximo (USD o S/), área mínima, dormitorios y baños mínimos, solo con precio, excluir proyectos en planos.
- 🛡️ **Seguro:** si Urbania no reconoce una búsqueda, la marca como error en lugar de traer avisos de todo el Perú.

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

### 📊 Ejemplo de resultado (real)

```json
{
    "id": "145908821",
    "url": "https://urbania.pe/inmueble/clasificado/alclapin-alquiler-de-departamento-en-miraflores-lima-2-dormitorios-145908821",
    "title": "Alquiler Departamento en Miraflores S/ 3,800",
    "operationType": "alquiler",
    "propertyType": "Departamento",
    "price": 3800,
    "currency": "PEN",
    "priceUSD": 1150,
    "pricePEN": 3800,
    "maintenanceFee": 300,
    "pricePerM2USD": 12,
    "areaTotal": 93,
    "areaCovered": 93,
    "bedrooms": 2,
    "bathrooms": 2,
    "parking": 1,
    "ageYears": 10,
    "district": "Miraflores",
    "city": "Lima",
    "latitude": -12.122295743052483,
    "longitude": -77.03230300066377,
    "amenities": ["Amueblado/a", "Ascensor: 1", "Centros Comerciales Cercanos", "Cerca a colegios", "Vista a la Ciudad"],
    "imageCount": 22,
    "publisherName": "Melanie Morris",
    "hasWhatsapp": true,
    "postingCode": "6040RB",
    "publishedAt": "2025-03-09T15:30:10Z"
}
```

Sin detalle completo, cada aviso igual trae precio, moneda, mantenimiento, área, dormitorios, baños, estacionamientos, dirección, distrito, descripción corta, foto y logo del anunciante.

### ⚙️ Ejemplos de input

**Todos los departamentos en alquiler en Miraflores y San Isidro, de 2 dormitorios o más y hasta USD 1,500:**

```json
{
    "locations": ["Miraflores", "San Isidro"],
    "operation": "alquiler",
    "propertyType": "departamentos",
    "minBedrooms": 2,
    "maxPrice": 1500,
    "priceCurrency": "USD"
}
```

**Casas en venta en La Molina, datos rápidos sin detalle:**

```json
{
    "locations": ["La Molina"],
    "operation": "venta",
    "propertyType": "casas",
    "includeDetails": false
}
```

**Una búsqueda filtrada pegada desde urbania.pe:**

```json
{
    "searchUrls": ["https://urbania.pe/buscar/alquiler-de-departamentos-en-miraflores--lima--lima?bedroomsNumber=3"]
}
```

### ✨ Por qué este actor

- ✅ **Cobertura completa** de cada búsqueda, sin avisos repetidos entre páginas.
- ✅ **Coordenadas GPS** para mapas y análisis por zona.
- ✅ **Precios en ambas monedas** con la conversión de Urbania, más precio por m².
- ✅ **Distritos en lenguaje natural:** escribe "Surco" o "Jesús María" y el actor arma la URL correcta.
- ✅ **Económico:** el navegador solo pasa la verificación de seguridad; el resto se descarga sin imágenes.

### ❓ Preguntas frecuentes

**¿Necesito proxy?** Urbania usa Cloudflare. En Apify se recomienda proxy residencial de Perú (viene configurado por defecto). El actor bloquea imágenes, fuentes y estilos para gastar muy poco ancho de banda.

**¿Qué pasa si escribo mal un distrito?** Urbania redirige a una búsqueda nacional. El actor lo detecta, lo reporta como error y no guarda avisos equivocados.

**¿Puedo monitorear avisos nuevos cada día?** Sí. Programa el actor con orden "Más recientes" y un `maxItems` pequeño.

**¿Qué ciudades fuera de Lima funcionan?** Las que Urbania reconoce por nombre, como Arequipa o Cusco. Si una ciudad no funciona, busca en urbania.pe y pega la URL.

### ⚖️ Aviso legal

Este actor extrae información pública de Urbania.pe. No está afiliado a Urbania. Usa los datos de forma responsable y conforme a la Ley de Protección de Datos Personales del Perú (Ley N° 29733), sobre todo si usas teléfonos de contacto.

# Actor input Schema

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

Escribe distritos o ciudades como en Urbania: Miraflores, Surco, La Molina, Callao, Arequipa, Cusco. Los distritos de Lima y Callao se reconocen automáticamente.

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

Tipo de operación para las búsquedas por distrito.

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

Tipo de propiedad para las búsquedas por distrito.

## `bedrooms` (type: `integer`):

Aplica el filtro de dormitorios de Urbania en la búsqueda.

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

Orden de los resultados. Un orden fijo evita avisos repetidos entre páginas y asegura cobertura completa. Si tu URL ya trae ?sort= se respeta.

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

Entra a urbania.pe, aplica filtros y copia la URL. Ejemplo: https://urbania.pe/buscar/venta-de-casas-en-la-molina--lima--lima

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

Tope total de propiedades a guardar en esta corrida. Vacío = todas.

## `maxPages` (type: `integer`):

Cada página tiene 30 avisos. Vacío = todas las páginas de la búsqueda.

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

Entra a cada aviso para obtener coordenadas GPS, precio en soles y dólares, mantenimiento, antigüedad, amenidades, descripción completa, inmobiliaria y fecha de publicación. Más lento.

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

Precio mínimo en la moneda elegida.

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

Precio máximo en la moneda elegida.

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

Con detalle completo se compara en ambas monedas usando la conversión de Urbania.

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

Área total mínima.

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

Al menos esta cantidad de dormitorios.

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

Al menos esta cantidad de baños.

## `onlyWithPrice` (type: `boolean`):

Descarta los avisos con "Consultar precio".

## `excludeProjects` (type: `boolean`):

Descarta proyectos inmobiliarios (desarrollos) y deja solo inmuebles individuales.

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

Urbania usa Cloudflare. Se recomienda proxy residencial de Perú. El actor bloquea imágenes para gastar muy poco ancho de banda.

## Actor input object example

```json
{
  "locations": [
    "Miraflores",
    "San Isidro"
  ],
  "operation": "alquiler",
  "propertyType": "departamentos",
  "sort": "more_recent",
  "maxItems": 100,
  "includeDetails": true,
  "priceCurrency": "USD",
  "onlyWithPrice": false,
  "excludeProjects": 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",
        "San Isidro"
    ],
    "maxItems": 100,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "PE"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("datamole/urbania-scraper-pro").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",
        "San Isidro",
    ],
    "maxItems": 100,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "PE",
    },
}

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

```

## MCP server setup

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

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/oRxvnaBuopk2thZfg/builds/TmMWFFwFjbd7IqpUS/openapi.json
