# Mercado Livre Scraper (`lergassy/mercado-livre-scraper`) Actor

\[$2.50/1K products] Scrape Mercado Livre Brazil (mercadolivre.com.br): product cards from search, price in BRL, old price, discount, instalments, rating, seller, free shipping. Plus buyer reviews ($1/1K), daily deals and official stores. No fee per run.

- **URL**: https://apify.com/lergassy/mercado-livre-scraper.md
- **Developed by:** [Matvey](https://apify.com/lergassy) (community)
- **Categories:** E-commerce, Automation, AI
- **Stats:** 7 total users, 3 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

**Mercado Livre Scraper** extracts public data from **Mercado Livre Brazil** (mercadolivre.com.br) without the official API: product cards from search and category pages with prices in **BRL**, discounts and *parcelas sem juros*, buyer reviews with star ratings, today's deals (*Ofertas do dia*) and official stores (*lojas oficiais*). **No login, no API key and no Mercado Livre developer account** are needed. 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.

Brazil is the default: an empty run searches mercadolivre.com.br. The same Actor also reads the 17 Spanish-language Mercado Libre marketplaces (Mexico, Argentina, Chile, Colombia and others) — pick another country or paste their URLs.

> This is the Brazil-focused edition of **[Mercado Libre Scraper](https://apify.com/lergassy/mercadolibre-reviews-scraper)** — same engine, same prices, with Brazil and a Portuguese search pre-selected.

### What can Mercado Livre Scraper 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 `lista.mercadolivre.com.br` / category URLs |
| 📦 **Product details** | The product page: price, stock, specifications, description, gallery, seller, shipping, category breadcrumb | product URLs or IDs (`MLB…`) |
| ⭐ **Reviews** | Buyer reviews: stars, text, variant bought, date, helpful votes, photos, plus one rating-summary row per product | product URLs or IDs |
| 🔥 **Deals (Ofertas)** | Today's deals page: discounted products with old and new price and discount % | country or `/ofertas` URL |
| 🏪 **Official store** | Store profile and its featured products | `/loja/…` or `/tienda/…` URL |

Reviews, deals and store pages are fetched with plain HTTP requests. Search and product pages sit behind Mercado Livre's bot check, so the Actor opens them in a real browser through Brazilian residential proxies. All of that is included in the per-result price.

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

Pay per result, **no fee per run**. Error rows are free.

| Event | Price | 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 Store tiers pay less (product down to $1.75 per 1,000, review down to $0.70 per 1,000). The Apify Free plan's $5 monthly credit covers about 2,000 product cards.

### How to scrape Mercado Livre

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

### ⬇️ Input

Search Brazil for two keywords, new items only, cheapest first:

```json
{
  "country": "BR",
  "searchTerms": ["fone de ouvido bluetooth", "air fryer"],
  "condition": "new",
  "sort": "price_asc",
  "maxItems": 100
}
```

Reviews of a product, newest first:

```json
{
  "mode": "reviews",
  "startUrls": ["https://www.mercadolivre.com.br/p/MLB29041007"],
  "maxReviewsPerProduct": 500,
  "reviewsSort": "date_desc"
}
```

Today's deals in Brazil:

```json
{ "mode": "deals", "country": "BR", "maxItems": 100 }
```

Search filters: `sort` (`relevance`, `price_asc`, `price_desc`), `condition` (`any`, `new`, `used`), `minPrice`, `maxPrice` (in BRL for Brazil), `freeShippingOnly`, `officialStoresOnly`, `includeSponsored`. Sorting and filters are applied to the rows the run collects; for filters the run walks extra pages to still reach your maximum.

### ⬆️ Output

One product card from a real run on 5 October 2026 (search `fone de ouvido bluetooth`):

```json
{
  "type": "product",
  "title": "Fone de Ouvido Headphone Bluetooth 5.3 Soundcore Space One Cancelamento de Ruido ANC 98% ...",
  "url": "https://www.mercadolivre.com.br/fone-de-ouvido-headphone-bluetooth-53-soundcore-space-one-.../p/MLB29041007",
  "productId": "MLB29041007",
  "itemId": "MLB4102472273",
  "siteId": "MLB",
  "country": "BR",
  "currency": "BRL",
  "price": 632.7,
  "originalPrice": 999,
  "discountPercent": 36,
  "installmentsText": "10x R$63,27 sem juros",
  "soldQuantity": 1000,
  "rating": 4.8,
  "reviewCount": 490,
  "seller": "Soundcore",
  "isOfficialStore": true,
  "freeShipping": false,
  "fullShipping": true,
  "shippingText": "Chegará grátis amanhã",
  "isSponsored": false,
  "imageUrl": "https://http2.mlstatic.com/D_Q_NP_2X_717735-MLA105992925440_022026-E.webp",
  "position": 5,
  "page": 1,
  "searchTerm": "fone de ouvido bluetooth",
  "scrapedAt": "2026-10-05T02:09:32.317Z"
}
```

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. Pages that could not be read arrive as free `error` rows with the URL and the reason. Prices are never converted: Brazilian rows are in BRL.

### 🔁 Only new products — daily feed

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

### 🇧🇷 Em português

**Mercado Livre Scraper** coleta dados públicos do mercadolivre.com.br: anúncios da busca com preço em reais, preço antigo, desconto, parcelas sem juros, avaliação, vendedor, loja oficial e frete grátis/Full; avaliações de compradores; ofertas do dia; lojas oficiais. Sem login e sem chave de API. Você paga por resultado: **US$ 2,50 por 1.000 produtos**, US$ 1 por 1.000 avaliações, sem taxa por execução. Digite a busca em **Search keywords** (ex.: `fone de ouvido bluetooth`) ou cole links do Mercado Livre e clique em **Start**. Exporte em CSV, Excel ou JSON.

### ❓ FAQ

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

The Actor collects only data visible to any visitor and never logs in. You are responsible for using it in line with Brazilian law (LGPD) and Mercado Livre's terms.

#### Do I need a proxy?

No. Brazilian residential proxies for search and product pages are set automatically and included in the price.

#### Why are some fields empty?

Search cards hold only what the card shows: no reviews → `rating: null`, no discount → `originalPrice: null`. Pass product URLs for the full product page.

#### What if Mercado Livre blocks a page?

Blocked pages are retried with a new browser identity and IP. If a page still fails you get a free `error` row. If the site refuses several pages in a row, the run stops early and lists untried searches in the `NOT_ATTEMPTED` record, uncharged.

#### Does it collect questions and answers?

No. Mercado Livre shows them only to logged-in users, and this Actor never logs in.

#### Can I use other countries?

Yes — choose any of the 18 Mercado Libre marketplaces in **Country** or paste their URLs. For a Spanish-language setup see **[Mercado Libre Scraper](https://apify.com/lergassy/mercadolibre-reviews-scraper)**.

### Your feedback

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

# 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. Brazil (mercadolivre.com.br) by default; the other 17 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>fone de ouvido bluetooth</code> or <code>iphone 15</code>. Each keyword is searched in the selected country (Brazil by default). Left empty with no URLs, the run searches <code>fone de ouvido bluetooth</code> on mercadolivre.com.br as a demo.

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

Any Mercado Livre or Mercado Libre links: search results (<code>lista.mercadolivre.com.br/…</code>), category pages, product pages (<code>/p/MLB…</code> or <code>MLB-…</code>), official stores (<code>/loja/…</code>, <code>/tienda/…</code>) or the deals page (<code>/ofertas</code>). Product IDs like <code>MLB1234567890</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 (BRL for Brazil). 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 (BRL for Brazil). 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": "BR",
  "searchTerms": [
    "fone de ouvido 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": [
        "fone de ouvido bluetooth"
    ],
    "startUrls": [],
    "maxItems": 20,
    "maxReviewsPerProduct": 20,
    "maxConcurrency": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("lergassy/mercado-livre-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": ["fone de ouvido bluetooth"],
    "startUrls": [],
    "maxItems": 20,
    "maxReviewsPerProduct": 20,
    "maxConcurrency": 3,
}

# Run the Actor and wait for it to finish
run = client.actor("lergassy/mercado-livre-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": [
    "fone de ouvido bluetooth"
  ],
  "startUrls": [],
  "maxItems": 20,
  "maxReviewsPerProduct": 20,
  "maxConcurrency": 3
}' |
apify call lergassy/mercado-livre-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,lergassy/mercado-livre-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/xPKCakbCv2OxLobtw/builds/Z05aeJtGyMXEmdymz/openapi.json
