# Website Emails Scraper(Contact+OutReach) (`codescraper/website-contact-email-scraper`) Actor

Only $3/month — Get verified contact emails from any website.
Scans up to 20 contact pages per domain.
Returns structured data: URL info, prioritized emails, source pages, counts, and timestamps.
Perfect for B2B lead generation, outreach, and prospecting.

- **URL**: https://apify.com/codescraper/website-contact-email-scraper.md
- **Developed by:** [CodeScraper](https://apify.com/codescraper) (community)
- **Categories:** Lead generation
- **Stats:** 28 total users, 5 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

$3.00/month + usage

To use this Actor, you pay a monthly rental fee to the developer. The rent is subtracted from your prepaid usage every month after the free trial period.You also pay for the Apify platform usage, which gets cheaper the higher Apify subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#rental-actors

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 Contact Email Scraper – B2B Lead Generation

This Apify actor scrapes contact email addresses from business websites with high accuracy and intelligent filtering.

It utilizes network request interception and smart contact page detection to extract emails from homepage DOMs, API responses, and specific "Contact Us" pages — all packaged into a structured dataset ideal for lead generation and outreach.

---

### 🚀 What It Does

For every website URL provided, the actor extracts:

#### 🏢 Site Overview

- **🌐** Input URL (As entered)
- **🔗** Normalized URL (Standardized format)
- **📧** Total Emails Found
- **⏱️** Processing Duration
- **📅** Scrape Timestamp

#### 📩 Email Data

For each email found:

✉️ Email Address

🚦 Priority Classification

- **High:** info@, contact@, support@ (or matches domain name)
- **Medium:** sales@, jobs@, press@
- **Low:** Personal/Specific names

🔗 Source URL (Exact page where the email was found)

---

### ⚡ It Handles

- **✅** Multiple Website URLs (Batch processing)
- **🕵️** Smart Contact Page Detection (Finds /contact, /about, /support etc.)
- **🕸️** Network Interception (Catches emails hidden in API JSON responses)
- **🛡️** Domain Scoping (Ignores 3rd party emails like gmail.com unless matched)
- **🧹** Deduplication (Ensures unique emails per domain)
- **🚦** Intelligent Prioritization (Sorts emails by relevance)

⚠️ The actor crawls the Homepage and up to 20 candidate contact pages per domain to ensure deep coverage without getting stuck.

---

### 🧠 How It Works

- Normalizes input URLs to ensure valid formats.

- Crawls the homepage to extract visible emails.

- Intercepts background network requests (XHR/Fetch) to find hidden emails in JSON data.

- Detects & navigates to "Contact Us" or "About Us" pages automatically.

- Classifies emails by priority (High/Medium/Low).

- Deduplicates results to provide a clean list.

- Saves structured data to Apify Dataset.

---

### ⚙️ Input Configuration

| Field             | Type    | Description                                   | Example         |
| ----------------- | ------- | --------------------------------------------- | --------------- |
| startUrls         | Array   | List of target websites                       | ["example.com"] |
| maxConcurrency    | Integer | Max pages processed in parallel (Default: 10) | 10              |
| maxRequestRetries | Integer | Retries per page on failure (Default: 2)      | 2               |

---

### 🧩 Example Input

```json
{
  "startUrls": ["https://www.iana.org", "apify.com", "https://inoleds.com"],
  "maxConcurrency": 10,
  "maxRequestRetries": 2
}
````

***

### 📊 Example Output

```json
{
  "inputUrl": "www.iana.org",
  "normalizedUrl": "https://www.iana.org",
  "emails": [
    {
      "email": "iana@iana.org",
      "priority": "high",
      "source": "https://www.iana.org/contact"
    }
  ],
  "emailCount": 1,
  "processTimeMs": 18146,
  "scrapedAt": "2026-02-15T11:35:35.922Z"
}
```

***

### 🧠 Features

- **⭐** Strict Domain Matching (Only extracts emails belonging to the target website)
- **📊** Priority Sorting (Get the most relevant contact info first)
- **🕒** Fast Execution (Optimized navigation limits)
- **🌍** Universal Support (Works on .com, .de, .org, and all TLDs)
- **📦** Structured JSON Output

***

### 💡 Use Cases

- B2B Lead Generation
- Sales Outreach Automation
- Link Building & Guest Post Outreach
- Market Research
- Recruitment & HR Sourcing
- Directory Building

***

### ❓ FAQs

#### 1. Does this scrape generic emails like Gmail or Yahoo?

- No. The scraper enforces Strict Domain Matching. If you scrape example.com, it will only return emails ending in @example.com to ensure lead quality.

***

#### 2. How does it prioritize emails?

It uses a prefix classification system:

- **High:** Generic contacts (info, hello) or matches the domain name.
- **Medium:** Department specific (sales, hr).
- **Low:** Everything else.

***

#### 3. Why didn't it find an email?

Some sites protect emails using:

- Images instead of text
- Complex JavaScript obfuscation (though network interception catches many of these)
- Contact forms without visible email addresses

***

### 🧑‍💻 Developer Info

Author: codescraper
Email: <codescraper011@gmail.com>

***

### 🏷️ Tags

`website-emails-scraper` . `email-scraper` · `contact-extractor` · `lead-generation` · `b2b-leads` · `crawler` · `web-scraping` · `marketing-automation` · `sales-tools`

# Actor input Schema

## `startUrls` (type: `array`):

List of websites to scrape. Formats like example.com, www.example.com, https://example.com are accepted.

## `maxConcurrency` (type: `integer`):

Maximum number of pages processed in parallel.

## `maxRequestRetries` (type: `integer`):

Number of times to retry a failed page.

## Actor input object example

```json
{
  "startUrls": [
    "https://inoleds.com/",
    "https://candy24.de",
    "www.iana.org",
    "friendlyglitter.de"
  ],
  "maxConcurrency": 10,
  "maxRequestRetries": 2
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `full_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 = {
    "startUrls": [
        "https://inoleds.com/",
        "https://candy24.de",
        "www.iana.org",
        "friendlyglitter.de"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("codescraper/website-contact-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 = { "startUrls": [
        "https://inoleds.com/",
        "https://candy24.de",
        "www.iana.org",
        "friendlyglitter.de",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("codescraper/website-contact-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 '{
  "startUrls": [
    "https://inoleds.com/",
    "https://candy24.de",
    "www.iana.org",
    "friendlyglitter.de"
  ]
}' |
apify call codescraper/website-contact-email-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Website Emails Scraper(Contact+OutReach)",
        "description": "Only $3/month — Get verified contact emails from any website.\nScans up to 20 contact pages per domain.\nReturns structured data: URL info, prioritized emails, source pages, counts, and timestamps.\nPerfect for B2B lead generation, outreach, and prospecting.",
        "version": "1.0",
        "x-build-id": "u6ddZUZ862s9VeKeB"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/codescraper~website-contact-email-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-codescraper-website-contact-email-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/codescraper~website-contact-email-scraper/runs": {
            "post": {
                "operationId": "runs-sync-codescraper-website-contact-email-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/codescraper~website-contact-email-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-codescraper-website-contact-email-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "startUrls"
                ],
                "properties": {
                    "startUrls": {
                        "title": "Target URLs",
                        "type": "array",
                        "description": "List of websites to scrape. Formats like example.com, www.example.com, https://example.com are accepted.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxConcurrency": {
                        "title": "Max Concurrency",
                        "minimum": 1,
                        "maximum": 15,
                        "type": "integer",
                        "description": "Maximum number of pages processed in parallel.",
                        "default": 10
                    },
                    "maxRequestRetries": {
                        "title": "Max Retries",
                        "maximum": 5,
                        "type": "integer",
                        "description": "Number of times to retry a failed page.",
                        "default": 2
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
