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

1.0

(1)

Developer

Crawler Bros

Crawler Bros

Maintained by Community

Actor stats

0

Bookmarked

92

Total users

2

Monthly active users

5 months 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
priceMininteger—Minimum price in MXN
priceMaxinteger—Maximum price in MXN
startUrlsarray—Direct 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
idstring✓MercadoLibre item ID (e.g. MLM1018500855)
titlestring✓Product title
urlstring✓Full product URL
countryCodestring✓Always MX
scrapedAtstring✓UTC ISO 8601 scrape timestamp
pricenumber—Current price in MXN
originalPricenumber—Strikethrough / original price (before discount)
currencystring—Always MXN
currencySymbolstring—Currency symbol as displayed on the site
discountPercentagenumber—Percentage off (0–100)
conditionstring—new or used (refurbished items are mapped to used)
thumbnailstring—Product image URL
sellerNamestring—Seller / brand name
brandstring—Brand attribute
shippingLabelstring—Shipping badge text (e.g. Envío gratis)
ratingnumber—Seller or product star rating
reviewsCountnumber—Number 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.