MercadoLibre Product & Price Scraper (LATAM)
Pricing
from $6.15 / 1,000 results
MercadoLibre Product & Price Scraper (LATAM)
Scrape MercadoLibre product listings and prices across 18 countries including Mexico, Argentina and Brazil. Extract title, price, currency, discount, seller, rating, stock, sold quantity and images. Export to JSON, CSV or Excel. No login needed.
Pricing
from $6.15 / 1,000 results
Rating
5.0
(2)
Developer
Scrapers Lat
Maintained by CommunityActor stats
1
Bookmarked
55
Total users
19
Monthly active users
3 days ago
Last modified
Categories
Share
MercadoLibre Product & Price Scraper (LATAM)
Here is one real result, with every field the actor returns for a search listing:
{"imageUrl": "https://http2.mlstatic.com/D_NQ_NP_2X_915570-MLA115292753441_072026-F.webp","title": "Notebook Lenovo Ideapad Slim 3 Ryzen 5 40 8gb 256gb Ssd Pantalla 15,6 Full Hd Windows 11","price": 899999,"currency": "ARS","originalPrice": null,"discountPercentage": null,"sellerName": "EW Electro World","freeShipping": true,"category": "MLA-NOTEBOOKS","listingId": "MLA1932840933","url": "https://articulo.mercadolibre.com.ar/MLA-1932840933","catalogProductId": "MLA75901817","categoryId": "MLA1652","domainId": "MLA-NOTEBOOKS","position": -1,"installments": {"quantity": 6,"amount": 202484,"currency": "ARS","interestFree": false,"text": "6 cuotas de 202484"},"promotions": [{ "type": "coupon", "text": "Cupón OFF" }],"dealType": "commercial_event","dealEndsAt": null,"condition": null,"ratingAverage": null,"unitsSold": 25,"officialStore": true,"shippingText": null,"fulfillment": false,"fastShipping": false,"internationalItem": false,"originCountry": null,"observedAt": "2026-08-10T14:03:44.921Z","error": null}
The most complete MercadoLibre scraper available. It returns every field the search card exposes for each listing (price, installments, promotions, seller and shipping flags), adds catalog and category identifiers, and with detail scraping on it opens each product page for attributes, description, the full image gallery, seller identity, stock and reviews across 18 LATAM country sites.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
The actor loads a MercadoLibre search or listing results page (from a startUrl, or built from a searchTerm plus country), paginates through the matching products, and writes one normalized record per listing to the run's dataset. Each record carries title, price, currency, original price and discount, installments, promotions, seller name, shipping and fulfillment flags, and catalog and category identifiers.
Coverage spans 18 MercadoLibre country sites: Argentina, Mexico, Brazil, Colombia, Chile, Peru, Uruguay, Venezuela, Bolivia, Paraguay, Ecuador, Costa Rica, Panama, Dominican Republic, Guatemala, Honduras, Nicaragua and El Salvador.
With withDetails on (the default), the actor opens each product page to add attributes, description, the full image gallery, seller identity, available stock, review counts, warranty, logistics and catalog paths. Missing source values are returned as null, never invented.
Quickstart
Open the actor, paste this into the input, and press Run. It returns up to 10 notebook listings from MercadoLibre Argentina with product detail enrichment.
{"searchTerm": "notebook","country": "ar","withDetails": true,"maxListings": 10}
You can instead pass a full search URL, which keeps any filters encoded in it:
{"startUrl": "https://listado.mercadolibre.com.mx/iphone-15","maxListings": 20}
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
startUrl | string | no | (a sample notebook URL) | A MercadoLibre search or listing results URL, for example https://listado.mercadolibre.com.ar/notebook. Filters encoded in the URL (category, condition, price, location) are respected. Takes precedence over searchTerm + country. |
searchTerm | string | no | (empty) | Keyword to search for. Used with country when no startUrl is given. |
country | enum | no | ar | MercadoLibre country site to search: ar, mx, br, co, cl, pe, uy, ve, bo, py, ec, cr, pa, do, gt, hn, ni, sv. |
condition | enum | no | (any) | new, used, or refurbished. Applied when using searchTerm. |
priceMin | integer | no | (any) | Only items priced at or above this value (local currency). Applied with searchTerm. |
priceMax | integer | no | (any) | Only items priced at or below this value (local currency). Applied with searchTerm. |
minDiscount | integer | no | (any) | Only items with at least this discount percentage. Applied with searchTerm. |
freeShipping | boolean | no | false | Only items that ship for free. Applied with searchTerm. |
fullFulfillment | boolean | no | false | Only items fulfilled by Mercado Envios FULL. Applied with searchTerm. |
officialStore | boolean | no | false | Only items sold by official brand stores. Applied with searchTerm. |
sort | enum | no | relevance | Result ordering: relevance, price_asc, price_desc. Applied with searchTerm. |
withDetails | boolean | no | true | When on, each product page is opened to add attributes, description, full image gallery, seller identity, stock, reviews and logistics. Slower but richer. |
maxListings | integer | no | 10 | Maximum listings to collect. |
proxyUrl | string (secret) | no | (built-in proxy) | Optional. Route through your own residential or mobile proxy (http://user:pass@host:port). Strongly recommended for large or reliable runs; MercadoLibre heavily rate-limits shared datacenter IPs. |
proxySessionCookie | string (secret) | no | (none) | Optional. A signed-in MercadoLibre Cookie header from your own browser session, reused for a higher success rate. Use only cookies you are authorized to use. |
Filters passed via searchTerm are applied by the actor; a startUrl keeps whatever filters are already encoded in it.
Output reference
One dataset item per listing. Types: string, integer, number, boolean, string[], object, or null when the source value is absent. Fields marked (detail) are populated only when withDetails is on.
| Field | Type | Description |
|---|---|---|
imageUrl | string | Main listing image. |
title | string | Product title. |
price | integer | Current price in the site's local currency. |
currency | string | Currency code, for example ARS, MXN, BRL. |
originalPrice | integer | List price before discount, or null. |
discountPercentage | integer | Discount percentage, or null. |
sellerName | string | Seller or store name shown on the card. |
freeShipping | boolean | Whether the item ships for free. |
category | string | Category or domain label, for example MLA-NOTEBOOKS. |
listingId | string | MercadoLibre item id, for example MLA1932840933. |
url | string | Direct link to the listing. |
catalogProductId | string | Catalog product id when the item maps to a catalog entry. |
categoryId | string | Numeric category id, for example MLA1652. |
domainId | string | Domain id, for example MLA-NOTEBOOKS. |
position | integer | Position of the item in the results, -1 when not reported. |
installments | object | Installment plan: quantity, amount, currency, interestFree, text. |
promotions | object[] | Promotions on the card, each with type and text. |
dealType | string | Deal or highlight type, for example commercial_event, or null. |
dealEndsAt | string | Countdown end time for lightning deals, or null. |
condition | string | Item condition (new, used), or null when not on the card. |
ratingAverage | number | Average rating, or null. |
unitsSold | integer | Units sold, when reported. |
officialStore | boolean | Whether the seller is an official brand store. |
shippingText | string | Free-text shipping label, or null. |
fulfillment | boolean | Whether the item ships via Mercado Envios FULL. |
fastShipping | boolean | Whether fast shipping is advertised. |
internationalItem | boolean | Whether the item ships internationally. |
originCountry | string | Origin country when flagged as an international item. |
catalogUrl | string | Catalog page URL (detail). |
attributes | object[] | Product spec attributes, name/value pairs (detail). |
description | string | Full product description (detail). |
images | string[] | Full image gallery URLs (detail). |
brand | string | Brand parsed from attributes (detail). |
model | string | Model parsed from attributes (detail). |
warranty | string | Warranty terms parsed from attributes (detail). |
seller | object | Seller identity: name, id, power seller status (detail). |
availableStock | integer | Available stock reported on the product page (detail). |
soldQuantity | integer | Total sold quantity from the product page (detail). |
reviewsCount | integer | Number of reviews (detail). |
reviewsWithComment | integer | Reviews that include a written comment (detail). |
reviewsWithPhotos | integer | Reviews that include photos (detail). |
variants | object | Variant pickers (color, size, and similar) (detail). |
categoryPath | string[] | Category id path (detail). |
categoryPathNames | string[] | Human-readable category path (detail). |
logisticType | string | Logistics type (detail). |
shippingMode | string | Shipping mode (detail). |
tags | string[] | Item tags reported by the product page (detail). |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
error | string | null on success. On a failed run, a single item with a populated error field is written instead. |
Example output record
Real record from a live run (input {"startUrl":"https://listado.mercadolibre.com.ar/notebook","withDetails":false,"maxListings":10}). Detail fields above appear when withDetails is on.
{"imageUrl": "https://http2.mlstatic.com/D_NQ_NP_2X_915570-MLA115292753441_072026-F.webp","title": "Notebook Lenovo Ideapad Slim 3 Ryzen 5 40 8gb 256gb Ssd Pantalla 15,6 Full Hd Windows 11","price": 899999,"currency": "ARS","originalPrice": null,"discountPercentage": null,"sellerName": "EW Electro World","freeShipping": true,"category": "MLA-NOTEBOOKS","listingId": "MLA1932840933","url": "https://articulo.mercadolibre.com.ar/MLA-1932840933","catalogProductId": "MLA75901817","categoryId": "MLA1652","domainId": "MLA-NOTEBOOKS","position": -1,"installments": { "quantity": 6, "amount": 202484, "currency": "ARS", "interestFree": false, "text": "6 cuotas de 202484" },"promotions": [ { "type": "coupon", "text": "Cupón OFF" } ],"dealType": "commercial_event","dealEndsAt": null,"condition": null,"ratingAverage": null,"unitsSold": 25,"officialStore": true,"fulfillment": false,"fastShipping": false,"internationalItem": false,"observedAt": "2026-08-10T14:03:44.921Z","error": null}
Run via API and CLI
Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~mercadolibre-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"searchTerm":"notebook","country":"ar","withDetails":true,"maxListings":25}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~mercadolibre-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"startUrl":"https://listado.mercadolibre.com.mx/iphone-15","maxListings":100}'
Apify CLI:
apify call scrapers_lat/mercadolibre-scraper \--input '{"searchTerm":"drone","country":"mx","freeShipping":true,"maxListings":50}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.
Billing and limits
This actor uses pay-per-event billing. Every event is listed below. See the pricing tab for the live prices.
| Event | When it is charged |
|---|---|
apify-actor-start | Once per run, for every user, when the run starts. Covers the fixed compute and residential proxy setup cost of a run. |
result | Once per product record written to the dataset (the primary event). |
details | Once per product when the product page is fetched and detail enrichment is added (attributes, description, image gallery, seller reputation, stock, sold quantity, variants, catalog ids). Charged only when detail data is actually obtained. |
ai_summary | Optional add-on. Once per product when aiSummary is enabled and the AI produces a usable summary and selling points. Paid plans only. Charged only on usable output. |
- No charge on failure. If a run is blocked or errors, the actor writes a single item with a populated
errorfield and does not charge for it (onlyapify-actor-startapplies). Empty runs incur only the per-run start fee. - Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results and add-ons. - Free Apify plans are capped at 5 products per run, listing-only (no
detailsorai_summaryadd-ons). Upgrade to a paid plan for full product details, the AI summary add-on, and highermaxListings. - Rate limiting. MercadoLibre heavily rate-limits shared datacenter IPs and may serve a verification wall. For large or reliable runs, supply your own residential or mobile proxy via
proxyUrl, and optionally a session cookie viaproxySessionCookie. Blocked runs are never charged.
FAQ and troubleshooting
A run returned only an error record. Why?
MercadoLibre served a suspicious-traffic verification wall to the IP used. This is an IP-reputation block, not a bug. Supply a clean residential or mobile proxy via proxyUrl (and optionally proxySessionCookie) and rerun. Blocked runs are not charged.
How do I get product specs, description and the full image gallery?
Leave withDetails on (the default). The actor then opens each product page and adds attributes, description, images, seller, stock and review fields.
Should I use startUrl or searchTerm?
Use startUrl to reuse a search you already built on the site, filters included. Use searchTerm + country for a quick keyword search, and apply the filter inputs (condition, priceMin, freeShipping, and so on).
Which countries are supported?
All 18 MercadoLibre country sites, selected via country (or implied by the domain of your startUrl).
Why is discountPercentage null?
The listing has no active discount, or the card did not expose an original price. Missing values are returned as null, never invented.
Is this an official MercadoLibre tool? No. This actor is independent and has no affiliation with MercadoLibre. It reads only publicly listed data and does not use the official MercadoLibre API. Use it in accordance with MercadoLibre's terms.
Related scrapers
- Amazon Product Scraper: Amazon product listings, prices and details.
- OLX Scraper: classified listings across OLX marketplaces.
- Falabella Scraper: Falabella product listings and prices.
- Americanas Scraper: Americanas Brazil product listings.
- Amazon Reviews Scraper: Amazon product reviews.
- Walmart Product Scraper: Walmart product listings and prices.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool, not affiliated with MercadoLibre. Accesses only publicly available listing data and does not use the official MercadoLibre API. Use in accordance with MercadoLibre's terms of service.
