# Website Email & Contact Finder (`scrapebench/website-email-contact-finder`) Actor

Give it a list of website URLs and get back the contact emails on each — de-obfuscated, classified, and flagged when an address is a franchise/corporate one instead of the business's own.

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

## Pricing

$0.005 / contact found

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 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 Email & Contact Finder

### Pain points

- A lead list of company websites is useless for outreach without the email.
- Emails are scattered across contact/about/team pages and often obfuscated.
- Naive scrapers return junk — template placeholders, tracking noise, franchise addresses.
- Doing it by hand across hundreds of sites is a day of copy-paste.

### What we solve

- Turn any list of website URLs into contact emails, in one run.
- Crawls the homepage plus contact/about/team pages and de-obfuscates common tricks.
- Filters template junk so you don't pay for garbage, and classifies each email.
- Flags franchise/corporate addresses so you know which is the local business.

### Summary

Turn a list of website URLs into contact emails. For each site the actor crawls the homepage and its contact/about/team pages, de-obfuscates the usual tricks ([at]/(dot)/HTML entities), pulls out the emails, throws away template placeholders and tracking noise, and classifies each address as generic, role, or personal. It also compares the email's domain to the site's, so a franchise/corporate address is flagged rather than passed off as the local business. Feed it a chamber list, a CRM export, a spreadsheet, or another scraper's output — platform-agnostic.

### Who it's for

- B2B sales and lead-gen teams enriching a list of company websites
- Agencies preparing outreach lists
- Recruiters and researchers who have URLs but need contacts
- Anyone with a spreadsheet of websites and no emails

### How to use

Set the input, run the actor, and collect results from the run's dataset (export to JSON/CSV/Excel, or pull via the Apify API). Example input:

```json
{
  "urls": [
    "https://basecamp.com",
    "https://www.gitlab.com"
  ],
  "maxPagesPerSite": 6
}
````

See **Inputs** below for every available field.

### What you get

One row per record:

| Field | Description |
|---|---|
| `website` | The site crawled (after redirects) |
| `emails` | Emails found: {email, source\_url, type (generic/role/personal), confidence (high/medium)} |
| `email_domain_matches_website` | False = a franchise/corporate email, not this site's business |
| `status` | found | no\_email | unreachable | corporate\_site |
| `source_url` | The input website |

Sample:

```json
{
  "website": "https://acme-consulting.com",
  "emails": [
    {
      "email": "info@acme-consulting.com",
      "source_url": "https://acme-consulting.com/contact",
      "type": "generic",
      "confidence": "high"
    },
    {
      "email": "jane@acme-consulting.com",
      "source_url": "https://acme-consulting.com/team",
      "type": "personal",
      "confidence": "high"
    }
  ],
  "email_domain_matches_website": true,
  "status": "found",
  "source_url": "https://acme-consulting.com"
}
```

### Inputs

| Field | Required | Type | Default | Description |
|---|---|---|---|---|
| `urls` | no | array | `["https://www.apify.com"]` | The websites to crawl for contact emails, e.g. \['https://acmeplumbing.com']. A bare domain is fine — 'http://' is assumed. |
| `startUrls` | no | array | `[]` | Standard Apify URL list — an alternative to 'urls' (e.g. from a linked dataset or Google Sheet). |
| `maxPagesPerSite` | no | integer | `6` | How many pages to crawl per site (homepage plus contact/about/team pages). More pages = higher hit rate, more compute. |
| `proxyConfiguration` | no | object | `{"useApifyProxy": false}` | Optional. Enable a proxy (e.g. residential) if target sites block the datacenter IP. |

### Pricing (Pay Per Event)

You pay per result (`contact-found`) — **no charge for empty runs**. Example: **200 websites with an email** at *$0.005/result* ≈ **$1.00**.

One charge per website that yields at least one real email — sites with no email (or that are unreachable) are free. Illustrative — the final per-site price is set at publish time. Apify platform compute is billed separately per your plan.

### Use cases

- Lead enrichment — turn a list of company websites into contactable emails.
- Chamber/directory follow-up — feed member sites, get outreach emails.
- CRM hygiene — backfill missing contact emails for accounts you already track.
- Prospecting — extract role and personal contacts from a target account list.

### Why this actor

- Platform-agnostic — any list of URLs from anywhere, one clean run.
- No garbage — template placeholders and tracking noise filtered out before you pay.
- Franchise-aware — off-domain corporate addresses are flagged, not passed off as the local business.

### Limitations & updates

Extracts emails published on a website's own public pages (homepage + contact/about/team). It does not brute-force or guess addresses, verify deliverability, or crawl login-walled platforms like Facebook/Instagram. Hit rate depends on whether the business lists an email at all (~50-65% of typical small-business sites).

### FAQ

**What do I give it?**

A list of website URLs (`urls`), or a standard Apify start-URL list. A bare domain is fine — 'http://' is assumed.

**How many pages does it crawl per site?**

The homepage plus its contact/about/team pages, up to `maxPagesPerSite` (default 6). More pages = higher hit rate, more compute.

**How am I charged?**

One charge per website that yields at least one real email. Sites with no email — or that are unreachable — are free.

**What's the franchise flag?**

If the only email found is on a different domain than the site (e.g. a corporate `customercare@brand.com` on a franchisee's page), `email_domain_matches_website` is false so you can tell it apart from the local business.

**Does it work on Facebook/Instagram pages?**

No — social platforms wall their content behind login/JS challenges. Give it real business websites; social profile URLs are not an email source.

### Which actor to choose

Pairs with the chamber directory scraper:

- **Website Email & Contact Finder** *(this actor)* — You already have a list of business websites and just want the contact emails.
- **Chamber of Commerce Member Directory & Business Leads Scraper** — You want the businesses too — every member of a local chamber, with website and email.

### Guides & use cases

Written up on **[scrapebench.dev](https://scrapebench.dev)** — the bench that runs and verifies this actor against the live source every night:

- **How-to:** [How to run Website Email & Contact Finder](https://scrapebench.dev/guides/how-to-website-email-contact-finder/)
- **Use case:** [Find contact emails for a list of company websites](https://scrapebench.dev/use-cases/enrich-company-websites/)

More actors, coverage and nightly verification results: **[scrapebench.dev](https://scrapebench.dev)**

# Actor input Schema

## `urls` (type: `array`):

The websites to crawl for contact emails, e.g. \['https://acmeplumbing.com']. A bare domain is fine — 'http://' is assumed.

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

Standard Apify URL list — an alternative to 'urls' (e.g. from a linked dataset or Google Sheet).

## `maxPagesPerSite` (type: `integer`):

How many pages to crawl per site (homepage plus contact/about/team pages). More pages = higher hit rate, more compute.

## `proxyConfiguration` (type: `object`):

Optional. Enable a proxy (e.g. residential) if target sites block the datacenter IP.

## Actor input object example

```json
{
  "urls": [
    "https://www.apify.com"
  ],
  "startUrls": [],
  "maxPagesPerSite": 6,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `contacts` (type: `string`):

Per-site contact emails, classification, and franchise flag.

# 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 = {
    "urls": [
        "https://www.apify.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapebench/website-email-contact-finder").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 = { "urls": ["https://www.apify.com"] }

# Run the Actor and wait for it to finish
run = client.actor("scrapebench/website-email-contact-finder").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 '{
  "urls": [
    "https://www.apify.com"
  ]
}' |
apify call scrapebench/website-email-contact-finder --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Website Email & Contact Finder",
        "description": "Give it a list of website URLs and get back the contact emails on each — de-obfuscated, classified, and flagged when an address is a franchise/corporate one instead of the business's own.",
        "version": "0.0",
        "x-build-id": "nZS6H6ElhHIZ381wd"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapebench~website-email-contact-finder/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapebench-website-email-contact-finder",
                "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/scrapebench~website-email-contact-finder/runs": {
            "post": {
                "operationId": "runs-sync-scrapebench-website-email-contact-finder",
                "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/scrapebench~website-email-contact-finder/run-sync": {
            "post": {
                "operationId": "run-sync-scrapebench-website-email-contact-finder",
                "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",
                "properties": {
                    "urls": {
                        "title": "Website URLs",
                        "type": "array",
                        "description": "The websites to crawl for contact emails, e.g. ['https://acmeplumbing.com']. A bare domain is fine — 'http://' is assumed.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "Start URLs (alternative)",
                        "type": "array",
                        "description": "Standard Apify URL list — an alternative to 'urls' (e.g. from a linked dataset or Google Sheet).",
                        "default": [],
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxPagesPerSite": {
                        "title": "Max pages per site",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "How many pages to crawl per site (homepage plus contact/about/team pages). More pages = higher hit rate, more compute.",
                        "default": 6
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Optional. Enable a proxy (e.g. residential) if target sites block the datacenter IP.",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
