# Wish Email Scraper (`leads-scraper/wish-email-scraper`) Actor

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

- **URL**: https://apify.com/leads-scraper/wish-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

### Wish Email Scraper - public merchant emails from Wish, with honest expectations

The Wish Email Scraper collects publicly indexed contact emails from Wish pages using Google search, filtered
by keyword, location and email domain.
It is aimed at wholesale sourcing and marketplace-seller outreach.

Before anything else, the important part.
Wish exposes few indexable merchant pages, so expect low volume.

In an internal test run the Wish Email Scraper returned a single Google result block and zero emails.
That is not a bug and not a configuration mistake; it reflects how little of Wish's merchant surface is
publicly indexed.

Wish is the weakest platform in this family, and a run may legitimately return nothing.

If you need dependable volume, run [Lazada Email Scraper](https://apify.com/neuro-scraper/lazada-email-scraper),
[AliExpress Email Scraper](https://apify.com/neuro-scraper/aliexpress-email-scraper) or
[DHgate Email Scraper](https://apify.com/neuro-scraper/dhgate-email-scraper) instead.

#### Who should still use the Wish Email Scraper

Use it when Wish specifically matters to you and an empty result is an acceptable outcome.
Coverage checks, competitive audits and completeness passes over a multi-marketplace sourcing project are all
reasonable reasons to run the Wish Email Scraper.

Do not use it as your primary source of merchant leads.
It is a low-cost sweep of a thin index, not a list-building engine.

#### What the Wish Email Scraper actually does

The Wish Email Scraper never logs into Wish, never uses a Wish API and never opens the Wish website.
It builds Google queries with the `site:wish.com` operator and reads the public search results.

There is no browser, no JavaScript rendering, no authentication and no cookies.
Every address it could return was already visible in Google's public index.

### Why the Wish Email Scraper yields so little

Wish became an invite-only marketplace, and its merchant dashboard lives behind a login at
`merchant.wish.com`.
Public merchant storefronts are thin, largely client-rendered and sparsely crawled.

Marketplace policy also pushes buyer-to-merchant communication into in-app messaging.
Merchants therefore have little reason to publish a business email anywhere Google can read it.

Put those together and the addressable pool the Wish Email Scraper can reach is very small.
No amount of keyword tuning changes an index that does not contain the data.

### Features of the Wish Email Scraper

The engine is the same one behind the higher-yielding Actors in this family.
Everything below is enabled by default, so the Wish Email Scraper is already extracting as much as the index
allows.

| Feature | What it means in practice |
|---|---|
| Google `site:` targeting | All queries are scoped to `wish.com` |
| Query expansion | Base, quoted and `intitle:` variants, plus one query per modifier |
| Country targeting | `countryCode` points the search proxy at a specific market |
| Domain filtering | Only emails on the domains you list are kept |
| Global deduplication | Each email address appears once across every query and page |
| Obfuscated email recovery | Handles `name [at] domain [dot] com`, `name (at) domain`, `name @ domain.com` and the full-width `＠` |
| Junk filtering | 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 | Drops a hit that is only the tail of another email in the same block |
| Async concurrency | An `asyncio` worker pool with a shared stop signal on `maxEmails` |
| Retries with backoff | Up to three attempts per page, each with a fresh proxy session |
| Block detection | CAPTCHA, "unusual traffic" and consent pages are retried rather than counted as empty |
| Failed-query requeue | Blocked or failed queries are retried once at the end of the run |
| Resumable state | Progress is kept in the key-value store and saved on `PERSIST_STATE`, `MIGRATING` and `ABORTING` |
| Structural parsing | Result blocks are found via `<h3>` and the smallest surrounding block, not Google CSS class names |
| Whole-page fallback | A Google layout change degrades to emails without account details rather than to zero results |
| Truncation flag | `possiblyTruncated` marks emails the snippet ellipsis may have clipped |
| Run summary | Logs pages fetched, blocked pages, retries and emails per page |

That last row is genuinely useful here.
If the Wish Email Scraper finds nothing, the run summary tells you whether pages were fetched and blocked or
simply came back empty.

### How the Wish Email Scraper works

It reads your keywords, location, email domains and limits.
Then it builds Google queries such as `site:wish.com merchant "@gmail.com"`.

It fetches result pages through the Apify GOOGLE\_SERP proxy using `aiohttp`.
Each result block is parsed structurally by locating the `<h3>` title and then the smallest surrounding block.

A domain-filtered regex extracts emails from the block text.
The Wish Email Scraper deduplicates globally and pushes any lead to the dataset immediately.

If Google returns few blocks, there is nothing further to parse.
An empty dataset means the index was empty for your query, not that the Wish Email Scraper failed.

### Wish Email Scraper input fields

| Field | Type | Default | Meaning |
|---|---|---|---|
| `keywords` | array (required) | `["merchant", "seller"]` | Search terms describing the Wish accounts you want |
| `location` | string | `""` | Optional location phrase added to every query |
| `customDomains` | array | `["@gmail.com","@yahoo.com"]` | Only emails on these domains are kept; the `@` 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...) |
| `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 |

#### Example Wish Email Scraper input

```json
{
  "keywords": ["merchant", "seller", "store", "supplier"],
  "location": "",
  "customDomains": ["@gmail.com", "@yahoo.com", "@hotmail.com", "@outlook.com"],
  "maxEmails": 50,
  "countryCode": "US",
  "expandQueries": true,
  "queryModifiers": ["email", "contact", "wholesale", "customer service", "inquiries"],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

A wide keyword list and four email domains give the Wish Email Scraper the best chance available.
Set `maxEmails` low, because on this platform a high cap will not be reached anyway.

### Wish Email Scraper output fields

When the Wish Email Scraper does produce a row, that row contains all fourteen fields below.

| 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 |
| `fullName` | Display name parsed from a profile-style title; empty for listing titles |
| `username` | URL-safe handle when Wish exposes one; otherwise `null` |
| `profileUrl` | Canonical merchant URL when a handle is known; otherwise empty |
| `url` | Direct Wish link when exposed, else the profile URL |
| `description` | Snippet text, cleaned of labels and counters |
| `email` | Lower-cased email address |
| `emailDomain` | The matched domain |
| `possiblyTruncated` | `true` when Google's snippet ellipsis touched the email |
| `foundAt` | ISO 8601 UTC timestamp |

#### Example Wish Email Scraper output

This shows the shape of a successful row, not a typical result count.
Many runs will return an empty dataset, and the second row shows the common case where no merchant handle is
exposed.

```json
[
  {
    "network": "Wish",
    "keyword": "merchant",
    "query": "site:wish.com merchant \"@gmail.com\"",
    "title": "NorthPeak Outdoor Gear | Wish Merchant Store",
    "accountName": "NorthPeak Outdoor Gear",
    "fullName": "NorthPeak Outdoor Gear",
    "username": "northpeakgear",
    "profileUrl": "https://www.wish.com/merchant/northpeakgear",
    "url": "https://www.wish.com/merchant/northpeakgear",
    "description": "Outdoor and camping equipment. Wholesale inquiries: northpeak.wholesale@gmail.com",
    "email": "northpeak.wholesale@gmail.com",
    "emailDomain": "@gmail.com",
    "possiblyTruncated": false,
    "foundAt": "2026-08-31T13:10:29.415Z"
  },
  {
    "network": "Wish",
    "keyword": "seller",
    "query": "site:wish.com seller contact \"@yahoo.com\"",
    "title": "Portable LED Camping Lantern - Wish",
    "accountName": "Wish",
    "fullName": "",
    "username": null,
    "profileUrl": "",
    "url": "https://www.wish.com/product/portable-led-camping-lantern",
    "description": "Seller and bulk order enquiries: brightline.supply@yahoo.com",
    "email": "brightline.supply@yahoo.com",
    "emailDomain": "@yahoo.com",
    "possiblyTruncated": true,
    "foundAt": "2026-08-31T13:11:02.883Z"
  }
]
```

### Use cases for the Wish Email Scraper

| Use case | How the Wish Email Scraper helps |
|---|---|
| Multi-marketplace coverage check | Confirm whether Wish adds anything to an existing sourcing list |
| Wholesale sourcing sweep | Catch the rare merchant who does publish a wholesale email |
| Competitive audit | See how little contact data Wish merchants expose publicly |
| Cross-marketplace merchant matching | Compare Wish rows against Amazon, AliExpress or DHgate results |
| Data completeness passes | Fill Wish-shaped gaps in a wider marketplace dataset |
| Research on marketplace policy | Document how invite-only platforms restrict public contact data |

Notice that none of these is bulk lead generation.
That is deliberate, because the Wish Email Scraper cannot honestly promise it.

### Tips for running the Wish Email Scraper

Keep `maxEmails` low, around 20 to 50.
A high cap costs nothing but will not be reached, and a low cap makes the run finish cleanly.

Widen `customDomains` to four or five entries.
`@hotmail.com` and `@outlook.com` alongside the defaults give the Wish Email Scraper the widest reasonable net.

Leave `expandQueries` on.
Google caps a single query at roughly 300 results, and expansion is the only mechanism that works around it.

Try broader product-category keywords rather than more business terms.
`store`, `supplier` and category words sometimes reach indexed listing pages that `merchant` alone misses.

Run a stronger sibling in parallel.

Pair the Wish Email Scraper with [Temu Email Scraper](https://apify.com/leads-scraper/temu-email-scraper) or
[AliExpress Email Scraper](https://apify.com/neuro-scraper/aliexpress-email-scraper) so a thin run does not leave
you empty-handed.

### Limitations of the Wish Email Scraper

Wish exposes few indexable merchant pages, so expect low volume.
This is the defining limitation, and it means a run can finish with zero emails.

The Wish Email Scraper only finds accounts whose email is publicly visible in Google's index.
Wish merchants overwhelmingly communicate through in-app messaging and a login-gated dashboard.

Google caps a single query at roughly 300 results, which is why query expansion exists.
On Wish the index runs out long before that cap becomes relevant.

`username` and `profileUrl` are only populated when Google's result exposes a handle.
Rows from listing pages arrive with `username: null` and an empty `profileUrl`, which is a Google indexing
limitation rather than a bug.

`possiblyTruncated: true` means Google's snippet ellipsis touched the email, so verify before sending.

The Wish Email Scraper requires the Apify GOOGLE\_SERP proxy and cannot run without Apify proxy credentials.
Free Apify plans are capped at 100 emails per run; paid plans are uncapped, though Wish's own yield will bind
first.

Results vary with keywords, domains and location, and no volume is guaranteed.
On this platform that caveat is not boilerplate; it is the headline.

### Responsible use, GDPR and marketplace terms for the Wish Email Scraper

Published business addresses are not consent to be marketed to.
Under GDPR, CCPA and similar regimes you need a lawful basis, honest identification of yourself and a working
opt-out in every message.

Marketplace terms of service also restrict unsolicited commercial contact.
Respect Wish's rules, keep suppression lists and never resell scraped personal data.

The Wish Email Scraper is not affiliated with, endorsed by or officially supported by Wish.
It reads public Google results and nothing else.

### Wish Email Scraper FAQ

#### How many results should I expect from the Wish Email Scraper?

Very few, and possibly none. Wish exposes few indexable merchant pages, so expect low volume; an internal test
run returned one Google result block and zero emails. Use
[Lazada Email Scraper](https://apify.com/neuro-scraper/lazada-email-scraper) or [DHgate Email Scraper](https://apify.com/neuro-scraper/dhgate-email-scraper) when you need volume.

#### Is a zero-result Wish Email Scraper run a bug?

No. It means Google's index held nothing matching your query on `wish.com`. Check the run summary to confirm
pages were fetched rather than blocked.

#### Is the Wish Email Scraper affiliated with Wish?

No. It is an independent Actor reading public Google results, and it is not endorsed or officially supported
by Wish.

#### Why is Wish so much thinner than other marketplaces?

Wish is invite-only for merchants, its dashboard is login-gated and its policy pushes contact into in-app
messaging, so very little merchant contact data reaches the public index.

#### Should I use the Wish Email Scraper at all?

Only if Wish specifically matters to your project and an empty result is acceptable. For general merchant lead
generation, a sibling Actor will serve you far better.

#### Can I schedule the Wish Email Scraper?

Yes. Apify schedules, webhooks and the API work normally, and a periodic sweep is a sensible way to catch any
newly indexed merchant page.

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

No. It never logs in, never uses a Wish API and never opens the Wish website. All data comes from publicly
indexed Google search results.

#### Can I improve the yield with better keywords?

Marginally. Broader category terms and more email domains help a little, but the Wish Email Scraper cannot
extract data that Google has not indexed.

#### Why is `username` sometimes `null`?

Because Google's result did not expose a merchant handle, which is common for listing pages. The email and
snippet are still populated.

#### What does `possiblyTruncated` mean?

Google's snippet ellipsis may have clipped the address, so verify those emails before sending.

#### Do I need a proxy?

Yes. The Wish Email Scraper requires the Apify GOOGLE\_SERP proxy and will not run without Apify proxy
credentials.

#### Is there a free-plan cap?

Free Apify plans are capped at 100 emails per run and paid plans are uncapped, but on Wish you are unlikely to
approach either.

#### Can I resume an interrupted run?

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

#### How do I export the results?

The Apify dataset exports to CSV, JSON, Excel and more, and it is reachable over the API for direct CRM import.

### Related Actors

Forty sibling Actors cover the rest of the E-commerce & Marketplaces category.
They run the same engine as the Wish Email Scraper with a platform-specific configuration, and most of them
yield considerably more.

| Actor | What it collects |
|---|---|
| [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 |
| [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 |
| [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 |
| [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 |
| [BigCommerce Store Email and Phone Number Scraper](https://apify.com/neuro-scraper/bigcommerce-store-email-and-phone-number-scraper) | Emails and phone numbers from BigCommerce Store |

### Leave a review

If the Wish 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, bug reports or a custom build of the Wish Email Scraper: **neurodata.apify@gmail.com**.

# Actor input Schema

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

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

## `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": [
    "merchant",
    "seller"
  ],
  "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 Wish 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": [
        "merchant",
        "seller"
    ],
    "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/wish-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": [
        "merchant",
        "seller",
    ],
    "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/wish-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": [
    "merchant",
    "seller"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "countryCode": "",
  "queryModifiers": [
    "email",
    "contact",
    "wholesale",
    "customer service",
    "inquiries"
  ]
}' |
apify call leads-scraper/wish-email-scraper --silent --output-dataset

```

## MCP server setup

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