# eBay Email Scraper (`email_scraper/ebay-email-scraper`) Actor

Extract emails from publicly indexed eBay results with the eBay Email Scraper. Search by keywords, location, and custom email domains, filter unwanted terms, remove duplicates, and collect structured lead data including email, title, description, and URL.

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

## Pricing

from $1.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

### eBay Email Scraper Overview

The **eBay Email Scraper** extracts publicly exposed email addresses from eBay-related search results using keyword-based discovery. It searches Google for `site:ebay.com` results, filters results by selected email-domain suffixes, and returns matching contact information with the associated title, description, URL, and search keyword.

The **eBay Email Scraper** is designed for users who need structured contact discovery from publicly indexed eBay pages. It can be useful for lead research, marketplace research, supplier discovery, business intelligence, and data analysis where publicly available contact information is relevant.

Instead of manually reviewing search results, the **eBay Email Scraper** automates the search, pagination, email extraction, duplicate filtering, and dataset collection process. Results are pushed incrementally to the Apify Dataset during the run.

### eBay Email Scraper Features

The **eBay Email Scraper** provides a configurable workflow for discovering email addresses from eBay search results.

#### Keyword-Based Search

Provide one or multiple keywords such as `Supplier`, `Vendor`, `Contractor`, or another relevant search term. Each keyword is searched independently against publicly indexed eBay results.

Using multiple related keywords can broaden discovery because different pages may be indexed for different terms.

#### Email Domain Filtering

The **eBay Email Scraper** allows you to specify email-domain suffixes such as:

- `@gmail.com`
- `@yahoo.com`
- `@outlook.com`
- `@hotmail.com`
- A custom business domain

The scraper builds a separate search combination for each keyword and selected domain suffix.

#### Location Filtering

Add a country, state, city, or other location term to narrow the search.

For example:

```text
United States
California
New York
Miami
```

Leaving the location field empty performs the search without an explicit geographic term.

#### Exclude Words and Phrases

The **eBay Email Scraper** supports an exclusion filter for words or phrases appearing in a result description.

For example:

```text
crypto
onlyfans
```

Single words are matched case-insensitively as whole words, while phrases are matched as case-insensitive substrings. Matching results are skipped before email extraction.

#### Pagination and Result Discovery

The scraper can paginate through Google search results for each keyword and domain combination. It uses multiple stopping conditions to avoid continuing indefinitely when useful email results become scarce.

#### Duplicate Email Filtering

Discovered email addresses are stored in a persistent de-duplication set. The **eBay Email Scraper** avoids pushing the same email address repeatedly during the run.

#### Proxy-Based Search

The implementation uses the Apify `GOOGLE_SERP` proxy group for Google SERP requests. The proxy URL can be rotated when a request fails, helping the Actor recover from individual request problems.

#### Incremental Dataset Output

Every newly discovered email is pushed to the Apify Dataset as it is collected. The implementation also persists progress in the Apify Key-Value Store, allowing the Actor to maintain its cursor and discovered-email set.

### How to Use the eBay Email Scraper

Using the **eBay Email Scraper** is straightforward. Configure the inputs, start the Actor, and review the resulting Dataset.

#### 1. Enter Keywords

Add one or more search keywords.

Example:

```json
["Supplier", "Vendor", "Distributor"]
```

Each keyword participates in the search plan independently.

#### 2. Add a Location

Enter a geographic term when you want to focus discovery.

Example:

```text
United States
```

Leave the field empty when you do not want to add a location phrase to the Google query.

#### 3. Select Email Domains

Choose which email suffixes should be searched.

Example:

```json
["@gmail.com", "@yahoo.com", "@outlook.com"]
```

The configured domains are incorporated directly into the search query.

#### 4. Set the Email Limit

Use `maxEmails` to control the requested number of results for each keyword/domain processing combination.

For paid users, the configured limit can range from 1 to 10,000 according to the Actor input schema. Free-user execution is additionally capped in the code at 100 emails.

#### 5. Add Exclusions

Add unwanted terms when you want to skip matching result snippets.

Example:

```json
["crypto", "onlyfans"]
```

#### 6. Start the Run

The **eBay Email Scraper** searches Google, parses organic results, extracts matching email addresses from descriptions, removes duplicates, and pushes new records into the Dataset.

### eBay Email Scraper Data Extraction

The **eBay Email Scraper** extracts contact information from the description text of parsed organic Google results that match the configured email-domain pattern.

For each matching email, the Actor records the search context and the source result.

The main extracted information includes:

- Email address
- Keyword used for discovery
- Result title
- Result description
- Result URL
- Source network identifier

The email extraction logic searches result descriptions using a regular expression built from the selected domain suffixes. This means the Actor specifically targets email addresses matching the configured domains instead of extracting every possible email format.

The result data is useful for building structured contact datasets, performing research, reviewing publicly indexed marketplace information, and moving collected records into downstream analysis workflows.

### eBay Email Scraper Use Cases

The **eBay Email Scraper** can support several research and business workflows where publicly indexed eBay information is useful.

#### Lead Generation

Use relevant commercial keywords to discover publicly exposed contact addresses associated with indexed eBay content. This can help create an initial lead-research dataset for further qualification.

#### Supplier and Vendor Research

Search terms such as `Supplier`, `Vendor`, `Distributor`, `Manufacturer`, or other marketplace-related terms can be used to find potentially relevant indexed pages and associated contact information.

#### Market Research

Researchers can use the **eBay Email Scraper** to collect structured search-result information for marketplace analysis. Combining several keywords and domains can broaden the dataset.

#### Competitor and Marketplace Research

The collected title, description, URL, keyword, and email fields provide context around each discovered record, making the results more useful than a list of email addresses alone.

#### Business Intelligence

Structured Dataset records can be reviewed and analyzed to identify patterns in public marketplace information, keyword coverage, geographic targeting, and email-domain usage.

#### Data Analysis

The resulting Dataset can be used for filtering, enrichment, categorization, deduplication review, and other data-processing workflows available through Apify.

### Input

The **eBay Email Scraper** accepts the following Actor inputs.

| Input           | Type             | Required | Default                  | Description                                                                                            |
| --------------- | ---------------- | -------- | ------------------------ | ------------------------------------------------------------------------------------------------------ |
| `keywords`      | Array of strings | Yes      | `["Supplier", "Vendor"]` | Keywords or queries used to search eBay-related indexed results.                                       |
| `location`      | String           | No       | `""`                     | Optional country, state, city, or geographic term appended to the search query.                        |
| `customDomains` | Array of strings | No       | `["@gmail.com"]`         | Email-domain suffixes used to identify matching addresses.                                             |
| `maxEmails`     | Integer          | No       | `10`                     | Requested email target used while processing the search combinations. Allowed input range is 1–10,000. |
| `excludeWords`  | Array of strings | No       | `[]`                     | Words or phrases that cause a result description to be skipped before email extraction.                |

#### Understanding `keywords`

The `keywords` input is the central search control. Multiple values can be supplied to broaden discovery.

Example:

```json
{
  "keywords": [
    "Supplier",
    "Vendor",
    "Distributor"
  ]
}
```

#### Understanding `customDomains`

The **eBay Email Scraper** searches each configured email-domain suffix separately.

Example:

```json
{
  "customDomains": [
    "@gmail.com",
    "@yahoo.com",
    "@outlook.com"
  ]
}
```

#### Understanding `maxEmails`

The input schema permits values from 1 through 10,000. The implementation processes keyword/domain combinations independently while applying its collection logic.

For free users, the code enforces a maximum of 100 emails. Paid execution does not apply that specific free-tier ceiling.

A higher requested target does not guarantee that many results because the Actor can only collect emails actually exposed in the indexed search-result content.

### Output Data

The **eBay Email Scraper** produces structured Dataset records for newly discovered email addresses.

| Field         | Type   | Description                                                                  |
| ------------- | ------ | ---------------------------------------------------------------------------- |
| `network`     | String | Source network identifier written by the Actor as `eBay.com`.                |
| `keyword`     | String | Keyword that produced the search combination where the email was discovered. |
| `title`       | String | Title extracted from the Google organic result.                              |
| `description` | String | Description/snippet associated with the parsed organic result.               |
| `url`         | String | URL extracted from the organic search result.                                |
| `email`       | String | Newly discovered email address matching the configured domain pattern.       |

The Apify Dataset view is configured to display `keyword`, `title`, `description`, `url`, and `email` as its primary table columns. The `url` field is displayed as a link.

The **eBay Email Scraper** therefore returns more context than an email-only extractor. You can see why an address was collected, which keyword was used, which result produced it, and where the source result points.

Example record structure:

```json
{
  "network": "eBay.com",
  "keyword": "Supplier",
  "title": "Example eBay Supplier Result",
  "description": "Contact example@example.com for additional information.",
  "url": "https://www.ebay.com/...",
  "email": "example@example.com"
}
```

The exact title, description, URL, and email values depend on the indexed search results available when the Actor runs.

### Example Input

A realistic **eBay Email Scraper** configuration can look like this:

```json
{
  "keywords": [
    "Supplier",
    "Vendor",
    "Distributor"
  ],
  "location": "United States",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com",
    "@outlook.com"
  ],
  "maxEmails": 20,
  "excludeWords": [
    "crypto",
    "onlyfans"
  ]
}
```

This configuration searches the selected keywords with the United States location phrase and the three specified email domains.

### Example Output

A representative record generated by the Actor has this structure:

```json
{
  "network": "eBay.com",
  "keyword": "Vendor",
  "title": "Example Vendor Listing",
  "description": "For inquiries contact vendor@example.com for more information.",
  "url": "https://www.ebay.com/example",
  "email": "vendor@example.com"
}
```

The example demonstrates the actual fields written by `main.py`. Real values depend on the search results encountered during execution.

### Data Quality and Reliability

The **eBay Email Scraper** is designed around publicly indexed search-result data rather than direct access to private eBay account information.

#### Public Search Result Dependency

Email extraction depends on an email address being present in the parsed result description and matching one of the configured domain suffixes. An email that exists on a webpage but is not exposed through the returned search-result snippet may not be collected.

#### Search Pagination

The implementation requests Google search pages sequentially and can process up to 1,000 page iterations for a single keyword/domain pair before reaching the hard pagination ceiling.

The scraper can also stop earlier when result quality declines or no new email addresses are found.

#### Stopping Conditions

Collection can stop when:

- The configured collection target is reached.
- Three consecutive pages produce no new emails.
- Two consecutive empty-result pages occur after page 25.
- Five recent pages collectively produce fewer than five emails after page 25.
- Three consecutive hard-fetch failures trigger an abort for the current pair.

These controls help prevent unnecessary processing when additional pages are unlikely to provide useful results.

#### Persistent Progress

The **eBay Email Scraper** stores its discovered-email set and processing cursor in the Apify Key-Value Store under its internal progress key.

This allows the run state to retain its current position and previously discovered addresses during execution.

#### Proxy Rotation

Google requests are made through the Apify `GOOGLE_SERP` proxy group. When a request attempt fails, the implementation rotates the proxy URL and retries the page.

### SEO and Search Intent

Users searching for an **eBay Email Scraper**, eBay data scraper, eBay email extractor, eBay contact scraper, or eBay public data extraction tool are generally looking for an automated way to discover structured contact information from publicly indexed marketplace content.

The Actor is particularly relevant when the task involves keyword-based eBay research rather than crawling a manually supplied list of profile URLs.

Common search intent includes finding eBay supplier contacts, extracting business email addresses from indexed eBay results, researching marketplace vendors, collecting public contact data, and generating structured lead-research datasets.

The **eBay Email Scraper** addresses these tasks by combining keyword discovery, domain filtering, geographic terms, exclusion rules, SERP pagination, email extraction, and structured Dataset output.

### Frequently Asked Questions

#### What is the eBay Email Scraper?

The **eBay Email Scraper** is an Apify Actor that searches Google for publicly indexed eBay results and extracts matching email addresses from result descriptions.

#### How does the eBay Email Scraper find emails?

The Actor builds Google queries using the `site:ebay.com` operator, a supplied keyword, and a configured email-domain suffix. Matching email addresses are extracted from parsed result descriptions.

#### Can I use multiple keywords?

Yes. The `keywords` input accepts an array, allowing multiple search terms in one run.

#### Can I search a specific country or city?

Yes. The `location` input accepts a free-form country, state, city, or geographic term. The value is added to the Google search query when provided.

#### Can I search custom email domains?

Yes. The `customDomains` input accepts multiple domain suffixes such as `@gmail.com`, `@yahoo.com`, or a custom business domain.

#### Can I exclude certain words?

Yes. The `excludeWords` input lets you skip result descriptions containing configured words or phrases before email extraction occurs.

#### Does the eBay Email Scraper access private eBay information?

No. It is designed around publicly indexed search-result content and does not provide private-account or restricted-information access.

#### Can I collect duplicate emails?

The Actor maintains a set of previously discovered email addresses and only pushes an address when it has not already been registered during the run.

#### How many emails can I request?

The input schema permits `maxEmails` from 1 to 10,000. The implementation additionally enforces a 100-email ceiling for free users.

#### Does a higher `maxEmails` guarantee more results?

No. The requested value is a target or processing limit, not a guarantee. Actual collection depends on available indexed results and matching public email addresses.

#### What data does the Actor return?

The **eBay Email Scraper** writes `network`, `keyword`, `title`, `description`, `url`, and `email` fields to Dataset records.

#### Does the Actor paginate through search results?

Yes. The implementation requests multiple Google result pages and applies several stopping conditions based on results, email discovery, efficiency, and request failures.

#### What happens when a Google request fails?

The Actor retries using a rotated `GOOGLE_SERP` proxy URL. After repeated hard failures, processing for the current keyword/domain pair can stop.

### Why Use the eBay Email Scraper

The **eBay Email Scraper** combines several manual research steps into one automated workflow. Instead of repeatedly searching Google, opening indexed results, checking snippets, copying email addresses, and removing duplicates manually, the Actor performs these tasks programmatically.

Its configurable keyword list makes it suitable for targeted discovery. Email-domain filtering helps focus searches on the types of addresses that matter for a particular project.

The location field provides an additional search refinement mechanism, while exclusion terms can reduce unwanted result snippets. Structured Dataset output then keeps the collected information organized for analysis.

Another advantage is incremental output. Each newly discovered address is pushed to the Dataset instead of waiting for every search combination to finish before records are stored.

### API and Automation

The **eBay Email Scraper** runs as an Apify Actor, so users can incorporate it into normal Apify execution and Dataset-based workflows.

Input parameters can be configured when starting an Actor run, while collected records are written to the Actor Dataset. This makes the resulting data available through the standard Apify platform workflow for Dataset handling, analysis, and downstream automation.

The implementation itself does not define a custom external API endpoint. It relies on Apify Actor execution and Apify storage mechanisms for input, progress persistence, and result delivery.

### Best Practices for Better Results

For stronger discovery with the **eBay Email Scraper**, use several closely related keywords instead of relying on a single broad term.

For example:

```text
Supplier
Vendor
Provider
Distributor
Manufacturer
```

Use multiple relevant email domains when appropriate. You can also start without a location filter and introduce a geographic term when you need more targeted results.

When results are sparse, broadening keywords or adding relevant domain suffixes may increase coverage. A large target should not be treated as a guarantee because the Actor can only extract information exposed by available indexed search results.

### Support

For questions, issues, custom requirements, or Actor-specific improvements, use the support channels available on the Apify Actor page.

For bespoke scraper development or requested modifications, contact **<alphascraper69@gmail.com>**.

# Actor input Schema

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

A list of keywords or queries to search for.

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

Optional country, state or city used to narrow the search. Leave it empty to search without a geographic filter.

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

List of custom email domains

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

How many addresses each search keyword + domain suffix combination may collect before the finder moves on to the next one. This is a per-combination target, not a run-wide total: with 3 keyword and 2 Domains and a limit of 20, the run works through all 6 combinations and aims for up to 20 addresses in each, so up to 120 overall. Lower values finish sooner and cost less; higher values dig deeper but never guarantee a fuller result, since the run can only find what is publicly listed.

## `excludeWords` (type: `array`):

Words or phrases you do not want to see.

## Actor input object example

```json
{
  "keywords": [
    "Supplier",
    "Vendor"
  ],
  "location": "United States",
  "customDomains": [
    "@gmail.com"
  ],
  "maxEmails": 10,
  "excludeWords": []
}
```

# Actor output Schema

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

No description

# 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": [
        "Supplier",
        "Vendor"
    ],
    "location": "United States",
    "customDomains": [
        "@gmail.com"
    ],
    "excludeWords": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("email_scraper/ebay-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": [
        "Supplier",
        "Vendor",
    ],
    "location": "United States",
    "customDomains": ["@gmail.com"],
    "excludeWords": [],
}

# Run the Actor and wait for it to finish
run = client.actor("email_scraper/ebay-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": [
    "Supplier",
    "Vendor"
  ],
  "location": "United States",
  "customDomains": [
    "@gmail.com"
  ],
  "excludeWords": []
}' |
apify call email_scraper/ebay-email-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,email_scraper/ebay-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/gWM7zvvXj7PsLBT2P/builds/EUFQDky6jxxLsuy0D/openapi.json
