# MercadoLibre & Mercado Livre Scraper - 9 LATAM Markets (`khadinakbar/mercadolibre-all-in-one-scraper`) Actor

Scrape MercadoLibre / Mercado Livre across 9 LATAM marketplaces. Modes: search, product, reviews, questions, seller, category. API-first reliability with HTML fallback. MCP-ready.

- **URL**: https://apify.com/khadinakbar/mercadolibre-all-in-one-scraper.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** E-commerce, MCP servers, Automation
- **Stats:** 3 total users, 2 monthly users, 50.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## MercadoLibre & Mercado Livre Scraper — All-in-One (9 LATAM Countries)

Scrape MercadoLibre / Mercado Livre across **9 LATAM marketplaces** — Argentina, Brazil, Mexico, Chile, Colombia, Peru, Uruguay, Ecuador, Dominican Republic — through a single actor with six modes: **search**, **product**, **reviews**, **questions**, **seller**, **category**. API-first reliability with HTML fallback. Built for AI agents, price-monitoring tools, market research, and dropshipping operations.

> **Price:** $0.005 per result + $0.00005 actor start (PPE). Typical 100-result run: ~$0.51.

---

### What you get

| Mode | Input | Output |
|---|---|---|
| `search` | Free-text keyword (e.g., `iphone 15 pro`) | One record per listing card: title, price, condition, seller, free shipping flag, sold quantity, thumbnail, URL |
| `product` | Product URL or item ID (e.g., `MLA1234567890`) | One record per product: full attributes, variations, pictures, official-store flag, seller_id |
| `reviews` | Product URL or item ID | One record per review: rating, title, content, reviewer, date, helpful-vote count |
| `questions` | Product URL or item ID | One record per buyer Q&A pair: question text, date, seller answer text, answer date |
| `seller` | Seller profile URL or numeric `seller_id` | Seller profile + reputation + auto-paginated catalog of their active listings |
| `category` | Category URL (e.g., `mercadolibre.com.mx/c/celulares`) | One record per listing in that category, with all search-mode fields |

**Mode `auto` is the default** — give the actor a URL and it picks the right mode from the URL pattern.

---

### Why this actor

- **Headless Chromium + Crawlee fingerprints + homepage warmup.** Country-pinned residential IPs + browser-fingerprint injection + a quick homepage visit before each target URL get past MercadoLibre's account-verification anti-bot gate where naive scrapers fail.
- **9 countries in one actor.** Compete with single-country scrapers without the cost of running nine separate runs.
- **Six modes, one tool.** Search, product, reviews, questions, sellers, categories — no need to mix-and-match three different actors.
- **MCP-ready.** Tool description, input schema, and output shape designed for AI agent consumption.
- **Premium-tier pricing.** $0.005/result matches the most reliable competitor; not the cheapest, on purpose — we ship the data correctly the first time.
- **Country-pinned residential proxies.** Apify Proxy is country-aware by default for each marketplace.

---

### Quick start

#### Search by keyword

```json
{
  "searchQuery": "iphone 15 pro",
  "country": "MX",
  "maxResults": 100
}
````

#### Scrape a product by URL

```json
{
  "startUrls": ["https://articulo.mercadolibre.com.ar/MLA-1234567890-example"],
  "mode": "auto"
}
```

#### Pull reviews for a product

```json
{
  "startUrls": ["MLB12345678"],
  "mode": "reviews",
  "maxResults": 200
}
```

#### Pull a seller's full catalog

```json
{
  "startUrls": ["https://perfil.mercadolibre.com.mx/SELLERNAME"],
  "mode": "seller"
}
```

#### Pull Q\&A for a product

```json
{
  "startUrls": ["MLA1234567890"],
  "mode": "questions",
  "maxResults": 100
}
```

#### Mix countries in one run

```json
{
  "startUrls": [
    "MLA1234567890",
    "MLB987654321",
    "https://articulo.mercadolibre.com.mx/MLM-555444333-example"
  ],
  "mode": "auto"
}
```

***

### Output schema (table view)

Every record carries a `mode` flag indicating which mode produced it. Mode-specific fields populate accordingly; cross-mode fields like `country`, `siteId`, `dateScraped`, `source` are always present.

| Field | Type | Notes |
|---|---|---|
| `mode` | enum | `search`, `product`, `reviews`, `questions`, `seller`, `category` |
| `country` | string | `MX`, `BR`, `AR`, `CL`, `CO`, `PE`, `UY`, `EC`, `DO` |
| `siteId` | string | MercadoLibre internal site ID (`MLA`, `MLB`, etc.) |
| `itemId` | string | e.g., `MLA1234567890` |
| `title` | string | Product / listing title |
| `url` | string | Canonical permalink |
| `price` | number | Local currency |
| `originalPrice` | number | When discounted |
| `currencyId` | string | ISO 4217 (`MXN`, `BRL`, `ARS`, ...) |
| `discountPercent` | number | Computed from price + originalPrice |
| `condition` | string | `new`, `used`, `refurbished`, `not_specified` |
| `soldQuantity` | int | Lifetime units sold (when exposed) |
| `availableQuantity` | int | Current stock (when exposed) |
| `freeShipping` | bool | |
| `installments` | object | `{quantity, amount, rate, currencyId}` |
| `thumbnail` | string | Primary image URL |
| `pictures` | string\[] | All product images (product mode) |
| `attributes` | object\[] | `[{id, name, value}]` - brand, model, etc. |
| `variations` | object\[] | Color/size matrix (product mode) |
| `categoryId` | string | Internal category ID |
| `sellerId` | int | Numeric seller user ID |
| `sellerName` | string | Seller nickname |
| `sellerReputation` | object | `{levelId, powerSellerStatus, transactionsTotal, ...}` |
| `sellerLocation` | object | `{city, state}` |
| `reviewRating`, `reviewText`, `reviewTitle`, `reviewerName`, `reviewDate`, `reviewLikes` | mixed | Reviews mode |
| `questionText`, `answerText`, `questionDate`, `answerDate` | mixed | Questions mode |
| `officialStoreId` | int | Brand-verified flag |
| `tags` | string\[] | Listing flags |
| `dateCreated`, `lastUpdated`, `dateScraped` | ISO 8601 | |
| `source` | string | `api` or `html` |
| `_warnings` | string\[] | Stage-by-stage partial-extraction warnings |

***

### Pricing

Pay-Per-Event with two events:

| Event | Price | When charged |
|---|---|---|
| Actor Start | $0.00005 | Once per run (per 1 GB RAM, min 1) |
| Result | $0.005 | Per record pushed to the dataset |

**Pay-Per-Usage is also enabled** for heavy users running millions of records — compute + proxy passthrough. Choose at run time.

**Typical costs**

- 100 search cards: ~$0.51
- 500 reviews from one product: ~$2.51
- One product detail + 50 reviews: ~$0.26
- One seller profile + 200 catalog items: ~$1.01

***

### Country coverage and site IDs

| Country | Code | Site ID | Domain | Currency |
|---|---|---|---|---|
| Mexico | `MX` | MLM | mercadolibre.com.mx | MXN |
| Brazil | `BR` | MLB | mercadolivre.com.br | BRL |
| Argentina | `AR` | MLA | mercadolibre.com.ar | ARS |
| Chile | `CL` | MLC | mercadolibre.cl | CLP |
| Colombia | `CO` | MCO | mercadolibre.com.co | COP |
| Peru | `PE` | MPE | mercadolibre.com.pe | PEN |
| Uruguay | `UY` | MLU | mercadolibre.com.uy | UYU |
| Ecuador | `EC` | MEC | mercadolibre.com.ec | USD |
| Dominican Republic | `DO` | MRD | mercadolibre.com.do | DOP |

***

### Use with AI agents (Apify MCP)

This actor is exposed as `apify--mercadolibre-all-in-one-scraper` via Apify MCP. From a Claude or GPT agent connected to `mcp.apify.com`, the tool is callable with `searchQuery` + `country`, or with explicit `startUrls` for product/seller/category targets.

The tool description, input fields, and output records are sized for agent consumption - small per-record token cost, flat keys, stable field names across runs, explicit nulls.

***

### Filters available in search and category modes

- `condition`: `any` / `new` / `used`
- `minPrice` / `maxPrice` - local currency
- `freeShipping`: `true` returns only free-shipping listings
- `officialStoreOnly`: `true` restricts to MercadoLibre Official Stores
- `sortBy`: `relevance` (default) / `price_asc` / `price_desc` / `newest`
- `extendedDetails`: `true` follows each search result to its full product API (charged per detail)

***

### Limitations

- The MercadoLibre public API rate-limits anonymous calls; the actor handles this via residential session rotation, but very large jobs may slow down past 10K records.
- Some smaller markets (Ecuador, Dominican Republic, Uruguay) have thinner inventories - record counts may be lower than search-only `total` suggests.
- Venezuela (`MLV`) is not supported - site is heavily restricted.
- Seller mode resolves nicknames -> numeric ID via a single HTML fetch; if a nickname has changed, supply the numeric `seller_id` in the URL query string instead.
- The category mode currently routes via keyword search if the URL doesn't expose a canonical category ID; richer category traversal is planned for v0.2.

***

### FAQ

**Why is this scraper more reliable than alternatives?**
Country-pinned residential proxies + Crawlee fingerprint injection + a homepage warmup get past the account-verification challenge that MercadoLibre throws at naive headless requests. We tested across MX, BR, and AR with 100% success on the first try.

**Will my account get banned?**
The actor uses Apify residential proxies; it does not log into MercadoLibre. No PII is collected beyond what MercadoLibre exposes publicly.

**Can I scrape catalog products (`/p/MLA1234`)?**
Yes. Both `/p/...` catalog URLs and `MLA-1234567890-title` regular product URLs are detected and routed through the product API.

**How do I get only "official stores" results?**
Set `officialStoreOnly: true` in search or category mode.

**Can I scrape sold items / sold prices?**
MercadoLibre does not publish sold-listing history the way eBay does. The closest signal is `soldQuantity` on each listing (lifetime sales count when exposed by the seller).

**Brazilian results are missing prices.**
Some Brazilian listings put price into `installments` rather than `price`. Both fields are emitted; check `installments.amount` x `installments.quantity` for the total.

***

### Legal

This actor scrapes publicly available data from MercadoLibre and Mercado Livre product pages. Users are responsible for complying with MercadoLibre's Terms of Service, applicable data-protection laws (LGPD in Brazil, similar regulations in other LATAM jurisdictions), and the GDPR if processing personal data of EU residents. No personally identifiable information beyond publicly displayed seller/reviewer nicknames is collected. Do not use this actor for high-volume aggressive scraping, account-takeover attempts, or any purpose prohibited by MercadoLibre's policies.

***

### Changelog

- **0.1** (2026-05-16) - Initial release. 9 LATAM marketplaces x 6 modes (search / product / reviews / seller / category; questions surfaced inside product mode). PlaywrightCrawler (Chromium) with Crawlee fingerprint injection + homepage-warmup anti-bot stack. Country-pinned residential proxies. MCP-first input descriptions. Premium-tier PPE pricing ($0.005/result + $0.00005 start) with Pay-Per-Usage also enabled. End-to-end tested across MX, BR, and AR.

***

### Related actors

- [amazon-product-intelligence](https://apify.com/khadinakbar/amazon-product-intelligence)
- [amazon-reviews-scraper](https://apify.com/khadinakbar/amazon-reviews-scraper)
- [amazon-competitor-price-tracker](https://apify.com/khadinakbar/amazon-competitor-price-tracker)
- [ebay-all-in-one-scraper](https://apify.com/khadinakbar/ebay-all-in-one-scraper)
- [etsy-all-in-one-scraper](https://apify.com/khadinakbar/etsy-all-in-one-scraper)
- [shopify-all-in-one-scraper](https://apify.com/khadinakbar/shopify-all-in-one-scraper)
- [google-shopping-scraper](https://apify.com/khadinakbar/google-shopping-scraper)

Built by [khadinakbar](https://apify.com/khadinakbar) - 56+ production Apify actors covering e-commerce, lead gen, social, SEO, finance and travel.

# Actor input Schema

## `searchQuery` (type: `string`):

Free-text keyword run against MercadoLibre search. Example: 'iphone 15 pro' or 'macbook air m3'. Used only when mode is 'search' or 'auto' with no startUrls. NOT a product URL or seller name - put those in startUrls.

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

Direct MercadoLibre URLs to scrape. Accepts: product pages (/p/MLA1234 or /MLA-1234567890-title), search-results URLs (listado.mercadolibre.com.ar/iphone), category URLs (mercadolibre.com.mx/c/celulares), seller pages (perfil.mercadolibre.com.ar/SELLERNAME), or 'MLA1234567890' raw item IDs. Mode is auto-detected from each URL when 'mode' is 'auto'. Mix and match countries freely.

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

What to extract. 'auto' picks based on the URL (search/category URL -> listing; product URL -> product; seller URL -> seller). Use an explicit mode to force behavior - 'reviews' or 'questions' on a product URL pulls those instead of the product itself, 'seller' on a product URL pulls the seller catalog. NOT a search filter - that lives in 'searchQuery' and 'condition'.

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

LATAM marketplace to query when running by searchQuery. Each country has a site ID: AR=MLA, BR=MLB, MX=MLM, CL=MLC, CO=MCO, PE=MPE, UY=MLU, EC=MEC, DO=MRD. Ignored when startUrls is provided - country is taken from each URL's domain. Defaults to MX (largest by GMV).

## `maxResults` (type: `integer`):

Hard cap on total records emitted to the dataset across all start URLs and search pages. Each record is a billable event. Example: 100 returns up to 100 search cards or 100 reviews; for product-mode the actor returns 1 record per product URL. Default 100, max 10000.

## `sortBy` (type: `string`):

Result ordering for search and category modes. 'relevance' is MercadoLibre default. 'price\_asc' / 'price\_desc' sort by listed price. 'newest' shows recently listed. Ignored for product/reviews/questions/seller modes.

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

Filter listings by condition. 'any' returns both new and used. 'new' shows only first-hand products. 'used' shows only second-hand. Ignored outside search/category modes.

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

Minimum price filter in the marketplace's local currency (ARS for AR, BRL for BR, MXN for MX, etc.). Example: 5000 on a BR run means BRL 5,000.00 minimum. Leave empty for no minimum.

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

Maximum price filter in the marketplace's local currency. Example: 50000 on a MX run means MXN 50,000.00 maximum. Leave empty for no maximum.

## `freeShipping` (type: `boolean`):

When true, restricts results to listings with free shipping. Useful for dropshipping research and end-to-end price comparison. Defaults to false (all listings).

## `officialStoreOnly` (type: `boolean`):

When true, restricts results to listings from MercadoLibre Official Stores (brand-verified sellers). Useful for cleaner data when scraping for brand analytics. Defaults to false.

## `extendedDetails` (type: `boolean`):

When true and mode is 'search' or 'category', the actor follows each result to its product API and returns the full product object (attributes, variations, pictures, descriptions) instead of just the card data. Cost rises proportionally - each detail is a billable result. Defaults to false (card data only).

## `includeReviews` (type: `boolean`):

When true and mode is 'product', the actor also pulls reviews for each product (separate records, charged per review). Combine with maxResults to cap. Defaults to false.

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

Apify Proxy configuration. Defaults to Apify Proxy with country-pinned residential IPs matching each requested marketplace. Override only if you have a specific need.

## Actor input object example

```json
{
  "searchQuery": "iphone 15",
  "startUrls": [],
  "mode": "auto",
  "country": "MX",
  "maxResults": 100,
  "sortBy": "relevance",
  "condition": "any",
  "freeShipping": false,
  "officialStoreOnly": false,
  "extendedDetails": false,
  "includeReviews": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

Default dataset for this run.

## `consoleDataset` (type: `string`):

Open the default dataset in Apify Console.

# 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 = {
    "searchQuery": "iphone 15",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/mercadolibre-all-in-one-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 = {
    "searchQuery": "iphone 15",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

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

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

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

```

## CLI example

```bash
echo '{
  "searchQuery": "iphone 15",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call khadinakbar/mercadolibre-all-in-one-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=khadinakbar/mercadolibre-all-in-one-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "MercadoLibre & Mercado Livre Scraper - 9 LATAM Markets",
        "description": "Scrape MercadoLibre / Mercado Livre across 9 LATAM marketplaces. Modes: search, product, reviews, questions, seller, category. API-first reliability with HTML fallback. MCP-ready.",
        "version": "0.1",
        "x-build-id": "Lvc2fbquSaCa2lajB"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/khadinakbar~mercadolibre-all-in-one-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-khadinakbar-mercadolibre-all-in-one-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/khadinakbar~mercadolibre-all-in-one-scraper/runs": {
            "post": {
                "operationId": "runs-sync-khadinakbar-mercadolibre-all-in-one-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/khadinakbar~mercadolibre-all-in-one-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-khadinakbar-mercadolibre-all-in-one-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchQuery": {
                        "title": "Search query",
                        "type": "string",
                        "description": "Free-text keyword run against MercadoLibre search. Example: 'iphone 15 pro' or 'macbook air m3'. Used only when mode is 'search' or 'auto' with no startUrls. NOT a product URL or seller name - put those in startUrls."
                    },
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Direct MercadoLibre URLs to scrape. Accepts: product pages (/p/MLA1234 or /MLA-1234567890-title), search-results URLs (listado.mercadolibre.com.ar/iphone), category URLs (mercadolibre.com.mx/c/celulares), seller pages (perfil.mercadolibre.com.ar/SELLERNAME), or 'MLA1234567890' raw item IDs. Mode is auto-detected from each URL when 'mode' is 'auto'. Mix and match countries freely.",
                        "default": [],
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "auto",
                            "search",
                            "product",
                            "reviews",
                            "questions",
                            "seller",
                            "category"
                        ],
                        "type": "string",
                        "description": "What to extract. 'auto' picks based on the URL (search/category URL -> listing; product URL -> product; seller URL -> seller). Use an explicit mode to force behavior - 'reviews' or 'questions' on a product URL pulls those instead of the product itself, 'seller' on a product URL pulls the seller catalog. NOT a search filter - that lives in 'searchQuery' and 'condition'.",
                        "default": "auto"
                    },
                    "country": {
                        "title": "Country / marketplace",
                        "enum": [
                            "MX",
                            "BR",
                            "AR",
                            "CL",
                            "CO",
                            "PE",
                            "UY",
                            "EC",
                            "DO"
                        ],
                        "type": "string",
                        "description": "LATAM marketplace to query when running by searchQuery. Each country has a site ID: AR=MLA, BR=MLB, MX=MLM, CL=MLC, CO=MCO, PE=MPE, UY=MLU, EC=MEC, DO=MRD. Ignored when startUrls is provided - country is taken from each URL's domain. Defaults to MX (largest by GMV).",
                        "default": "MX"
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Hard cap on total records emitted to the dataset across all start URLs and search pages. Each record is a billable event. Example: 100 returns up to 100 search cards or 100 reviews; for product-mode the actor returns 1 record per product URL. Default 100, max 10000.",
                        "default": 100
                    },
                    "sortBy": {
                        "title": "Sort order (search & category modes)",
                        "enum": [
                            "relevance",
                            "price_asc",
                            "price_desc",
                            "newest"
                        ],
                        "type": "string",
                        "description": "Result ordering for search and category modes. 'relevance' is MercadoLibre default. 'price_asc' / 'price_desc' sort by listed price. 'newest' shows recently listed. Ignored for product/reviews/questions/seller modes.",
                        "default": "relevance"
                    },
                    "condition": {
                        "title": "Item condition (search & category modes)",
                        "enum": [
                            "any",
                            "new",
                            "used"
                        ],
                        "type": "string",
                        "description": "Filter listings by condition. 'any' returns both new and used. 'new' shows only first-hand products. 'used' shows only second-hand. Ignored outside search/category modes.",
                        "default": "any"
                    },
                    "minPrice": {
                        "title": "Min price (search & category modes)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum price filter in the marketplace's local currency (ARS for AR, BRL for BR, MXN for MX, etc.). Example: 5000 on a BR run means BRL 5,000.00 minimum. Leave empty for no minimum."
                    },
                    "maxPrice": {
                        "title": "Max price (search & category modes)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum price filter in the marketplace's local currency. Example: 50000 on a MX run means MXN 50,000.00 maximum. Leave empty for no maximum."
                    },
                    "freeShipping": {
                        "title": "Free shipping only (search & category modes)",
                        "type": "boolean",
                        "description": "When true, restricts results to listings with free shipping. Useful for dropshipping research and end-to-end price comparison. Defaults to false (all listings).",
                        "default": false
                    },
                    "officialStoreOnly": {
                        "title": "Official stores only (search & category modes)",
                        "type": "boolean",
                        "description": "When true, restricts results to listings from MercadoLibre Official Stores (brand-verified sellers). Useful for cleaner data when scraping for brand analytics. Defaults to false.",
                        "default": false
                    },
                    "extendedDetails": {
                        "title": "Fetch full product detail for every search result",
                        "type": "boolean",
                        "description": "When true and mode is 'search' or 'category', the actor follows each result to its product API and returns the full product object (attributes, variations, pictures, descriptions) instead of just the card data. Cost rises proportionally - each detail is a billable result. Defaults to false (card data only).",
                        "default": false
                    },
                    "includeReviews": {
                        "title": "Include reviews when fetching products",
                        "type": "boolean",
                        "description": "When true and mode is 'product', the actor also pulls reviews for each product (separate records, charged per review). Combine with maxResults to cap. Defaults to false.",
                        "default": false
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify Proxy configuration. Defaults to Apify Proxy with country-pinned residential IPs matching each requested marketplace. Override only if you have a specific need.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
