ssh.autos

Catalog / Real estate

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.

PER CALL · X402 / MPP From $0.02 per call 1 endpoint at api.ssh.autos. Pay in USDC, no account. See the endpoint
APIFY STORE Public actor Run it with your Apify account: bulk runs, schedules and exports. Open on Apify

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.

PRICE$0.02 per call, in USDC
RESULTUp to 20 per call
PAYMENTx402 or MPP · no account

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.

FieldTypeRequiredNotes
countrystringoptionalone of ar, cl; default "ar"
propertyTypestringoptional1–40 characters; default "departamentos"
operationstringoptionalone of venta, alquiler; default "venta"
provincestringoptionalup to 120 characters
citystringoptionalup to 120 characters
maxResultsintegeroptional1–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
FieldTypeNotes
idstringMercadoLibre item id from the detail URL (MLA123456789 / MLM123456789 / MLC123456789, dash-normalized); prefer listing_key when merging datasets.
listing_keystringComposite unique key: {source}:{itemId}, e.g. inmuebles.mercadolibre.com.ar:MLA123456789 or portalinmobiliario.com:MLC123456789 (canonical URL when the path carries no item id).
urlstringCanonical listing URL on mercadolibre.com.{ar|mx} or portalinmobiliario.com (Chile), query and fragment removed.
namestringListing title from the card link or the page's JSON-LD block.
pricenumberAdvertised 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…
currencystringISO 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…
countrystringSite country: AR, MX or CL.
typestringThe searched property type (departamentos, casas, terrenos, ...); 'inmuebles' for a pasted search URL that spans every type.
operationstringSearched operation: 'venta' or 'alquiler' (the site-native slug is venta/renta/arriendo); 'todas' for a pasted search URL that spans both.
locationstringLocation line from the card ('Palermo, Capital Federal' / 'Polanco, Miguel Hidalgo, Ciudad de México'); null on listings the card text does not place.
imagesarray of stringsListing image URLs from the card and JSON-LD (http2.mlstatic.com; src, srcset and lazy-load attributes, absolutized, placeholders dropped, deduplicated).
sourcestringSource website hostname (inmuebles.mercadolibre.com.ar / .com.mx, or portalinmobiliario.com for Chile).
roomsintegerRooms (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_minintegerLower bound of the printed room count. Equals rooms for a single value; null when rooms is null.
rooms_maxintegerUpper bound of the printed room count. Equals rooms_min for a single value; null when rooms is null.
rooms_is_rangebooleanTrue when the card printed a room span wider than one value; false for a single value, a missing value or an equal-bounds range.
bedroomsintegerBedrooms (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_minintegerLower bound of the printed bedroom count. Equals bedrooms for a single value; null when bedrooms is null.
bedrooms_maxintegerUpper bound of the printed bedroom count. Equals bedrooms_min for a single value; null when bedrooms is null.
bedrooms_is_rangebooleanTrue when the card printed a bedroom span wider than one value; false for a single value, a missing value or an equal-bounds range.
bathroomsintegerBathrooms (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_minintegerLower bound of the printed bathroom count. Equals bathrooms for a single value; null when bathrooms is null.
bathrooms_maxintegerUpper bound of the printed bathroom count. Equals bathrooms_min for a single value; null when bathrooms is null.
bathrooms_is_rangebooleanTrue 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_m2numberTotal 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_minnumberLower bound of the printed total surface. Equals surface_total_m2 for a single value; null when surface_total_m2 is null.
surface_total_m2_maxnumberUpper 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_rangebooleanTrue 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_m2numberCovered / 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_minnumberLower bound of the printed covered surface. Equals surface_covered_m2 for a single value; null when surface_covered_m2 is null.
surface_covered_m2_maxnumberUpper 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_rangebooleanTrue 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_kindstringSource-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_correspondencestringWhether 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_versionintegerVersion 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
attributesarray of stringsThe 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_atstringUTC ISO-8601 collection timestamp.

Example call

TERMINAL · $0.02 PER RUN
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

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.

Open on Apify

How x402 payment works

  1. Your client sends the request. The API answers 402 Payment Required with the price and where to pay.
  2. 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.
  3. 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

Some links to Apify are affiliate links. We may earn a commission if you sign up and become a paying customer.