# Mercado Libre Price Tracker – Official Store Monitor (`ener90/mercadolibre-seller-price-monitor`) Actor

Monitor Mercado Libre official stores (featured products) and get only what changed: price drops/increases, previous price, discount, new and removed products. CL, AR, MX, BR, CO and more. No login needed.

- **URL**: https://apify.com/ener90/mercadolibre-seller-price-monitor.md
- **Developed by:** [René Del Valle Rodríguez](https://apify.com/ener90) (community)
- **Categories:** E-commerce, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$2.00 / 1,000 detected changes

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## Mercado Libre Price Tracker & Monitor – Official Stores

🇪🇸 [Español](#español) · 🇬🇧 [English](#english)

### 💲 Precio y costos / Pricing & cost examples

**US$0.002 por cambio detectado** (US$2 por 1.000). La línea base y las ejecuciones sin cambios no cobran eventos. **US$0.002 per detected change**; baseline and no-change runs charge no events.

| Ejemplo / Example | Cambios al mes / Changes per month | Costo aprox. / Approx. cost |
|---|---|---|
| 1 tienda, diario / 1 store, daily (~3 cambios/día) | ~90 | ~US$0.18 |
| 5 tiendas, diario / 5 stores, daily (~10/día) | ~300 | ~US$0.60 |
| 20 tiendas, cada hora / 20 stores, hourly (~100/día) | ~3,000 | ~US$6.00 |

### 🎯 Filtros / Filters

- `minChangePercent`: ignora cambios de precio menores a X % (no se cobran). Ignores price changes below X% (not charged).
- `onlyPriceDrops`: solo bajadas de precio. Price drops only.
- Vista **Price history** en el dataset. **Price history** dataset view.

### ⏰ Uso típico: alertas diarias / Typical use: daily alerts

1. Guarda tu input como **Task** y crea un **Schedule** (ej. todos los días a las 9:00). Save your input as a Task and add a Schedule.
2. En la Task, agrega una **integración**: Slack, email o webhook "Run succeeded". Add a Slack/email/webhook integration.
3. Solo recibes filas cuando algo cambió. You only get rows when something changed.

### 🌎 Sitios soportados / Supported sites

| Código / Code | País / Country | Tienda / Store URL |
|---|---|---|
| MLC | Chile | mercadolibre.cl/tienda/<slug> |
| MLA | Argentina | mercadolibre.com.ar/tienda/<slug> |
| MLM | México | mercadolibre.com.mx/tienda/<slug> |
| MLB | Brasil | mercadolivre.com.br/loja/<slug> |
| MCO | Colombia | mercadolibre.com.co/tienda/<slug> |
| MLU / MPE / MEC | Uruguay / Perú / Ecuador | …/tienda/<slug> |

### 🔌 Integraciones / Integrations

- **n8n / Make / Zapier:** nodo oficial de Apify → *Run Actor* `ener90/mercadolibre-seller-price-monitor` → *Get dataset items* → Slack/Sheets/email.
- **Webhook:** integración "Run succeeded" → tu endpoint recibe el `defaultDatasetId` con los cambios. Your endpoint receives the dataset id with the changes.
- **Agentes de IA / AI agents (MCP):** agrégalo al servidor [Apify MCP](https://mcp.apify.com) y pregunta "¿qué bajó de precio hoy en la tienda Samsung de Mercado Libre Chile?". Add it to the Apify MCP server and ask your agent what dropped in price today.

### ❓ FAQ

- **¿Cuál es el slug de una tienda? / What is a store slug?** Lo que va después de `/tienda/` en la URL (ej. `samsung`, `xiaomi`). También puedes pegar la URL completa. The part after `/tienda/`, or paste the full URL.
- **¿Monitorea todo el catálogo? / Full catalog?** No: monitorea los productos destacados de la vitrina (normalmente 20–60). No: the storefront's featured products (typically 20–60).
- **¿Y el stock? / Stock?** Las vitrinas no muestran stock. Storefronts don't expose stock.
- **¿Puedo seguir publicaciones o vendedores sueltos? / Single listings or sellers?** Solo con tu propio acceso OAuth a la API de Mercado Libre, y ML puede bloquearlo (HTTP 403). Only with your own ML OAuth access; ML may block it (HTTP 403).
- **¿Dónde se guarda la foto anterior? / Where is the snapshot stored?** En un key-value store con nombre `ml-monitor-<monitorName>` en tu cuenta. In a named key-value store in your account.
- **¿Datos personales? / Personal data?** Ninguno; solo datos públicos de productos. None; only public product data.

### Español

Vigila las **tiendas oficiales** de Mercado Libre (productos destacados de la vitrina: precio, precio anterior y descuento; **sin stock**) y, en cada ejecución, entrega **solo lo que cambió** desde la anterior: cambios de precio, de descuento, de stock y de estado, y publicaciones nuevas o eliminadas. Prográmalo (Schedules) a diario o cada hora y conéctalo a email, Slack o un webhook.

**Qué puedes vigilar**

- **Tiendas oficiales** (`officialStores`): slug (`samsung`) o URL (`https://www.mercadolibre.cl/tienda/samsung`). Sigue los productos de la vitrina de la tienda. No necesita credenciales.
- **Avanzado – publicaciones (`items`) y vendedores (`sellers`):** requieren **tu propio acceso OAuth** a la API de Mercado Libre (token de usuario o app con permisos). Mercado Libre bloquea estos endpoints para la mayoría de las apps (HTTP 403), así que pueden no funcionar.

**Precio:** pago por evento, **US$0,002 por cambio detectado** (US$2 por 1.000 cambios). La línea base y las ejecuciones sin cambios no cobran eventos.

Sitios disponibles: MLC (Chile), MLA, MLM, MLB, MCO, MLU, MPE y MEC.

**Cómo funciona**

1. La primera ejecución guarda una *línea base* (con `outputBaseline` en true, además la escribe en el dataset).
2. Las siguientes comparan con la foto anterior, guardada en un key-value store con nombre (`ml-monitor-<monitorName>`), y escriben solo los cambios.
3. Si una fuente falla o se lee solo en parte, no se reportan publicaciones como eliminadas. Así se evitan falsas alarmas.

**Salida** (una fila por cambio): `changeType` (PRICE_CHANGE, DISCOUNT_CHANGE, STOCK_CHANGE, STATUS_CHANGE, NEW_LISTING, REMOVED_LISTING, BASELINE), `itemId`, `title`, `field`, `oldValue`, `newValue`, `changePercent`, `currency`, `source`, `url`, `detectedAt` y `previousCheckAt`. El resumen de la ejecución queda en el registro `OUTPUT`.

**Privacidad:** no se recopilan datos personales, solo datos públicos de las publicaciones.

**Limitaciones:** las vitrinas muestran los productos destacados de la tienda (normalmente entre 20 y 60), no el catálogo completo, y no muestran stock. Las páginas de cada publicación y los listados de búsqueda exigen iniciar sesión, por eso para las publicaciones sueltas se usa la API oficial.

### English

Monitors Mercado Libre **official stores** (storefront featured products: price, previous price, discount; **no stock**). Each run outputs **only what changed** since the previous one: price, discount, stock and status changes, plus new and removed listings. Schedule it daily or hourly and connect it to email, Slack or a webhook.

**Inputs**

- `officialStores`: a slug or a store URL. No credentials needed.
- Advanced: `items` (listing URLs/IDs) and `sellers` (ID/nickname) need **your own Mercado Libre OAuth access**; Mercado Libre blocks these endpoints for most apps (HTTP 403), so they may not work.

**Pricing:** pay-per-event, **US$0.002 per detected change** (US$2 per 1,000 changes). Baseline and no-change runs charge no events.

- `site`, the `track*` toggles, `outputBaseline`, `monitorName`, `resetBaseline` and `proxyConfiguration`.

**How it works:** the first run saves a baseline. Later runs diff against the snapshot stored in the named key-value store `ml-monitor-<monitorName>` and push only the changes. Removals are reported only after a complete fetch.

**Output:** one row per change, with the fields listed above. Run stats are in `OUTPUT`. No personal data is collected.

**Limitations:** storefront pages expose the featured products only (typically 20 to 60) and no stock. Listing pages and search pages are behind a login wall, so single listings rely on the official API.

### 🔗 More scrapers by ener90 / Más scrapers de ener90

- [Mercado Libre Reviews & Questions Scraper](https://apify.com/ener90/mercadolibre-reviews-questions) – opiniones y preguntas de Mercado Libre
- [TrustRadius Reviews Scraper](https://apify.com/ener90/software-reviews-scraper) – reseñas de software B2B de TrustRadius
- [Walmart Reviews Scraper](https://apify.com/ener90/walmart-products-reviews) – reseñas y productos de Walmart
- [Product Hunt Scraper](https://apify.com/ener90/product-hunt-launches) – lanzamientos diarios de Product Hunt
- Chile Real Estate Scraper (Portal Inmobiliario + TocToc) (`ener90/chile-real-estate-scraper`, coming soon / próximamente) – propiedades en venta y arriendo en Chile
- AI Review Insights (`ener90/ai-review-insights`, coming soon / próximamente) – análisis de reseñas con IA

Need a custom scraper or a different site? Open an issue in the **Issues** tab. / ¿Necesitas un scraper a medida? Escríbeme en la pestaña **Issues** (soporte en español).

### 🧩 API & integrations quick start

**cURL (sync, returns items)**

```bash
curl -X POST "https://api.apify.com/v2/acts/ener90~mercadolibre-seller-price-monitor/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" -d '{"officialStores":["samsung"],"site":"MLC"}'
```

**Node.js**

```js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('ener90/mercadolibre-seller-price-monitor').call({"officialStores":["samsung"],"site":"MLC"});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

**Python**

```python
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("ener90/mercadolibre-seller-price-monitor").call(run_input={"officialStores":["samsung"],"site":"MLC"})
items = client.dataset(run["defaultDatasetId"]).list_items().items
```

- **Google Sheets:** add the *Google Sheets* integration to a saved Task, or use `=IMPORTDATA("https://api.apify.com/v2/datasets/<DATASET_ID>/items?format=csv&clean=1")`.
- **n8n / Make / Zapier:** use the official Apify node or app: *Run Actor* (`ener90/mercadolibre-seller-price-monitor`) → *Get dataset items*.
- **Webhooks:** on a Task, add an integration *Run succeeded* → your URL (gets `defaultDatasetId`).
- **AI agents (MCP):** `https://mcp.apify.com?actors=ener90/mercadolibre-seller-price-monitor` works in Claude, ChatGPT, Cursor or any MCP client.
- **Free plan:** works on Apify's free tier; usage is billed per result (see Pricing). Start with small limits to try it out.

### 📝 Changelog

- 0.1 (2026-10-19): first public release (official-store monitor, pay per detected change).
- 0.1.8 (2026-10-20): new minChangePercent and onlyPriceDrops filters, Price history view, default memory 256 MB.

Issues or ideas? Open an issue in the **Issues** tab and we usually reply within 24 h.

# Changelog

This Actor's version history is a separate document: https://apify.com/ener90/mercadolibre-seller-price-monitor/changelog.md

# Actor input Schema

## `officialStores` (type: `array`):

Official store slugs or URLs, e.g. samsung or https://www.mercadolibre.cl/tienda/samsung. Tracks the products shown on the store's storefront. No credentials needed.

## `items` (type: `array`):

Listing URLs or IDs like MLC1234567890. Requires Mercado Libre API credentials (below). Advanced: needs your own Mercado Libre OAuth access; may be blocked (HTTP 403).

## `sellers` (type: `array`):

Seller IDs or nicknames, tracked through the official search API. Mercado Libre restricted this endpoint in 2025, so it works only with an API token that still has access. Advanced: needs your own Mercado Libre OAuth access; may be blocked (HTTP 403).

## `site` (type: `string`):

Default site for slugs and bare IDs. Store URLs override it.

## `trackPrice` (type: `boolean`):

Report price changes.

## `trackDiscount` (type: `boolean`):

Report changes of the discount badge (e.g. 30% OFF).

## `trackStock` (type: `boolean`):

Report available quantity changes (API sources only; storefront pages don't show stock).

## `trackListings` (type: `boolean`):

Report listings that appear or disappear.

## `trackStatus` (type: `boolean`):

Report status changes (active, paused, closed, not_found).

## `minChangePercent` (type: `integer`):

Ignore price changes smaller than this percentage (e.g. 5 = only changes of 5% or more). Ignored changes are not charged.

## `onlyPriceDrops` (type: `boolean`):

Report price decreases only (increases are ignored and not charged).

## `outputBaseline` (type: `boolean`):

On the first run (no previous snapshot) also write every listing as a BASELINE row.

## `monitorName` (type: `string`):

Snapshots are kept in a named key-value store per monitor name. Use different names for different watch lists.

## `resetBaseline` (type: `boolean`):

Ignore the saved snapshot and start over.

## `mlClientId` (type: `string`):

From developers.mercadolibre.com. Needed for listings and sellers.

## `mlClientSecret` (type: `string`):

Used only to get a token; never logged or stored.

## `mlAccessToken` (type: `string`):

Alternative to app ID + secret.

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

Use Apify Proxy (e.g. RESIDENTIAL) if store pages get blocked.

## Actor input object example

```json
{
  "officialStores": [
    "samsung"
  ],
  "site": "MLC",
  "trackPrice": true,
  "trackDiscount": false,
  "trackStock": true,
  "trackListings": true,
  "trackStatus": true,
  "minChangePercent": 0,
  "onlyPriceDrops": false,
  "outputBaseline": false,
  "monitorName": "default",
  "resetBaseline": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `changes` (type: `string`):

Detected changes (default dataset).

## `summary` (type: `string`):

Listings tracked and changes per source.

## `priceHistory` (type: `string`):

Changes table focused on prices.

# 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 = {
    "officialStores": [
        "samsung"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("ener90/mercadolibre-seller-price-monitor").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 = { "officialStores": ["samsung"] }

# Run the Actor and wait for it to finish
run = client.actor("ener90/mercadolibre-seller-price-monitor").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 '{
  "officialStores": [
    "samsung"
  ]
}' |
apify call ener90/mercadolibre-seller-price-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ener90/mercadolibre-seller-price-monitor"
        }
    }
}
```

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/RfmMzTmjCkAqebCHA/builds/j1uAOGjRB1w4veZ75/openapi.json
