# Website Contact & Email Extractor - Emails, Phones, Socials (`benthepythondev/website-contact-extractor`) Actor

Give it a list of websites and get the contact details for each: emails, phone numbers and social profiles, pulled from the homepage, contact and Impressum pages. Fast, no browser. Pay per site; small premium only when an email is found.

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

## Pricing

from $8.00 / 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 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/docs.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/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 Extractor

Turn a list of websites into a clean contact sheet. Give this Actor any list of company
websites or domains and it returns the **emails, phone numbers and social-media profiles** for
each one — pulled from the homepage plus the contact, Kontakt, Impressum, about and team pages.

It runs on plain HTTP (no browser), so it's fast, cheap and reliable, and it's especially strong
on the DACH market because German sites are legally required to publish a contact email in their
Impressum. Export to JSON/CSV/Excel, run on a schedule, call via API, or connect to Make, Zapier
or n8n.

### 🔎 What is the Website Contact & Email Extractor?

Most "email extractor" tools give you raw emails and nothing else. This one returns a structured
contact record per website — the best email (scored by confidence), every email it found, phone
numbers, and links to the company's social profiles — so the output drops straight into a CRM or
outreach tool. Feed it the website column from any other scraper, a CSV of domains, or your own
prospect list.

#### What data does it extract?

- **Primary email** with a confidence score (0–100) and its source (website, Impressum, contact page)
- **All emails found** on the site, de-duplicated and ranked
- **Phone numbers** (from `tel:` links and international formats)
- **Social profiles** — LinkedIn, Instagram, Facebook, X/Twitter, YouTube, TikTok, Xing
- **Company name** (from the site's title / metadata)
- **Domain** and the number of pages scanned

### ⬇️ Input

| Field | Type | Description |
|-------|------|-------------|
| `startUrls` | array | Websites or domains to process, e.g. `acme.com`. Required. |
| `maxResults` | integer | Max number of websites to process. Default `1000`. |
| `extractPhones` | boolean | Extract phone numbers. Default `true`. |
| `extractSocials` | boolean | Extract social-media profile links. Default `true`. |
| `requireEmail` | boolean | Skip sites where no email was found (and don't charge the email fee for them). Default `false`. |
| `enableSmtpVerification` | boolean | SMTP-verify the top email when it isn't already high-confidence. Default `false`. |

#### Example input

```json
{
  "startUrls": ["stripe.com", "https://www.studio-berlin.de", "basecamp.com"],
  "extractPhones": true,
  "extractSocials": true,
  "requireEmail": true
}
````

### ⬆️ Output

One record per website:

```json
{
  "input_url": "https://www.studio-berlin.de",
  "domain": "studio-berlin.de",
  "company_name": "Studio Berlin GmbH",
  "primary_email": "info@studio-berlin.de",
  "email_confidence": 95,
  "email_source": "impressum",
  "emails": [
    { "email": "info@studio-berlin.de", "confidence": 95, "source": "impressum" },
    { "email": "jobs@studio-berlin.de", "confidence": 75, "source": "contact_page" }
  ],
  "phones": ["+49301234567"],
  "socials": {
    "linkedin": "https://www.linkedin.com/company/studio-berlin",
    "instagram": "https://www.instagram.com/studioberlin"
  },
  "has_email": true,
  "has_contact": true,
  "pages_scanned": 4
}
```

### 💡 Use cases

- 📇 **Enrich any lead list** — feed the website column from a Maps/directory scraper and get emails, phones and socials back.
- 📈 **Outbound sales** — turn a list of target-company domains into a ready-to-contact sheet.
- 🧑‍💼 **Recruiting & partnerships** — find the right inbox and social profiles for each company fast.
- 🌍 **DACH coverage** — exploit legally-published Impressum emails for high hit rates across Germany, Austria and Switzerland.

### 📈 Why extract contacts from websites?

Most lead-generation workflows start with a company list but get stuck at the contact step. A directory, maps scraper, job-board scraper or real-estate scraper may give you business names and websites, but sales and recruiting teams still need emails, phone numbers and social profiles before they can act. This actor fills that gap by turning domains into outreach-ready contact records.

It is especially useful after other Apify actors. Feed in websites from Google Maps, real-estate agencies, job postings, Shopify stores, directories, conference exhibitors or public company lists. The extractor then scans the pages where companies usually publish contact details and ranks the best email with a confidence score, so you can filter aggressively before importing into a CRM.

### 🔁 Automation workflow

A typical workflow is: discover companies, extract contacts, verify or enrich, then export. For example, run a Google Maps scraper for "dentists Berlin", pass the website URLs into this actor, keep rows with `email_confidence >= 80`, then send the result to Google Sheets, HubSpot, Pipedrive or Airtable. For DACH markets, include websites with Impressum pages because they often contain high-confidence legal contact emails.

For ongoing monitoring, schedule the actor against a saved domain list. This catches changed contact pages, new phone numbers and updated social profiles. If you only want records with an email, enable `requireEmail` so empty records are skipped from your final lead sheet.

### ✅ Data quality notes

The actor scans likely contact pages instead of only the homepage. It de-duplicates emails, prefers domain-matching addresses, scores Impressum and contact-page emails higher, and keeps all discovered emails for auditability. Role addresses such as `info@`, `sales@`, `contact@` and `hello@` are often the most reliable for B2B outreach, while off-domain addresses are kept but scored lower. The output is designed for filtering, not blind blasting.

### ❓ FAQ

**How is this different from a Google Maps scraper?**
A Maps scraper *finds* businesses; this *enriches* websites you already have. Pair them: discover
with [Google Maps Email Scraper](https://apify.com/benthepythondev/google-maps-email-scraper), then
deep-enrich here.

**Where do the contacts come from?**
The site's own pages — homepage, contact/Kontakt, Impressum, about and team — where companies
publish their email, phone and social links.

**What does the confidence score mean?**
Higher is more trustworthy. Emails from an Impressum or matching the company domain score highest
(90–95); off-domain or harder-to-confirm addresses score lower. Filter by `email_confidence` for
only the surest ones.

**Do I need an API key or login?** No — just provide the list of websites.

**Can I input a CSV of domains?** Yes — paste them into `startUrls`, or pipe them in via the API.

**How does pricing work?** Pay per website processed, plus a small premium **only** when at least
one email is found. No subscription.

**Is it fast?** Yes — it uses plain HTTP and scans each site's pages concurrently, no browser.

**Is it legal?** It reads publicly published business contact information. Use it for legitimate
B2B outreach and comply with GDPR/CAN-SPAM and local law, including opt-outs.

### 🔗 You might also like

- [Google Maps Email Scraper](https://apify.com/benthepythondev/google-maps-email-scraper) — find businesses by niche + city, with emails.
- [Smart Email Finder & Verifier](https://apify.com/benthepythondev/smart-email-finder-verifier) — find a specific person's email from name + domain.
- [Gelbe Seiten Scraper](https://apify.com/benthepythondev/gelbe-seiten-scraper) — German business directory leads.

***

**Keywords:** website email extractor, email scraper, contact scraper, extract emails from websites, bulk email finder, phone number extractor, social media profile finder, lead enrichment, b2b contact data, domain to email, impressum email scraper, dach business leads, crm enrichment, find company emails, website contact scraper, list of websites to emails

### Support and feedback

If this Actor saves time in your workflow, please leave a short Apify Store review. Reviews help other users evaluate the tool and help prioritize maintenance. If a source changes or a field stops populating, open an Actor issue with the run ID, public input, and expected field. Never include passwords, private cookies, or confidential data.

# Actor input Schema

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

List of websites or domains to extract contacts from, e.g. 'acme.com' or 'https://www.example-gmbh.de'.

## `maxResults` (type: `integer`):

Maximum number of websites to process.

## `extractPhones` (type: `boolean`):

Pull phone numbers (tel: links and international formats).

## `extractSocials` (type: `boolean`):

Pull links to LinkedIn, Instagram, Facebook, X/Twitter, YouTube, TikTok, Xing.

## `requireEmail` (type: `boolean`):

If enabled, websites where no email was found are skipped (you are not charged the email fee for them).

## `enableSmtpVerification` (type: `boolean`):

Try to SMTP-verify the top email when it isn't a high-confidence published address. Often blocked in the cloud; leave off for speed.

## `smtpTimeout` (type: `integer`):

Per-server SMTP timeout when SMTP verification is enabled.

## Actor input object example

```json
{
  "startUrls": [
    "basecamp.com",
    "cl-berlin.de"
  ],
  "maxResults": 10,
  "extractPhones": true,
  "extractSocials": true,
  "requireEmail": false,
  "enableSmtpVerification": false,
  "smtpTimeout": 5
}
```

# Actor output Schema

## `results` (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": [
        "basecamp.com",
        "cl-berlin.de"
    ],
    "maxResults": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("benthepythondev/website-contact-extractor").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": [
        "basecamp.com",
        "cl-berlin.de",
    ],
    "maxResults": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("benthepythondev/website-contact-extractor").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": [
    "basecamp.com",
    "cl-berlin.de"
  ],
  "maxResults": 10
}' |
apify call benthepythondev/website-contact-extractor --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Website Contact & Email Extractor - Emails, Phones, Socials",
        "description": "Give it a list of websites and get the contact details for each: emails, phone numbers and social profiles, pulled from the homepage, contact and Impressum pages. Fast, no browser. Pay per site; small premium only when an email is found.",
        "version": "1.0",
        "x-build-id": "kQ8OQDx0RfH9vObAU"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/benthepythondev~website-contact-extractor/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-benthepythondev-website-contact-extractor",
                "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/benthepythondev~website-contact-extractor/runs": {
            "post": {
                "operationId": "runs-sync-benthepythondev-website-contact-extractor",
                "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/benthepythondev~website-contact-extractor/run-sync": {
            "post": {
                "operationId": "run-sync-benthepythondev-website-contact-extractor",
                "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": "Websites",
                        "type": "array",
                        "description": "List of websites or domains to extract contacts from, e.g. 'acme.com' or 'https://www.example-gmbh.de'.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxResults": {
                        "title": "Maximum websites",
                        "minimum": 1,
                        "maximum": 100000,
                        "type": "integer",
                        "description": "Maximum number of websites to process.",
                        "default": 10
                    },
                    "extractPhones": {
                        "title": "Extract phone numbers",
                        "type": "boolean",
                        "description": "Pull phone numbers (tel: links and international formats).",
                        "default": true
                    },
                    "extractSocials": {
                        "title": "Extract social profiles",
                        "type": "boolean",
                        "description": "Pull links to LinkedIn, Instagram, Facebook, X/Twitter, YouTube, TikTok, Xing.",
                        "default": true
                    },
                    "requireEmail": {
                        "title": "Only return sites with an email",
                        "type": "boolean",
                        "description": "If enabled, websites where no email was found are skipped (you are not charged the email fee for them).",
                        "default": false
                    },
                    "enableSmtpVerification": {
                        "title": "SMTP verification",
                        "type": "boolean",
                        "description": "Try to SMTP-verify the top email when it isn't a high-confidence published address. Often blocked in the cloud; leave off for speed.",
                        "default": false
                    },
                    "smtpTimeout": {
                        "title": "SMTP timeout (seconds)",
                        "minimum": 2,
                        "maximum": 15,
                        "type": "integer",
                        "description": "Per-server SMTP timeout when SMTP verification is enabled.",
                        "default": 5
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
