# Website Email Scraper (`seemuapps/website-email-scraper`) Actor

Crawl any website up to 20 levels deep and extract all visible email addresses, with proxy support and same-domain link following.

- **URL**: https://apify.com/seemuapps/website-email-scraper.md
- **Developed by:** [Andrew](https://apify.com/seemuapps) (community)
- **Categories:** Lead generation, Automation, Developer tools
- **Stats:** 7 total users, 0 monthly users, 96.8% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.50 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#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

## Website Email Scraper

Extract every visible email address from any website - crawls up to 1,000 pages deep using a real browser so JavaScript-rendered content is fully captured. Stays within the same domain and deduplicates results automatically.

### Pricing

You only pay per email address found.

### What you get

- Every unique email address visible on the site, deduplicated across all pages
- The exact page URL where each email was first found
- The page title alongside each result for easy context
- Works on JS-heavy sites (React, Vue, Angular) - uses a real Chromium browser, not just HTML parsing

### Use cases

- **Lead generation** - find contact emails on competitor or partner sites
- **Sales prospecting** - build contact lists from industry directories or association member pages
- **Due diligence** - audit what email addresses a company exposes publicly
- **Recruitment** - find department or team contact pages at target organisations
- **Compliance checks** - identify exposed email addresses on your own domain before a security review

### How to use

#### Scan a whole website

Enter the homepage URL to crawl the entire site:

```
https://www.example.com
```

The scraper follows all internal links staying on the same hostname, up to 20 levels deep and 1,000 pages by default.

#### Target a specific section

To focus on one part of a site (e.g. a contact directory or staff page), enter that path directly:

```
https://www.example.com/about/contact
https://www.university.edu/faculty/science
https://www.company.com/team
```

Only pages reachable by following links from that starting URL will be crawled - so entering a subdirectory effectively scopes the run to that section.

#### Parameters

| Field | Default | Description |
|---|---|---|
| **Starting URL** | *(required)* | Homepage or specific path to start from |
| **Max Crawl Depth** | `20` | Link-hops from the start URL. Most sites are fully covered at depth 20. Reduce to `2-3` for a quick surface scan |
| **Max Pages** | `1000` | Total pages to visit. Increase for very large sites |

### Example results

Running on a mid-sized company website (50 pages, depth 3) might return:

| Email | Found on | Page title |
|---|---|---|
| `hello@example.com` | /contact | Contact Us |
| `sales@example.com` | /contact | Contact Us |
| `support@example.com` | /help | Help Centre |
| `press@example.com` | /about | About Us |
| `careers@example.com` | /careers | Join Our Team |

### Output format

Each dataset record:

```json
{
  "email": "contact@example.com",
  "sourceUrl": "https://www.example.com/about",
  "pageTitle": "About Us - Example Company"
}
```

Export to JSON, CSV, Excel, or Google Sheets directly from the Apify console.

### Notes

- The scraper stays on the same hostname as your starting URL and will not follow links to external domains
- Emails are deduplicated globally - each address appears once, from the first page it was found on
- Common false positives (image filenames, CSS class names containing `@`) are filtered out automatically

### Related website & SEO actors

Part of a complete website & SEO toolkit - explore the rest of the suite:

- [Website Contact Scraper](https://apify.com/seemuapps/website-contact-scraper) - Emails, phones, and socials from any website
- [Website Tech Stack Detector](https://apify.com/seemuapps/website-tech-stack-detector) - Detect CMS, frameworks, analytics, and DNS/MX
- [SEO Meta Tag Auditor](https://apify.com/seemuapps/seo-meta-auditor) - Audit title, OG, Twitter cards, and schema
- [Sitemap URL Extractor](https://apify.com/seemuapps/sitemap-extractor) - Extract every URL from a site's sitemap.xml
- [Domain WHOIS & SSL Inspector](https://apify.com/seemuapps/domain-whois-ssl-inspector) - WHOIS, domain age, and live SSL details

# Actor input Schema

## `url` (type: `string`):

The URL to start crawling from. Use a homepage (https://example.com) to scan the whole site, or a specific path (https://example.com/contact) to target a section.

## `maxDepth` (type: `integer`):

How many link-hops deep to follow from the starting URL. 20 covers most sites fully.

## `maxPages` (type: `integer`):

Maximum number of pages to visit in total. Increase for large sites.

## Actor input object example

```json
{
  "url": "https://example.com",
  "maxDepth": 20,
  "maxPages": 1000
}
```

# Actor output Schema

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

Each record: { email, sourceUrl, pageTitle }

# 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 = {
    "url": "https://example.com"
};

// Run the Actor and wait for it to finish
const run = await client.actor("seemuapps/website-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 = { "url": "https://example.com" }

# Run the Actor and wait for it to finish
run = client.actor("seemuapps/website-email-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "url": "https://example.com"
}' |
apify call seemuapps/website-email-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=seemuapps/website-email-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/QeMCJY2L7uhticGis/builds/5833GODgFiohg5muZ/openapi.json
