# Inmuebles24 scraper - Mexico Real Estate listings (`igolaizola/inmuebles24-scraper`) Actor

Extract Mexico real-estate listings from inmuebles24.com in JSON, CSV, or Excel-ready datasets. Filter homes, apartments, land, rentals, sales, prices, rooms, areas, locations, media, publication dates, and advertisers for market research, lead generation, and investment analysis.

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

## Inmuebles24 scraper - Mexico Real Estate listings

Find and export property listings from [Inmuebles24.com](https://www.inmuebles24.com) for market research, real-estate lead generation, investment analysis, and listing monitoring. Search by location, property type, price, area, rooms, amenities, media, advertiser, and publication date, then save clean listing records to an Apify dataset.

### 🏠 What you can do

- Discover homes, apartments, offices, land, warehouses, developments, and other property types.
- Compare sale, rental, temporary-rental, auction, transfer, and foreclosure opportunities.
- Build a local market dataset with prices, property characteristics, images, addresses, and listing links.
- Monitor recently published listings and identify new opportunities.
- Optionally collect additional property and contact information for qualified leads.

### 🚀 Start in Apify Console

1. Open the actor in Apify Console and click **Try for free**.
2. Enter a location such as `Ciudad de México` in **Location**.
3. Set **Maximum listings**, choose your filters, and click **Start**.
4. Open the default dataset to browse, download, or connect the results to another Apify task.

The prefilled search for `Ciudad de México` is ready to run and returns current listings when started with the default settings.

### ⚙️ Input reference

All inputs are optional except `maxItems`. Provide either `location` or a latitude/longitude pair. Leave numeric fields at `0` when you do not want to set a limit. A maximum room or bedroom value of `5` means five or more; a maximum parking value of `4` means four or more.

| Input | Type | Description |
| --- | --- | --- |
| `maxItems` | Integer | Maximum number of listings to save. Set it to `0` to continue until no more results remain. |
| `location` | Text | City, neighborhood, municipality, or state, for example `Ciudad de México`. Leave empty when using coordinates. |
| `latitude`, `longitude` | Decimal degrees | Point-search coordinates, for example `19.4326` and `-99.1332`. Use both together; they take precedence over location text. |
| `operation` | Choice | `buy`, `rent`, `temporary-rental`, `transfer`, `development`, `auction`, or `foreclosure`. |
| `propertyTypes` | Multiple choice | House, apartment, office, land, warehouse, development, and other property categories. |
| `keyword` | Text | Words such as `furnished`, `garden`, or `near metro`. |
| `currency` | Choice | `MXN` or `USD` for price filters. |
| `minPrice`, `maxPrice` | Integer | Listing price range. |
| `minExpenses`, `maxExpenses` | Integer | Condominium or maintenance-fee range. |
| `areaUnit` | Choice | `square-metres`, `hectares`, or `celemines`. |
| `minArea`, `maxArea` | Integer | Complete property-area range. Do not combine with covered-area filters. |
| `minCoveredArea`, `maxCoveredArea` | Integer | Indoor or built-area range. Do not combine with total-area filters. |
| `minRooms`, `maxRooms` | Integer | Room range. |
| `minBedrooms`, `maxBedrooms` | Integer | Bedroom range. |
| `minBathrooms`, `maxBathrooms` | Integer | Bathroom range. |
| `minGarages`, `maxGarages` | Integer | Parking-space range. |
| `noGarages` | Boolean | Return only properties without parking. |
| `ageRanges` | Multiple choice | Under construction, brand new, up to 5 years, 5–10 years, 10–20 years, 20–50 years, or over 50 years. |
| `publicationDate` | Choice | Today, since yesterday, last week, last 15 days, last 30 days, or last 45 days. |
| `multimedia` | Choice | Photos, video, 360° virtual tour, or floor plan. |
| `publisherType` | Choice | `company` or `private-owner`. |
| `projectStage` | Choice | `all-stages`, `pre-sale`, or `for-sale` for development searches. |
| `sort` | Choice | Relevance, most recent, price, price per area, total monthly cost, price reduction, or most viewed. |
| `fetchDetails` | Boolean | Add additional property and contact information under `_details`; increases runtime and usage. |

### 📋 Example searches

#### Family homes for sale

```json
{
  "maxItems": 100,
  "location": "Monterrey",
  "operation": "buy",
  "propertyTypes": ["house"],
  "minPrice": 2000000,
  "maxPrice": 6000000,
  "minBedrooms": 3,
  "minBathrooms": 2,
  "minGarages": 2,
  "minArea": 120,
  "maxArea": 350,
  "currency": "MXN",
  "sort": "lowest-price"
}
```

#### New rental opportunities

```json
{
  "maxItems": 75,
  "location": "Guadalajara",
  "operation": "rent",
  "propertyTypes": ["apartment"],
  "minPrice": 12000,
  "maxPrice": 30000,
  "minBedrooms": 2,
  "multimedia": "photos",
  "publisherType": "company",
  "publicationDate": "last-week",
  "sort": "most-recent",
  "fetchDetails": true
}
```

### 📦 Output fields

Every dataset item keeps the complete listing record and adds an easy-to-use `overview` object. The Overview table shows:

- `posting_id`, `title`, `overview.propertyType`, and `overview.operation`
- `overview.image`, `overview.formattedPrice`, `overview.price`, and `overview.currency`
- `overview.totalArea`, `overview.rooms`, `overview.bathrooms`, and `overview.garages`
- `overview.address`, `overview.latitude`, and `overview.longitude`
- `url`, publication date, advertiser ID/logo, WhatsApp availability, and description
- `_details` when `fetchDetails` is enabled

Example result:

```json
{
  "posting_id": "150754458",
  "title": "Departamento en Del Valle Centro",
  "url": "https://www.inmuebles24.com/propiedades/departamento-del-valle.html",
  "overview": {
    "image": "https://img10.naventcdn.com/avisos/example/1200x1200/home.jpg",
    "propertyType": "Departamento",
    "operation": "venta",
    "formattedPrice": "MN 3,562,159",
    "price": 3562159,
    "currency": "MXN",
    "totalArea": "150 m2",
    "rooms": "3 rec.",
    "bathrooms": "3 baños",
    "garages": "3 estac.",
    "address": "Del Valle Centro, Benito Juárez, Ciudad de México",
    "latitude": 19.3797151,
    "longitude": -99.1677132,
    "publisherId": "102595504",
    "hasWhatsApp": true
  },
  "description": "Departamento con espacios amplios y excelente ubicación.",
  "_details": {
    "posting": {
      "posting_id": "150754458",
      "title": "Departamento en Del Valle Centro"
    }
  }
}
```

### 💡 Tips and common recipes

- Start with a city and property type, then add price and bedroom limits.
- Use `publicationDate: "last-week"` with `sort: "most-recent"` to monitor new supply.
- Use `minCoveredArea` and `maxCoveredArea` when built space matters more than lot size.
- Keep `fetchDetails` off for broad market exports and enable it for a smaller lead list.
- Use `publisherType: "company"` when you want professional advertisers, or `private-owner` for owner listings.

### ⚖️ Legal and ethical considerations

Use the data responsibly and comply with Inmuebles24 terms, applicable privacy laws, and local regulations. Respect intellectual property, avoid unsolicited outreach, and do not use personal or contact information for unlawful profiling, discrimination, or spam. You are responsible for the way exported data is stored and used.

### ❓ FAQ

#### Which locations can I search?

Use a city, neighborhood, municipality, or state name such as `Ciudad de México`, `Guadalajara`, or `Monterrey`.

#### Can I search both sales and rentals?

Yes. Choose `buy`, `rent`, `temporary-rental`, `transfer`, `development`, `auction`, or `foreclosure`.

#### Why are some detail fields missing?

Additional information depends on what the listing makes available. Enable `fetchDetails` for the most complete result and expect a longer run.

#### How do I get help?

For support, contact [igolaizola.com/#contact](https://igolaizola.com/#contact).

### 🛟 Support

Need a custom field, filter, or export format? [Contact igolaizola.com](https://igolaizola.com/#contact) with an example of the listings and fields you need.

# Actor input Schema

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

Maximum number of listings to save. Set to 0 to continue until no more results remain.

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

City, neighborhood, municipality, or state to search. Example: Ciudad de México. Leave empty when using coordinates.

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

Latitude in decimal degrees for a point search. Use together with longitude; coordinates take precedence over location text. Example: 19.4326.

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

Longitude in decimal degrees for a point search. Use together with latitude; coordinates take precedence over location text. Example: -99.1332.

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

Type of property listing to find.

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

Limit results to one or more property types.

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

Optional words that should appear in the listing, such as furnished or garden.

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

Currency used for the price filters.

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

Lowest listing price. Leave at 0 for no minimum.

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

Highest listing price. Leave at 0 for no maximum.

## `minExpenses` (type: `integer`):

Lowest condominium or maintenance fee. Leave at 0 for no minimum.

## `maxExpenses` (type: `integer`):

Highest condominium or maintenance fee. Leave at 0 for no maximum.

## `areaUnit` (type: `string`):

Unit used for total-area or covered-area filters.

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

Minimum complete property area. Do not combine with covered-area filters.

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

Maximum complete property area. Do not combine with covered-area filters.

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

Minimum indoor or built area. Do not combine with total-area filters.

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

Maximum indoor or built area. Do not combine with total-area filters.

## `minRooms` (type: `integer`):

Minimum number of rooms.

## `maxRooms` (type: `integer`):

Maximum number of rooms. Select 5 for five or more.

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

Minimum number of bedrooms.

## `maxBedrooms` (type: `integer`):

Maximum number of bedrooms. Select 5 for five or more.

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

Minimum number of bathrooms.

## `maxBathrooms` (type: `integer`):

Maximum number of bathrooms. Select 5 for five or more.

## `minGarages` (type: `integer`):

Minimum number of parking spaces.

## `maxGarages` (type: `integer`):

Maximum number of parking spaces. Select 4 for four or more.

## `noGarages` (type: `boolean`):

Return only listings with no parking spaces. Do not combine with parking-space ranges.

## `ageRanges` (type: `array`):

Select one or more construction-age ranges.

## `publicationDate` (type: `string`):

How recently the listing was published.

## `multimedia` (type: `string`):

Require a particular type of listing media.

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

Limit results by advertiser type.

## `projectStage` (type: `string`):

Stage of a new development. Relevant when searching developments.

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

Order in which listings are returned.

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

Collect additional information for every listing. This takes longer and may increase usage.

## Actor input object example

```json
{
  "maxItems": 50,
  "location": "Ciudad de México",
  "operation": "buy",
  "keyword": "",
  "currency": "MXN",
  "minPrice": 0,
  "maxPrice": 0,
  "minExpenses": 0,
  "maxExpenses": 0,
  "areaUnit": "square-metres",
  "minArea": 0,
  "maxArea": 0,
  "minCoveredArea": 0,
  "maxCoveredArea": 0,
  "minRooms": 0,
  "maxRooms": 0,
  "minBedrooms": 0,
  "maxBedrooms": 0,
  "minBathrooms": 0,
  "maxBathrooms": 0,
  "minGarages": 0,
  "maxGarages": 0,
  "noGarages": false,
  "publicationDate": "",
  "multimedia": "",
  "publisherType": "",
  "projectStage": "",
  "sort": "relevance",
  "fetchDetails": false
}
```

# 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": "Ciudad de México"
};

// Run the Actor and wait for it to finish
const run = await client.actor("igolaizola/inmuebles24-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": "Ciudad de México" }

# Run the Actor and wait for it to finish
run = client.actor("igolaizola/inmuebles24-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": "Ciudad de México"
}' |
apify call igolaizola/inmuebles24-scraper --silent --output-dataset

```

## MCP server setup

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