REAL ESTATE · MEXICO, ARGENTINA, CHILE
Mercado Libre Inmuebles: Argentina, Mexico & Chile
Paste any search URL or filter by region, city and property type; get one record per listing with price, currency, location, rooms, surface, photos and URL.
About this data
Paste any search URL or filter by region, city and property type; get one record per listing with price, currency, location, rooms, surface, photos and URL.
From the actor’s Apify Store listing. The per-call endpoint may return a bounded subset; its own description is below.
Buy per call over x402
One endpoint at api.ssh.autos. Each call is one JSON POST, paid in USDC with no account or API key, and answered in the same HTTP response.
MercadoLibre Argentina & Portal Inmobiliario Chile
POST /v1/latam/mercadolibre/property
Search one property type, sale or rent, on MercadoLibre Argentina or Portal Inmobiliario Chile.
Returns up to 20 listings from one page with listing links, names, prices, currencies, images and published location.
Bedrooms, bathrooms and covered floor area are included where present.
Native location validation rejects dropped filters.
No property details or seller profiles are requested.
Input
Send a JSON body to POST https://api.ssh.autos/v1/latam/mercadolibre/property.
| Field | Type | Required | Notes |
|---|---|---|---|
country | string | optional | one of ar, cl; default "ar" |
propertyType | string | optional | 1–40 characters; default "departamentos" |
operation | string | optional | one of venta, alquiler; default "venta" |
province | string | optional | up to 120 characters |
city | string | optional | up to 120 characters |
maxResults | integer | optional | 1–20; default 10 |
Returned fields
The answer is JSON: records, a list of up to 20, and summary, the run status and counts. Each record has these 37 fields; a field the source does not publish comes back null.
37 fields per record
| Field | Type | Notes |
|---|---|---|
id | string | MercadoLibre item id from the detail URL (MLA123456789 / MLM123456789 / MLC123456789, dash-normalized); prefer listing_key when merging datasets. |
listing_key | string | Composite unique key: {source}:{itemId}, e.g. inmuebles.mercadolibre.com.ar:MLA123456789 or portalinmobiliario.com:MLC123456789 (canonical URL when the path carries no item id). |
url | string | Canonical listing URL on mercadolibre.com.{ar|mx} or portalinmobiliario.com (Chile), query and fragment removed. |
name | string | Listing title from the card link or the page's JSON-LD block. |
price | number | Advertised price ('$ 95.000' / '$ 4,500,000' / 'USD 180.000' → 95000 / 4500000 / 180000; grouping stripped, cents rounded away; the largest anchored amount wins over teaser figures). Chilean UF price… |
currency | string | ISO currency of the advertised price: ARS, MXN or CLP (a bare '$' resolves per country), CLF for Chilean prices in UF (unidades de fomento, not converted), or USD (USD / U$S / US$ marked listings). N… |
country | string | Site country: AR, MX or CL. |
type | string | The searched property type (departamentos, casas, terrenos, ...); 'inmuebles' for a pasted search URL that spans every type. |
operation | string | Searched operation: 'venta' or 'alquiler' (the site-native slug is venta/renta/arriendo); 'todas' for a pasted search URL that spans both. |
location | string | Location line from the card ('Palermo, Capital Federal' / 'Polanco, Miguel Hidalgo, Ciudad de México'); null on listings the card text does not place. |
images | array of strings | Listing image URLs from the card and JSON-LD (http2.mlstatic.com; src, srcset and lazy-load attributes, absolutized, placeholders dropped, deduplicated). |
source | string | Source website hostname (inmuebles.mercadolibre.com.ar / .com.mx, or portalinmobiliario.com for Chile). |
rooms | integer | Rooms (ambientes) shown on the search card; 'Monoambiente' is 1. For a development listed as a range ('1 a 2 ambs.') this scalar is the smallest value; rooms_min / rooms_max show the span and rooms_i… |
rooms_min | integer | Lower bound of the printed room count. Equals rooms for a single value; null when rooms is null. |
rooms_max | integer | Upper bound of the printed room count. Equals rooms_min for a single value; null when rooms is null. |
rooms_is_range | boolean | True when the card printed a room span wider than one value; false for a single value, a missing value or an equal-bounds range. |
bedrooms | integer | Bedrooms (dormitorios / recámaras) shown on the search card; 0 for a studio. For a range this scalar is the smallest value; bedrooms_min / bedrooms_max show the span. Null when the card does not show… |
bedrooms_min | integer | Lower bound of the printed bedroom count. Equals bedrooms for a single value; null when bedrooms is null. |
bedrooms_max | integer | Upper bound of the printed bedroom count. Equals bedrooms_min for a single value; null when bedrooms is null. |
bedrooms_is_range | boolean | True when the card printed a bedroom span wider than one value; false for a single value, a missing value or an equal-bounds range. |
bathrooms | integer | Bathrooms (baños) shown on the search card. For a range this scalar is the smallest value; bathrooms_min / bathrooms_max show the span. Null when the card does not show it. |
bathrooms_min | integer | Lower bound of the printed bathroom count. Equals bathrooms for a single value; null when bathrooms is null. |
bathrooms_max | integer | Upper bound of the printed bathroom count. Equals bathrooms_min for a single value; null when bathrooms is null. |
bathrooms_is_range | boolean | True when the card printed a bathroom span wider than one value; false for a single value, a missing value or an equal-bounds range. |
surface_total_m2 | number | Total surface in m² (card 'm² totales', lot 'm² terreno' or an unqualified 'm²'). For a range this scalar is the smallest value; surface_total_m2_min / surface_total_m2_max show the span. Null when t… |
surface_total_m2_min | number | Lower bound of the printed total surface. Equals surface_total_m2 for a single value; null when surface_total_m2 is null. |
surface_total_m2_max | number | Upper bound of the printed total surface. Equals surface_total_m2_min for a single value; null when surface_total_m2 is null. |
surface_total_m2_is_range | boolean | True when the card printed a total-surface span wider than one value; false for a single value, a missing value or an equal-bounds range. |
surface_covered_m2 | number | Covered / built surface in m² (card 'm² cubiertos' or 'm² construidos'). For a range this scalar is the smallest value; surface_covered_m2_min / surface_covered_m2_max show the span. Null when the ca… |
surface_covered_m2_min | number | Lower bound of the printed covered surface. Equals surface_covered_m2 for a single value; null when surface_covered_m2 is null. |
surface_covered_m2_max | number | Upper bound of the printed covered surface. Equals surface_covered_m2_min for a single value; null when surface_covered_m2 is null. |
surface_covered_m2_is_range | boolean | True when the card printed a covered-surface span wider than one value; false for a single value, a missing value or an equal-bounds range. |
listing_kind | string | Source-stated posting kind. The card pill states it and wins over the title: an EMPRENDIMIENTO (Argentina) or PROYECTO (Chile) badge is 'development' even when the title reads like one property. With… one of unit, development, unknown |
unit_correspondence | string | Whether the card shows a single value for each detail it prints - not whether the unit was verified. 'matched' only when none of the five measurement fields is a range, the price is not a 'Desde' (fr… one of matched, unknown |
range_fields_version | integer | Version of the range qualification shape: min/max/is_range companions for rooms, bedrooms, bathrooms, surface_total_m2 and surface_covered_m2, plus listing_kind and unit_correspondence. Version 1 mea… always 1 |
attributes | array of strings | The search card's attribute line, verbatim and in card order (e.g. ['2 ambs.', '1 baño', '44 m² cubiertos']); empty when the card shows none. |
scraped_at | string | UTC ISO-8601 collection timestamp. |
Example call
npx agentcash@latest fetch https://api.ssh.autos/v1/latam/mercadolibre/property -m POST -b '{"country": "ar", "maxResults": 5}'
The example values come from the API spec or the actor’s own sample input. Running it is a paid call.
What is and isn’t charged
You pay the call price for
- An answer, including a definitive “not found” or an empty result.
- Confirmed no matches returns records: [] (charged: it is an answer).
Free
- Invalid input (422), busy (503), source failure (502), timeout (504) and calls whose client hung up are never charged.
- Invalid input and source failures are not charged.
Prefer a subscription? Run it on Apify
This data source is a public actor on the Apify Store: Mercado Libre Inmuebles Scraper: Argentina, Mexico & Chile API. Run it with your Apify account and plan for larger, scheduled or exported runs; it may offer more input options than the per-call endpoint.
How x402 payment works
- Your client sends the request. The API answers
402 Payment Requiredwith the price and where to pay. - The client pays from its own wallet: USDC on Base or Solana over x402, or over MPP on Tempo. No account, sign-up or API key.
- The client retries with the payment attached and gets the JSON answer in the same call. You are only charged for answers.
The AgentCash CLI in the example does all three steps for you and pays from your AgentCash wallet. Any x402 or MPP client works the same way.
Machine-readable: openapi.json · llms.txt