# Inmuebles24 Scraper — Mexico Property Data (`sian.agency/inmuebles24-property-scraper`) Actor

Extrae anuncios de inmuebles24.com en todo México: precio en MXN o USD, m², recámaras, baños, GPS, fotos, descripción completa y el teléfono del anunciante.

- **URL**: https://apify.com/sian.agency/inmuebles24-property-scraper.md
- **Developed by:** [SIÁN OÜ](https://apify.com/sian.agency) (community)
- **Categories:** Real estate, Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.88 / 1,000 property searches

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

## Inmuebles24 Scraper & API — Mexico Property Listings & Prices 🇲🇽🏠

[![SIÁN Agency Store](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![Zonaprop Scraper](https://img.shields.io/badge/Store-Zonaprop%20Argentina-74ACDF)](https://apify.com/sian.agency/zonaprop-property-scraper?fpr=sian) [![Urbania Scraper](https://img.shields.io/badge/Store-Urbania%20Peru-D91023)](https://apify.com/sian.agency/urbania-property-scraper?fpr=sian) [![Portalinmobiliario Scraper](https://img.shields.io/badge/Store-Portalinmobiliario%20Chile-0039A6)](https://apify.com/sian.agency/portalinmobiliario-property-scraper?fpr=sian)

#### 🎉 Type a Mexican place name. Get the listings, with the advertiser's phone number on every row.

##### Built for proptech teams, brokers, investors and market analysts who need live Mexican real-estate data without building a search URL first.

### 🔎 What is the Inmuebles24 Property Scraper — and when should you use it?

The **Inmuebles24 Property Scraper** turns Mexican property listings from inmuebles24.com, by place name into clean, structured rows you can filter, export and feed straight into a spreadsheet, database or AI agent. No account, no portal API key, no browser automation to maintain.

**Use it when you need:** Mexican listings for sale, rent, vacation rental or lease transfer with the asking price and its currency (MXN or USD), price per square metre, lot and built area, bedrooms, bathrooms, half bathrooms and parking. Each row also carries the monthly maintenance fee, the colonia, GPS coordinates, up to eight photos and the advertiser's full Spanish description. Their name, profile and contact phone are attached to the same row at no extra charge. Input is a plain place name — a state, a city, a colonia or a section of one — so no search URL has to be built first. A separate agency mode returns everything one estate agency currently has on the market.

**Use something else when:** you need a different Latin American market. Use [Zonaprop Property Scraper](https://apify.com/sian.agency/zonaprop-property-scraper?fpr=sian) for Argentine sale and rent listings with USD and ARS prices, expenses and publisher contacts. Use [Urbania Property Scraper](https://apify.com/sian.agency/urbania-property-scraper?fpr=sian) for Peruvian sale and rent listings across Lima and the coast. Use [ImovelWeb Property Scraper](https://apify.com/sian.agency/imovelweb-property-scraper?fpr=sian) for Brazilian sale and rent listings with BRL prices, area and agency data. This actor covers inmuebles24.com only, which is Mexico only.

### 🤖 Use with AI agents

Already connected to the [Apify MCP server](https://mcp.apify.com)? Just ask for this Actor by name: sian.agency/inmuebles24-property-scraper

**Your agent can pay for its own runs.** This Actor is eligible for [agentic payments](https://docs.apify.com/platform/actors/publishing/monetize), so an agent can discover it, run it and settle the bill over [x402](https://www.x402.org/) (USDC on Base) or [Skyfire](https://www.skyfire.xyz/) — without an Apify account or API token of its own. Billing is the same either way: per successful row, never for errors.

Otherwise copy this prompt into Claude, ChatGPT, Cursor or any MCP-enabled assistant:

```text
I want Mexican property listings from Inmuebles24 using the Apify Actor `sian.agency/inmuebles24-property-scraper`.

Use it when I need: Mexican listings for sale, rent, vacation rental or lease transfer with the asking price and its currency (MXN or USD), price per square metre, lot and built area, bedrooms, bathrooms, half bathrooms and parking. Each row also carries the monthly maintenance fee, the colonia, GPS coordinates, up to eight photos and the advertiser's full Spanish description. Their name, profile and contact phone are attached to the same row at no extra charge. Input is a plain place name — a state, a city, a colonia or a section of one — so no search URL has to be built first. A separate agency mode returns everything one estate agency currently has on the market.

Don't use it when: you need a different Latin American market — use zonaprop-property-scraper or urbania-property-scraper or imovelweb-property-scraper instead.

How to call it: pick an `operation`: `search` (a place name or a pasted inmuebles24 search URL) or `agency` (inmuebles24 agency page URLs in `agencyUrls`); set `location` to any Mexican place (`Ciudad de México`, `Monterrey`, `Jalisco`, `Polanco`, `Cancún`) and add more in `locations`; choose `transactionType` (`sale`, `rent`, `temporary` or `transfer`); narrow with `propertyType`, `minPrice`/`maxPrice` with `priceCurrency`, `minBedrooms`, `minBathrooms`, `minParking`, `minSurface`/`maxSurface` with `surfaceType`, `publisherType`, `propertyAge`, `publishedWithin` or `requiredMedia`; order with `sortBy` and cap the run with `maxResults`.

Start with this input:
{
  "operation": "search",
  "location": "Ciudad de México",
  "transactionType": "sale",
  "propertyType": "apartment",
  "minPrice": 2000000,
  "maxPrice": 8000000,
  "maxResults": 120
}

Ask me which Mexican place, and whether they want listings for sale, to rent, vacation rentals, or one agency's whole portfolio, then run the Actor and summarise the results as a table.
```

**Things you can ask your agent for:**

- *Pull apartments for sale in Polanco between 5 and 15 million pesos and rank them by price per square metre.*
- *Compare median rent per square metre across Ciudad de México, Monterrey and Guadalajara.*
- *Build a contact list of owner-direct sellers in Mérida, with their phone numbers.*

Machine-readable API, MCP config and OpenAPI definition for this Actor are published at [apify.com/sian.agency/inmuebles24-property-scraper.md](https://apify.com/sian.agency/inmuebles24-property-scraper.md).

### 📋 Overview

**Pull live listings from inmuebles24.com, Mexico's biggest property portal, into a clean dataset.** Name a state, a city, a colonia or one section of a colonia. Pick a market. Press Start. Every row comes back with the asking price and its currency, price per m², lot and built area, room counts, the maintenance fee, GPS coordinates, the photo gallery, the advertiser's full Spanish description and their phone number.

| | |
|---|---|
| **Source** | inmuebles24.com (Mexico) |
| **Operations** | Property Search · Agency Listings |
| **Markets** | For sale (venta) · For rent (renta) · Vacation rental (temporal) · Lease transfer (traspaso) |
| **Live inventory** | 274,938 for sale · 114,236 for rent · ~1,090 vacation rentals · 22 lease transfers (measured 2026-09-06) |
| **Fields per row** | 44 |
| **Rows per request** | 30 |
| **Setup** | None. No key, no login, nothing to configure |

**Why professionals choose this scraper:**

- 📍 **Place names, not URLs**: "Monterrey", "Polanco", "Polanco I Sección". Most inmuebles24 tools make you build a search on the site and paste the link back. This one resolves the name against the portal's own location index and prints the match in the run log.
- 📞 **The advertiser's phone is in the base row**: 35 of 35 rows carried one on a measured Polanco run. Two rival actors bill this as a separate event, one at $0.002 per listing and one at $0.03. That second figure is thirty times what a whole row costs here.
- 🧾 **A search row is already a detail row**: full Spanish description, GPS, lot and built area, bedrooms, bathrooms, half bathrooms, parking, maintenance fee and up to 8 photos arrive in the one charged row. There is no second request to pay for.
- 🇲🇽 **All four markets**: sale, rent, vacation rental and lease transfer. The 1,090-listing vacation-rental market alone is one most Mexican listing exports never touch.
- 💰 **$1.00 per 1,000 listings**: the floor price in this category, with no separate charge for contact data.
- 🎛️ **Filters run on the portal, not in your spreadsheet**: market, property type, price band in MXN or USD, rooms, bathrooms, parking, size in m², publisher type, property age, publication date, required media and sort order.
- 🆓 **Free to try**: 25 listings per run, same 44 fields, no credit card.

***

### ✨ Features

- 🔍 **Property Search**: any Mexican place at any level. A state (Nuevo León holds 25,417 listings), a city (Monterrey holds 9,804 for sale), a colonia (Polanco holds 2,251) or one section of a colonia.
- 🏢 **Agency Listings**: paste an inmuebles24 agency page URL and get that agency's whole current portfolio in the market you picked. The numeric id at the end of the URL works on its own too.
- 🗺️ **Several places in one run**: each place runs its own search, so three cities return roughly three times the rows. Splitting a big state into its cities is also how you get past the per-query page ceiling.
- 📞 **Advertiser contact on the row**: name, publisher type (agency, owner direct or developer), their inmuebles24 profile URL and their phone number.
- 🙋 **Owner-direct filter**: 6,109 of the properties on sale are listed *trato directo*, with no agency commission attached. One dropdown isolates them.
- 🏗️ **New-build filter**: 140,133 of the properties on sale are brand new. Combine "Brand new" with "Published within: last week" and each scheduled run returns only what launched since the last one, out of roughly 15,000 new listings nationwide per week.
- 💱 **MXN and USD**: Mexican listings are quoted in both. Set your price band in either currency, and every row reports the currency the advertiser actually used.
- 📐 **Two surface measures**: lot area and built area are both on every row, and the size filter can be pointed at either one.
- 📉 **Recently reduced sort**: surfaces listings whose asking price just dropped, which no other ordering shows you.
- 📤 **Clean exports**: JSON, CSV, Excel or the REST API, plus a run report saved to the key-value store with the counts, any failed items and what the run cost.

***

### 🎬 Quick Start

Pick an operation, name a place, choose a market, set the filters you care about and run. Rows stream into the Apify dataset as they arrive. Nothing to install and nothing to authenticate against inmuebles24.

```bash
curl -X POST "https://api.apify.com/v2/acts/sian.agency~inmuebles24-property-scraper/runs?token=YOUR_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"operation":"search","location":"Monterrey","transactionType":"sale","maxResults":90}'
```

***

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Choose what to scrape

**Property Search** for listings by place, or **Agency Listings** for one agency's whole portfolio.

#### Step 2: Name the place and the market

Type any Mexican place: Ciudad de México, Monterrey, Guadalajara, Cancún, Mérida, Polanco, Zona Hotelera. Then pick sale, rent, vacation rental or lease transfer.

#### Step 3: Set filters and run

Property type, price band, rooms, size, publisher type, age, publication date, sort order, row budget. Then press **Start**.

**That's it. In about a minute you'll have:**

- A dataset of Mexican property listings in JSON, CSV or Excel
- Price, currency, price per m², both surface measures, room counts, GPS, photos and the full Spanish description on every row
- The advertiser's name, profile and phone number attached to each listing
- A repeatable feed you can put on a schedule

***

### 📥 Input Configuration

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `operation` | string | No | `search` (place names) or `agency` (agency page URLs). Default `search`. |
| `location` | string | No | A Mexican place: state, city, colonia or a section of one. Default `Ciudad de México`. |
| `locations` | array | No | Extra places to search in the same run. Each runs its own search. |
| `agencyUrls` | array | No | inmuebles24 agency page URLs, used by the `agency` operation. A bare numeric agency id works too. |
| `transactionType` | string | No | `sale`, `rent`, `temporary` or `transfer`. One market per run. Default `sale`. |
| `propertyType` | string | No | `all`, `apartment`, `house`, `house-condo`, `land`, `commercial`, `office`, `warehouse`, `building`, `development`. |
| `minPrice` / `maxPrice` | integer | No | Asking-price band, monthly rent for rentals. `0` means no bound. |
| `priceCurrency` | string | No | `MXN` or `USD`. Which currency the price band is expressed in. |
| `minBedrooms` | integer | No | Fewest recámaras to accept. `0` means no minimum. |
| `minBathrooms` | integer | No | Fewest full bathrooms. Half bathrooms are reported but do not count here. |
| `minParking` | integer | No | Fewest parking spaces (estacionamientos). |
| `minSurface` / `maxSurface` | integer | No | Size band in m², measured against `surfaceType`. |
| `surfaceType` | string | No | `land` (lot size) or `built` (built area). Both are reported on every row regardless. |
| `publisherType` | string | No | `all`, `agency` (inmobiliaria) or `owner` (trato directo). |
| `propertyAge` | string | No | `any`, `under-construction`, `brand-new`, `up-to-5`, `up-to-10`, `up-to-20`, `up-to-50`, `over-50`. |
| `publishedWithin` | string | No | `any`, `today`, `2-days`, `week`, `15-days`, `30-days`, `45-days`. |
| `requiredMedia` | string | No | `any`, `video`, `tour-360` or `floor-plan`. |
| `sortBy` | string | No | `relevance`, `newest`, `price-low`, `price-high`, `most-viewed`, `price-drops`. |
| `maxResults` | integer | No | Row budget for the whole run. Default 90. FREE plans stop at 25. |

**Example: apartments for sale in Polanco**

```json
{
  "operation": "search",
  "location": "Polanco",
  "transactionType": "sale",
  "propertyType": "apartment",
  "minPrice": 5000000,
  "maxPrice": 15000000,
  "priceCurrency": "MXN",
  "minBedrooms": 2,
  "sortBy": "newest",
  "maxResults": 120
}
```

**Example: several cities, owner-direct only**

```json
{
  "operation": "search",
  "location": "Monterrey",
  "locations": ["Guadalajara", "Mérida"],
  "transactionType": "sale",
  "publisherType": "owner",
  "maxResults": 300
}
```

**Example: one agency's whole portfolio**

```json
{
  "operation": "agency",
  "agencyUrls": ["https://www.inmuebles24.com/inmobiliarias/intercapital-realty_102536653-inmuebles.html"],
  "transactionType": "sale",
  "maxResults": 200
}
```

***

### 📤 Output

Every listing is one flat row with **44 fields**, exportable as JSON, CSV, Excel or through the API.

| Field | Type | Description |
|-------|------|-------------|
| `propertyId` | number | 🆔 inmuebles24 listing id |
| `listingUrl` | string | 🔗 Link to the listing page |
| `propertyTitle` | string | 🏷️ Listing title |
| `propertyType` | string | 🏘️ Departamento, casa, terreno, local, oficina, bodega, edificio |
| `transactionType` | string | 🤝 Sale, rent, vacation rental or lease transfer |
| `price` | number | 💰 Asking price, or monthly rent for rentals |
| `currency` | string | 💱 Currency the advertiser quoted (MXN or USD) |
| `priceFormatted` | string | 🏷️ The price exactly as shown on the portal |
| `pricePerSqm` | number | 📊 Price per square metre |
| `maintenanceFee` | number | 🧾 Monthly maintenance fee (mantenimiento) |
| `surfaceLandSqm` | number | 🌳 Lot size in m² (terreno) |
| `surfaceBuiltSqm` | number | 📐 Built area in m² (construida) |
| `bedrooms` | number | 🛏️ Bedrooms (recámaras) |
| `bathrooms` | number | 🛁 Full bathrooms |
| `halfBathrooms` | number | 🚿 Half bathrooms (medios baños) |
| `parkingSpaces` | number | 🚗 Parking spaces (estacionamientos) |
| `listingDescription` | string | 📝 The advertiser's own Spanish description, untrimmed |
| `amenities` | array | ✨ Amenities listed on the property |
| `address` | string | 📍 Street address as published |
| `neighborhood` | string | 🏘️ Colonia |
| `subNeighborhood` | string | 🧭 Sub-area within the colonia |
| `city` | string | 🏙️ City or municipio |
| `state` | string | 🗺️ Mexican state |
| `latitude` | number | 🌐 GPS latitude |
| `longitude` | number | 🌐 GPS longitude |
| `publisherName` | string | 🏢 Who listed it |
| `publisherId` | number | 🆔 Publisher id |
| `publisherUrl` | string | 🔗 Publisher's inmuebles24 page |
| `publisherType` | string | 🧑‍💼 Estate agency, owner direct or developer |
| `contactPhone` | string | 📞 The advertiser's phone number |
| `publishedAt` | string | 🕒 When the listing was published |
| `isDevelopment` | boolean | 🏗️ Part of a new development |
| `isFeatured` | boolean | ⭐ Featured placement on the portal |
| `hasVideo` | boolean | 🎬 Listing carries a video |
| `hasVirtualTour` | boolean | 🔄 Listing carries a 360° tour |
| `hasFloorPlan` | boolean | 📐 Listing carries a floor plan |
| `imageUrl` | string | 🖼️ Lead photo |
| `imageUrls` | array | 🖼️ Photo gallery, up to 8 per listing |
| `imageCount` | number | 📸 How many photos came back |
| `searchedLocation` | string | 🔎 The place that produced this row |
| `status` | string | ✅ Row status |
| `errorMessage` | string | ⚠️ What went wrong, on the rare row that fails |
| `_operation` | string | 🎯 Which operation produced the row |
| `_fetchedAt` | string | ⏱️ Capture timestamp |

**Example row (shape):**

```json
{
  "propertyId": 148392017,
  "listingUrl": "https://www.inmuebles24.com/propiedades/clasificado-148392017.html",
  "propertyTitle": "Departamento en venta en Polanco",
  "propertyType": "Departamento",
  "transactionType": "Venta",
  "price": 12500000,
  "currency": "MXN",
  "priceFormatted": "MN 12,500,000",
  "pricePerSqm": 89285,
  "maintenanceFee": 6500,
  "surfaceLandSqm": 140,
  "surfaceBuiltSqm": 140,
  "bedrooms": 2,
  "bathrooms": 2,
  "halfBathrooms": 1,
  "parkingSpaces": 2,
  "listingDescription": "Espectacular departamento en Polanco con acabados de lujo, cocina integral, terraza …",
  "amenities": ["Alberca", "Gimnasio", "Seguridad 24h"],
  "address": "Calle Julio Verne",
  "neighborhood": "Polanco",
  "subNeighborhood": "Polanco I Sección",
  "city": "Miguel Hidalgo",
  "state": "Distrito Federal",
  "latitude": 19.4326,
  "longitude": -99.1938,
  "publisherName": "Intercapital Realty",
  "publisherId": 102536653,
  "publisherUrl": "https://www.inmuebles24.com/inmobiliarias/intercapital-realty_102536653-inmuebles.html",
  "publisherType": "Estate agency",
  "contactPhone": "5555123456",
  "publishedAt": "2026-08-29T00:00:00.000Z",
  "isDevelopment": false,
  "isFeatured": true,
  "hasVideo": false,
  "hasVirtualTour": true,
  "hasFloorPlan": false,
  "imageUrl": "https://images.inmuebles24.com/i24/1/2/…-1200x1200.jpg",
  "imageUrls": ["https://images.inmuebles24.com/i24/1/2/…-1200x1200.jpg"],
  "imageCount": 8,
  "searchedLocation": "Polanco",
  "status": "success",
  "errorMessage": null,
  "_operation": "search",
  "_fetchedAt": "2026-09-06T18:22:41.107Z"
}
```

***

### 💼 Use Cases & Examples

#### 1. Mexican property market analysis

**Analysts and consultancies sizing a city before a client meeting.**

**Input:** a city or state, one market, no filters.
**Output:** every live listing with price, both surface measures, room counts and colonia.
**Use:** median MXN/m² by colonia, how a two-bedroom in Polanco prices against the same flat in Del Valle, and how the mix moves month to month once the run is on a schedule.

#### 2. Agent and agency lead lists

**Proptech sales teams and portal operators building a broker map.**

**Input:** a city, then dedupe by `publisherId`.
**Output:** agency name, inmuebles24 profile and phone number on every row.
**Use:** the local agency map with contact details, or one agency's entire portfolio from its page URL. The phone is part of the listing record here, so a 500-row city sweep costs $0.50 and not a cent more for contact data.

#### 3. Investment and rental yield screening

**Investors and buy-to-let funds comparing neighbourhoods.**

**Input:** the same colonia twice, once with `transactionType: "sale"` and once with `"rent"`.
**Output:** two datasets carrying asking price, size and room count.
**Use:** join them and gross yield per neighbourhood falls straight out. The maintenance fee is on the row too, which is what separates gross yield from a number you can act on.

#### 4. New development tracking

**Developers and land teams watching the competition launch.**

**Input:** `propertyAge: "brand-new"` or `"under-construction"`, plus `publishedWithin: "week"`.
**Output:** only stock that came to market since the last run, out of roughly 15,000 new listings nationwide per week.
**Use:** where developers are launching, at what price per square metre, and how fast the 140,133 brand-new listings on sale are turning over.

#### 5. Owner-direct deal sourcing

**Buyers' agents and bargain hunters avoiding commission.**

**Input:** `publisherType: "owner"` on any city, sorted by `price-drops`.
**Output:** the 6,109 *trato directo* listings, newest reductions first.
**Use:** a short list of sellers you can call today, ranked by who just cut their asking price.

#### 6. Relocation services and listing portals

**Product teams feeding a website or a comparison tool.**

**Input:** a set of cities on a daily schedule.
**Output:** GPS, photos, room counts and the full Spanish description, ready to render.
**Use:** live Mexican stock inside your own product, with prices in the currency the advertiser used so nothing has to be guessed.

#### 7. Vacation rental and short-let research

**STR operators sizing Cancún, Tulum or Puerto Vallarta.**

**Input:** `transactionType: "temporary"` on a coastal city.
**Output:** the vacation-rental market, about 1,090 listings nationwide.
**Use:** a market most Mexican listing exports skip entirely, with nightly and monthly asking prices attached to real coordinates.

***

### 🔗 Integration Examples

#### JavaScript / Node.js

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_TOKEN' });

const run = await client.actor('sian.agency/inmuebles24-property-scraper').call({
  operation: 'search',
  location: 'Monterrey',
  transactionType: 'sale',
  propertyType: 'house',
  minBedrooms: 3,
  maxResults: 200,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0].priceFormatted, items[0].contactPhone);
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient('YOUR_TOKEN')

run = client.actor('sian.agency/inmuebles24-property-scraper').call(run_input={
    'operation': 'search',
    'location': 'Cancún',
    'transactionType': 'rent',
    'maxResults': 150,
})

for item in client.dataset(run['defaultDatasetId']).iterate_items():
    print(item['propertyTitle'], item['price'], item['currency'], item['contactPhone'])
```

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~inmuebles24-property-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"operation":"search","location":"Guadalajara","transactionType":"sale","publisherType":"owner","maxResults":100}'
```

#### Automation Workflows (n8n / Zapier / Make)

1. **Trigger**: a daily schedule, or a webhook from your CRM
2. **HTTP Request**: start a run with `publishedWithin: "week"` and `sortBy: "newest"`
3. **Process**: read the dataset, drop listings you already have by `propertyId`
4. **Action**: push new listings into a sheet, a database or a Slack channel, and route the owner-direct ones to an agent

***

### 📊 Performance & Pricing

Pay-per-event. You are billed per listing returned, never for a run that finds nothing.

#### FREE plan (try it now)

- **25 listings per run**, with all 44 fields
- Every filter and both operations available
- No credit card

#### PAID plan (production)

- **$0.001 per listing** for both `search-result` and `agency-listing`, which is **$1.00 per 1,000 listings**
- Plus the platform's **$0.005** actor start, once per run
- No add-on event for contact data. The phone number is part of the row you already paid for.
- Row budget up to 20,000 per run

A 1,000-listing city sweep with phone numbers costs $1.005. The two rival actors that bill contact data separately would add $2.00 and $30.00 to the same job.

🔗 [View current pricing](https://apify.com/sian.agency/inmuebles24-property-scraper?fpr=sian)

***

### ❓ Frequently Asked Questions (FAQ)

**Q: Do I need an API key, a login or a proxy?**
A: No. Type a Mexican place name and press Start.

**Q: What can I put in the place field?**
A: Any Mexican place at any level. A state (Nuevo León), a city (Monterrey, Mérida, Cancún), a colonia (Polanco, Providencia) or a section of one (Polanco I Sección). The name is matched against the portal's own location index, and the run log prints which place it picked.

**Q: Is the advertiser's phone number really included?**
A: Yes, wherever inmuebles24 publishes one, at no extra charge. A measured Polanco run returned a phone on 35 of 35 rows, and a nationwide page returned one on 29 of 30. It is part of the listing record, not a separate enrichment step.

**Q: How many listings can one search return?**
A: As many as the portal holds for that query. Nationwide that is 274,938 for sale, 9,804 in Monterrey and 2,251 in Polanco. Rows arrive 30 at a time, and a single query cannot be paged past its own last page. For a very large search, split the run by city, price band or property type.

**Q: How do I get everything one agency has listed?**
A: Switch the operation to Agency Listings and paste their inmuebles24 agency page URL. You get their whole current portfolio in the market you selected.

**Q: Does it cover rentals as well as sales?**
A: All four markets the portal runs: sale, rent, vacation rental and lease transfer. Rent alone carries 114,236 live listings. One market per run, because the portal does not combine them.

**Q: Do I get sold prices or price history?**
A: No. Inmuebles24 publishes live asking prices only. If you want a history, put this actor on a schedule and build one from your own snapshots.

**Q: Do I get the advertiser's email address?**
A: No. The listing record carries a phone number, not an email.

**Q: Does it cover other Mexican portals?**
A: No. This one reads inmuebles24.com. Vivanuncios, Propiedades.com and Lamudi are separate sources.

**Q: Are the descriptions in Spanish?**
A: Yes. The description is the advertiser's own text as it appears on the portal, untranslated and untrimmed.

**Q: Prices show in both pesos and dollars on the site. Which do I get?**
A: Whichever the advertiser quoted. Every row carries the amount and its currency separately, and the price filter lets you set the band in either.

**Q: How many photos come back?**
A: Up to 8 per listing, with the count on the row so you always know what you have.

**Q: What output formats are available?**
A: JSON, CSV and Excel, exported straight from the Apify dataset, or read through the REST API.

***

### 🐛 Troubleshooting

**The run matched the wrong place**

- Check the run log, which prints the place that was matched.
- Add the state to disambiguate a repeated colonia name, for example "Providencia, Guadalajara".
- Colonia sections are separate places on the portal. "Polanco" and "Polanco I Sección" return different sets.

**Fewer rows than I asked for**

- The query may simply hold fewer listings than your row budget. The run log reports the true match count.
- FREE plans stop at 25 rows per run.
- A single query cannot be paged past its own last page. Split a very large search into cities, price bands or property types and pass them in `locations`.

**A filter returned nothing**

- Filters combine, so a narrow price band plus a rare property type plus a small colonia can legitimately match zero listings. Remove one filter at a time.
- Check `priceCurrency`. A band of 200,000 to 500,000 means something very different in MXN and in USD.
- The size filter measures whichever surface you chose in `surfaceType`. Land listings only carry a lot size.

**Agency mode returned nothing**

- Confirm the agency page still exists on inmuebles24. A removed agency page reports that the page is no longer published.
- The market applies in agency mode too. An agency that only rents returns nothing under "For sale".

**Temporarily unavailable**

- The portal occasionally declines a request. Retry in a few minutes. Failed items are listed in the run report, and you are not billed for them.

***

### ⚖️ Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the **GDPR** in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

Inmuebles24 is a trademark of Navent Group. This actor is not affiliated with, endorsed by, or sponsored by Inmuebles24 or Navent.

***

### 🤝 Support

**Join our active support community**

- For issues or questions, open an issue on the [actor's issues page](https://apify.com/sian.agency/inmuebles24-property-scraper/issues)
- Check the [SIÁN Agency Store](https://apify.com/sian.agency?fpr=sian) for more automation tools
- 📧 <apify@sian-agency.online>

***

**Built by [SIÁN Agency](https://www.sian-agency.online)** | **[More Tools](https://apify.com/sian.agency?fpr=sian)**

# Actor input Schema

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

Pick one per run. Property Search takes Mexican place names (states, cities, colonias) and returns listing rows; Agency Listings takes inmuebles24 agency page URLs and returns everything that agency currently has on the market.

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

A Mexican place name — state, city, colonia or a section of one. Ciudad de México, Monterrey, Guadalajara, Cancún, Mérida, Polanco, Zona Hotelera. The name is matched against inmuebles24's own location index and the run log prints exactly which place was matched, so you can see it picked the right one.

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

Extra places to search in the same run. Each one runs its own search, so three places return roughly three times the rows. This is also how you get past the per-query page ceiling on a huge search: split a whole state into its cities.

## `agencyUrls` (type: `array`):

Used by the Agency Listings operation: inmuebles24 agency pages, e.g. https://www.inmuebles24.com/inmobiliarias/intercapital-realty\_102536653-inmuebles.html. The numeric id at the end of the URL is the agency, so a bare id works too. Every listing that agency currently has in the chosen market comes back.

## `transactionType` (type: `string`):

Which market to search. Sale carries 274,938 live listings and rent 114,236; vacation rental is a separate, much smaller market of about 1,100 that most listing exports never touch. One market per run — the portal does not combine them.

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

Narrow to one kind of property. 'Everything' returns all of them — apartments alone account for 73,579 of the 274,938 properties on sale, houses for 105,828.

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

Lowest asking price to include, in the currency chosen below. For rentals this is the monthly rent. 0 means no lower bound.

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

Highest asking price to include, in the currency chosen below. For rentals this is the monthly rent. 0 means no upper bound.

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

Which currency the min and max price above are expressed in. Mexican listings are quoted in both, and the filter follows whichever you pick. Rows always report the currency the advertiser actually used.

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

Fewest bedrooms (recámaras) to accept. 0 means no minimum.

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

Fewest full bathrooms to accept. Half bathrooms are reported on the row but do not count towards this filter. 0 means no minimum.

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

Fewest parking spaces (estacionamientos) to accept. 0 means no minimum.

## `minSurface` (type: `integer`):

Smallest area in square metres, measured against whichever surface you pick below. 0 means no minimum.

## `maxSurface` (type: `integer`):

Largest area in square metres, measured against whichever surface you pick below. 0 means no maximum.

## `surfaceType` (type: `string`):

Mexican listings quote two areas and the size filter has to pick one. Lot size is the portal's own default and the only one land listings carry; built area is the more useful measure for apartments. Both are reported on every row regardless.

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

Owner-direct listings are a small slice — 6,109 of the 274,938 on sale — and the one buyers hunt for, because there is no agency commission attached. Agency listings are the rest.

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

Brand-new stock is 140,133 of the properties on sale, which is what makes this the fastest way to isolate new developments from resale.

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

Restrict to recently posted listings. Pair 'Last week' with a schedule and each run returns only what appeared since the last one — about 15,000 nationwide in a typical week.

## `requiredMedia` (type: `string`):

Keep only listings that carry a particular kind of media. Useful when you are building a feed that has to render something richer than photos — 27,447 of the properties on sale have a video.

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

Newest first is what you want when running this on a schedule — the new stock lands on page 1. 'Recently reduced' surfaces listings whose asking price just dropped, which no other ordering shows you.

## `maxResults` (type: `integer`):

Stop after this many listings across every place searched. Each request returns 30 rows, so the run stops at the first request that crosses your limit. A single query cannot be paged past its own last page — the actor stops there and reports the true match count.

## Actor input object example

```json
{
  "operation": "search",
  "location": "Ciudad de México",
  "locations": [
    "Monterrey",
    "Guadalajara"
  ],
  "agencyUrls": [],
  "transactionType": "sale",
  "propertyType": "all",
  "minPrice": 0,
  "maxPrice": 0,
  "priceCurrency": "MXN",
  "minBedrooms": 0,
  "minBathrooms": 0,
  "minParking": 0,
  "minSurface": 0,
  "maxSurface": 0,
  "surfaceType": "land",
  "publisherType": "all",
  "propertyAge": "any",
  "publishedWithin": "any",
  "requiredMedia": "any",
  "sortBy": "relevance",
  "maxResults": 90
}
```

# Actor output Schema

## `inmuebles24Listings` (type: `string`):

Every listing this run returned.

## `scrapingSummary` (type: `string`):

HTML summary showing successful and failed results with key metrics

# 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 = {
    "operation": "search",
    "location": "Ciudad de México",
    "locations": [
        "Monterrey",
        "Guadalajara"
    ],
    "agencyUrls": [],
    "transactionType": "sale",
    "propertyType": "all",
    "minPrice": 0,
    "maxPrice": 0,
    "priceCurrency": "MXN",
    "minBedrooms": 0,
    "minBathrooms": 0,
    "minParking": 0,
    "minSurface": 0,
    "maxSurface": 0,
    "surfaceType": "land",
    "publisherType": "all",
    "propertyAge": "any",
    "publishedWithin": "any",
    "requiredMedia": "any",
    "sortBy": "relevance",
    "maxResults": 90
};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/inmuebles24-property-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 = {
    "operation": "search",
    "location": "Ciudad de México",
    "locations": [
        "Monterrey",
        "Guadalajara",
    ],
    "agencyUrls": [],
    "transactionType": "sale",
    "propertyType": "all",
    "minPrice": 0,
    "maxPrice": 0,
    "priceCurrency": "MXN",
    "minBedrooms": 0,
    "minBathrooms": 0,
    "minParking": 0,
    "minSurface": 0,
    "maxSurface": 0,
    "surfaceType": "land",
    "publisherType": "all",
    "propertyAge": "any",
    "publishedWithin": "any",
    "requiredMedia": "any",
    "sortBy": "relevance",
    "maxResults": 90,
}

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/inmuebles24-property-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 '{
  "operation": "search",
  "location": "Ciudad de México",
  "locations": [
    "Monterrey",
    "Guadalajara"
  ],
  "agencyUrls": [],
  "transactionType": "sale",
  "propertyType": "all",
  "minPrice": 0,
  "maxPrice": 0,
  "priceCurrency": "MXN",
  "minBedrooms": 0,
  "minBathrooms": 0,
  "minParking": 0,
  "minSurface": 0,
  "maxSurface": 0,
  "surfaceType": "land",
  "publisherType": "all",
  "propertyAge": "any",
  "publishedWithin": "any",
  "requiredMedia": "any",
  "sortBy": "relevance",
  "maxResults": 90
}' |
apify call sian.agency/inmuebles24-property-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,sian.agency/inmuebles24-property-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/xCgCdptZTGaXDS4ow/builds/zzuYU8gBfhe9PKllF/openapi.json
