# Mercado Libre Reviews Scraper (`piotrv1001/mercado-libre-reviews-scraper`) Actor

Collect Mercado Libre and Mercado Livre reviews from Mexico, Argentina and Brazil: ratings, text, dates, helpful votes, photos and videos. Filter by stars, monitor recent feedback and discover more reviews for sentiment analysis and product research.

- **URL**: https://apify.com/piotrv1001/mercado-libre-reviews-scraper.md
- **Developed by:** [FalconScrape](https://apify.com/piotrv1001) (community)
- **Categories:** E-commerce
- **Stats:** 4 total users, 3 monthly users, 81.8% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 reviews

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 Reviews Scraper

Collect customer reviews from **Mercado Libre and Mercado Livre in Mexico, Argentina and Brazil**. Turn product URLs into structured ratings, feedback, dates, helpful votes, photos and videos for sentiment analysis, product research and review monitoring.

### Features

- **Recent feedback:** collect newest reviews or start with the most helpful.
- **Star filters:** focus on negative feedback or select any rating from one to five.
- **Photos and videos:** get customer photo URLs and available video, preview and thumbnail URLs.
- **Useful dates:** exact review timestamps where supplied, alongside the displayed relative date.
- **Deeper collection:** optionally explore additional rating and sort groups to discover more reviews.
- **Deduplicated results:** a review is saved and charged only once per run, even when it appears in several groups or product variants.
- **Incremental monitoring:** stop at review IDs collected in a previous run.

### How it works

1. Paste catalog product URLs or seller-item URLs from a supported marketplace.
2. Set the maximum review count and choose a sort order or star rating.
3. Run the Actor and export JSON, CSV or Excel, or retrieve results through the Apify API.

URLs are processed in input order. `maxItems` applies to the entire run; the first product can use the whole limit. Use separate tasks for equal per-product allowances.

### Input

```json
{
  "productUrls": [
    "https://www.mercadolibre.com.mx/apple-iphone-16-256-gb-rosa/p/MLM40287790"
  ],
  "maxItems": 50,
  "sort": "dateCreated",
  "rating": "all",
  "deepScan": false,
  "proxyConfiguration": { "useApifyProxy": true }
}
```

| Field                | Default                   | Description                                                                                                                                                          |
| -------------------- | ------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `productUrls`        | Example product prefilled | Up to 1,000 catalog or seller-item URLs. Supports `mercadolibre.com.mx`, `mercadolibre.com.ar` and `mercadolivre.com.br`.                                            |
| `maxItems`           | `50`                      | Global maximum of 1–100,000 unique reviews. Available reviews may be fewer.                                                                                          |
| `sort`               | `dateCreated`             | Newest first; use `relevance` for most helpful.                                                                                                                      |
| `rating`             | `all`                     | All ratings or a string from `"1"` to `"5"`.                                                                                                                         |
| `deepScan`           | `false`                   | Explore additional rating and sort groups after the initial group. Does not guarantee a complete history.                                                            |
| `stopAtReviewIds`    | `[]`                      | Numeric review IDs as strings. Stops each product when a matching ID is reached, excluding that review. Requires newest-first order with deeper collection disabled. |
| `proxyConfiguration` | Automatic Apify selection | Standard Apify proxy settings.                                                                                                                                       |

Catalog URLs such as `https://www.mercadolibre.com.mx/p/MLM40287790` and article URLs such as `https://articulo.mercadolibre.com.mx/MLM-2158714653-iphone-_JM` identify different input types. Use the original URL so the Actor can select the correct type. Search URLs, short links and bare IDs are not supported. Review-page URLs are also accepted; seller-item review URLs must retain `isItem=true`.

**Deeper collection:** the Actor starts with your selected order and rating. With all ratings selected, it subsequently explores individual star groups and both sort orders. With a specific rating, it only explores that rating in both orders. Output is not globally date-ordered in this mode. A low review limit can be filled before the additional groups are explored.

**Monitoring:** save recent review IDs and supply them on the next run. Mercado Libre can reorder or add reviews, so stopping at a known ID is a convenience rather than a guarantee of discovering every new review.

### Sample output

Illustrative review record:

```json
{
  "reviewId": "2083885765",
  "rating": 5,
  "text": "Example customer feedback.",
  "dateText": "Hace 1 año",
  "createdAt": "2025-06-04T02:23:36Z",
  "reviewSite": "MLM",
  "reviewCountry": "México",
  "reviewedCatalogProductId": "MLM40287808",
  "variant": null,
  "helpfulVotes": 581,
  "photos": [],
  "videos": [],
  "inputProductUrl": "https://www.mercadolibre.com.mx/p/MLM40287790",
  "inputProductId": "MLM40287790",
  "inputType": "catalog",
  "marketplace": "MLM",
  "sourceSort": "dateCreated",
  "sourceRating": "all",
  "sourceOffset": 0,
  "scrapedAt": "2026-09-18T08:00:00.000Z"
}
```

When media is present, `photos` contains image URLs. Each entry in `videos` contains available `url`, `previewUrl`, `thumbnail` and `durationMs` fields. Media files are not downloaded and their availability can change.

| Field                                                           | Meaning                                                                   |
| --------------------------------------------------------------- | ------------------------------------------------------------------------- |
| `reviewId`, `rating`, `text`                                    | Stable review identity, star rating and comment.                          |
| `createdAt`, `dateText`                                         | Exact timestamp when supplied, plus the source's displayed date.          |
| `reviewSite`, `reviewCountry`                                   | Where the review originated, which can differ from the input marketplace. |
| `reviewedCatalogProductId`, `variant`                           | Reviewed product identity and variant text where available.               |
| `helpfulVotes`                                                  | Available helpful-vote count.                                             |
| `photos`, `videos`                                              | Customer media references.                                                |
| `inputProductUrl`, `inputProductId`, `inputType`, `marketplace` | Input attribution.                                                        |
| `sourceSort`, `sourceRating`, `sourceOffset`, `scrapedAt`       | Collection context and time.                                              |

Missing fields are null or empty. Reviewer names and individual verified-purchase flags are not supplied. Variant text is often absent.

### Coverage and run summary

Mercado Libre can group reviews across countries and product variants. Reviews from two input URLs may overlap; the first encountered copy is retained. Some text may be automatically translated by the marketplace. We preserve the returned text and do not label it as the original language.

Ratings and written reviews are different totals. A product may show thousands of ratings but expose a smaller collection of comments. Source limits can also restrict how many reviews are available in each sort/rating group. Deeper collection can improve coverage, but **this Actor does not guarantee every advertised review**.

Open the **Run summary** output for advertised rating/comment counts, explored groups and the stopping reason for each product:

| Status                        | Meaning                                                                                                        |
| ----------------------------- | -------------------------------------------------------------------------------------------------------------- |
| `max_items_reached`           | Your global review limit was reached.                                                                          |
| `budget_reached`              | The run's review-charge budget was reached.                                                                    |
| `known_review_reached`        | A supplied review ID was encountered.                                                                          |
| `source_limited`              | At least one collection reached the source safety limit; more reviews may exist.                               |
| `available_streams_exhausted` | All selected groups returned empty after retries. This is not proof of a complete history.                     |
| `no_reviews_returned`         | No reviews were returned and product validity could not be established. This can include nonexistent products. |
| `partial` / `failed`          | A retrieval problem or request limit stopped processing. Saved reviews remain available.                       |
| `not_started`                 | An earlier product used the run's review, request or charging allowance.                                       |

There is a run-wide request allowance to bound low-yield work. Failed or partial products mark the run as failed so automated workflows can detect them; existing results are preserved. Source limits and ordinary review/charging limits are reported without marking the run as failed.

### Pricing

**$1 per 1,000 unique reviews** — **$0.001 per saved review**.

| Event             | Price per result | Price per 1,000 |
| ----------------- | ---------------- | --------------- |
| Review (`review`) | $0.001           | $1.00           |

Fifty reviews cost $0.05 in review-event charges. Duplicates, retries, empty responses and product summaries do not trigger review charges. Set `maxItems` and the run's maximum charge to control spending; consult the Apify pricing panel for any additional platform charges.

### Use cases

- Monitor recent product feedback and recurring quality complaints.
- Compare positive and negative reviews across competing products.
- Collect buyer photos and video references for product research.
- Feed structured comments into sentiment analysis tools and dashboards.

### Related Actors

Find products first with the [Mercado Libre Listings Scraper](https://apify.com/piotrv1001/mercado-libre-listings-scraper), then pass their product URLs to this Actor for review collection.

For prices, stock, seller information, variations and specifications, use the [Mercado Libre Product Details Scraper](https://apify.com/piotrv1001/mercado-libre-product-details-scraper). Combine product data with reviews from Mexico, Argentina and Brazil for product and customer-feedback analysis.

# Actor input Schema

## `productUrls` (type: `array`):

Catalog or seller-item URLs from Mexico, Argentina or Brazil. URLs are processed in order.

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

Maximum unique reviews across the entire run.

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

Which reviews to collect first.

## `rating` (type: `string`):

Collect all ratings or only reviews with the selected number of stars.

## `deepScan` (type: `boolean`):

Explore additional rating and sort groups for more unique reviews. Results are not globally ordered in this mode, and complete review history is not guaranteed.

## `stopAtReviewIds` (type: `array`):

Optional numeric review IDs from an earlier run. Requires newest-first sorting and deeper collection disabled.

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

Standard Apify proxy settings. Automatic selection is recommended.

## Actor input object example

```json
{
  "productUrls": [
    "https://www.mercadolibre.com.mx/apple-iphone-16-256-gb-rosa/p/MLM40287790"
  ],
  "maxItems": 50,
  "sort": "dateCreated",
  "rating": "all",
  "deepScan": false,
  "stopAtReviewIds": [],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

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

No description

# 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 = {
    "productUrls": [
        "https://www.mercadolibre.com.mx/apple-iphone-16-256-gb-rosa/p/MLM40287790"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/mercado-libre-reviews-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 = { "productUrls": ["https://www.mercadolibre.com.mx/apple-iphone-16-256-gb-rosa/p/MLM40287790"] }

# Run the Actor and wait for it to finish
run = client.actor("piotrv1001/mercado-libre-reviews-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 '{
  "productUrls": [
    "https://www.mercadolibre.com.mx/apple-iphone-16-256-gb-rosa/p/MLM40287790"
  ]
}' |
apify call piotrv1001/mercado-libre-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,piotrv1001/mercado-libre-reviews-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/CPi4GYdSwFFh8BXpZ/builds/8ZK7FiVjhEeVzsaoE/openapi.json
