MercadoLibre Product Scraper avatar

MercadoLibre Product Scraper

Pricing

from $1.00 / 1,000 results

Go to Apify Store
MercadoLibre Product Scraper

MercadoLibre Product Scraper

Scrape products from MercadoLibre across Mexico. Returns product title, price, currency, condition, seller, thumbnail, and permalink.

Pricing

from $1.00 / 1,000 results

Rating

5.0

(11)

Developer

Crawler Bros

Crawler Bros

Maintained by Community

Actor stats

9

Bookmarked

26

Total users

15

Monthly active users

4 days ago

Last modified

Share

MercadoLibre Mexico Product Scraper

Scrape products from MercadoLibre Mexico. Returns product ID, title, URL, price (MXN), original price, discount, condition (new/used), seller, brand, rating, thumbnail, and shipping info. Supports condition + price-range filters.

What it does

  • Scrapes MercadoLibre Mexico (listado.mercadolibre.com.mx) search results
  • Filter by condition (new / used) and priceMin / priceMax (in MXN)
  • Hardcoded MX-residential proxy handles MercadoLibre's account-verification block wall
  • Automatic session rotation across 5 chrome/firefox impersonate profiles — up to 6 retries on flagged sessions
  • Clean, non-null output — empty fields are omitted from records

Why only Mexico? MercadoLibre's anti-bot is country-specific. Argentina, Brazil, and the smaller LatAm markets (CL/CO/PE/UY/VE/EC/DO/CR) reliably block every retry from Apify's residential proxy pool — they were removed from this actor's input rather than ship a country option that always fails.

Input

FieldTypeDefaultDescription
countryenumMXAlways MX (Mexico — only supported country)
searchQuerystring"iphone"Free-text keyword (required unless startUrls is set)
conditionenumanyany / new / used
priceMinintegerMinimum price in MXN
priceMaxintegerMaximum price in MXN
startUrlsarrayDirect MercadoLibre Mexico search URLs (override structured filters)
maxItemsinteger50Maximum results to return (1–1000)

Example input

{
"country": "MX",
"searchQuery": "iphone",
"condition": "new",
"priceMin": 10000,
"priceMax": 30000,
"maxItems": 20
}

Output

Each product is a JSON record with the following fields (missing fields are omitted, never null):

FieldTypeAlways presentDescription
idstringMercadoLibre item ID (e.g. MLM1018500855)
titlestringProduct title
urlstringFull product URL
countryCodestringAlways MX
scrapedAtstringUTC ISO 8601 scrape timestamp
pricenumberCurrent price in MXN
originalPricenumberStrikethrough / original price (before discount)
currencystringAlways MXN
currencySymbolstringCurrency symbol as displayed on the site
discountPercentagenumberPercentage off (0–100)
conditionstringnew or used (refurbished items are mapped to used)
thumbnailstringProduct image URL
sellerNamestringSeller / brand name
brandstringBrand attribute
shippingLabelstringShipping badge text (e.g. Envío gratis)
ratingnumberSeller or product star rating
reviewsCountnumberNumber of reviews

Sample output

{
"id": "MLM3681392425",
"title": "Apple iPhone 16 (128 GB) - Rosa - Distribuidor Autorizado",
"url": "https://www.mercadolibre.com.mx/apple-iphone-16-128-gb-rosa/...",
"countryCode": "MX",
"price": 16999,
"currency": "MXN",
"currencySymbol": "$",
"condition": "new",
"thumbnail": "https://http2.mlstatic.com/D_Q_NP_2X_...webp",
"sellerName": "Apple",
"shippingLabel": "Envío gratis",
"scrapedAt": "2026-05-01T07:00:00Z"
}

FAQ

Do I need a proxy? No configuration needed — an Apify residential MX proxy is applied automatically. MercadoLibre blocks direct datacenter access and even many residential sessions, so the scraper rotates proxy session IDs up to 6 times per run with 5 different curl_cffi browser-impersonate profiles (Chrome 133/131/124/120, Firefox 133). The first half of attempts use Mexico residential IPs; the second half falls back to any residential IP for resilience.

Why only Mexico? MercadoLibre's anti-bot is country-specific, and Apify's residential proxy pool quotas vary heavily by country. Argentina, Brazil, Chile, Colombia, Peru, Uruguay, Venezuela, Ecuador, Dominican Republic, and Costa Rica all returned hard-block stub responses on every residential session in our testing — they were removed from the input rather than ship a country option that always degrades to a sentinel record. Mexico is currently the only LatAm market with a reliable residential pool for MercadoLibre scraping.

How do condition and priceMin / priceMax filters work? The actor first attempts MercadoLibre's path-based filter URLs (_PriceRange_min-max, _ITEM*CONDITION_<id>) and then re-applies the same filters client-side after parsing, since MercadoLibre's server-rendered HTML returns the unfiltered listing and applies filters in client JS. So filters always work on the output regardless of MercadoLibre's rendering path.

How many results can I get per run? Up to 1,000 items. Each search page returns 40–50 cards; for filter-narrowed queries the page may yield fewer matches.

Does the scraper call MercadoLibre's public API? No. api.mercadolibre.com now returns 403 for anonymous traffic. The scraper uses the HTML search listings page at listado.mercadolibre.com.mx/<query> and parses the poly-card server-rendered product tiles.

What happens if the residential pool is fully blocked? On rare days when every retry returns a stub page, the actor emits a single mercadolibre_blocked sentinel record (with type, reason, message, scrapedAt) and exits successfully. Re-run a few minutes later for fresh residential IPs.

How fresh is the data? Every run hits the live search page. Prices and availability are always current.

Use cases

  • Price monitoring — daily runs to track Mexico market prices
  • Trend research — ingest product names and prices across major keywords
  • Refurbished-market analysis — filter condition=used to map the secondary market
  • Inventory alerts — monitor specific SKUs via the startUrls override

Notes

  • Pricing is configured in the Apify UI (pay-per-result).
  • MercadoLibre's HTML can change; if the scraper starts returning 0 items, check the poly-card class markers in src/main.py:parse_search_html.
  • The daily Apify test run uses country=MX, searchQuery=iphone, maxItems=5.