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

📧 Website Email Scraper extracts valid emails from business sites fast—find leads using filters like keywords, location, and industry. 🚀 Ideal for sales, marketing, and agencies. Save time, boost outreach, and grow pipelines. ⚡

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

## Pricing

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

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 🔍

**Website Email Scraper** automatically extracts contact information from websites—helping you find emails (and optionally phone numbers and social media profile links) from publicly available web pages. If you’re looking for a **website email scraper** or an **email scraper tool** for lead generation, this actor streamlines the process so you can build cleaner outreach lists faster. Whether you’re a marketer, recruiter, or data analyst, it turns web pages into structured data you can use at scale—saving you hours of manual work.

***

### Why choose Website Email Scraper?

| Feature | Benefit |
| --- | --- |
| ✅ **All-in-one contact extraction** | Extract emails, phone numbers, and social media profile links in one run |
| ✅ **Reliability-focused proxy support** | Improves scraping stability with built-in proxy support for reliable crawling |
| ✅ **Resilience with fallbacks** | Includes retries and fallbacks for resilience when pages are difficult to access |
| ✅ **Structured dataset output** | Writes results into a dataset with consistent fields for easy analysis and import |
| ✅ **Scales across multiple sites** | Scrape many target websites in a single actor run using your provided URL list |
| ✅ **Ready for workflows** | Works well as an input step for CRM enrichment, outreach, and research pipelines |

***

### Key features

- 📧 **Accurate email extraction**: Collects email addresses found on target websites and organizes them under `emails`
- 📱 **Optional phone extraction**: When enabled, extracts phone numbers found on the pages into `phone_numbers`
- 🌐 **Optional social media extraction**: When enabled, detects social media profile links and outputs them in `social_media`
- 🧭 **Website URL support**: Accepts a list of `targetUrls` and scrapes each provided domain
- 🛡️ **Proxy-based scraping support**: Uses your proxy configuration (with Apify Proxy as an option) to help avoid blocking
- 🔄 **Deduplicated social results**: Deduplicates social media entries by normalized URL to reduce repeated links
- 💾 **Instant dataset saving**: Pushes results domain-by-domain so you can access partial output even before the run ends

***

### Input

Provide input via an `input.json` file. Example structure:

```json
{
  "targetUrls": [
    { "url": "https://apify.com" },
    { "url": "example.com" }
  ],
  "enablePhoneExtraction": true,
  "enableSocialMediaExtraction": true,
  "proxySettings": {
    "useApifyProxy": true
  }
}
```

#### Input Fields

| Field | Required | Description |
| --- | --- | --- |
| `targetUrls` | ✅ | A list of target website URLs to scrape for contact information. Provide one or more items with a `url`. |
| `enablePhoneExtraction` | ❌ | Enables extraction of phone numbers found on the pages. Default is `true`. |
| `enableSocialMediaExtraction` | ❌ | Enables detection and extraction of social media profile links (for example, LinkedIn, Twitter, Facebook). Default is `true`. |
| `proxySettings` | ❌ | Proxy configuration for the run. Using residential proxies is highly recommended to avoid blocking. |
| `proxySettings.proxy support` | ❌ | When `true`, the actor will use Apify Proxy. Default prefill is `true`. |

> Note: If you provide `targetUrls`, the actor will parse each entry, normalize it, and scrape contact details for each domain found.

***

### Output

The actor saves each domain’s scraped contact information into the Apify dataset as JSON objects.

```json
{
  "domain": "example.com",
  "homepage_url": "https://example.com",
  "emails": [
    {
      "email": "contact@example.com",
      "confidence_score": 92.5,
      "source_url": "https://example.com/contact",
      "source_type": "contact_page",
      "validation_status": "unknown"
    }
  ],
  "phone_numbers": [
    {
      "phone": "+1 555 123 4567",
      "formatted": "+15551234567",
      "source_url": "https://example.com/contact"
    }
  ],
  "social_media": [
    {
      "platform": "linkedin",
      "url": "https://www.linkedin.com/company/example",
      "source_url": "https://example.com/about"
    }
  ]
}
```

#### Output Fields

| Field | Type | Description |
| --- | --- | --- |
| `domain` | string | The scraped domain derived from the provided target URL. |
| `homepage_url` | string | The homepage URL for the domain in the form `https://{domain}`. |
| `emails` | array | Extracted email entries for the domain (may be empty if none are found). |
| `emails[].email` | string | The email address. |
| `emails[].confidence_score` | number | A confidence score associated with the extracted email. |
| `emails[].source_url` | string | The page URL where the email was found. |
| `emails[].source_type` | string | The category describing where the email came from (e.g., contact/about/footer/body/header). |
| `emails[].validation_status` | string | Email validation status (e.g., `unknown`, as produced by the actor’s configuration). |
| `phone_numbers` | array | Extracted phone entries for the domain (present only when phone extraction is enabled; otherwise typically empty). |
| `phone_numbers[].phone` | string | The raw extracted phone number. |
| `phone_numbers[].formatted` | string | A formatted version of the phone number (when available). |
| `phone_numbers[].source_url` | string | The page URL where the phone number was found. |
| `social_media` | array | Extracted social media profile links for the domain (may be empty if none are found or when social extraction is disabled). |
| `social_media[].platform` | string | The social platform name (for example, LinkedIn, Twitter, Facebook). |
| `social_media[].url` | string | The social media profile URL. |
| `social_media[].source_url` | string | The page URL where the social link was found. |

After execution, you can export the dataset from the Apify platform to JSON or CSV, depending on your workflow needs.

***

### How to use Website Email Scraper (via Apify Console)

1. **Open Apify Console**: Go to [console.apify.com](https://console.apify.com) and sign in.
2. **Find the actor**: In the Actors search, select **Website Email Scraper**.
3. **Add your INPUT**: In the **INPUT** panel, paste your `targetUrls` list. You can also toggle `enablePhoneExtraction` and `enableSocialMediaExtraction`.
4. **Set proxy options (optional)**: In **Proxy configuration**, you can enable `proxy support` under `proxySettings` to start with Apify Proxy support.
5. **Run the actor**: Click **Run** to start scraping. Watch the live logs to confirm which domains are being processed.
6. **Review progress & results**: As each domain finishes, results are pushed to the dataset (so you can inspect partial output while the run continues).
7. **Open the dataset**: After completion, go to the **OUTPUT** tab, open the dataset, and export your scraped email addresses and contact details.

No coding required—get accurate results in minutes with **Website Email Scraper**. ⚡

***

### Advanced features & SEO optimization

- 🔄 **Engineered for automated email harvesting**: Designed for practical “bulk email extractor” workflows by scraping emails from public web pages and returning consistent dataset records.
- 🌐 **Website to email scraper workflow**: Uses your provided target websites and outputs contact emails, phone numbers, and social media profile links (when enabled) in one unified structure.
- 🛡️ **Resilience for real-world websites**: Includes retries and fallbacks for better success when pages are slow, partially accessible, or inconsistent.
- ✅ **Clean, marketer-friendly structure**: Returns `domain`, `homepage_url`, `emails`, `phone_numbers`, and `social_media` so you can feed downstream enrichment or outreach quickly.
- 📝 **Works great for lead generation**: A solid “lead generation email scraper” option when you want a scraper for email list building rather than manual searching.

***

### Best use cases

- 📈 **B2B marketing teams building outreach lists**: Speed up find email addresses online for companies you research from their websites.
- 🧑‍💼 **Recruiters sourcing hiring contacts**: Extract emails and social links from company sites to reach the right teams faster.
- 🔎 **Data analysts enriching datasets**: Scrape contact emails from web to join with CRM records and improve data completeness.
- ✉️ **Growth operators running email marketing**: Collect emails programmatically for campaign audiences while keeping output structured for imports.
- 🧾 **Researchers compiling contact information**: Use an automated email scraping workflow to gather contact details from publicly available sources.
- 🛠️ **Developers in pipeline automation**: Use this email harvesting software step to populate databases or trigger follow-up actions.

***

### Technical specifications

- **Supported Input Formats**
  - ✅ `targetUrls`: array of objects containing `url`
  - ✅ Accepts URLs with or without protocol (the actor normalizes them)
- **Proxy Support**
  - ✅ Built-in proxy support via `proxySettings`
  - ✅ `proxySettings.proxy support` (prefilled to `true`)
- **Extraction Controls**
  - ✅ `enablePhoneExtraction` (default `true`)
  - ✅ `enableSocialMediaExtraction` (default `true`)
- **Retries & Reliability**
  - ✅ Includes retries and fallbacks for resilience
- **Dataset Structure**
  - ✅ Each domain produces one dataset item with: `domain`, `homepage_url`, `emails`, `phone_numbers`, `social_media`
- **Limitations**
  - ❌ Only extracts from publicly available sources; it does not retrieve private/authenticated data
  - ❌ If a site contains no discoverable emails/phones/social links, the corresponding arrays will be empty

***

### FAQ

#### Does Website Email Scraper require coding?

✅ No. You can run it directly from Apify Console by providing your `input.json` (especially your `targetUrls`) and then exporting the dataset results afterward.

#### What kinds of data does Website Email Scraper return?

✅ It outputs structured data including `emails` (with `confidence_score`, `source_url`, `source_type`, and `validation_status`). Depending on your toggles, it can also return `phone_numbers` and `social_media`.

#### Can I scrape phone numbers and social media links too?

✅ Yes. `enablePhoneExtraction` and `enableSocialMediaExtraction` control whether the actor extracts `phone_numbers` and `social_media`.

#### What happens if a website has no emails or contact details?

❌ You’ll still receive a dataset record for the domain, but the corresponding arrays (like `emails`, `phone_numbers`, or `social_media`) will be empty.

#### How does proxy configuration work?

✅ You can configure `proxySettings`, including `proxy support`. The actor uses your proxy configuration to help keep scraping reliable across sites.

#### Is the output in a format I can import into other tools?

✅ Yes. Results are saved to an Apify dataset as JSON objects with consistent field names, which you can export (for example, to JSON or CSV depending on your setup).

#### Is email validation performed?

✅ The dataset includes `validation_status` for each email and a `confidence_score`. With the current actor configuration, `validate_emails` is set internally, and the output reflects the actor’s produced validation status.

#### Where can I contact support or request improvements?

💡 For help or feature requests, email <dataforleads@gmail.com>.

***

### Support & feature requests

Have feedback to improve **Website Email Scraper**? We’d love to hear it. 👇

- 💡 **Feature Requests**: Ideas like CSV export customization, additional filters, or CRM-ready schemas for scraping contact emails.
- 📧 **Contact**: Reach out at <dataforleads@gmail.com>.

Your feedback directly shapes future improvements to the actor and how well it supports email scraper tool use cases.

***

### Closing CTA / Final thoughts

*If you need an SEO-optimized website email scraper for reliable, structured contact extraction, **Website Email Scraper** is built for exactly that.*\
*Scrape contact emails from multiple websites faster—then use the dataset results to power your outreach, research, and enrichment pipelines.*

***

### Disclaimer

**Website Email Scraper accesses publicly accessible sources only.** It does not access private profiles, password-protected pages, or authenticated data. Compliance with applicable laws (including GDPR and CCPA), spam regulations, and each website’s Terms of Service is your responsibility.

For data removal requests, contact <dataforleads@gmail.com>. Please use this tool responsibly, ethically, and for legitimate purposes only.

# Actor input Schema

## `targetUrls` (type: `array`):

List of target website URLs to scrape for contact information.

## `enablePhoneExtraction` (type: `boolean`):

If enabled, the scraper will also extract phone numbers found on the pages.

## `enableSocialMediaExtraction` (type: `boolean`):

If enabled, the scraper will detect and extract social media profile links (e.g., LinkedIn, Twitter, Facebook).

## `proxySettings` (type: `object`):

Configuration for proxies. Using residential proxies is highly recommended to avoid blocking.

## Actor input object example

```json
{
  "targetUrls": [
    {
      "url": "https://apify.com"
    }
  ],
  "enablePhoneExtraction": true,
  "enableSocialMediaExtraction": true,
  "proxySettings": {
    "useApifyProxy": true
  }
}
```

# 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 = {
    "targetUrls": [
        {
            "url": "https://apify.com"
        }
    ],
    "proxySettings": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("solid-scraper/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 = {
    "targetUrls": [{ "url": "https://apify.com" }],
    "proxySettings": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("solid-scraper/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 '{
  "targetUrls": [
    {
      "url": "https://apify.com"
    }
  ],
  "proxySettings": {
    "useApifyProxy": true
  }
}' |
apify call solid-scraper/website-email-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/TiQVoGRyt3EjfP463/builds/vqjQYIw73jn4E4Yp5/openapi.json
