# MercadoLibre Products Scraper (`lergassy/mercadolibre-products-scraper`) Actor

\[$2.50/1K products] Scrape MercadoLibre products in Mexico, Argentina, Colombia, Chile and 14 more marketplaces: price, original price, discount, instalments, rating, units sold, seller, free shipping. Plus reviews ($1/1K), deals and stores. No run fee.

- **URL**: https://apify.com/lergassy/mercadolibre-products-scraper.md
- **Developed by:** [Matvey](https://apify.com/lergassy) (community)
- **Categories:** E-commerce, Automation, AI
- **Stats:** 5 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.75 / 1,000 products

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

**MercadoLibre Products Scraper** extracts public product data from **Mercado Libre** in Mexico, Argentina, Colombia, Chile, Peru, Uruguay and the other Spanish-language marketplaces, without the official API: product cards from any search or category with **price, original price, discount %, instalments (*meses sin intereses* / *cuotas*), rating, review count, units sold, seller, official-store flag and free or Full shipping**. Product pages, buyer reviews, today's deals (*Ofertas*) and official stores (*tiendas oficiales*) come from the same Actor. **No login, no API key and no Mercado Libre developer account.** Export to JSON, CSV or Excel, call it from the API, schedule it, or connect it to n8n, Make, Zapier, Google Sheets or an AI agent through MCP.

Mexico is the default: an empty run searches mercadolibre.com.mx. Pick another country in **Country** or paste links from any Mercado Libre site.

> This is the products-focused edition of **[Mercado Libre Scraper](https://apify.com/lergassy/mercadolibre-reviews-scraper)** — same engine, same prices. For Brazil in Portuguese there is **[Mercado Livre Scraper](https://apify.com/lergassy/mercado-livre-scraper)**.

### What can it do?

| Mode | What you get | Input |
|---|---|---|
| 🔍 **Products from search** | Product cards: title, price, original price, discount %, instalments text, rating, review count, units sold, seller, official-store flag, free/Full shipping, sponsored flag, image, position | keywords, or `listado.mercadolibre.com.mx` / category URLs |
| 📦 **Product page** | Price, stock, specifications, description, gallery, seller, shipping, category breadcrumb | product URLs or IDs (`MLM…`, `MLA…`, `MCO…`) |
| ⭐ **Reviews** | Buyer reviews: stars, text, variant, date, helpful votes, photos, plus a rating-summary row per product | product URLs or IDs |
| 🔥 **Deals (Ofertas)** | Today's discounted products with old and new price | country or `/ofertas` URL |
| 🏪 **Official store** | Store profile and its featured products | `/tienda/…` URL |

Reviews and deals are read with plain HTTP requests. Search and product pages sit behind Mercado Libre's bot check, so the Actor opens them in a real browser through residential proxies of the same country. That is included in the per-result price.

### How much does it cost to scrape Mercado Libre?

Pay per result, **no fee per run**. Error rows and "nothing found" rows are free.

| Event | Price (Free plan) | Per 1,000 |
|---|---|---|
| Product (search card, deal or store product) | $0.0025 | **$2.50** |
| Product detail (full product page) | $0.025 | $25 |
| Review | $0.001 | **$1** |

Higher Apify plans pay less (product down to $1.75 per 1,000, review down to $0.70 per 1,000). The $5 monthly credit of the Apify Free plan covers about 2,000 product cards.

### How to scrape Mercado Libre products

1. Click **Try for free** (a free Apify account is enough).
2. Pick the **Country** (Mexico by default) and type your **Search keywords** — for example `audifonos bluetooth` — or paste **Mercado Libre URLs**.
3. Set **Max products** (50 per keyword or URL by default) and click **Start**.
4. Open the **Output** tab and download JSON, CSV, Excel, XML or HTML, or read the dataset through the API.

### ⬇️ Input examples

New notebooks in Chile from CLP 300,000, free shipping only, dearest first:

```json
{
  "country": "CL",
  "searchTerms": ["notebook lenovo"],
  "minPrice": 300000,
  "freeShippingOnly": true,
  "sort": "price_desc",
  "maxItems": 40
}
```

Running shoes in Argentina, cheapest new items first:

```json
{ "country": "AR", "searchTerms": ["zapatillas running"], "condition": "new", "sort": "price_asc", "maxItems": 30 }
```

Today's deals in Colombia:

```json
{ "mode": "deals", "country": "CO", "maxItems": 20 }
```

Search filters: `sort` (`relevance`, `price_asc`, `price_desc`), `condition` (`any`, `new`, `used`), `minPrice`, `maxPrice` (in the local currency), `freeShippingOnly`, `officialStoresOnly`, `includeSponsored`. Filters are applied to the cards the run collects, and the run walks extra pages to still reach your maximum.

### ⬆️ Output

One product card from a real run on 6 October 2026 (search `audifonos bluetooth`, Mexico):

```json
{
  "type": "product",
  "title": "Auriculares Inalámbricos Xiaomi Redmi Buds 6 Play Negro",
  "url": "https://www.mercadolibre.com.mx/auriculares-inalambricos-xiaomi-redmi-buds-6-play-negro/p/MLM39962085",
  "productId": "MLM39962085",
  "itemId": "MLM2237140863",
  "siteId": "MLM",
  "country": "MX",
  "currency": "MXN",
  "price": 235,
  "originalPrice": null,
  "discountPercent": null,
  "soldQuantity": 100000,
  "rating": 4.8,
  "reviewCount": 65161,
  "seller": "Xiaomi",
  "isOfficialStore": true,
  "freeShipping": false,
  "fullShipping": true,
  "shippingText": "Llega gratis mañana",
  "isSponsored": false,
  "imageUrl": "https://http2.mlstatic.com/D_Q_NP_2X_715678-MLU78765136521_082024-E.webp",
  "position": 10,
  "page": 1,
  "searchTerm": "audifonos bluetooth",
  "scrapedAt": "2026-10-06T02:10:20.695Z"
}
```

Every row has a `type` (`product`, `product_detail`, `deal`, `review`, `product_rating`, `store`, `error`), so one dataset can be split in a spreadsheet or in code. Prices are never converted: Mexican rows are in MXN, Argentine rows in ARS, and so on. Sponsored cards (`isSponsored: true`) link to the listing itself, not to Mercado Libre's ad-click counter.

### 🔁 Only new products — daily feed

Fill **Only new rows — memory name** (for example `mis-productos`) and schedule the Actor. Each later run with the same name writes and charges **only products you have not received before**.

### 🇪🇸 En español

**MercadoLibre Products Scraper** extrae datos públicos de Mercado Libre México, Argentina, Colombia, Chile y los demás países: productos de la búsqueda con precio, precio anterior, descuento, meses sin intereses o cuotas, calificación, vendidos, vendedor, tienda oficial y envío gratis/Full; además reseñas, ofertas del día y tiendas oficiales. Sin login y sin clave de API. Pagas por resultado: **US$ 2,50 por 1.000 productos**, sin cargo por ejecución. Escribe tu búsqueda en **Search keywords** (ej.: `audifonos bluetooth`), elige el país y pulsa **Start**. Exporta a CSV, Excel o JSON.

### Limits, honestly

- Search cards carry only what the card shows: a product without reviews has `rating: null`, one without a discount has `originalPrice: null`. The marketplace does not print brand or seller location on most cards, so those columns are usually empty — open product pages for the full record.
- Questions and answers are shown only to logged-in users, and this Actor never logs in.
- A search Mercado Libre answers with unrelated products (a typo, a made-up word) gives one free explanation row, not random products.
- If the site refuses several pages in a row, the run stops early, lists the untried searches in the `NOT_ATTEMPTED` record and charges nothing for them.

### ❓ FAQ

#### Is it legal to scrape Mercado Libre?

The Actor collects only data visible to any visitor and never logs in. You are responsible for using it in line with your country's data-protection law and Mercado Libre's terms.

#### Do I need a proxy?

No. Residential proxies of the right country are set automatically and included in the price. If you set your own proxies, they are used as given.

#### Which countries are supported?

Mexico, Argentina, Chile, Colombia, Peru, Uruguay, Ecuador, Venezuela, Bolivia, Paraguay, Dominican Republic, Costa Rica, Panama, Guatemala, Honduras, El Salvador, Nicaragua — and Brazil.

### Your feedback

A page that does not parse or a missing field? Open an issue in the **Issues** tab.

# Changelog

This Actor's version history is a separate document: https://apify.com/lergassy/mercadolibre-products-scraper/changelog.md

# Actor input Schema

## `mode` (type: `string`):

Choose the data type. <b>Products (search)</b> – product cards from keyword search or listing/category URLs. <b>Product details</b> – full product pages. <b>Reviews</b> – all reviews of the given products. <b>Deals</b> – today's deals from the Ofertas page. <b>Official store</b> – store profile and featured products. <b>Auto</b> picks by URL type. <b>Reviews</b> needs product URLs or item IDs, and <b>Store</b> needs a seller or official-store URL — a search term alone cannot produce those rows.

## `country` (type: `string`):

Marketplace to search in. Mexico (mercadolibre.com.mx) by default; Argentina, Colombia, Chile, Peru, Uruguay and the other Mercado Libre countries work too. Used for search keywords and deals; URLs keep their own country.

## `searchTerms` (type: `array`):

Products to search for, one per line, e.g. <code>audifonos bluetooth</code> or <code>iphone 15</code>. Each keyword is searched in the selected country (Mexico by default). Give this or <code>startUrls</code>; with neither, the run searches <code>audifonos bluetooth</code> on mercadolibre.com.mx as a demo.

## `startUrls` (type: `array`):

Any Mercado Libre links: search results, category pages, product pages (<code>/p/MLM…</code> or <code>MLM-…</code>), official stores (<code>/tienda/…</code>) or the deals page (<code>/ofertas</code>). Product IDs like <code>MLM4700406170</code> also work.

## `maxItems` (type: `integer`):

Stop after this many products per keyword or URL (search, deals, store modes).

## `maxReviewsPerProduct` (type: `integer`):

Reviews mode: how many reviews to collect for each product. All reviews are public buyer reviews with text.

## `reviewsRating` (type: `string`):

Reviews mode: keep only reviews with this star rating.

## `reviewsSort` (type: `string`):

Reviews mode: most relevant first (Mercado Libre default) or newest first.

## `sort` (type: `string`):

Order of the results. Applied to the rows this run collected, so it orders your export rather than the whole Mercado Libre catalogue.

## `condition` (type: `string`):

New, used or any. Applied to the collected rows, so the run walks extra pages to still reach your maximum.

## `minPrice` (type: `integer`):

Minimum price in the marketplace's currency. Applied to the collected rows, so the run walks extra pages to still reach your maximum.

## `maxPrice` (type: `integer`):

Maximum price in the marketplace's currency. Applied to the collected rows, so the run walks extra pages to still reach your maximum.

## `freeShippingOnly` (type: `boolean`):

Keep only listings with free shipping. Applied to the collected rows, so the run walks extra pages to still reach your maximum.

## `officialStoresOnly` (type: `boolean`):

Keep only listings sold by official brand stores. Applied to the collected rows, so the run walks extra pages to still reach your maximum.

## `includeSponsored` (type: `boolean`):

Keep paid (sponsored) placements in search results.

## `onlyNewRowsStore` (type: `string`):

Give this run a name — <code>my-products-watch</code> — and the Actor remembers every product row it delivered under that name. Every later run with the same name writes and charges <b>only rows you have not received before</b>. Schedule the Actor daily to get a feed of new products instead of the whole list each time. Leave empty to get everything found, every time.

## `proxyConfiguration` (type: `object`):

Search and product pages require <b>residential</b> proxies matched to the marketplace country (set automatically). Reviews, deals and store pages need no proxy.

## `maxConcurrency` (type: `integer`):

Parallel pages for search and product modes. Three is the safe default for Mercado Libre; above five the site starts returning challenge pages instead of data.

## `debugDumpHtml` (type: `boolean`):

Saves one rendered product page to the run's key-value store. For checking the parser against the live markup; leave off for normal runs.

## Actor input object example

```json
{
  "mode": "auto",
  "country": "MX",
  "searchTerms": [
    "audifonos bluetooth"
  ],
  "startUrls": [],
  "maxItems": 20,
  "maxReviewsPerProduct": 20,
  "reviewsRating": "all",
  "reviewsSort": "relevance",
  "sort": "relevance",
  "condition": "any",
  "freeShippingOnly": false,
  "officialStoresOnly": false,
  "includeSponsored": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  },
  "maxConcurrency": 3,
  "debugDumpHtml": false
}
```

# Actor output Schema

## `products` (type: `string`):

One row per Mercado Libre listing with price, instalments, discount, rating, units sold, seller and shipping flags; plus review rows, per-product rating summaries with the star breakdown, and official-store rows.

## `reviews` (type: `string`):

No description

## `runSummary` (type: `string`):

JSON counters for the run: rows delivered, filtered out, errors and request statistics.

## `notAttempted` (type: `string`):

JSON list of inputs the run did not reach (time limit or "Max cost per run"). Not charged — pass them as input to a new run to continue. Present only when the run stopped early.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchTerms": [
        "audifonos bluetooth"
    ],
    "startUrls": [],
    "maxItems": 20,
    "maxReviewsPerProduct": 20,
    "maxConcurrency": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("lergassy/mercadolibre-products-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchTerms": ["audifonos bluetooth"],
    "startUrls": [],
    "maxItems": 20,
    "maxReviewsPerProduct": 20,
    "maxConcurrency": 3,
}

# Run the Actor and wait for it to finish
run = client.actor("lergassy/mercadolibre-products-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchTerms": [
    "audifonos bluetooth"
  ],
  "startUrls": [],
  "maxItems": 20,
  "maxReviewsPerProduct": 20,
  "maxConcurrency": 3
}' |
apify call lergassy/mercadolibre-products-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,lergassy/mercadolibre-products-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/P6E21ahbq1Pq82mQx/builds/jdRiBjy7FTeQapA8Y/openapi.json
