# Propiedades.com Scraper - Mexico Property Listings & Prices (`sian.agency/propiedades-property-scraper`) Actor

Mexican property adverts from propiedades.com by place: price in MXN or USD, area, rooms, coordinates, the colonia trail. Sale, rent and bank auctions.

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

## Pricing

from $0.79 / 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?

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

## Propiedades.com Scraper - Mexico Property Listings & Prices 🚀

[![Store - SIÁN Agency](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![Store - Inmuebles24](https://img.shields.io/badge/Store-Inmuebles24%20Scraper-C1502E)](https://apify.com/sian.agency/inmuebles24-property-scraper?fpr=sian) [![Store - Fincaraiz](https://img.shields.io/badge/Store-Fincaraiz%20Scraper-1AE392)](https://apify.com/sian.agency/fincaraiz-property-scraper?fpr=sian) [![Store - Zonaprop](https://img.shields.io/badge/Store-Zonaprop%20Scraper-1AE392)](https://apify.com/sian.agency/zonaprop-property-scraper?fpr=sian)

#### 🇲🇽 Every Mexican property advert on propiedades.com: 1,188 places, 47 adverts per request, and the bank-auction board

##### Pick a place from a list. Get asking prices, areas, rooms, coordinates and the colonia trail. No search URL to build.

### 🔎 What is the Propiedades.com Property Scraper — and when should you use it?

The **Propiedades.com Property Scraper** turns Mexican property adverts from propiedades.com, picked by place rather than by URL 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 adverts for sale, for rent or on the bank-auction board. Each row carries the asking price and the currency it is quoted in (MXN or USD), price per square metre, area, bedrooms, bathrooms and parking. Coordinates come with a flag saying whether the pin is exact. The colonia, municipality, state and postal code are on every row, alongside twenty-four feature flags and how long the advert has been listed. Input is a place from the portal's own index of 1,188 verified names, so no search URL has to be built first. A detail mode opens one advert for the advertiser behind it, every photo at full resolution, built and land area separately, the floor, the age of the building, and the portal's own average price for that colonia.

**Use something else when:** you need the agency side of the Mexican market, or a different Latin American country. Use [Inmuebles24 Property Scraper](https://apify.com/sian.agency/inmuebles24-property-scraper?fpr=sian) for the other Mexican portal, searchable by agency as well as by place, with advertiser phone numbers. Use [Fincaraiz Property Scraper](https://apify.com/sian.agency/fincaraiz-property-scraper?fpr=sian) for Colombian sale and rent adverts with COP prices, area and agency data. Use [Zonaprop Property Scraper](https://apify.com/sian.agency/zonaprop-property-scraper?fpr=sian) for Argentine sale and rent adverts with USD and ARS prices, expenses and publisher contacts. This actor covers propiedades.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/propiedades-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 adverts from Propiedades.com using the Apify Actor `sian.agency/propiedades-property-scraper`.

Use it when I need: Mexican adverts for sale, for rent or on the bank-auction board. Each row carries the asking price and the currency it is quoted in (MXN or USD), price per square metre, area, bedrooms, bathrooms and parking. Coordinates come with a flag saying whether the pin is exact. The colonia, municipality, state and postal code are on every row, alongside twenty-four feature flags and how long the advert has been listed. Input is a place from the portal's own index of 1,188 verified names, so no search URL has to be built first. A detail mode opens one advert for the advertiser behind it, every photo at full resolution, built and land area separately, the floor, the age of the building, and the portal's own average price for that colonia.

Don't use it when: you need the agency side of the Mexican market, or a different Latin American country — use inmuebles24-property-scraper or fincaraiz-property-scraper or zonaprop-property-scraper instead.

How to call it: pick an `operation`: `search` (a place from the portal's own list, or a pasted result URL in `searchUrls`) or `detail` (advert page URLs in `listingUrls`); set `location` to any of the 1,188 places (`df`, `monterrey`, `zapopan`, `polanco`, `cancun`, `merida`); choose `market` (`venta`, `renta`, `remates` for bank auctions, or `any`); narrow with `propertyType` (`casas`, `departamentos`, `terrenos-habitacionales`, `oficinas`, `locales` and twelve more), a portal `feature` segment (`recamaras-3`, `jardin`, `alberca`, `mascotas`, `amueblado`), `minPrice`/`maxPrice` with `currency`, `minAreaM2` or `onlyWithCoordinates`; cap the run with `maxResults`.

Start with this input:
{
  "operation": "search",
  "location": "df",
  "market": "venta",
  "propertyType": "casas",
  "minPrice": 2000000,
  "maxPrice": 8000000,
  "maxResults": 120
}

Ask me which Mexican place, and whether they want adverts for sale, to rent, or on the bank-auction board, then run the Actor and summarise the results as a table.
```

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

- *Pull houses for sale in Coyoacán between 2 and 8 million pesos and rank them by price per square metre.*
- *Find every bank-auction advert in Mexico City under 2 million pesos and map them.*
- *Compare asking price per square metre across Polanco, Del Valle and Santa Fe.*

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

### 📋 Overview

**Mexico's property market is public, and almost none of it is structured.** Propiedades.com carries adverts across all 32 states. This Actor turns one page of them into forty-seven typed rows, with prices, areas, rooms, coordinates and features already parsed — for anyone pricing a neighbourhood, building a comparables set or feeding a model.

**What you get:**

- ✅ **A place list, not a text box**: all 1,188 entries were fetched against the live portal, and each shows how many adverts it held. A place you can pick is a page that exists.
- ⚡ **Forty-seven adverts per request**: the portal ships the whole result page as structured data, so a whole-delegación sweep is one request per forty-seven rows.
- 🎯 **Filters that were measured, not assumed**: every property type, market and feature in the dropdowns moves the result count against an unfiltered baseline. The ones that do not are absent.
- 💰 **Two prices, not one**: a thin search advert costs $0.0009 and a full advert page $0.0035, so you are not billed detail rates for a price list.
- 💎 **The bank-auction board**: `remates` is repossessed stock sold below market. Mexico City alone had 20,764 auction adverts when this launched.
- ✨ **MXN and USD, per advert**: Mexican boards quote in both currencies side by side. The currency is read from each advert, never assumed.

### ✨ Features

- 📍 **1,188 verified places**: 32 states, 352 municipalities, named zones like Polanco and Riviera Maya, and the colonias underneath them.
- 🏠 **Seventeen property types**: apartments, houses, gated-community houses, ranches, rooms, offices, retail units, whole buildings, warehouses and land, residential through industrial.
- 🏦 **Three markets**: for sale, for rent, and the bank-auction board.
- 🧭 **Real coordinates**: latitude, longitude and a flag saying whether the pin is exact or a fallback, so mapping work can drop the guesses.
- 📐 **Built area and land area separately**: the advert page splits them. A search row gives you one figure, plus the price per square metre computed from it.
- 🧑‍💼 **The advertiser**: the agency or agent name and photo behind an advert, available on the detail operation.
- 🖼️ **Every photo at full resolution**: the whole gallery, at the size the advertiser uploaded.
- 📈 **The portal's own colonia benchmark**: average price, average size and average price per square metre for the neighbourhood an advert sits in.
- ✂️ **No paging ceiling**: a 293-page result drains to its last page. The run report always prints the real total, so you can see what a row budget left behind.
- 🔎 **Price and area limits applied before billing**: an advert your filters rule out is read but never charged.

### 🎬 Quick Start

Pick a place, pick a market, press Start. The Actor builds the URL, walks the result pages and stops at your row budget. Nothing to paste, nothing to configure.

```bash
curl -X POST "https://api.apify.com/v2/acts/sian.agency~propiedades-property-scraper/runs?token=YOUR_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"operation":"search","location":"df","market":"venta","propertyType":"casas","maxResults":100}'
```

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Choose where

Open **Where in Mexico** and pick a place. The number beside each name is how many adverts the portal held there, so you can see what a run is worth before you start it.

#### Step 2: Choose what

Set the market (for sale, for rent or bank auction) and a property type. Add a feature such as a garden or three-plus bedrooms if you want the portal to narrow it before paging.

#### Step 3: Set a budget and run

Put a number in **How many adverts** and press Start. Adverts land in the dataset as they arrive; export as JSON, CSV or Excel when the run finishes.

**That's it! In under a minute, you'll have:**

- Typed asking prices with the currency each advert is quoted in
- Coordinates, postal codes and the colonia / municipality / state trail
- Areas, rooms, parking and twenty-four feature flags per advert

### 📥 Input Configuration

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `operation` | string | Yes | `search` (adverts by place) or `detail` (one advert page in full) |
| `location` | string | No | A place from the portal's own list, e.g. `df`, `coyoacan`, `zapopan`, `polanco` |
| `market` | string | No | `venta`, `renta`, `remates` (bank auction) or `any` |
| `propertyType` | string | No | `casas`, `departamentos`, `terrenos-habitacionales`, `oficinas`, `locales`, `all` and twelve more |
| `feature` | string | No | `recamaras-1` to `recamaras-4`, `jardin`, `alberca`, `mascotas`, `amueblado`, or `any` |
| `maxResults` | integer | No | How many adverts to return before stopping |
| `minPrice` / `maxPrice` | integer | No | Price band in the advert's own currency; applied before billing |
| `currency` | string | No | `MXN`, `USD` or `any` |
| `minAreaM2` | integer | No | Skip adverts smaller than this |
| `onlyWithCoordinates` | boolean | No | Keep only adverts whose map pin is exact |
| `listingUrls` | array | No | Property Detail: advert pages to open |
| `searchUrls` | array | No | Property Search: result pages to read instead of the dropdowns |

**Example: houses for sale in Mexico City**

```json
{
  "operation": "search",
  "location": "df",
  "market": "venta",
  "propertyType": "casas",
  "maxResults": 500
}
```

**Example: bank auctions under 2 million pesos**

```json
{
  "operation": "search",
  "location": "df",
  "market": "remates",
  "propertyType": "all",
  "maxPrice": 2000000,
  "currency": "MXN",
  "maxResults": 300
}
```

**Example: open specific adverts in full**

```json
{
  "operation": "detail",
  "listingUrls": [
    { "url": "https://propiedades.com/inmuebles/casa-en-venta-camelia-san-angel-inn-df-31304112" }
  ]
}
```

### 📤 Output

Results are saved to the Apify dataset with **79 fields**. The Output tab splits them into a **Property Search** view and a **Property Detail** view, so you never read a column of empty cells.

| Field | Type | Description |
|-------|------|-------------|
| `listingId` | string | The portal's own advert id |
| `listingUrl` | string | The advert page |
| `price` | integer | Asking price in the advert's own currency |
| `currency` | string | `MXN` or `USD` |
| `pricePerM2` | integer | Computed only where both price and area are real |
| `areaM2` | integer | Area from the result card |
| `builtAreaM2` / `landAreaM2` | integer | Split, on the detail operation |
| `bedrooms` / `bathrooms` / `parkingSpaces` | integer | Room counts |
| `colony` / `municipality` / `state` / `postalCode` | string | The location trail |
| `latitude` / `longitude` | number | Coordinates |
| `hasExactCoordinates` | boolean | Whether the pin is real or a fallback |
| `amenities` | array | Named features the advertiser ticked |
| `advertiserName` | string | The agency or agent (detail operation) |
| `imageUrls` | array | Every photo at full resolution (detail operation) |
| `colonyAveragePrice` | integer | The portal's own neighbourhood benchmark |
| `isAuction` | boolean | Whether the advert is on the bank-auction board |
| `timeOnPortal` | string | How long the portal says it has been listed |

**Example:**

```json
{
  "listingId": "31304112",
  "listingUrl": "https://propiedades.com/inmuebles/casa-en-venta-camelia-san-angel-inn-df-31304112",
  "propertyTitle": "Casa en venta — Camelia",
  "market": "For sale",
  "propertyType": "Casa",
  "price": 32000000,
  "currency": "MXN",
  "pricePerM2": 67511,
  "areaM2": 474,
  "bedrooms": 3,
  "bathrooms": 3,
  "colony": "San Angel Inn",
  "municipality": "Álvaro Obregón",
  "state": "DF / CDMX",
  "postalCode": "01060",
  "latitude": 19.3498899,
  "longitude": -99.19752,
  "hasExactCoordinates": true,
  "amenities": ["Pets allowed", "Private security", "Service room", "Terrace"],
  "photoCount": 24,
  "publishedAt": "2026-05-18T17:43:57",
  "isAuction": false
}
```

### 💼 Use Cases & Examples

#### 1. Price a Mexican market before you buy in it

**An investor working out what a delegación is actually asking, not what an agent says it is asking.**

**Input:** a place, a market and a property type
**Output:** every advert with price, price per square metre, area and coordinates
**Use:** build a comparables set for a whole neighbourhood in one run, then check any single advert against the portal's own colonia average.

#### 2. Work the bank-auction board

**A distressed-asset buyer hunting repossessed stock below market.**

**Input:** `market: remates` plus a price ceiling
**Output:** only auction adverts inside your budget, flagged with `isAuction`
**Use:** the ordinary agency boards do not carry this inventory at all, so it is stock most buyers never see.

#### 3. Build a rental yield model

**An analyst pairing sale and rent stock by neighbourhood.**

**Input:** the same place run twice, once `venta` and once `renta`
**Output:** area, bedrooms and postal code on every row
**Use:** join on colonia, match comparable stock and compute a gross yield per neighbourhood.

#### 4. Find the agencies working a neighbourhood

**An agency doing competitive research before opening in a zone.**

**Input:** a colonia search, then Property Detail on the results
**Output:** the advertiser name and photo behind each advert
**Use:** see who actually holds the stock in a zone before you pitch.

#### 5. Watch a market week by week

**A data team tracking price movement in a city.**

**Input:** the same search on a schedule
**Output:** publication date, last-modified date and time-on-portal on every advert
**Use:** diff the runs. A price cut and a fresh listing look different in the data.

#### 6. Feed a property portal or CRM

**A product team keeping a Mexican inventory fresh.**

**Input:** a nationwide sweep by state
**Output:** typed rows with coordinates, postal codes and feature flags
**Use:** one request per forty-seven adverts makes a scheduled refresh cheap enough to run nightly.

### 🔗 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/propiedades-property-scraper').call({
  operation: 'search',
  location: 'coyoacan',
  market: 'venta',
  propertyType: 'casas',
  maxResults: 200,
});

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

#### Python

```python
from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')

run = client.actor('sian.agency/propiedades-property-scraper').call(run_input={
    'operation': 'search',
    'location': 'monterrey',
    'market': 'venta',
    'propertyType': 'casas',
    'maxResults': 200,
})

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

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~propiedades-property-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"operation":"search","location":"zapopan","market":"venta","propertyType":"casas","maxResults":200}'
```

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

1. **Trigger**: a nightly schedule, or a webhook from your own system
2. **HTTP Request**: call the Actor's run endpoint with the place you track
3. **Process**: diff today's prices against yesterday's dataset
4. **Action**: write the movers to a sheet, a database or a Slack alert

### 📊 Performance & Pricing

#### FREE Tier (Try It Now)

- **25 adverts** per run, with every field and every operation at the same quality
- No credit card required
- Enough to check a colonia before you commit to a sweep

#### PAID Tier (Production Ready)

- **Unlimited** adverts per run
- Pay per advert returned: a failed input and an advert your filters ruled out both cost nothing

💰 **Two prices instead of one.** A search advert is **$0.0009** and a full advert page is **$0.0035**. The only other Actor reading this portal charges a flat $0.002 for every row it writes, whether that row is a price or a full record — so a price list here costs less than half as much.

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

### ❓ Frequently Asked Questions

**Q: Do I need a propiedades.com account or an API key?**
A: No. The Actor reads pages that are public to any visitor, and there is nothing to sign up for on the portal's side.

**Q: Do I have to build a search URL first?**
A: No, and that is the point. Pick a place from the list, pick a market, pick a type. Paste a search URL only if you want something the dropdowns cannot express.

**Q: How many adverts can one run return?**
A: As many as the portal holds. There is no paging ceiling, and a 293-page result drains to its last page. The run report prints the real total so you can see what a row budget left behind.

**Q: What is the difference between Property Search and Property Detail?**
A: A search advert already carries price, currency, area, rooms, coordinates, postal code and the feature flags, which is enough for most analysis. Property Detail opens one advert for the advertiser's name, every photo at full size, built and land area separately, the floor, the age of the building and the colonia price benchmark.

**Q: Are prices in pesos or dollars?**
A: Both, depending on the advert. Mexican portals quote in MXN and USD on the same board, so the currency is read from each advert. Use the currency filter to keep one, or read the `currency` column.

**Q: Does it return the full advert text?**
A: It returns what the portal puts in the page, which is a 200-character excerpt, plus a `descriptionTruncated` flag so you can see that it is an excerpt.

**Q: Can I get the agent's phone number?**
A: No. The portal puts contact behind a form. The advertiser's display name and photo are public and are returned by Property Detail; the phone number is not available from this source.

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

**Q: Is this legal?**
A: Yes. Only publicly available adverts are read. See the legal section below.

### 🐛 Troubleshooting

**A run returned zero adverts**

- The place and filter combination may genuinely be empty. Widen the property type to `all`, or pick the municipality instead of the colonia.
- The run log prints the portal's own total for your search; if it says 0, the portal has nothing listed right now.

**An advert URL failed**

- Advert pages are withdrawn constantly. Re-run a Property Search for the same colonia to pick up what replaced it.
- Paste the full address, for example `https://propiedades.com/inmuebles/casa-en-venta-camelia-san-angel-inn-df-31304112`. A bare advert number works too.

**The place I want is not in the list**

- The list holds every place the portal publishes a result page for. If yours is missing, search the municipality above it, or paste a result URL into **Result pages to read**.

**I set a price limit and got fewer adverts than expected**

- Price limits are applied to each advert as it is read, because the portal has no price filter of its own. The run log prints how many adverts were read and filtered out. None of them were charged.

**Prices look inconsistent across adverts**

- Check the `currency` column. The same board carries MXN and USD adverts side by side, and a USD price next to a MXN one looks like a typo until you see it.

### ⚖️ 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/).

Propiedades.com is a trademark of its owner. This actor is an independent tool, is not affiliated with or endorsed by the portal, and reads only pages that are public to any visitor.

### 🤝 Support

**Join our active support community**

- For issues or questions, open an issue on the actor's [Issues tab](https://apify.com/sian.agency/propiedades-property-scraper/issues)
- Check [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)**

# Changelog

This Actor's version history is a separate document: https://apify.com/sian.agency/propiedades-property-scraper/changelog.md

# Actor input Schema

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

Two ways in. **Property search** takes a Mexican place from the portal's own index — state, municipality, named zone or colonia — plus the market (sale, rent or bank auction), the property type and an optional feature, and walks the result pages until your row budget is met. **Property detail** opens one advert on its own page for the things a result card never carries: the advertiser, every photo, the built and land areas side by side, the floor and the age of the building, and the portal's…

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

Pick a place from propiedades.com's own index — the 32 states, their municipalities, the named zones the portal markets separately (Polanco, Santa Fe, Riviera Maya) and the colonias underneath them. The number beside each name is how many adverts the portal had there when this list was built, so you can see what a run is worth before you start it. Every entry was fetched against the live portal, so a picked place always exists; a typed one might not, which is why this is a list and not a text…

## `market` (type: `string`):

Which board to read. `remates` is the bank-auction board — repossessed property sold below market, which propiedades.com carries and the Mexican agency portals do not. Mexico City alone had 20,764 auction adverts against 65,299 ordinary sale adverts when this actor was built.

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

The portal's own seventeen types, plus everything. Each one was checked against an unfiltered baseline for the same place and market, and each one moves the result count — this portal answers an unrecognised filter with HTTP 200 and the whole corpus, so a value that did not move the count would silently bill a customer for the wrong search.

## `feature` (type: `string`):

One extra filter applied by the portal itself, before paging. These are the only feature segments the portal honours — `estacionamiento` reads like a valid one and answers 404, so it is not offered. Anything narrower is done with the price and size limits below, which this actor applies to each advert before it charges for it.

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

Stop after this many adverts. Each request returns forty-seven, so the actor fetches ceil(maxResults / 47) pages and stops. The run report always prints the real total the portal holds for your search, so you can see what you left behind.

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

Skip adverts priced below this, in the advert's own currency. propiedades.com has no price filter in its URLs, so this is applied to each advert as it is read — and applied BEFORE the charge, so you never pay for a row you filtered out. 0 means no minimum.

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

Skip adverts priced above this, in the advert's own currency. Applied before the charge, like the minimum. 0 means no maximum.

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

Mexican adverts are quoted in pesos and in dollars on the same board. Pick one to keep only that currency, or leave it on either and read the `currency` column. The price limits above are compared in the advert's own currency and are not converted.

## `minAreaM2` (type: `integer`):

Skip adverts smaller than this. The portal publishes one area figure per search row; the detail operation returns built area and land area separately. Applied before the charge. 0 means no minimum.

## `onlyWithCoordinates` (type: `boolean`):

propiedades.com marks each advert with whether its coordinates are a real pin or a fallback. Turn this on for mapping work, where a colonia centroid dressed up as an address is worse than no pin at all.

## `listingUrls` (type: `array`):

Property Detail only. Paste propiedades.com advert URLs — `https://propiedades.com/inmuebles/...` — and the actor opens each one. A `www.` URL copied from the portal works: it is normalised, because the www host never answers.

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

Property Search only. Paste propiedades.com result URLs if you have a search the dropdowns cannot express — a colonia outside the 1,188 in the list, for instance. When this is filled the place, market, type and feature choices above are ignored for those URLs.

## Actor input object example

```json
{
  "operation": "search",
  "location": "df",
  "market": "venta",
  "propertyType": "all",
  "feature": "any",
  "maxResults": 100,
  "minPrice": 0,
  "maxPrice": 0,
  "currency": "any",
  "minAreaM2": 0,
  "onlyWithCoordinates": false,
  "listingUrls": [],
  "searchUrls": []
}
```

# Actor output Schema

## `propiedadesComAdvert` (type: `string`):

Every advert 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": "df",
    "market": "venta",
    "propertyType": "all",
    "feature": "any",
    "maxResults": 100,
    "minPrice": 0,
    "maxPrice": 0,
    "currency": "any",
    "minAreaM2": 0,
    "onlyWithCoordinates": false,
    "listingUrls": [],
    "searchUrls": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/propiedades-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": "df",
    "market": "venta",
    "propertyType": "all",
    "feature": "any",
    "maxResults": 100,
    "minPrice": 0,
    "maxPrice": 0,
    "currency": "any",
    "minAreaM2": 0,
    "onlyWithCoordinates": False,
    "listingUrls": [],
    "searchUrls": [],
}

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/propiedades-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": "df",
  "market": "venta",
  "propertyType": "all",
  "feature": "any",
  "maxResults": 100,
  "minPrice": 0,
  "maxPrice": 0,
  "currency": "any",
  "minAreaM2": 0,
  "onlyWithCoordinates": false,
  "listingUrls": [],
  "searchUrls": []
}' |
apify call sian.agency/propiedades-property-scraper --silent --output-dataset

```

## MCP server setup

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