# Inmuebles24 🇲🇽 Listings Scraper & Property Search (`fetchfinch/inmuebles24-scraper`) Actor

\[ 💰 $0.80 / 1K] Search Inmuebles24 by URL or keyword, apply rich property filters, and export structured Mexico real estate listings—all through lightweight HTTP requests.

- **URL**: https://apify.com/fetchfinch/inmuebles24-scraper.md
- **Developed by:** [Fetch Finch](https://apify.com/fetchfinch) (community)
- **Categories:** Real estate, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 property listings

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

### Inmuebles24 Listings Scraper & Property Search

![Search](https://img.shields.io/badge/Search-URLs%20%2B%20keywords-1565C0)
![No API key required](https://img.shields.io/badge/No%20API%20key-required-43A047)
![Runtime](https://img.shields.io/badge/Runtime-HTTP--only-3178C6)
![Filters](https://img.shields.io/badge/Filters-Property%20%7C%20Price%20%7C%20Location-7B1FA2)
![Exports](https://img.shields.io/badge/Exports-JSON%20%7C%20CSV%20%7C%20Excel-F39C12)
![Raw data](https://img.shields.io/badge/Raw%20source-Optional-00897B)

Find and export property listings from Inmuebles24 for sales, rentals, and market research. Start with a copied search URL, describe what you are looking for with one or more keywords, or combine both approaches in the same run.

Unlike URL-only workflows, this Actor also accepts regular keyword searches and multiple search terms. Use its location, property, price, room, area, seller, media, age, freshness, and sorting controls to shape a focused dataset. Results are written as structured records to an Apify dataset, ready for JSON, CSV, or Excel export.

### Why use this Actor

| Benefit | What it means for your workflow |
| --- | --- |
| Two ways to search | Use copied Inmuebles24 result URLs or keyword searches; combine them when useful. |
| Flexible targeting | Narrow results by location, operation, property type, price, currency, rooms, areas, and other listing attributes. |
| Useful listing records | Collect price, location, coordinates when available, property features, images, publisher details, and source URLs in consistent fields. |
| Browser-free runtime | Requests to Inmuebles24 use HTTP. The Actor does not launch a browser. |
| Optional source object | Keep the original listing object alongside normalized fields when you need additional source attributes. |
| Apify-ready output | Review results in a dataset, export them to spreadsheets, or connect the run to an API or automation. |

### Quick start

Paste this input into the Actor’s **Input** tab to find two-bedroom apartments for sale in Mexico City and sort matches by price:

```json
{
  "searchQuery": "departamento",
  "operationType": "sale",
  "propertyType": "apartment",
  "locations": ["Ciudad de México"],
  "currency": "MXN",
  "minPrice": 1000000,
  "maxPrice": 8000000,
  "minBedrooms": 2,
  "sortBy": "lowest_price",
  "maxItems": 50,
  "maxPagesPerSearch": 5,
  "includeRawData": false
}
```

Choose **Start** and review the listing records in the run’s default dataset. Start with a small `maxItems` value to validate a search, then increase the limit and page count to broaden coverage.

### Search options

| Input | Use it for |
| --- | --- |
| `startUrls` | One or more Inmuebles24 search-result URLs. Existing site filters in each URL are retained. |
| `searchQuery` | One plain-text term or phrase, such as `departamento`. |
| `searchQueries` | Several terms to run as separate searches, such as `casa` and `departamento`. |
| `operationType` | Choose `sale`, `rent`, or `temporary` for generated keyword searches. |
| `propertyType` | Choose `all`, `apartment`, `house`, `land`, or `office` for generated keyword searches. |
| `locations` | Run generated searches for one or more Mexican cities, neighborhoods, or states. |

Keyword matching is performed against titles, descriptions, property types, locations, publisher names, and published features on the pages fetched for that search. It is best-effort and limited to the pages selected by `maxPagesPerSearch`; raise that limit when you need broader keyword coverage. For exact site-native keyword behavior, provide a copied Inmuebles24 results URL in `startUrls`.

### Filters

Filters apply to copied URLs as additional conditions and to generated searches. Some location, operation, property, currency/price, and minimum-bedroom criteria can also be represented in generated Inmuebles24 search URLs. Other checks are applied to the listing data collected from those pages.

| Input | Description |
| --- | --- |
| `propertyTypes` | Include property categories such as `apartment`, `house`, `land_lot`, `office`, `commercial_space`, `commercial_warehouse`, `condo_house`, `shared_apartment`, `horizontal_development`, `mixed_development`, `vertical_development`, `duplex`, `building`, `country_house`, `ranch`, `commercial_land`, `industrial_land`, or `villa`. |
| `minPrice`, `maxPrice` | Keep listings inside a price range. |
| `currency` | Match `any`, `MXN`, or `USD`. |
| `minBedrooms`, `maxBedrooms` | Set a bedroom range. |
| `minBathrooms`, `minParking` | Require a minimum number of bathrooms or parking spaces. |
| `minCoveredArea`, `maxCoveredArea` | Set a covered/built area range in square meters. |
| `minLandArea`, `maxLandArea` | Set a land area range in square meters. |
| `sellerType` | Choose `all`, `agency`, or `direct`; source classification is used when provided. |
| `multimedia` | Require `video`, `360_tour`, and/or `floor_plan`. A listing must contain every selected media type. |
| `buildingAge` | Choose `all`, `under_construction`, `brand_new`, `up_to_5_years`, `up_to_10_years`, `up_to_20_years`, `up_to_50_years`, or `over_50_years`. |
| `publicationDate` | Choose `all`, `today`, `last_week`, `last_15_days`, `last_30_days`, or `last_45_days`. |
| `featureKeywords` | Keep listings containing every supplied word or phrase in listing text or published features, such as `alberca` or `terraza`. |
| `sortBy` | Sort matches by `relevance`, `lowest_price`, `highest_price`, `newest`, or `oldest`. Price and date sorts apply to the records collected during the run. |

Inmuebles24 listings can omit optional attributes. When a filter depends on a field the source does not provide, that listing may not match the filter.

### Example: search a copied URL

```json
{
  "startUrls": [
    "https://www.inmuebles24.com/departamentos-en-venta-en-ciudad-de-mexico.html"
  ],
  "minPrice": 2500000,
  "maxPrice": 7000000,
  "minBedrooms": 2,
  "sortBy": "lowest_price",
  "maxItems": 100,
  "maxPagesPerSearch": 10,
  "includeRawData": false
}
```

Use a URL copied from Inmuebles24 when you want its own search page to define the primary location and listing criteria. The Actor keeps the URL’s search scope and applies any extra filters provided in the input.

### Example: search multiple keywords

```json
{
  "searchQueries": ["casa", "departamento"],
  "operationType": "sale",
  "propertyType": "all",
  "maxItems": 40,
  "maxPagesPerSearch": 1,
  "includeRawData": true
}
```

Each term becomes a separate search. Increase `maxItems` enough to allow later terms to contribute records. Results are deduplicated by listing ID across all searches.

### Output fields

Each dataset item represents one listing and includes normalized fields such as:

| Field group | Example fields |
| --- | --- |
| Listing | `postingId`, `postingCode`, `title`, `description`, `url`, `searchUrl`, `searchQuery` |
| Price | `price`, `currency`, `priceFormatted`, `operation`, `expenses` |
| Property | `propertyType`, `bedrooms`, `bathrooms`, `parking`, `coveredArea`, `totalArea`, `antiquity`, `features` |
| Location | `address`, `neighborhood`, `city`, `province`, `latitude`, `longitude` |
| Media | `images`, `mainImage`, `hasVideos`, `hasTour`, `hasPlans` |
| Publisher | `publisherId`, `publisherName`, `publisherUrl`, `publisherLogo`, `whatsApp` |
| Run metadata | `modifiedDate`, `scrapedAt` |
| Source | `source`, the original listing object when `includeRawData` is enabled |

Fields depend on the information Inmuebles24 provides for each listing. Phone and email contact reveal are not part of this Actor’s current collection flow.

### Cloudflare and HTTP access

Inmuebles24 may challenge direct HTTP requests. The Actor handles access automatically, including its HTTP fallback when needed. No API key, proxy setup, or browser installation is required from you. The Actor uses HTTP requests and does not launch Chromium.

### Run, export, and automate

Run the Actor from the Apify Console, call it through the Apify API, or save a reusable Task with your preferred input. Apify datasets can be exported as JSON, CSV, Excel, and other supported formats. Use Apify schedules and integrations to repeat searches or send results to downstream systems.

### FAQ

#### Does a keyword search scan every Inmuebles24 listing?

No. Keywords are matched against the listings present on the pages fetched for the generated search. Increase `maxPagesPerSearch` for broader coverage, or use an Inmuebles24 search URL for the site’s own search behavior.

#### Why did the Actor return fewer results than `maxItems`?

The selected pages may contain fewer matching listings, or the filters may be narrow. Broaden the filters or increase `maxPagesPerSearch`.

#### Can I collect the original source fields?

Yes. Set `includeRawData` to `true` to include the source listing object in each output item. Set it to `false` for a smaller, normalized dataset.

#### Does the Actor need a browser?

No. It sends HTTP requests and parses the listing data returned by Inmuebles24 or its configured HTTP fallback.

#### Does the Actor reveal phone numbers or email addresses?

No. It returns publisher and WhatsApp fields when those are available in the listing data, but it does not submit contact forms to reveal phone or email details.

### Responsible use

This independent Actor is not affiliated with or endorsed by Inmuebles24 or Navent. It is intended to collect publicly available property listing information. You are responsible for complying with Inmuebles24’s terms and applicable privacy and data-protection rules when using the results.

# Actor input Schema

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

Inmuebles24 search result URLs copied from the site.

## `searchQuery` (type: `string`):

One plain-text keyword or phrase. Matches listing titles, descriptions, property types, locations, and published features across fetched result pages. Increase maximum pages for broader matches.

## `searchQueries` (type: `array`):

Several plain-text keywords or phrases. Each query becomes a separate search.

## `operationType` (type: `string`):

Operation filter for plain-text queries. Copied search URLs keep their own operation filter.

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

Property filter for plain-text queries. Copied search URLs keep their own property type.

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

Optional Mexican cities, neighborhoods, or states. Each location becomes a separate search; copied URLs can already contain their own location filter.

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

Optional additional category filter. Use copied search URLs when you need exact site-specific subtypes. Accepted values: apartment, house, land\_lot, office, commercial\_space, commercial\_warehouse, condo\_house, shared\_apartment, horizontal\_development, mixed\_development, vertical\_development, duplex, building, country\_house, ranch, commercial\_land, industrial\_land, villa.

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

Minimum listing price in the selected currency.

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

Maximum listing price in the selected currency.

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

Currency used when matching the price range.

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

Minimum number of bedrooms.

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

Maximum number of bedrooms.

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

Minimum number of bathrooms.

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

Minimum number of parking spaces.

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

Minimum covered or built area in square meters.

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

Maximum covered or built area in square meters.

## `minLandArea` (type: `integer`):

Minimum land area in square meters.

## `maxLandArea` (type: `integer`):

Maximum land area in square meters.

## `sellerType` (type: `string`):

Filter by agency or direct advertiser where the source provides seller classification.

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

Keep listings that have each selected media type. Accepted values: video, 360\_tour, floor\_plan.

## `buildingAge` (type: `string`):

Filter by the advertised property age when available.

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

Keep listings published within the selected period.

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

Sort matching listings by price or publication date.

## `featureKeywords` (type: `array`):

Optional feature words to match against each listing's title, description, and published features.

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

Maximum unique listings across all search URLs. Use 0 for no limit.

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

Safety limit on result pages fetched from each search URL.

## `includeRawData` (type: `boolean`):

Include the complete source listing object in a source field.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.inmuebles24.com/departamentos-en-venta.html"
  ],
  "operationType": "sale",
  "propertyType": "all",
  "currency": "any",
  "sellerType": "all",
  "buildingAge": "all",
  "publicationDate": "all",
  "sortBy": "relevance",
  "maxItems": 100,
  "maxPagesPerSearch": 10,
  "includeRawData": true
}
```

# Actor output Schema

## `items` (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 = {
    "startUrls": [
        "https://www.inmuebles24.com/departamentos-en-venta.html"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("fetchfinch/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 = { "startUrls": ["https://www.inmuebles24.com/departamentos-en-venta.html"] }

# Run the Actor and wait for it to finish
run = client.actor("fetchfinch/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 '{
  "startUrls": [
    "https://www.inmuebles24.com/departamentos-en-venta.html"
  ]
}' |
apify call fetchfinch/inmuebles24-scraper --silent --output-dataset

```

## MCP server setup

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