# Mercado Libre Inmuebles Scraper — Argentina & Mexico (`fabrikit/mercadolibre-inmuebles-scraper`) Actor

Scrape property listings from Mercado Libre Inmuebles in Argentina and Mexico: price in ARS/MXN/USD with USD conversion, rooms, m², address, photos, GPS and seller type. Filter by operation, type, location, price, bedrooms. From US$2.50 per 1,000 properties.

- **URL**: https://apify.com/fabrikit/mercadolibre-inmuebles-scraper.md
- **Developed by:** [Fabrikit](https://apify.com/fabrikit) (community)
- **Categories:** Real estate, Lead generation, Automation
- **Stats:** 4 total users, 3 monthly users, 95.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 property results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## Mercado Libre Inmuebles Scraper — Argentina & Mexico Real Estate Data

Scrape property listings from **Mercado Libre Inmuebles** — the real-estate section of Mercado Libre in **Argentina** (inmuebles.mercadolibre.com.ar) and **Mexico** (inmuebles.mercadolibre.com.mx) — into clean, analysis-ready JSON. Filter by operation (sale, rent, short-term rent), property type, **state / city / neighbourhood**, price in **ARS, MXN or USD**, and bedrooms, or paste any search URL from the site. Every listing comes back with price, currency and a **USD conversion**, rooms (ambientes), bedrooms (dormitorios / recámaras), bathrooms, covered and total m², address, neighbourhood, city, state and photos — and, with the optional detail add-on, **GPS coordinates**, publication date, seller type, monthly expenses (expensas / mantenimiento), the full spec table and the description.

No browser, no login, plain HTTP: fast and cheap.

What you get from a single run:

- **Both countries, one schema.** Argentine and Mexican listings share the same fields, so a Buenos Aires vs. CDMX price-per-m² comparison is one pivot table away.
- **Prices you can compare.** Argentine sales are listed in USD and rentals in pesos; Mexican listings mix MXN and USD. Each item keeps its own `price` + `currency` and adds `priceUsd`, converted with the exchange rate Mercado Libre shows on the same page.
- **Resale units and new developments.** Individual properties and off-plan projects ("emprendimientos" / "desarrollos") are both covered. Projects are flagged with `isProject` and come with min–max ranges, delivery date and available units.
- **Ready for monitoring.** The default sort is `newest`. Schedule the Actor daily, diff on `id` and you get new listings, price drops (`previousPrice`) and delistings for any neighbourhood.

Example output item (Argentina, with detail add-on):

```json
{
    "id": "MLA4062269866",
    "url": "https://departamento.mercadolibre.com.ar/MLA-4062269866-semipiso-belgrano-r-5-ambientes-cochera-fija-baulera-apto-credito-_JM",
    "title": "Semipiso Belgrano R 5 Ambientes Cochera Fija Baulera Apto Credito",
    "country": "AR",
    "operation": "sale",
    "propertyType": "apartment",
    "isProject": false,
    "price": 350000,
    "currency": "USD",
    "priceUsd": 350000,
    "previousPrice": null,
    "priceIsFrom": false,
    "rooms": 5,
    "bedrooms": 3,
    "bathrooms": 2,
    "parkingLots": 1,
    "totalAreaM2": 122,
    "coveredAreaM2": 113,
    "address": "Olazabal Al 3100, Belgrano R, Capital Federal, Capital Federal",
    "neighborhood": "Belgrano R",
    "city": "Capital Federal",
    "state": "Capital Federal",
    "latitude": -34.5641557,
    "longitude": -58.4648576,
    "photos": ["https://http2.mlstatic.com/D_NQ_NP_824071-MLA119203509825_102026-O.jpg"],
    "publishedAgo": "Publicado hoy",
    "publishedAt": "2026-10-12",
    "sellerName": "OPEN HOUSE",
    "sellerType": "real_estate_agency",
    "condition": "used",
    "commonExpenses": "460.000 ARS",
    "attributes": { "Número de piso de la unidad": "4", "Antigüedad": "40 años", "Apto crédito": "Sí" },
    "description": "EXCELENTE SEMIPISO 5 AMBIENTES AL FRENTE EN 4TO NIVEL CON GRAN COCHERA FIJA MAS BAULERA...",
    "searchUrl": "https://inmuebles.mercadolibre.com.ar/departamentos/venta/capital-federal/_OrderId_BEGINS*DESC_NoIndex_True",
    "scrapedAt": "2026-10-12T16:06:38.280Z"
}
```

(Range fields such as `roomsMax` are `null` for individual units and omitted above for brevity.)

### How to scrape Mercado Libre Inmuebles

1. Pick the **country** (Argentina or Mexico), the **operation** (sale, rent, short-term rent) and a **property type**.
2. Type a **location**: a province / state (`Capital Federal`, `Córdoba`, `Jalisco`, `CDMX`), a city (`Rosario`, `Mar del Plata`, `Zapopan`, `Monterrey`) or a neighbourhood (`Palermo`). For a neighbourhood the site doesn't recognise on its own, write it from most to least specific: `Nordelta, Tigre` or `Polanco, Miguel Hidalgo, CDMX`. Leave it empty to search the whole country.
3. Optionally set a **price band** (local currency or USD), **bedrooms**, **listing type** (individual units or new developments) and the **sort order**, then press **Start**.

Prefer the website's own filters (amenities, surface, age, "dueño directo", keyword...)? Apply them on inmuebles.mercadolibre.com.ar / .com.mx and paste the resulting URL into **Direct search URLs**.

#### Example inputs

Two-bedroom rentals in Palermo, Buenos Aires, between ARS 500,000 and 1,500,000, newest first, with details:

```json
{
    "country": "AR",
    "operation": "rent",
    "propertyType": "apartment",
    "location": "Palermo",
    "bedrooms": "2",
    "priceMin": 500000,
    "priceMax": 1500000,
    "priceCurrency": "local",
    "sort": "newest",
    "maxItems": 200,
    "fetchDetails": true
}
```

Houses for sale in Zapopan (Guadalajara) under US$300,000, cheapest first:

```json
{
    "country": "MX",
    "operation": "sale",
    "propertyType": "house",
    "location": "Zapopan",
    "priceMax": 300000,
    "priceCurrency": "USD",
    "sort": "price_asc",
    "maxItems": 500
}
```

Any search you built on the website:

```json
{
    "startUrls": [
        { "url": "https://inmuebles.mercadolibre.com.mx/departamentos/renta/distrito-federal/miguel-hidalgo/polanco/" },
        { "url": "https://inmuebles.mercadolibre.com.ar/casas/venta/bsas-gba-norte/tigre/nordelta/" }
    ],
    "maxItems": 1000
}
```

#### Input fields

- **country**: `AR` (Argentina) or `MX` (Mexico).
- **operation**: `sale`, `rent` or `temporary_rent` (alquiler temporario in AR, renta vacacional in MX).
- **propertyType**: `apartment`, `house`, `ph` (AR), `land`, `commercial`, `office`, `parking` (AR), `warehouse`, `farm`, `country_house` (AR), `building` (MX), `room` (MX), `business` (AR), `other`, or `any`.
- **location**: free text, resolved against the site's own location tree. The Actor **fails with a clear error** (listing the site's options when a name is ambiguous, e.g. "Del Valle Centro / Norte / Sur") instead of silently returning nationwide or keyword results.
- **maxItems**: cap on properties returned (default 50).
- **fetchDetails**: open each listing page for coordinates, dates, seller type, expenses, specs, description and full gallery (paid add-on, off by default).
- **listingType**: `all`, `individual` or `projects`.
- **priceMin / priceMax** + **priceCurrency** (`local` = ARS / MXN, or `USD`): `0` = open end.
- **bedrooms**: `any`, `studio`, `1`, `2`, `3`, `4+`.
- **sort**: `newest` (default), `relevance`, `price_asc`, `price_desc`, `oldest`.
- **startUrls**: search-results URLs from either site; when present they replace the filters.
- **proxyConfiguration**: leave as is (see FAQ).

### Output fields

| Field | Type | Description |
|---|---|---|
| `id` | string | Mercado Libre listing ID (`MLA...` / `MLM...`), stable across runs — use it for diffing |
| `url` | string | Direct link to the listing |
| `title` | string | Listing title |
| `country` | string | `AR` or `MX` |
| `operation` | string | `sale`, `rent` or `temporary_rent` (read from the listing itself) |
| `propertyType` | string | `apartment`, `house`, `ph`, `land`, `commercial`, `office`, `parking`, `warehouse`, `farm`, `building`, `other`, ... |
| `isProject` | boolean | `true` for new developments sold off-plan |
| `price` | number | Listed price |
| `currency` | string | `ARS`, `MXN` or `USD`, the currency the listing itself uses |
| `priceUsd` | number | Price converted to USD with the exchange rate shown by Mercado Libre at scrape time |
| `previousPrice` | number | null | Former price when the site shows a price drop ("bajó de precio") |
| `priceIsFrom` | boolean | `true` when the price is a project's "from" price |
| `rooms` / `roomsMax` | number | null | Ambientes, the room count Argentines search by (range on projects) |
| `bedrooms` / `bedroomsMax` | number | null | Dormitorios / recámaras (`0` = studio; range on projects) |
| `bathrooms` / `bathroomsMax` | number | null | Bathrooms |
| `parkingLots` | number | null | Cocheras / estacionamientos (detail add-on) |
| `totalAreaM2` / `totalAreaM2Max` | number | null | Total surface in m² (lot size for MX houses and land) |
| `coveredAreaM2` / `coveredAreaM2Max` | number | null | Covered / built surface in m² (cubiertos / construidos) |
| `address` | string | null | Address as published |
| `neighborhood` | string | null | Barrio / colonia |
| `city` | string | null | City, partido or alcaldía |
| `state` | string | null | Province / state as Mercado Libre names it (e.g. `Capital Federal`, `Bs.As. G.B.A. Norte`, `Distrito Federal`) |
| `latitude` / `longitude` | number | null | Map pin (detail add-on) |
| `photos` | string\[] | Full-size photo URLs (first photo from search; full gallery with detail add-on) |
| `publishedAgo` / `publishedAt` | string | null | "Publicado hace 19 días" + approximate ISO date (detail add-on) |
| `sellerName` | string | null | Agency or official-store name when the seller is a business; `null` for private sellers and individual agents |
| `sellerType` | string | null | `real_estate_agency`, `normal` (private owner) or `developer_project` |
| `condition` | string | null | `new` or `used` (detail add-on) |
| `commonExpenses` | string | null | Monthly building fees (expensas / mantenimiento), e.g. `460.000 ARS` |
| `projectDelivery` | string | null | Projects: "Entrega inmediata", "Pronta entrega", "Venta en blanco", "Entrega Noviembre 2028"... |
| `availableUnits` | number | null | Projects: units still available |
| `attributes` | object | null | Everything else from the spec table: age, floor, orientation, amenities, pets, "apto crédito"... |
| `description` | string | null | Listing description, first 5,000 characters (detail add-on) |
| `searchUrl` | string | The search-results page the listing came from |
| `scrapedAt` | string | ISO 8601 timestamp |

A run summary (resolved location path, total results reported by the site, pages, detail errors, exchange rates, bytes downloaded) is saved in the run's key-value store under `SUMMARY`.

### Use cases

- **Market analysis:** median USD price per m² by barrio or colonia, rent-to-price yields, peso vs. dollar pricing, supply by property type.
- **Price monitoring:** daily scheduled runs sorted by `newest`, diffed on `id`, flag new listings and price drops (`previousPrice`) in the neighbourhoods you follow.
- **Investment screening:** new-development pipelines with delivery dates and unit counts, land and lots with coordinates for mapping.
- **Prop-tech and portals:** feed listings with photos, coordinates and attributes into your own product through the Apify API, webhooks, Google Sheets, Zapier or Make.
- **Brokerage prospecting:** filter `sellerType = "normal"` (detail add-on) to find properties listed directly by owners.

Every Apify dataset exports to CSV, Excel, JSON, XML or HTML, or syncs to Google Sheets.

### Pricing

This Actor uses Apify's **pay-per-event** model. No subscription and no rental; platform usage (compute and proxies) is included.

| Event | When it is charged | Price |
|---|---|---|
| `property-result` | each property pushed to your dataset | **US$2.50 per 1,000** |
| `property-details` | each listing page opened when `fetchDetails` is on | **US$1.50 per 1,000** |

So 1,000 properties cost **US$2.50** with search-card data, or **US$4.00** with full details. If Mercado Libre starts showing its anti-bot page, the Actor routes through residential proxies in the searched country at no extra cost to you.

### FAQ

**Is there an official Mercado Libre real-estate API?**
Mercado Libre's public API now requires OAuth for search and item data (it answers 403 without a token). This Actor reads the same public listing pages you see in your browser, over plain HTTP, with no login.

**Which locations work?**
Anything Mercado Libre has in its location tree: provinces/states, cities, partidos/alcaldías and neighbourhoods/colonias. Common aliases work too (`CABA`, `Buenos Aires` → Capital Federal; `CDMX`, `Ciudad de México` → Distrito Federal). Greater Buenos Aires is split by the site into `Bs.As. G.B.A. Norte`, `Sur` and `Oeste`. You can also type the site's own path (`capital-federal/palermo`) or paste a URL.

**How many results can one search return?**
Mercado Libre stops at **2,016 results per search** (42 pages × 48). To cover a large market, split it by neighbourhood, price band or bedrooms, or list several URLs in **Direct search URLs**. The stable `id` makes merging trivial.

**Why do some projects have ranges and "from" prices?**
New developments advertise a whole building. Their price is the cheapest unit (`priceIsFrom: true`) and rooms / surface come as min–max ranges (`bedrooms`–`bedroomsMax`, ...). Filter `isProject = false` (or set **listing type** to individual) if you only want resale and rental units.

**Do I need a proxy?**
No. The Actor connects directly. If Mercado Libre answers with its account-verification page (it does this to many datacenter IPs), the Actor switches automatically to Apify residential proxies in Argentina or Mexico. That proxy cost is included in the event prices.

**What about Colombia, Peru, Uruguay or Chile?**
Mercado Libre's portals in Colombia, Peru and Uruguay currently answer automated HTTP clients with a JavaScript challenge, so they aren't supported. For Chile, use our **Portal Inmobiliario Scraper** (Mercado Libre's Chilean property portal).

**Is the price for temporary rentals per night or per month?**
It's the price exactly as published. For short-term rentals the period is chosen by the owner and isn't stated in a structured field, so check `title` / `description` when it matters.

**Is this legal?**
The Actor only collects publicly visible listing data, the same information any visitor sees, and it doesn't log in. It doesn't collect names of private sellers or individual agents: `sellerName` is only filled for agencies and official stores. You are responsible for using the data in line with Mercado Libre's terms and the data-protection laws that apply to you (Argentina's Ley 25.326, Mexico's LFPDPPP, the GDPR...).

### En español

**Mercado Libre Inmuebles Scraper** extrae avisos de propiedades de Mercado Libre **Argentina** y **México**: precio (ARS, MXN o USD, más conversión a dólares), ambientes, dormitorios / recámaras, baños, m² cubiertos y totales, dirección, barrio / colonia, ciudad, provincia / estado y fotos. Con el complemento de detalle suma coordenadas GPS, fecha de publicación, tipo de vendedor, expensas / mantenimiento, ficha técnica completa y descripción.

- Filtrá por país, operación (venta, alquiler, alquiler temporario / renta vacacional), tipo de inmueble, ubicación (`Palermo`, `Rosario`, `Nordelta, Tigre`, `Polanco, Miguel Hidalgo, CDMX`), rango de precio, dormitorios y emprendimientos vs. propiedades individuales. También podés pegar cualquier URL de búsqueda del sitio.
- Orden por defecto: **más recientes primero**, ideal para monitoreo diario de nuevas publicaciones y bajas de precio.
- Precio: **US$2,50 cada 1.000 propiedades**, y **US$1,50 cada 1.000** fichas de detalle si activás `fetchDetails`. Sin suscripción.
- Exportá a CSV, Excel, JSON o Google Sheets, o integrá por API, webhooks, Zapier o Make.

# Actor input Schema

## `country` (type: `string`):

Which Mercado Libre property portal to search: Argentina (inmuebles.mercadolibre.com.ar) or Mexico (inmuebles.mercadolibre.com.mx).

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

`sale` = venta, `rent` = alquiler (AR) / renta (MX), `temporary_rent` = alquiler temporario (AR) / renta vacacional (MX).

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

Property category. A few types exist in only one country (PH, parking, country house and business in Argentina; building and room in Mexico) — the run fails with a clear message if you pick one the selected country doesn't have.

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

Free text: a state/province (`Capital Federal`, `Córdoba`, `Jalisco`, `CDMX`), a city (`Rosario`, `Zapopan`, `Monterrey`) or a neighbourhood (`Palermo`). If the site doesn't recognise a neighbourhood on its own, write it from most to least specific, separated by commas: `Nordelta, Tigre` or `Polanco, Miguel Hidalgo, CDMX`. You can also paste the site's own path (`capital-federal/palermo`). Leave empty to search the whole country. If the location can't be matched, the run fails with a clear error instead of returning nationwide or keyword results.

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

Stop after this many properties. The site serves 48 listings per page and caps any single search at 2,016 results (42 pages) — narrow the filters (neighbourhood, price band, bedrooms) or add several direct URLs to cover a large market.

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

Visit each listing's own page (1 extra request per property) to add GPS coordinates, publication date, seller type (agency vs. owner), condition, parking, exact rooms/bedrooms/bathrooms, monthly expenses (expensas / mantenimiento), the full spec table, the description and the full photo gallery. Each detail page is charged as a "property details" event on top of the listing event. Off = faster, cheaper runs with search-card data only.

## `listingType` (type: `string`):

`individual` = resale / rental units (propiedades individuales); `projects` = new developments sold off-plan (emprendimientos / desarrollos), whose price is a "from" price and whose rooms and surface are min–max ranges. With `all`, relevance sorting often lists projects first.

## `priceMin` (type: `integer`):

Minimum price in the selected price currency. 0 = no minimum.

## `priceMax` (type: `integer`):

Maximum price in the selected price currency. 0 = no maximum.

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

Currency of the price filter: the local currency (ARS in Argentina, MXN in Mexico) or US dollars. Argentine sales are mostly listed in USD and rentals in ARS; the site converts, so a USD band also matches peso-priced listings. This only affects the filter — each result reports its own listed currency plus a `priceUsd` conversion.

## `bedrooms` (type: `string`):

Exact number of bedrooms (dormitorios / recámaras). `studio` = monoambiente (0 bedrooms), `4+` = four or more.

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

`newest` (default) returns the most recently published listings first — the right choice for monitoring and for a representative sample of the market. `relevance` is the site's own order, which in big cities puts new-development projects first.

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

Instead of the filters above, paste one or more search-results URLs copied from inmuebles.mercadolibre.com.ar or inmuebles.mercadolibre.com.mx after applying any filters you like on the site (amenities, surface, age, keyword...). When this list is not empty, the filter fields above are ignored. Max properties applies to all URLs together.

## `proxyConfiguration` (type: `object`):

Optional. By default the Actor connects directly and, if Mercado Libre answers with its anti-bot verification page (it does for datacenter IPs, including Apify's), switches automatically to Apify RESIDENTIAL proxies in the searched country (AR or MX). You don't need to change this.

## Actor input object example

```json
{
  "country": "AR",
  "operation": "sale",
  "propertyType": "apartment",
  "location": "Capital Federal",
  "maxItems": 50,
  "fetchDetails": false,
  "listingType": "all",
  "priceMin": 0,
  "priceMax": 0,
  "priceCurrency": "local",
  "bedrooms": "any",
  "sort": "newest",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `properties` (type: `string`):

All property listings collected during the run

## `summary` (type: `string`):

Resolved search URLs, totals reported by the site, pages, detail errors and bytes downloaded

# 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 = {
    "country": "AR",
    "location": "Capital Federal",
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("fabrikit/mercadolibre-inmuebles-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 = {
    "country": "AR",
    "location": "Capital Federal",
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("fabrikit/mercadolibre-inmuebles-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 '{
  "country": "AR",
  "location": "Capital Federal",
  "maxItems": 50
}' |
apify call fabrikit/mercadolibre-inmuebles-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,fabrikit/mercadolibre-inmuebles-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/3OsUVe67Puniumr2c/builds/VmGIhB6fEOnco2q5M/openapi.json
