# Amazon Email Scraper (`leads-scraper/amazon-email-scraper`) Actor

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

- **URL**: https://apify.com/leads-scraper/amazon-email-scraper.md
- **Developed by:** [Leads Scraper](https://apify.com/leads-scraper) (community)
- **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?

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

### Amazon Email Scraper - extract public seller and brand emails from Amazon

The **Amazon Email Scraper** turns publicly indexed Amazon pages into a clean, deduplicated list of business contact emails.
It is built for wholesale buyers, private-label brands, marketplace agencies, brand-protection teams and dropshippers who need to reach the people behind a listing.
You give it keywords, optional email domains and a location, and it returns a structured dataset you can export to CSV, JSON or Excel.

One thing to know up front: Amazon identifies sellers through query-string ids rather than path handles, so many rows carry a seller or brand email **without** a profile URL.
The email, the account label and the source query are still there - the canonical storefront link simply is not always available.
The Actor is also positioned for **Amazon Business (B2B)** listings, where trade and customer-service addresses are published far more often than on consumer listings.

The Amazon Email Scraper does not log in, does not use Amazon's API and never opens amazon.com itself.
Every lead comes from Google's public index - titles, snippets and site labels - fetched through the Apify GOOGLE\_SERP proxy.
That makes it a search-driven contact discovery tool rather than a site crawler.

#### What the Amazon Email Scraper actually does

The Amazon Email Scraper builds Google queries with the `site:` operator against Amazon's domains, then reads the result blocks.
A typical generated query looks like `site:amazon.com brand wholesale "@gmail.com" "Los Angeles"`.
Each result block is parsed structurally, emails are pulled out with a domain-filtered regex, and every unique address is pushed straight to the dataset.

Because it works from search results, the Amazon Email Scraper covers **amazon.com, amazon.co.uk, amazon.de, amazon.ca and amazon.in** out of the box.
That multi-domain reach is what makes it useful for cross-border supplier sourcing rather than a single-country contact list.
Pair it with the `countryCode` input and you can bias an entire run toward UK, German, Canadian or Indian results.

#### Why marketplace teams use an Amazon Email Scraper

Finding the operator behind an Amazon storefront is normally a manual job: open the listing, hunt the seller page, copy the address.
The Amazon Email Scraper compresses that into a single run that sweeps hundreds of Google result pages in parallel.
It is the same workflow a sourcing analyst does by hand, only automated and deduplicated.

Emails published on Amazon listings and storefronts are almost always **business addresses** - customer service inboxes, wholesale desks, brand enquiry aliases.
That is exactly what makes them usable for trade outreach, and it is also why responsible use matters (see the responsible-use section below).
The Amazon Email Scraper never touches private account data, order data or anything behind a login.

### Key features of the Amazon Email Scraper

| Feature | What it means in practice |
|---|---|
| Google-index sourcing | Reads publicly indexed Amazon results through the Apify GOOGLE\_SERP proxy - no login, no cookies, no browser |
| Multi-domain coverage | Searches amazon.com, amazon.co.uk, amazon.de, amazon.ca and amazon.in |
| Query expansion | Runs base, quoted and `intitle:` variants plus one variant per query modifier; base queries run first |
| Domain filtering | Only keeps emails on the domains you list in `customDomains` |
| Global deduplication | An address is emitted once per run, across every query and every page |
| Obfuscation handling | Understands `name [at] domain [dot] com`, `name (at) domain`, `name @ domain.com`, `domain .com`, zero-width characters and the full-width `＠` |
| Junk filter | Rejects placeholders such as `email@`, `yourname@`, `test@`, `xxx@` and single-character locals |
| Boundary-correct matching | `@gmail.com` will not match inside `@gmail.company` or `@gmail.com.br` |
| Soft-wrap repair | Discards a hit that is only the tail of another email in the same result block |
| Async concurrency | An `asyncio` worker pool with a shared stop signal on `maxEmails` |
| Retries and block detection | Up to 3 attempts per page with exponential backoff, a fresh proxy session per request, and CAPTCHA / "unusual traffic" / consent pages detected and retried rather than counted as empty |
| Blocked-query requeue | Failed or blocked queries are re-queued once at the end of the run |
| Resumable state | Progress is stored in the key-value store keyed by a hash of the input, with throttled saves plus saves on `PERSIST_STATE`, `MIGRATING` and `ABORTING` |
| Layout fallback | A whole-page fallback parser means a Google markup change degrades to "emails without account details", not "no emails" |
| Run summary | Logs pages fetched, blocked pages, retries and emails per page |

### How the Amazon Email Scraper works, step by step

1. It reads your input - keywords, location, email domains and limits.
2. It builds Google queries with the `site:` operator against the five Amazon domains.
3. It fetches result pages asynchronously through the Apify GOOGLE\_SERP proxy using `aiohttp`.
4. It locates each result's `<h3>` title and the smallest surrounding block, so it never depends on Google's CSS class names.
5. It extracts emails from that block text with a domain-filtered regex.
6. It deduplicates globally and pushes each lead to the Apify dataset immediately.

That immediate push matters: you can watch leads land while the Amazon Email Scraper is still running, and abort early without losing anything.
Because the state is resumable and input-keyed, a migrated or restarted run continues where it stopped.
Nothing is buffered until the end.

### Amazon Email Scraper input reference

Every field below is exactly what the Actor accepts - names, types and defaults are taken from the input schema.

| Field | Type | Default | Meaning |
|---|---|---|---|
| `keywords` | array (required) | `["seller", "brand"]` | Search terms describing the Amazon 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 kept; the leading `@` is optional |
| `maxEmails` | integer 1-10000 | `20` | Stop after this many unique emails |
| `countryCode` | string | `""` | Two-letter country for the search proxy (US, GB, DE, CA, IN...) |
| `expandQueries` | boolean | `true` | Search each keyword x domain pair in several phrasings |
| `queryModifiers` | array | `["email","contact","wholesale","customer service","inquiries"]` | Extra words combined with each keyword when expansion is on |
| `maxPagesPerQuery` | integer 1-50 | `30` | Page cap per query |
| `maxConcurrency` | integer 1-20 | `5` | Parallel queries |

#### Tuning `countryCode` on the Amazon Email Scraper

`countryCode` is a genuine lever here, not decoration, because Amazon runs five indexed domains in this config.
Setting `GB` biases the search proxy toward UK results, which surfaces amazon.co.uk sellers far more often; `DE` does the same for amazon.de.
Running the Amazon Email Scraper once per country code is usually more productive than one blended run.

The `queryModifiers` defaults - `email`, `contact`, `wholesale`, `customer service`, `inquiries` - are tuned for marketplace trade language.
Swap in `distributor`, `bulk order` or `reseller` when you are sourcing rather than doing brand outreach.
Leave `expandQueries` on: Google caps a single query at roughly 300 results, and expansion is how the Amazon Email Scraper gets past that ceiling.

#### Example input for the Amazon Email Scraper

```json
{
  "keywords": ["kitchen gadgets brand", "pet supplies seller"],
  "location": "United Kingdom",
  "customDomains": ["@gmail.com", "@outlook.com"],
  "maxEmails": 250,
  "countryCode": "GB",
  "expandQueries": true,
  "queryModifiers": ["email", "contact", "wholesale", "customer service", "inquiries"],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

### Amazon Email Scraper output fields

Every dataset item has all fourteen fields below - no more, no fewer.

| 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 (handle or display name) |
| `fullName` | Display name parsed from a profile-style title; empty for listing captions |
| `username` | URL-safe handle when Amazon exposes one; otherwise `null` |
| `profileUrl` | Canonical storefront URL when a handle is known; otherwise empty |
| `url` | Direct Amazon link when exposed, else the profile URL |
| `description` | Bio or listing snippet, cleaned of labels and engagement 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 from the Amazon Email Scraper

The second row is the honest common case on Amazon: a usable seller email, an account label, but no storefront handle to build a profile URL from.

```json
[
  {
    "network": "Amazon",
    "keyword": "kitchen gadgets brand",
    "query": "site:amazon.co.uk kitchen gadgets brand wholesale \"@gmail.com\" \"United Kingdom\"",
    "title": "NordKitchen Official Store - Amazon.co.uk",
    "accountName": "NordKitchen",
    "fullName": "NordKitchen",
    "username": "NordKitchen",
    "profileUrl": "https://www.amazon.com/stores/NordKitchen",
    "url": "https://www.amazon.com/stores/NordKitchen",
    "description": "Wholesale and trade enquiries: nordkitchen.trade@gmail.com. Stainless steel cookware and kitchen tools.",
    "email": "nordkitchen.trade@gmail.com",
    "emailDomain": "@gmail.com",
    "possiblyTruncated": false,
    "foundAt": "2026-08-31T09:12:44Z"
  },
  {
    "network": "Amazon",
    "keyword": "pet supplies seller",
    "query": "site:amazon.com pet supplies seller contact \"@outlook.com\"",
    "title": "Pawline Supply Co - Seller Profile - Amazon.com",
    "accountName": "Pawline Supply Co",
    "fullName": "Pawline Supply Co",
    "username": null,
    "profileUrl": "",
    "url": "",
    "description": "Customer service: support@pawlinesupply.outlook.com. Business and bulk orders welcome.",
    "email": "support@pawlinesupply.outlook.com",
    "emailDomain": "@outlook.com",
    "possiblyTruncated": false,
    "foundAt": "2026-08-31T09:13:02Z"
  }
]
```

### Use cases for the Amazon Email Scraper

| Who | How they use the Amazon Email Scraper |
|---|---|
| Wholesale buyers | Build a shortlist of brands and sellers in a category, then send trade-account enquiries |
| Private-label brands | Find contract manufacturers and existing sellers in an adjacent niche |
| Marketplace agencies | Prospect for PPC, listing-optimisation and account-management clients |
| Brand-protection teams | Collect published contact points for sellers listing against a protected brand |
| Dropshippers | Identify suppliers who advertise a wholesale or inquiries inbox on their listings |
| B2B sales teams | Reach Amazon Business sellers with logistics, packaging or software offers |
| Market researchers | Map which categories publish trade contacts and which do not |
| Recruiters | Find operators and brand managers hiring in the marketplace space |

A common pattern is to run the Amazon Email Scraper narrowly per category and per country, then merge the datasets.
Narrow runs produce cleaner keyword attribution, because the `keyword` and `query` fields tell you exactly which phrasing produced each lead.
That makes A/B testing your search language straightforward.

If your sourcing is not Amazon-only, the same engine covers the rest of the marketplace landscape - see the [Walmart Email Scraper](https://apify.com/leads-scraper/walmart-email-scraper) and the [eBay Email Scraper](https://apify.com/leads-scraper/ebay-email-scraper) for the two highest-yielding siblings.
For handmade and craft supply chains, the [Etsy Email Scraper](https://apify.com/leads-scraper/etsy-email-scraper) is the better starting point.
For overseas manufacturing, try the [AliExpress Email Scraper](https://apify.com/neuro-scraper/aliexpress-email-scraper) or the [DHgate Email Scraper](https://apify.com/neuro-scraper/dhgate-email-scraper).

### Amazon Email Scraper limitations - read this before you run it

- **Profile URLs are often missing.** Amazon identifies sellers through query-string ids rather than path handles, so many rows carry a seller or brand email without a profile URL. In a recent live test the Amazon Email Scraper filled account identity on every row it returned, but only around 7 in 10 rows also carried a usable `profileUrl`. Treat the storefront link as a bonus, not a guarantee.
- **Publicly indexed emails only.** If an address is not visible in Google's index, the Amazon Email Scraper cannot find it. There is no crawling of Amazon itself.
- **Google's result ceiling.** A single query returns roughly 300 results at most. That is precisely why `expandQueries` and `queryModifiers` exist.
- **`possiblyTruncated`.** When Google's snippet ellipsis touched an address, the row is flagged `true`. Verify those before sending.
- **Apify GOOGLE\_SERP proxy required.** The Amazon Email Scraper cannot run without Apify proxy credentials.
- **Free-plan cap.** Free Apify plans are capped at 100 emails per run; paid plans are uncapped.
- **`username` and `profileUrl` are conditional.** They are populated only when Google's result exposes a handle. Rows without one still carry `accountName` and `fullName`. This is a Google indexing limitation, not a bug.
- **No volume guarantee.** Results vary with keywords, domains, country and location. No run count is promised.

### Responsible use

Emails published on Amazon listings and storefronts are usually business or customer-service addresses posted for trade enquiries.
Treat them as B2B contact points, keep your outreach relevant, honour opt-outs, and record a lawful basis if you operate under GDPR, PECR or similar regimes.
Review Amazon's terms and your local marketing law before you send; the Amazon Email Scraper collects public data, but what you do with it is your responsibility.

This Actor is not affiliated with, endorsed by or officially supported by Amazon.

### FAQ about the Amazon Email Scraper

#### Does the Amazon Email Scraper log into Amazon?

No. It never logs in, never uses Amazon's API and never opens amazon.com. All data comes from publicly indexed Google search results.

#### Why is `profileUrl` empty on so many rows?

Amazon identifies sellers through query-string ids rather than path handles, so many rows carry a seller or brand email without a profile URL. You still get `accountName`, `fullName`, the email and the source query.

#### Which Amazon domains does it cover?

amazon.com, amazon.co.uk, amazon.de, amazon.ca and amazon.in. Use `countryCode` to bias a run toward one of them.

#### Does it work for Amazon Business (B2B) listings?

Yes - the Actor is positioned for them, and trade or wholesale addresses are published more often on B2B-oriented pages than on consumer ones.

#### Can the Amazon Email Scraper find any email, on any domain?

Only emails on the domains you list in `customDomains`. The default is `@gmail.com` and `@yahoo.com`; add corporate domains to broaden the catch.

#### How many emails can one run return?

Up to `maxEmails`, which accepts 1 to 10000. Free Apify plans are capped at 100 emails per run; paid plans are uncapped.

#### What does `possiblyTruncated: true` mean?

Google's snippet ellipsis touched that address, so it may be cut off. Verify it before adding it to a send list.

#### Does it need proxies?

Yes - the Apify GOOGLE\_SERP proxy. The Amazon Email Scraper cannot run without Apify proxy credentials.

#### Can I resume an interrupted run?

Yes. Progress is stored in the key-value store, keyed by a hash of your input, and saved on `PERSIST_STATE`, `MIGRATING` and `ABORTING` events.

#### What happens if Google changes its layout?

Parsing is structural - the `<h3>` title and its smallest surrounding block - and there is a whole-page fallback parser. A markup change degrades to "emails without account details" rather than "no emails".

#### How do I get more results?

Add specific keywords, keep `expandQueries` on, widen `customDomains`, raise `maxPagesPerQuery`, and run separate jobs per `countryCode`.

#### Are the emails verified?

No. The Amazon Email Scraper extracts what is published in the index. Run them through your own verification step before a campaign.

### Getting started with the Amazon Email Scraper

1. Open the Amazon Email Scraper on Apify and press **Try for free**.
2. Replace the default `keywords` (`seller`, `brand`) with your own category terms.
3. Add the email domains you care about to `customDomains`.
4. Set `countryCode` for the Amazon domain you want, raise `maxEmails`, and run it.
5. Export the dataset from the **Storage** tab when the Amazon Email Scraper finishes.

Start small - a `maxEmails` of 20 to 50 - to check that your keywords and domains are pulling the right kind of seller.
Once a keyword set is producing useful rows, re-run the Amazon Email Scraper with a higher cap and more pages per query.

#### Exporting Amazon Email Scraper results

Every Amazon Email Scraper run writes to a standard Apify dataset, so you can download CSV, JSON, XML or Excel, or pull the rows through the Apify API and the JavaScript or Python clients.
The default dataset view surfaces the fields most people need first: email, account, name, username, profile, keyword, bio snippet and the truncation flag.
Deduplication is per run, so keep your own master list when you merge several Amazon Email Scraper datasets together.

### Related Actors

The Amazon Email Scraper is part of a 41-Actor E-commerce & Marketplaces family that shares this engine.

| Actor | What it collects |
|---|---|
| [Amazon Email and Phone Number Scraper](https://apify.com/leads-scraper/amazon-email-and-phone-number-scraper) | Emails and phone numbers from Amazon |
| [Amazon Phone Number Scraper](https://apify.com/leads-scraper/amazon-phone-number-scraper) | Public phone numbers from Amazon |
| [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 |
| [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 |
| [MercadoLibre Email Scraper](https://apify.com/neuro-scraper/mercadolibre-email-scraper) | Public contact emails from MercadoLibre |
| [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 |
| [Best Buy Email and Phone Number Scraper](https://apify.com/neuro-scraper/best-buy-seller-email-and-phone-number-scraper) | Emails and phone numbers from Best Buy |

### Leave a review

If the Amazon Email Scraper saved you time, please leave a star rating and a short review on
the Actor page.

Reviews are how other buyers judge whether a tool works, and they tell us which features to
build next.

If something did not work, email <neurodata.apify@gmail.com>
instead - bugs get fixed faster than they get complained about.

### Support

Questions, a bug, or need a custom build? Email **neurodata.apify@gmail.com**.

# Actor input Schema

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

Search terms describing the Amazon 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 Amazon.

## `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": [
    "seller",
    "brand"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "maxEmails": 20,
  "countryCode": "",
  "expandQueries": true,
  "queryModifiers": [
    "email",
    "contact",
    "wholesale",
    "customer service",
    "inquiries"
  ],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

# Actor output Schema

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

Records produced by Amazon 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": [
        "seller",
        "brand"
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com"
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contact",
        "wholesale",
        "customer service",
        "inquiries"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("leads-scraper/amazon-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": [
        "seller",
        "brand",
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com",
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contact",
        "wholesale",
        "customer service",
        "inquiries",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("leads-scraper/amazon-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": [
    "seller",
    "brand"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "countryCode": "",
  "queryModifiers": [
    "email",
    "contact",
    "wholesale",
    "customer service",
    "inquiries"
  ]
}' |
apify call leads-scraper/amazon-email-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,leads-scraper/amazon-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/EDeto8cUBBgzTsb41/builds/guLN4fW6JiiWxhQ6i/openapi.json
