# MercadoLibre Email Scraper (`neuro-scraper/mercadolibre-email-scraper`) Actor

MercadoLibre Email Scraper SD - MercadoLibre Email Scraper is a lead generation tool that extracts leads with public contact emails, account names and profile URLs from MercadoLibre results by keyword, location and email domain - MercadoLibre email extractor.

- **URL**: https://apify.com/neuro-scraper/mercadolibre-email-scraper.md
- **Developed by:** [Neuro Scraper](https://apify.com/neuro-scraper) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.49 / 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.
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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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 Email Scraper — seller contacts from Latin America's largest marketplace

The **MercadoLibre Email Scraper** builds a dataset of publicly indexed contact emails tied to sellers and stores across `mercadolibre.com`, `mercadolibre.com.ar`, `mercadolibre.com.mx` and `mercadolivre.com.br`.
You give it keywords and email domains; it returns emails, account names, listing titles and the snippet each address came from.

Read this before you run it: MercadoLibre indexes product listings rather than seller profiles, so most rows carry a seller email without a profile URL.
You will get contactable addresses and listing context — you will usually not get a clean `perfil` handle to go with them.

That trade-off is worth knowing up front, because it changes what a MercadoLibre seller contact list from this Actor looks like.
It is an email-and-listing dataset, not a profile directory.

#### What the MercadoLibre Email Scraper does and does not do

The MercadoLibre Email Scraper composes Google queries with the `site:` operator against all four MercadoLibre domains, fetches the result pages, and extracts emails from the titles and snippets.
Each unique address is deduplicated and pushed into an Apify dataset the moment it is found.

The MercadoLibre Email Scraper does **not** log into MercadoLibre, use the MercadoLibre Developers API, or open the site in a browser.
No JavaScript rendering, no authentication, no cookies — only what Google has already indexed publicly.

It is an independent tool, not affiliated with, supported by or endorsed by MercadoLibre.

#### Who uses this MercadoLibre vendedor email extractor

Wholesale buyers and importers run the MercadoLibre Email Scraper to find sellers already trading in a category across Argentina, Mexico and Brazil.
Dropshippers use it to reach the vendedores behind listings they want to resell.

Brand-protection teams collect MercadoLibre seller emails before an authorisation check or a counterfeit enquiry.
Marketplace agencies build prospect lists of sellers who may need listing optimisation, advertising or logistics help across LatAm.

Teams covering more than one market often pair regions: the [Amazon Email Scraper](https://apify.com/leads-scraper/amazon-email-scraper) reaches many of the same brands where they also sell into North America.

### Key features of the MercadoLibre Email Scraper

Everything in this table is behaviour the MercadoLibre Email Scraper genuinely implements.

| Feature | What it means in practice |
|---|---|
| Four-domain `site:` scoping | Queries are locked to `mercadolibre.com`, `mercadolibre.com.ar`, `mercadolibre.com.mx` and `mercadolivre.com.br` |
| Spanish-first defaults | `keywords` default to `vendedor` and `tienda`; modifiers to `contacto`, `mayorista`, `atencion al cliente` and `ventas` |
| Query expansion | Each keyword × domain pair runs as a base query, a quoted query, an `intitle:` query, plus one variant per query modifier |
| Domain-filtered extraction | Only emails on the domains you list are kept, so you control the shape of the output |
| Global deduplication | An address appears once per run no matter how many queries or pages surfaced it |
| Obfuscation handling | Reads `name [at] domain [dot] com`, `name (at) domain`, `name @ domain.com`, `domain .com`, zero-width characters and the full-width `＠` |
| Junk filter | Discards placeholders such as `email@`, `yourname@`, `test@`, `xxx@` and single-character locals |
| Boundary-correct matching | `@gmail.com` does not match inside `@gmail.company` or `@gmail.com.br` |
| Soft-wrap repair | Drops a hit that is only the tail of another email in the same result block |
| Structural parsing | Locates the `<h3>` title and the smallest surrounding block instead of trusting Google's CSS class names |
| Whole-page fallback | A Google layout change degrades to "emails without account details", not "no emails" |
| Block detection | CAPTCHA, "unusual traffic" and consent pages are detected and retried rather than counted as empty |
| Retries with backoff | Up to 3 attempts per page, exponential backoff, a fresh proxy session per request |
| End-of-run requeue | Blocked or failed queries get one more pass before the run finishes |
| Resumable state | Progress lives in the key-value store keyed by an input hash, saved on `PERSIST_STATE`, `MIGRATING` and `ABORTING` |
| Async concurrency | An `asyncio` worker pool with a shared stop signal once `maxEmails` is reached |
| Run summary | Pages fetched, blocked pages, retries and emails per page are all logged |

### How the MercadoLibre Email Scraper works

Six steps, start to finish.

1. The MercadoLibre Email Scraper reads your input: keywords, location, email domains and limits.
2. It composes Google queries with the `site:` operator, for example `site:mercadolibre.com.ar vendedor mayorista "@gmail.com"`.
3. It fetches the result pages through the Apify **GOOGLE\_SERP** proxy using async `aiohttp`.
4. It parses each result block structurally, finding the `<h3>` title and the tightest block around it.
5. It extracts emails from that block text with a domain-filtered regex.
6. It deduplicates globally and pushes each lead into the dataset immediately.

#### Spanish and Portuguese keywords are the main lever here

This is the one Actor in the family where writing your keywords in English will quietly cost you most of the results.
The defaults are Spanish for a reason: `vendedor` and `tienda` match the language MercadoLibre listings are actually written in.

Extend them rather than replacing them. `mayorista`, `distribuidor`, `local comercial`, `ventas por mayor` and `revendedor` all reach different seller populations.
For `mercadolivre.com.br`, add Portuguese: `vendedor`, `loja`, `atacado`, `revendedor` and `contato`.

The shipped `queryModifiers` follow the same logic — `contacto`, `mayorista`, `atencion al cliente` and `ventas` are the phrases sellers actually publish next to an address.
Swap in Portuguese modifiers when you are aiming at Brazil specifically.

#### `countryCode` and `location` as regional levers

MercadoLibre is four national marketplaces in one index, and `countryCode` decides which country's Google index the search proxy resolves from.
`AR`, `MX`, `BR`, `CO` and `CL` all return visibly different result sets for the same keyword.

Pair it with a `location` phrase such as `Buenos Aires`, `Guadalajara` or `São Paulo`.
Running the same MercadoLibre Email Scraper input once per country is usually more productive than one broad run.

#### Beating Google's per-query ceiling

Google returns roughly 300 results for any single query, however many MercadoLibre listings actually match.
The catalogue is orders of magnitude larger, so one query can never see all of it.

Query expansion is the answer.
The MercadoLibre Email Scraper turns each keyword into several phrasings and pairs it with each modifier, so a swarm of narrow queries covers ground a single broad query cannot.

### Input settings for the MercadoLibre Email Scraper

Nine fields drive the MercadoLibre Email Scraper. Only `keywords` is required; every other field ships with a working default.

| Field | Type | Default | Meaning |
|---|---|---|---|
| `keywords` | array (required) | `["vendedor", "tienda"]` | Search terms describing the MercadoLibre accounts you want (niche, job title, industry) |
| `location` | string | `""` | Optional location phrase added to every query |
| `customDomains` | array | `["@gmail.com","@yahoo.com"]` | Only emails on these domains are collected; the leading `@` is optional |
| `maxEmails` | integer 1–10000 | `20` | Stop once this many unique emails have been collected |
| `countryCode` | string | `""` | Two-letter country code for the search proxy (US, GB, DE...) |
| `expandQueries` | boolean | `true` | Search each keyword × domain pair in several phrasings |
| `queryModifiers` | array | `["email","contacto","mayorista","atencion al cliente","ventas"]` | Extra words combined with each keyword when expansion is on |
| `maxPagesPerQuery` | integer 1–50 | `30` | Page cap per query |
| `maxConcurrency` | integer 1–20 | `5` | How many queries run in parallel |

#### Example input for a MercadoLibre vendedor email run

```json
{
  "keywords": ["vendedor", "tienda", "mayorista", "distribuidor"],
  "location": "Buenos Aires",
  "customDomains": ["@gmail.com", "@hotmail.com"],
  "maxEmails": 300,
  "countryCode": "AR",
  "expandQueries": true,
  "queryModifiers": ["email", "contacto", "mayorista", "atencion al cliente", "ventas"],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

Note `@hotmail.com` in `customDomains`.
It remains very common among small businesses in Argentina and Mexico, and omitting it costs a MercadoLibre Email Scraper run real yield.

Start a new keyword set at `maxEmails` of 20–50.
A short probe tells you whether the category is well indexed before you spend compute on a long run.

### Output fields from the MercadoLibre Email Scraper

Every dataset item the MercadoLibre Email Scraper writes carries all fourteen fields. The keys are always present; some values are conditional.

| Field | Meaning |
|---|---|
| `network` | Platform name |
| `keyword` | The keyword that produced the lead |
| `query` | The exact Google query used |
| `title` | Raw result title |
| `accountName` | Account label Google prints (store name or listing seller label) |
| `fullName` | Display name parsed from a profile-style title; empty for listing-style results |
| `username` | URL-safe handle when the platform exposes one; otherwise `null` |
| `profileUrl` | Canonical `perfil` URL when a handle is known; otherwise empty |
| `url` | Direct platform link when exposed, else the profile URL |
| `description` | Listing or snippet text, cleaned of labels and counters |
| `email` | Lower-cased email address |
| `emailDomain` | The matched domain (e.g. `@gmail.com`) |
| `possiblyTruncated` | `true` when Google's snippet ellipsis touched the email — verify before sending |
| `foundAt` | ISO 8601 UTC timestamp |

#### Example output rows

The first row is the common shape here — a listing with a seller email and no handle. The second is the less common profile-style row.

```json
[
  {
    "network": "MercadoLibre",
    "keyword": "mayorista",
    "query": "site:mercadolibre.com.ar mayorista contacto \"@gmail.com\"",
    "title": "Bazar Y Cotillon Por Mayor - Envio A Todo El Pais | MercadoLibre",
    "accountName": "Distribuidora Sur",
    "fullName": "",
    "username": null,
    "profileUrl": "",
    "url": "https://www.mercadolibre.com.ar/",
    "description": "Venta mayorista de bazar y cotillón. Consultas y pedidos: distribuidorasur.ventas@gmail.com",
    "email": "distribuidorasur.ventas@gmail.com",
    "emailDomain": "@gmail.com",
    "possiblyTruncated": false,
    "foundAt": "2025-06-20T13:22:51Z"
  },
  {
    "network": "MercadoLibre",
    "keyword": "tienda",
    "query": "site:mercadolibre.com.mx tienda atencion al cliente \"@gmail.com\"",
    "title": "casaverdemx - Perfil | MercadoLibre",
    "accountName": "casaverdemx",
    "fullName": "Casa Verde MX",
    "username": "casaverdemx",
    "profileUrl": "https://www.mercadolibre.com/perfil/casaverdemx",
    "url": "https://www.mercadolibre.com/perfil/casaverdemx",
    "description": "Artículos para el hogar y jardín. Atención al cliente: casaverde.mx.ventas@gmail.com",
    "email": "casaverde.mx.ventas@gmail.com",
    "emailDomain": "@gmail.com",
    "possiblyTruncated": false,
    "foundAt": "2025-06-20T13:31:04Z"
  }
]
```

Export what the MercadoLibre Email Scraper collects as CSV, JSON, Excel or XML, or read it through the Apify API straight into your CRM.

### Use cases for the MercadoLibre Email Scraper

MercadoLibre is a seller marketplace, so these use cases sit in sourcing, trade and marketplace operations rather than consumer prospecting.

| Use case | How the MercadoLibre Email Scraper helps |
|---|---|
| Wholesale sourcing in LatAm | Find sellers already trading in your category and reach the address on their listings |
| Dropshipping supplier outreach | Build a MercadoLibre seller contact list for products you plan to resell |
| Brand protection | Collect vendedor emails before an authorisation, counterfeit or grey-market enquiry |
| Marketplace agency prospecting | Prospect MercadoLibre sellers who may need listing, ads or logistics support |
| Distributor recruitment | Identify regional resellers advertising mayorista terms |
| Regional market comparison | Run the same keywords per country to compare Argentina, Mexico and Brazil |
| Category and competitor research | Sample a MercadoLibre niche by keyword to see how crowded it is |
| CRM enrichment | Match scraped seller emails against accounts you already track |

#### Worked example: finding mayoristas in Mexico and Brazil

Run the MercadoLibre Email Scraper once with `keywords` of `["vendedor", "mayorista", "distribuidor"]` and `countryCode: "MX"`.
Then run it again with `["vendedor", "atacado", "revendedor", "loja"]` and `countryCode: "BR"` to cover the Portuguese-language side.

Keep `expandQueries` on both times so the MercadoLibre Email Scraper also runs each keyword with the shipped modifiers.
Set `customDomains` to `["@gmail.com", "@hotmail.com", "@outlook.com"]` for small-business coverage.

Probe at `maxEmails: 30` each time before committing to a longer run.
The second MercadoLibre Email Scraper run reuses the same expansion plan, so the probe costs little.

### Tips for getting more from the MercadoLibre Email Scraper

Write in Spanish, and in Portuguese for Brazil.
This single change does more for a MercadoLibre Email Scraper run than any other setting.

Category nouns beat role nouns.
"herramientas electricas" or "insumos de peluqueria" is worth far more than "vendedor" on its own.

Treat `customDomains` as a segmentation lever.
Free-mail domains dominate among small LatAm sellers; branded domains point to larger distributors.

Do not raise `maxConcurrency` for its own sake.
More parallel queries will not make the MercadoLibre Email Scraper find emails that are absent from the index — it only spends proxy budget faster.

Schedule the MercadoLibre Email Scraper monthly on a stable input.
Listings get reindexed continuously, so repeat runs keep a MercadoLibre seller email list current.

If your sourcing reaches beyond LatAm, the [AliExpress Email Scraper](https://apify.com/neuro-scraper/aliexpress-email-scraper) and the [DHgate Email Scraper](https://apify.com/neuro-scraper/dhgate-email-scraper) cover the upstream Chinese suppliers many of these sellers buy from.

#### Responsible use, GDPR and marketplace terms

The MercadoLibre Email Scraper only collects addresses that are already public in Google's index, and most of them are business or customer-service mailboxes published for trade enquiries.
That does not make every use lawful by default.

GDPR, Brazil's LGPD, Argentina's and Mexico's data-protection statutes, CAN-SPAM and equivalent rules all govern how you store, contact and profile the people behind those addresses.
MercadoLibre's own terms of service govern how you may interact with sellers on the platform.

Keep outreach relevant and commercial, honour opt-outs immediately, and do not use marketplace contact data for consumer spam.
Compliance is your responsibility, not the Actor's.

### Limitations of the MercadoLibre Email Scraper

Stated plainly, because they affect what you should expect.

- **Listings, not profiles.** MercadoLibre indexes product listings rather than seller profiles, so most rows carry a seller email without a profile URL. Expect `username: null` and `profileUrl: ""` on the majority of rows.
- **Lower identity resolution than its siblings.** In our own measured testing, a MercadoLibre Email Scraper run resolved only 1 of 10 targeted results into a row with a full seller handle and profile URL. The emails are usable; the profile layer largely is not.
- **Publicly indexed emails only.** If an address is not in Google's index, the MercadoLibre Email Scraper cannot find it. Contact forms and in-platform chat are invisible to it.
- **Google's ~300-result cap.** A single query tops out at roughly 300 results, which is exactly why query expansion exists.
- **`possiblyTruncated`.** When Google's snippet ellipsis touched the email, this flag is `true` and the address may be incomplete. Verify before sending.
- **`username` and `profileUrl` are conditional.** They are only populated when Google's result exposes a usable handle. That is a Google limitation, not a bug.
- **Apify GOOGLE\_SERP proxy required.** The MercadoLibre Email Scraper cannot run without Apify proxy credentials.
- **Free-plan cap.** Free Apify plans stop at 100 emails per run; paid plans are uncapped.
- **No guaranteed volume.** Results vary with keywords, language, domains, country and location, and no volume is guaranteed.

If a populated profile URL matters more to you than regional coverage, the [Shopee Email Scraper](https://apify.com/leads-scraper/shopee-email-scraper) resolves seller identity far more reliably.

### Related Actors

The MercadoLibre Email Scraper shares its engine with the rest of this E-commerce & Marketplaces family; only the platform configuration differs.

| Actor | What it collects |
|---|---|
| [MercadoLibre Email and Phone Number Scraper](https://apify.com/neuro-scraper/mercadolibre-email-and-phone-number-scraper) | Emails and phone numbers from MercadoLibre |
| [MercadoLibre Phone Number Scraper](https://apify.com/neuro-scraper/mercadolibre-phone-number-scraper) | Public phone numbers from MercadoLibre |
| [AliExpress Email Scraper](https://apify.com/neuro-scraper/aliexpress-email-scraper) | Public contact emails from AliExpress |
| [Allegro Email Scraper](https://apify.com/neuro-scraper/allegro-email-scraper) | Public contact emails from Allegro |
| [Amazon Email Scraper](https://apify.com/leads-scraper/amazon-email-scraper) | Public contact emails from Amazon |
| [Best Buy Seller Email Scraper](https://apify.com/leads-scraper/best-buy-seller-email-scraper) | Public contact emails from Best Buy |
| [BigCommerce Store Email Scraper](https://apify.com/neuro-scraper/bigcommerce-store-email-scraper) | Public contact emails from BigCommerce Store |
| [Cdiscount Email Scraper](https://apify.com/neuro-scraper/cdiscount-email-scraper) | Public contact emails from Cdiscount |
| [Coupang Email Scraper](https://apify.com/neuro-scraper/coupang-email-scraper) | Public contact emails from Coupang |
| [Depop Email Scraper](https://apify.com/leads-scraper/depop-email-scraper) | Public contact emails from Depop |
| [DHgate Email Scraper](https://apify.com/neuro-scraper/dhgate-email-scraper) | Public contact emails from DHgate |
| [eBay Email Scraper](https://apify.com/leads-scraper/ebay-email-scraper) | Public contact emails from eBay |
| [Ecwid Store Email Scraper](https://apify.com/neuro-scraper/ecwid-store-email-scraper) | Public contact emails from Ecwid Store |
| [Etsy Email Scraper](https://apify.com/leads-scraper/etsy-email-scraper) | Public contact emails from Etsy |
| [Faire Email Scraper](https://apify.com/leads-scraper/faire-email-scraper) | Public contact emails from Faire |
| [Flipkart Email Scraper](https://apify.com/leads-scraper/flipkart-email-scraper) | Public contact emails from Flipkart |
| [Home Depot Seller Email Scraper](https://apify.com/leads-scraper/home-depot-seller-email-scraper) | Public contact emails from Home Depot |
| [JD.com Email Scraper](https://apify.com/leads-scraper/jd-com-email-scraper) | Public contact emails from JD.com |
| [Lazada Email Scraper](https://apify.com/neuro-scraper/lazada-email-scraper) | Public contact emails from Lazada |
| [Lowe's Seller Email Scraper](https://apify.com/leads-scraper/lowes-seller-email-scraper) | Public contact emails from Lowe's |
| [Mercari Email Scraper](https://apify.com/neuro-scraper/mercari-email-scraper) | Public contact emails from Mercari |
| [Newegg Email Scraper](https://apify.com/leads-scraper/newegg-email-scraper) | Public contact emails from Newegg |
| [Otto Email Scraper](https://apify.com/leads-scraper/otto-email-scraper) | Public contact emails from Otto |
| [Overstock Email Scraper](https://apify.com/leads-scraper/overstock-email-scraper) | Public contact emails from Overstock |
| [Poshmark Email Scraper](https://apify.com/leads-scraper/poshmark-email-scraper) | Public contact emails from Poshmark |
| [Rakuten Email Scraper](https://apify.com/neuro-scraper/rakuten-email-scraper) | Public contact emails from Rakuten |
| [Shopee Email Scraper](https://apify.com/leads-scraper/shopee-email-scraper) | Public contact emails from Shopee |
| [Shopify Store Email Scraper](https://apify.com/leads-scraper/shopify-store-email-scraper) | Public contact emails from Shopify Store |
| [Taobao Email Scraper](https://apify.com/leads-scraper/taobao-email-scraper) | Public contact emails from Taobao |
| [Target Seller Email Scraper](https://apify.com/neuro-scraper/target-seller-email-scraper) | Public contact emails from Target |
| [Temu Email Scraper](https://apify.com/leads-scraper/temu-email-scraper) | Public contact emails from Temu |
| [Tmall Email Scraper](https://apify.com/leads-scraper/tmall-email-scraper) | Public contact emails from Tmall |
| [Vinted Email Scraper](https://apify.com/leads-scraper/vinted-email-scraper) | Public contact emails from Vinted |
| [Walmart Email Scraper](https://apify.com/leads-scraper/walmart-email-scraper) | Public contact emails from Walmart |
| [Wayfair Email Scraper](https://apify.com/neuro-scraper/wayfair-email-scraper) | Public contact emails from Wayfair |
| [Wish Email Scraper](https://apify.com/leads-scraper/wish-email-scraper) | Public contact emails from Wish |
| [Wix Stores Email Scraper](https://apify.com/leads-scraper/wix-stores-email-scraper) | Public contact emails from Wix Stores |
| [WooCommerce Email Scraper](https://apify.com/neuro-scraper/woocommerce-email-scraper) | Public contact emails from WooCommerce |
| [Zalando Email Scraper](https://apify.com/leads-scraper/zalando-email-scraper) | Public contact emails from Zalando |
| [AliExpress Email and Phone Number Scraper](https://apify.com/neuro-scraper/aliexpress-email-and-phone-number-scraper) | Emails and phone numbers from AliExpress |
| [Allegro Email and Phone Number Scraper](https://apify.com/neuro-scraper/allegro-email-and-phone-number-scraper) | Emails and phone numbers from Allegro |
| [Amazon Email and Phone Number Scraper](https://apify.com/leads-scraper/amazon-email-and-phone-number-scraper) | Emails and phone numbers from Amazon |

### FAQ about the MercadoLibre Email Scraper

**Does the MercadoLibre Email Scraper use the MercadoLibre API?**
No. It does not use any MercadoLibre API, does not log in, and does not open the website. Every field comes from publicly indexed Google search results.

**Is this Actor affiliated with or endorsed by MercadoLibre?**
No. It is an independent tool built on public Google results, and it is not officially supported by, affiliated with or endorsed by MercadoLibre.

**Why are most `profileUrl` values empty?**
Because MercadoLibre indexes product listings rather than seller profiles, so most rows carry a seller email without a profile URL. You still get the email, the listing title and the snippet.

**Do I have to write keywords in Spanish?**
You do not have to, but you should. Spanish keywords such as `vendedor`, `tienda`, `mayorista` and `distribuidor` match how listings are actually written, and Portuguese terms are needed for `mercadolivre.com.br`.

**Which domains does the MercadoLibre Email Scraper search?**
Four: `mercadolibre.com`, `mercadolibre.com.ar`, `mercadolibre.com.mx` and `mercadolivre.com.br`. Every query is scoped with Google's `site:` operator.

**Can I target one country?**
Yes. Set `countryCode` to `AR`, `MX`, `BR` or another two-letter code, and add a `location` phrase such as `Buenos Aires` or `São Paulo`.

**Whose emails does the MercadoLibre Email Scraper actually find?**
Mostly business mailboxes — ventas, contacto and atención al cliente addresses — published so buyers and trade partners can write in.

**What does `possiblyTruncated: true` mean?**
Google's snippet ellipsis touched the email, so the address may be cut off. Treat those rows as leads to verify rather than addresses to mail.

**How many emails can one MercadoLibre Email Scraper run return?**
Free Apify plans stop at 100 emails per run. Paid plans are uncapped and bounded by `maxEmails`, which accepts 1 to 10000.

**Do I need a proxy?**
Yes. The MercadoLibre Email Scraper requires the Apify GOOGLE\_SERP proxy and cannot run without Apify proxy credentials.

**Why did I get fewer emails than `maxEmails`?**
Google caps a single query at roughly 300 results, and only some listings publish an email that Google indexes. Adding Spanish and Portuguese keywords usually helps more than raising `maxPagesPerQuery`.

**Can a run be resumed after a migration?**
Yes. Progress is stored in the key-value store keyed by a hash of your input, and saved on Apify's `PERSIST_STATE`, `MIGRATING` and `ABORTING` events.

**Is this data compliant to use?**
The MercadoLibre Email Scraper only collects addresses already public in Google's index. How you store and use them — GDPR, LGPD, local LatAm data-protection law, CAN-SPAM and MercadoLibre's own terms — remains your responsibility.

### Support

Questions, feature requests or a custom build? Email **neurodata.apify@gmail.com**.

# Actor input Schema

## `keywords` (type: `array`):

Search terms describing the MercadoLibre accounts you want (niche, job title, industry).

## `location` (type: `string`):

Optional location phrase added to every query (e.g. "New York").

## `customDomains` (type: `array`):

Only emails ending with one of these domains are collected. With or without the leading @. Each domain is searched separately, so more domains means more results but a longer run - remove some for a faster, narrower search, or add your own (e.g. @company.com).

## `maxEmails` (type: `integer`):

Stop once this many unique emails have been collected.

## `countryCode` (type: `string`):

Two-letter country code for the search proxy (e.g. US, GB, DE). Empty for any.

## `expandQueries` (type: `boolean`):

Search each keyword x domain pair with several phrasings. Recommended - Google caps a single query at ~300 results.

## `queryModifiers` (type: `array`):

Extra words combined with each keyword when Expand queries is on. Tuned for MercadoLibre.

## `maxPagesPerQuery` (type: `integer`):

Google rarely returns more than ~30 pages for one query.

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

How many queries run in parallel.

## Actor input object example

```json
{
  "keywords": [
    "vendedor",
    "tienda"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com",
    "@outlook.com",
    "@hotmail.com",
    "@icloud.com",
    "@aol.com",
    "@protonmail.com",
    "@live.com",
    "@gmx.com",
    "@mail.com",
    "@yandex.com",
    "@zoho.com"
  ],
  "maxEmails": 20,
  "countryCode": "",
  "expandQueries": true,
  "queryModifiers": [
    "email",
    "contacto",
    "mayorista",
    "atencion al cliente",
    "ventas"
  ],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

# Actor output Schema

## `results` (type: `string`):

Records produced by MercadoLibre Email Scraper, stored in the run's default dataset.

# 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 = {
    "keywords": [
        "vendedor",
        "tienda"
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com",
        "@outlook.com",
        "@hotmail.com",
        "@icloud.com",
        "@aol.com",
        "@protonmail.com",
        "@live.com",
        "@gmx.com",
        "@mail.com",
        "@yandex.com",
        "@zoho.com"
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contacto",
        "mayorista",
        "atencion al cliente",
        "ventas"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("neuro-scraper/mercadolibre-email-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 = {
    "keywords": [
        "vendedor",
        "tienda",
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com",
        "@outlook.com",
        "@hotmail.com",
        "@icloud.com",
        "@aol.com",
        "@protonmail.com",
        "@live.com",
        "@gmx.com",
        "@mail.com",
        "@yandex.com",
        "@zoho.com",
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contacto",
        "mayorista",
        "atencion al cliente",
        "ventas",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("neuro-scraper/mercadolibre-email-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 '{
  "keywords": [
    "vendedor",
    "tienda"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com",
    "@outlook.com",
    "@hotmail.com",
    "@icloud.com",
    "@aol.com",
    "@protonmail.com",
    "@live.com",
    "@gmx.com",
    "@mail.com",
    "@yandex.com",
    "@zoho.com"
  ],
  "countryCode": "",
  "queryModifiers": [
    "email",
    "contacto",
    "mayorista",
    "atencion al cliente",
    "ventas"
  ]
}' |
apify call neuro-scraper/mercadolibre-email-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,neuro-scraper/mercadolibre-email-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/IUKeJVpH0H2hAPM6U/builds/xyReeDs92xuHp9GKj/openapi.json
