# MercadoLibre Property Scraper - LatAm Real Estate Listings (`sian.agency/mercadolibre-property-scraper`) Actor

Property listings from MercadoLibre in Venezuela, Uruguay, Paraguay and Guatemala. Asking price in the currency the seller quoted, dormitorios, baños, m² cubiertos, property type, venta or alquiler, departamento and ciudad, photos and a direct link. No code.

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

## Pricing

from $1.60 / 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

## MercadoLibre Property Scraper - LatAm Real Estate Listings 🏠

[![SIÁN Agency Store](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![Portal Inmobiliario Scraper](https://img.shields.io/badge/Store-Portal%20Inmobiliario-FFE600)](https://apify.com/sian.agency/portalinmobiliario-property-scraper?fpr=sian) [![MercadoLibre Product Scraper](https://img.shields.io/badge/Store-MercadoLibre%20Products-FFE600)](https://apify.com/sian.agency/mercado-libre-product-scraper?fpr=sian) [![Zonaprop Scraper](https://img.shields.io/badge/Store-Zonaprop-1AE392)](https://apify.com/sian.agency/zonaprop-property-scraper?fpr=sian)

#### 🎉 336,756 live property listings, including the 150,707 in Venezuela no other dataset reaches

##### For analysts, agencies and portals working Venezuela, Uruguay, Paraguay and Guatemala

***

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

The **MercadoLibre Property Scraper** turns public MercadoLibre property listings in Venezuela, Uruguay, Paraguay and Guatemala 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:** Latin American sale and rental listings as rows. Each carries the asking price in the currency the seller actually quoted — dollars and local currency sit side by side in all four markets — plus a dollar figure converted at a live rate that is stamped on the row with its source. Bedrooms, bathrooms, covered area and price per square metre are separate number fields, and the row also carries the property type, whether it is for sale or to rent, the department and city, the cover photo and the whole photo set. Open each listing as well and the row gains the seller's own description, the complete attribute table with age, orientation, private area and parking, every photo at full size, and the map coordinates. Venezuela is where this matters most: 150,707 live listings and no other property data product, because the country's own portals are gone.

**Use something else when:** the property is not in Venezuela, Uruguay, Paraguay or Guatemala. Use [Portal Inmobiliario Scraper](https://apify.com/sian.agency/portalinmobiliario-property-scraper?fpr=sian) for Chilean property, the MercadoLibre market this one does not offer. Use [Encuentra24 Scraper](https://apify.com/sian.agency/encuentra24-property-scraper?fpr=sian) for Central America and the Caribbean, including a far deeper Guatemalan corpus. Use [Zonaprop Scraper](https://apify.com/sian.agency/zonaprop-property-scraper?fpr=sian) for Argentina, the largest property market in the region. Four MercadoLibre markets only. Argentina, Brazil, Mexico and Chile are not offered. Bolivia is deliberately absent: its entire property section held 62 listings when this was built. There is no price, bedroom, area or sort filter and no paging, because MercadoLibre's robots file asks automated readers not to request those addresses. Depth comes from descending the portal's own place index instead, and every one of those values still arrives on the row for filtering afterwards. Seasonal and holiday rent exists in Uruguay only. The portal lists what is currently advertised, so there is no sold-price history.

### 🤖 Use with AI agents

Already connected to the [Apify MCP server](https://mcp.apify.com)? Just ask for this Actor by name: sian.agency/mercadolibre-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 MercadoLibre property listings and asking prices across four Latin American markets using the Apify Actor `sian.agency/mercadolibre-property-scraper`.

Use it when I need: Latin American sale and rental listings as rows. Each carries the asking price in the currency the seller actually quoted — dollars and local currency sit side by side in all four markets — plus a dollar figure converted at a live rate that is stamped on the row with its source. Bedrooms, bathrooms, covered area and price per square metre are separate number fields, and the row also carries the property type, whether it is for sale or to rent, the department and city, the cover photo and the whole photo set. Open each listing as well and the row gains the seller's own description, the complete attribute table with age, orientation, private area and parking, every photo at full size, and the map coordinates. Venezuela is where this matters most: 150,707 live listings and no other property data product, because the country's own portals are gone.

Don't use it when: the property is not in Venezuela, Uruguay, Paraguay or Guatemala — use portalinmobiliario-property-scraper or encuentra24-property-scraper or zonaprop-property-scraper instead.

How to call it: set `market` to `ve`, `uy`, `py` or `gt` — one market per run, because each MercadoLibre country site is its own marketplace with its own listings, place names and currency. Set `listingOperation` to `venta`, `alquiler` or, in Uruguay only, `alquiler-temporada`, and `propertyType` to one of `houses`, `apartments`, `land`, `offices`, `warehouses`, `farms`, `commercial-premises`, `rooms`, `buildings`, `townhouses`, `hotels`, `businesses`, `annexes`, `club-shares`, `garages`, `country-houses` or `other`, or leave it on `all`. Not every type exists in every market and a type the market does not publish is refused with the countries that do have it, rather than quietly returning the whole market. For location, name departments in `places` using their `<market>-<slug>` form such as `ve-distrito-capital` or `uy-maldonado`; the list is built from each portal's own place index and carries the listing count each place held. Leave it on `all` to sweep the market — when a place holds more than one request returns, the run descends into that place's own cities and neighbourhoods until `maxResults` is met. `includeDetails` opens each listing for its full record, for an extra charge per listing. To expand listings you already have, set `operation` to `detail` and pass whole listing addresses in `listingUrls`; to reproduce a search you built on the site, paste it into `searchUrls`.

Start with this input:
{
  "operation": "search",
  "market": "ve",
  "propertyType": "apartments",
  "listingOperation": "venta",
  "places": [
    "ve-distrito-capital"
  ],
  "maxResults": 120
}

Ask me which of the four markets to read, whether they want listings for sale or to rent, which departments matter, and whether the full listing record is worth the extra per-listing charge, then run the Actor and summarise the results as a table.
```

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

- *Pull apartments for sale in Distrito Capital, Venezuela and rank the neighbourhoods by median price per square metre.*
- *Compare asking rents for two-bedroom apartments in Montevideo against Maldonado, in dollars, using the rate each row was converted at.*
- *Sweep the whole Guatemalan property section and tell me which departments carry stock and what the median asking price is in each.*

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

### 📋 Overview

**In Venezuela, MercadoLibre is what is left after the national property portals went dark.** In Uruguay, Paraguay and Guatemala it sits alongside them and carries stock they do not. This Actor reads all four markets with one parser, one set of field names and one dataset.

**What you get:**

- ✅ **Four markets, one schema**: Venezuela (150,707 live listings), Uruguay (184,742), Guatemala (707) and Paraguay (600), counted from each portal's own result counter on 2026-09-13.
- 💱 **Currency read per listing**: Venezuelan sellers quote dollars and bolívares side by side. Every row carries what the seller actually wrote, plus a USD column with the rate and its source stamped on the row.
- 🎯 **Rooms and area as numbers**: dormitorios, baños, covered m² and total m² are read from each listing's attribute line into separate columns. Covered and total area never get mixed up, and nothing is guessed from the title.
- 📐 **Price per m² already computed**: sort a department by it the moment the run finishes.
- 🌍 **Enums read from the portal, per market**: 17 property types and 66 departments, every one of them taken from MercadoLibre's own filter index rather than guessed.
- 💰 **Charged per row returned**: failed and empty results are never billed.
- ✨ **Details on demand**: switch them on and each listing brings its full seller description, complete attribute table, every photo and map coordinates.

***

### ✨ Features

- 🌎 **Market picker**: Venezuela, Uruguay, Paraguay or Guatemala, one per run, each with its live listing count beside it.
- 🏠 **17 property types**: casas, departamentos, terrenos, oficinas, galpones, locales, quintas, campos, cocheras, townhouses and more — each labelled with the countries that publish it.
- 🤝 **Venta, alquiler, or both**: plus alquiler temporada, the seasonal-rent section Uruguay runs on its coast.
- 📍 **66 departments**: every state and department in the four markets, each showing how many listings it held.
- 🧭 **Automatic depth**: a department bigger than one request is descended into its own cities and neighbourhoods.
- 🔗 **Paste your own addresses**: bring MercadoLibre search or listing URLs and the Actor reads those instead.
- 📄 **Detail mode**: full seller description, complete attribute table, every photo, map coordinates.
- 🆔 **Stable listing IDs**: MLV, MLU, MPY and MGT ID spaces, so two runs diff cleanly.
- 📊 **Run report**: an HTML summary with the numbers, the failures and what the run cost.

***

### 🎬 Quick Start

Pick a market, pick a property type, pick venta or alquiler, and press Start. Everything else has a working default, so a bare run returns every property type for sale in Venezuela. Results land in the dataset as flat rows you can export as JSON, CSV or Excel.

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

***

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Choose your market

Venezuela, Uruguay, Paraguay or Guatemala. The live listing count sits beside each name, so you know what you are stepping into.

#### Step 2: Narrow it down

Property type, venta or alquiler, and one or more departments. Leave the place on "The whole market" to sweep everything.

#### Step 3: Set a maximum and press Start

The run stops at your number. Switch on details if you want the seller's description and the photos.

**That's it! In a couple of minutes, you'll have:**

- A table of listings with prices, rooms, area and place
- Price per m² already worked out for every row
- Direct links and stable IDs for the ones worth following up

***

### 📥 Input Configuration

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `operation` | string | No | `search` or `detail` |
| `market` | string | No | `ve`, `uy`, `py` or `gt` |
| `propertyType` | string | No | `all`, `houses`, `apartments`, `land`, `offices` and 13 more |
| `listingOperation` | string | No | `all`, `venta`, `alquiler`, `alquiler-temporada` |
| `places` | array | No | Departments to sweep, or `["all"]` for the whole market |
| `maxResults` | integer | No | Stop after this many listings (1–20,000) |
| `includeDetails` | boolean | No | Open each listing's own page for the full record |
| `searchUrls` | array | No | Your own MercadoLibre search addresses |
| `listingUrls` | array | No | Listing addresses, for the `detail` operation |

**Example:**

```json
{
  "operation": "search",
  "market": "uy",
  "propertyType": "apartments",
  "listingOperation": "venta",
  "places": ["uy-montevideo", "uy-maldonado"],
  "maxResults": 500
}
```

**Detail mode:**

```json
{
  "operation": "detail",
  "listingUrls": [
    "https://casa.mercadolibre.com.uy/MLU-700095975-casa-en-venta-_JM"
  ]
}
```

***

### 📤 Output

Results are saved to the Apify dataset with **44 fields**, including:

| Field | Type | Description |
|-------|------|-------------|
| `thumbnail` | string | Cover photo |
| `propertyTitle` | string | Listing title as written |
| `price` | number | Asking price or monthly rent |
| `currency` | string | What the seller actually quoted |
| `priceUsd` | number | Converted to dollars, with `fxRate` and `fxSource` |
| `pricePerM2` | number | Price divided by covered area |
| `bedrooms` | integer | Dormitorios |
| `bathrooms` | integer | Baños |
| `coveredAreaM2` | number | Built area in m² |
| `totalAreaM2` | number | Plot area in m² |
| `propertyTypeLabel` | string | The portal's own wording, e.g. "Casa en venta" |
| `listingOperation` | string | venta, alquiler or alquiler-temporada |
| `department` / `city` | string | Departamento and the place inside it |
| `latitude` / `longitude` | number | Map position, with details on |
| `propertyUrl` | string | Direct link |
| `listingId` | string | MLV / MLU / MPY / MGT, stable across runs |

**Example:**

```json
{
  "thumbnail": "https://http2.mlstatic.com/D_NQ_NP_797991-MLV108317477375_032026-O.webp",
  "listingId": "MLV1025378068",
  "propertyUrl": "https://casa.mercadolibre.com.ve/MLV-1025378068-casa-con-amplio-frente-maxima-seguridad-dos-pisos-con-excelente-vista-_JM",
  "propertyTitle": "Casa Con Amplio Frente Máxima Seguridad Dos Pisos Con Excelente Vista",
  "headline": "Casa en venta",
  "market": "ve",
  "marketName": "Venezuela",
  "siteCode": "MLV",
  "propertyType": "houses",
  "propertyTypeLabel": "Casa en venta",
  "listingOperation": "venta",
  "domainId": "MLV-INDIVIDUAL_HOUSES_FOR_SALE",
  "price": 222000,
  "currency": "USD",
  "priceUsd": 222000,
  "bedrooms": 5,
  "bathrooms": 5,
  "coveredAreaM2": 350,
  "pricePerM2": 634.29,
  "attributesText": ["5 habitaciones", "5 baños", "350 m² cubiertos"],
  "department": "Distrito Capital",
  "city": "Caracas - Libertador (suroeste)",
  "status": "success"
}
```

***

### 💼 Use Cases & Examples

#### 1. Price Venezuelan property where no one else publishes data

**A valuation analyst needs comparables in a country whose property portals went dark.**

**Input:** market Venezuela, houses for sale, Distrito Capital
**Output:** rows out of the 87,791 that department holds, each with price, currency, rooms and m²
**Use:** the only structured Venezuelan property dataset available anywhere — no Apify Store rival reads any Venezuelan property portal.

#### 2. Track the Uruguayan coast through a season

**A holiday-rental operator wants to watch Punta del Este from May to December.**

**Input:** market Uruguay, alquiler temporada, Maldonado and Rocha
**Output:** roughly 15,000 seasonal listings, with asking rent against bedrooms and floor area
**Use:** weekly runs diffed on listing ID show what came on, what moved price and what let.

#### 3. Sweep a small market completely

**A regional agency wants all of Guatemala, not a sample.**

**Input:** market Guatemala, every property type, sale and rent together
**Output:** the country's whole MercadoLibre property stock — 707 listings
**Use:** a true before-and-after every week rather than a slice. Paraguay works the same way at 600.

#### 4. Build a comparables table with m² prices already computed

**A mortgage desk needs sortable comparables without cleaning text first.**

**Input:** any department, houses for sale
**Output:** price, currency, bedrooms, bathrooms, covered m², and `pricePerM2`
**Use:** sort, filter and band in a spreadsheet. No parsing of listing titles.

#### 5. Feed a property portal or a CRM with fresh stock

**A listings aggregator needs a nightly delta.**

**Input:** the same market and department every night, on a schedule
**Output:** stable listing IDs, direct links, cover photos, full photo sets with details on
**Use:** diff on `listingId` to get new, changed and gone.

#### 6. Map where a market's money actually is

**A developer wants asking price plotted at neighbourhood resolution.**

**Input:** any department with `includeDetails` on
**Output:** `latitude`, `longitude`, full seller description and the complete attribute table
**Use:** a heat map of asking price per m², block by block.

#### 7. Watch a competitor's stock across two countries

**An agency operating in Uruguay and Paraguay wants both in one table.**

**Input:** two runs, one per market, into the same dataset
**Output:** one set of field names across both, IDs that never collide (MLU against MPY)
**Use:** portfolio reporting without reconciling two schemas.

***

### 🔗 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/mercadolibre-property-scraper').call({
  operation: 'search',
  market: 'uy',
  propertyType: 'apartments',
  listingOperation: 'venta',
  places: ['uy-montevideo'],
  maxResults: 200,
});

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

#### Python

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

run = client.actor('sian.agency/mercadolibre-property-scraper').call(
    run_input={
        'operation': 'search',
        'market': 'gt',
        'propertyType': 'all',
        'listingOperation': 'all',
        'maxResults': 707,
    }
)

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

#### cURL

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

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

1. **Trigger**: a weekly schedule
2. **HTTP Request**: start the Actor with your market and departments
3. **Process**: diff the rows on `listingId` against last week's dataset
4. **Action**: write new and re-priced listings to your CRM, or send an alert

***

### 📊 Performance & Pricing

#### FREE Tier (Try It Now)

- **25 listings** per run — every field, every market, same quality
- No credit card required
- Enough to see the schema and check a department before you commit

#### PAID Tier (Production Ready)

- **Unlimited** listings per run, up to the size of the market you chose
- Whole-market sweeps: Guatemala and Paraguay finish in a few hundred rows
- Pay-per-result: only successful rows are charged, never failures or empty results

💰 Two events, and you only ever pay for the second one when you ask for it: **Property Listing** for each search row, **Property Detail** for each listing page you choose to open.

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

***

### ❓ Frequently Asked Questions

**Q: Which MercadoLibre countries does this cover?**
A: Venezuela, Uruguay, Paraguay and Guatemala. Chilean property is [Portal Inmobiliario](https://apify.com/sian.agency/portalinmobiliario-property-scraper?fpr=sian) and Argentina is [Zonaprop](https://apify.com/sian.agency/zonaprop-property-scraper?fpr=sian).

**Q: Why is Bolivia not on the list?**
A: Because it would not be honest to sell it. MercadoLibre Bolivia's entire property section held 62 listings when this Actor was built — 40 for sale and 22 to rent. If it grows, it will be added.

**Q: How many listings do I get per run?**
A: As many as you ask for, up to the size of the market you chose. Each request returns 48 listings, and the Actor keeps going into deeper places until your maximum is reached or the place index runs out. Free Apify accounts are capped at 25 per run.

**Q: Why is there no price or bedroom filter?**
A: MercadoLibre's robots.txt asks general crawlers not to request its price-range, sort, bedroom, bathroom and area addresses, and this Actor respects that. Every row comes back with price, currency, bedrooms, bathrooms and area as separate typed fields, so filtering in your spreadsheet or database takes one sort.

**Q: Why does it not go past the first page of results?**
A: Same reason. The portal's pagination address is one of the forms its robots.txt asks crawlers not to request. Depth comes from the place index instead: the Actor descends from a department into its cities and neighbourhoods, which is exactly how the portal's own indexable structure is laid out.

**Q: Are prices in local currency or dollars?**
A: Both, per row. The currency field carries what the seller actually quoted — dollars are common in all four markets and dominant in some. A separate USD field converts anything quoted locally at a live rate, and that rate and its source are stamped on the row.

**Q: What does turning on details add?**
A: The complete seller description instead of the title, the full attribute table, every photo at full size, and the map coordinates. It costs one extra request per listing and bills the detail event once per listing.

**Q: Can I paste my own search address?**
A: Yes. Paste a MercadoLibre property search address from any of the four markets and the Actor reads that instead of composing its own. Addresses carrying pagination or price-range tokens are refused with an explanation rather than quietly ignored.

**Q: What happens if I pick a property type a market does not have?**
A: The run says so and returns no rows for it. MercadoLibre answers an unknown type segment with the whole corpus, so a type that was silently ignored would look exactly like a type that matched everything — and you would pay for thousands of rows that are not what you asked for.

**Q: Do I pay for listings that fail?**
A: No. Rows are charged only after they are produced. Failed and empty results are never billed.

**Q: Which listing IDs do I get?**
A: MercadoLibre's own, in each market's ID space — MLV for Venezuela, MLU for Uruguay, MPY for Paraguay, MGT for Guatemala. They are stable, so diffing two runs on the ID tells you what is new, what changed price and what has gone.

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

***

### 🐛 Troubleshooting

**A run returns no rows**

- The combination may be genuinely empty. Widen the place, or set the property type to "Every property type".
- Alquiler temporada exists in Uruguay only.
- Check the place you picked belongs to the market you picked — mismatches are skipped and named in the run log.

**A pasted address is refused**

- It carries one of the portal's pagination, sort or price-range tokens. Paste the plain department or city address instead; the Actor walks the place index from there.

**Fewer distinct properties than rows in Guatemala**

- Real cross-posting on the portal: the same property is often published by more than one advertiser. Deduplicate on title and area if you need unique properties.

**Only 25 rows came back**

- That is the free-account cap. Add credits or a payment method in Apify Console → Billing.

**A listing page came back without its full record**

- The run continues and keeps the search row. Re-run detail mode on that listing address.

***

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

MercadoLibre and Mercado Libre are trademarks of MercadoLibre, Inc. This Actor is not affiliated with, endorsed by, or sponsored by MercadoLibre.

***

### 🤝 Support

**Join our active support community**

- For issues or questions, open an issue on the Actor's [issues page](https://apify.com/sian.agency/mercadolibre-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)**

# Changelog

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

# Actor input Schema

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

🎯 **PICK ONE PER RUN.**

🔍 **Property Search** walks MercadoLibre's own place index and brings back 48 listings per request, each already carrying price, currency, dormitorios, baños, area and place.

📄 **Property Detail** takes listing addresses you already have and opens each one for the full seller description, the whole attribute table and every photo.

💡 **TIP:** start with Property Search. The fields below that do not apply to the operation you pick are ignored.

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

🌎 **ONE MARKET PER RUN.** Each MercadoLibre country site is its own marketplace, with its own listings, place names and currency.

📊 **The counts beside each name** were read from the portal's own result counter on 2026-09-13. Venezuela and Uruguay are deep; Guatemala and Paraguay are small enough to sweep whole in a few hundred rows.

⚠️ **Bolivia is not offered** — its entire property section holds 62 listings.

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

🏠 **READ FROM EACH MARKET'S OWN INDEX**, which is why the list is not identical in every country. Venezuela publishes townhouses, whole buildings, hotels and club memberships that Guatemala does not; Uruguay publishes cocheras and quintas.

🌍 **The country names after each type say where it exists.**

⚠️ **Pick a type a market does not publish** and the run says so plainly instead of quietly handing back the unfiltered market.

## `listingOperation` (type: `string`):

🤝 **SALE, RENT, OR BOTH IN ONE DATASET.** Venta listings carry an asking price, alquiler listings a monthly rent, and every row is labelled either way — so both can sit side by side for a yield calculation.

🏖️ **Alquiler temporada** (seasonal and holiday rent) is a separate operation in Uruguay only, where it runs to roughly 15,000 listings along the coast.

## `places` (type: `array`):

📍 **DEPARTMENTS AND STATES**, each prefixed with its market and carrying the listings it held on 2026-09-13, from the portal's own place index.

🌎 **Leave it on "The whole market"** to sweep everything, or pick only the places you want — they run one after another.

⚠️ **A place from another market is skipped and reported**, never swapped for one of this market's.

🔎 **A department too big for one request** is walked down into its own cities until your result budget is met.

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

🔢 **STOPS THE RUN** once this many listings have been returned. Each request brings back 48, so 100 is roughly two requests.

🆓 **Free Apify accounts** are capped at 25 rows per run whatever this says. Paid accounts run to the number you set, or to the size of the market you chose.

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

📄 **OFF BY DEFAULT.** Switch it on and every search row is completed by opening the listing's own page: the full seller description, the complete attribute table, every photo and the map coordinates.

💰 **It costs one extra request per listing** and bills the Property Detail event once per listing. Turn it on when you need the description; leave it off when price, rooms, area and place are enough.

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

🌐 **OPTIONAL SHORTCUT.** Paste MercadoLibre property search addresses exactly as they appear in your browser and the Actor reads those instead of composing its own. Any of the four markets is accepted.

📋 **BULK EDIT:** click "Bulk edit" to paste one address per line, or upload a .txt file.

🚫 **NOT accepted:** addresses carrying the portal's pagination or price-range tokens. Those are refused with an explanation, because MercadoLibre's robots.txt asks general crawlers not to request them.

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

🔗 **USED BY PROPERTY DETAIL.** One full MercadoLibre listing address per line, exactly as it appears in your browser — for example https://casa.mercadolibre.com.uy/MLU-700095975-casa-en-venta-\_JM

📋 **BULK EDIT:** click "Bulk edit" to paste many at once, or upload a .txt file.

💰 **Duplicates are removed** before anything is charged.

## Actor input object example

```json
{
  "operation": "search",
  "market": "ve",
  "propertyType": "all",
  "listingOperation": "venta",
  "places": [
    "all"
  ],
  "maxResults": 100,
  "includeDetails": false,
  "searchUrls": [],
  "listingUrls": []
}
```

# Actor output Schema

## `mercadolibreListings` (type: `string`):

Every listing this run returned, with price and currency, dormitorios, baños, m², place, photos and a direct link.

## `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",
    "market": "ve",
    "propertyType": "all",
    "listingOperation": "venta",
    "places": [
        "all"
    ],
    "maxResults": 100,
    "includeDetails": false,
    "searchUrls": [],
    "listingUrls": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/mercadolibre-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",
    "market": "ve",
    "propertyType": "all",
    "listingOperation": "venta",
    "places": ["all"],
    "maxResults": 100,
    "includeDetails": False,
    "searchUrls": [],
    "listingUrls": [],
}

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/mercadolibre-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",
  "market": "ve",
  "propertyType": "all",
  "listingOperation": "venta",
  "places": [
    "all"
  ],
  "maxResults": 100,
  "includeDetails": false,
  "searchUrls": [],
  "listingUrls": []
}' |
apify call sian.agency/mercadolibre-property-scraper --silent --output-dataset

```

## MCP server setup

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