# Website Email & Contact Scraper · Emails, Phones & Socials (`omkar-cloud/website-email-contact-scraper`) Actor

Extract emails ⚡ fast, 🎯 accurate and 🔍 complete from any website — phones, 17 social networks, company details and tech stack, every contact with its source page. Verify emails, find websites from company names. 💰 $1.50 per 1,000 websites, flat.

- **URL**: https://apify.com/omkar-cloud/website-email-contact-scraper.md
- **Developed by:** [Omkar Cloud](https://apify.com/omkar-cloud) (community)
- **Categories:** Lead generation, Automation, Developer tools
- **Features:** Limited permissions
- **Stats:** 540 total users, 12 monthly users, 93.4% runs succeeded, 8 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $1.50 / 1,000 websites

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Website Email & Contact Scraper — Emails, Phones & Social Links

Website Email & Contact Scraper by Omkar Cloud gets you contact data ⚡ fast, 🎯 accurate and 🔍 complete from any website — **emails, phone numbers, 17 social networks, company details and tech stack, one clean row per website.**

💰 **$1.50 per 1,000 websites — one flat price, however many pages we read.** No per-page billing, no surprise totals. Apify's free plan gives you $5 of credit every month, so your first **3,000 websites every month are free**.

Every email, phone and social link comes with **the pages it was found on** and a flag for the website's **official** contact. No website, only a company name? Type the name and we find the website first.

This is an excellent Actor made by Omkar Cloud, which is Rated Excellent — [4.7 based on 37 reviews on Trustpilot](https://www.trustpilot.com/review/omkar.cloud).

👉 [**Try Website Email & Contact Scraper free**](https://apify.com/omkar-cloud/website-email-contact-scraper) — your first 3,000 websites are free.

### What can I get

- 📧 **Emails** — every address on the site, the official one first, each with the pages it appears on
- 📞 **Phone numbers** — in international format, typed as landline, mobile or toll-free, with the country
- 🌐 **17 social networks** — LinkedIn, X, Facebook, Instagram, YouTube, TikTok, Pinterest, Threads, GitHub, Discord, Telegram, WhatsApp, Snapchat, Reddit, Bluesky, Medium, Calendly
- 🏢 **Company details** — company and legal name, full address, VAT ids, company register numbers, founding year, logo
- 🧰 **Tech stack** — the CMS, analytics, CDN and frameworks the site runs on
- ✅ **Email verification** (add-on) — deliverable, invalid, disposable, catch-all, role account, free provider
- 🎯 **Best sales email** (add-on) — AI picks the one address to pitch to, and tells you why
- 🔎 **Website from a company name** (add-on) — "Blue Bottle Coffee, Oakland" becomes bluebottlecoffee.com, checked online
- 👥 **Social profile details** (add-on) — followers, bio, verified badge and bio link for Instagram, TikTok, YouTube, X and Threads

### Why Website Email & Contact Scraper

Most contact scrapers fail you in one of four ways:

- 💸 **Per-page billing** — "it says $2 per 1,000 and charged me $71": you pay for every page crawled, and you can't know how many that is
- 🧩 **One row per page** — you need a second tool to merge and deduplicate
- 🕳️ **Failed sites vanish** — you send 1,000 domains, get 700 rows, and no list of the 300 that failed
- 🤷 **No proof** — a list of emails with no idea where each came from, or which one is the company's own

Website Email & Contact Scraper charges **per website, flat**, gives you **one merged row per site**, lists **every failed input with its reason for free**, and shows **the source pages of every contact**.

| | Website Email & Contact Scraper | Typical contact scraper |
|---|---|---|
| Price | **$1.50 per 1,000 websites, flat** | $1–2 per 1,000 **pages** (a 20-page site costs 20×) |
| One row per website | ✅ | ⚠️ Often one per page |
| Source pages for every contact + official flag | ✅ | ❌ |
| Failed websites listed, free | ✅ | ❌ Silently skipped |
| Company details (legal name, address, VAT, register no.) | ✅ | ⚠️ Rare |
| Phone type (mobile / landline / toll-free) | ✅ | ⚠️ Rare |
| Tech stack | ✅ | ❌ |
| Website from a company name | ✅ | ❌ |
| AI-picked best sales email | ✅ | ❌ |
| Email verification | ✅ $2.50 / 1,000 | ⚠️ $2–4 / 1,000, $100 / 1,000 on some free plans |
| Social profile details | ✅ $3 / 1,000 | ⚠️ $8 / 1,000, $100 / 1,000 on some free plans |

### Example: One Website

```json
{
  "input": "manufactum.de",
  "website": "https://www.manufactum.de",
  "company_name": "Manufactum",
  "company_legal_name": "Manufactum GmbH",
  "company_address": "Hiberniastraße 5, Waltrop, 45731, DE",
  "company_vat_ids": ["DE315189509"],
  "company_registration_numbers": ["HRB 7982"],
  "company_founded": "1987",
  "primary_email": "info@manufactum.de",
  "emails": ["info@manufactum.de", "behoerdenkontakt@manufactum.de", "produktsicherheit@manufactum.de"],
  "best_sales_email": "info@manufactum.de",
  "best_sales_email_reason": "General info address is the most likely to reach a human who can route a B2B software pitch.",
  "primary_phone": "+492309939050",
  "primary_phone_type": "landline",
  "phones": ["+492309939050", "+49230993900", "+492309939270"],
  "facebook": "https://www.facebook.com/manufactum",
  "instagram": "https://www.instagram.com/manufactum",
  "pinterest": "https://www.pinterest.com/manufactum",
  "technologies": ["Caddy", "Go", "React"]
}
```

*Trimmed for readability.* Every row has the same columns — one per social network, company field and contact list — so CSV and Excel exports need no clean-up.

### Example: Where Each Contact Was Found

The **Contacts with sources** table has one row per email, phone and social link:

```json
{
  "domain": "www.postman.com",
  "type": "email",
  "value": "info@postman.com",
  "is_likely_official": true,
  "sources": ["https://www.postman.com/company/contact-us/", "https://www.postman.com/company/about-postman/"],
  "email_check": "catch_all"
}
```

### Get Started with 3,000 Free Websites

1. [Hit **Try for Free**](https://apify.com/omkar-cloud/website-email-contact-scraper) — the input is pre-filled with vercel.com and stripe.com.
2. Enjoy your data 😎.

### What you can paste

| Input | Example | What happens |
|---|---|---|
| **Websites** | `acme.com`, `https://www.acme.co.uk/contact` | Each website is scraped |
| **File or Google Sheet** | A CSV or text file, or a Google Sheet link | Every website in it is scraped |
| **Company names** | `Blue Bottle Coffee, Oakland` | AI finds the website, checks it is online, then it is scraped |
| **Another Apify run** | The dataset ID of a Google Maps Scraper or G2 Scraper run | Every row's website is scraped |

The same website given twice — as a domain and a URL, or in two inputs — is scraped and billed once.

### How much of each website we read

| Depth | Pages | Best for |
|---|---|---|
| **Key pages** (default) | Home page + contact, about, team, imprint and legal pages | Almost every lead list |
| **Deep** | Up to 20 pages | Large sites that spread contacts around |
| **Homepage** | The home page only | The fastest pass |

Same price at every depth. Sites that need a real browser (JavaScript-only pages, bot protection) are handled automatically — no "browser" surcharge.

### Filters

| Filter | What it does |
|---|---|
| **Only keep websites with an email** | Websites without one go to the Failed websites table, not billed |
| **Only emails on the website's own domain** | Keeps `sales@acme.com`, drops partners' and agencies' addresses |
| **Drop free-mail addresses** | Drops Gmail, Yahoo, Outlook, iCloud and similar |

### Add-ons

| Add-on | What you get | Billed |
|---|---|---|
| **Verify emails** | `deliverable_emails` plus a result per email: ok, invalid, disposable, catch-all or unknown, with role-account and free-provider flags | Only decisive results (ok, invalid, disposable) |
| **Pick the best sales email** | `best_sales_email` and `best_sales_email_reason`, chosen by AI from the site's emails for the product you describe | Only when an email is picked |
| **Company names** | The website of each name, checked online | Only when a working website is found |
| **Enrich social profiles** | One row per official profile: name, followers, following, posts, bio, verified badge, bio link | Per profile |

### Recipes

**Google Maps leads → emails.** Run a Google Maps scraper for "dentists in Austin", then paste its dataset ID here:

```json
{
  "fromDatasetId": "<YOUR_GOOGLE_MAPS_DATASET_ID>",
  "onlyWithEmails": true,
  "siteDomainEmailsOnly": true
}
```

**Company names → verified emails → the one to pitch.**

```json
{
  "companyNames": ["Blue Bottle Coffee, Oakland", "Allbirds", "Warby Parker"],
  "verifyEmails": true,
  "findBestSalesEmail": true,
  "yourProductDescription": "Inventory forecasting software for consumer brands"
}
```

**Software vendors from a G2 category.** Run [G2 Scraper](https://apify.com/omkar-cloud/g2-product-scraper) on a category with product details on, then:

```json
{
  "fromDatasetId": "<YOUR_G2_DATASET_ID>",
  "fromDatasetField": "likely_product_website",
  "crawlDepth": "deep"
}
```

**Social reach of your prospects.**

```json
{
  "websites": ["allbirds.com", "warbyparker.com", "glossier.com"],
  "enrichSocialProfiles": ["instagram", "tiktok", "youtube"]
}
```

**Monthly CRM refresh.** Save your account list as a Google Sheet, link it in **Websites from a file or Google Sheet**, save the input as a task and give it a monthly schedule.

### Output

Open the **Output** tab and pick a table:

| Table | One row per | Billed |
|---|---|---|
| **Websites** | website | ✅ $1.50 / 1,000 |
| **Contacts with sources** | email, phone or social link | Free |
| **Social profiles** | enriched profile | Add-on |
| **Failed websites** | input that produced no website row, with the reason (unreachable, blocked, invalid, website not found, no emails) | Free |

Download any table as JSON, CSV, Excel, XML or HTML.

### Pricing

High value, low price. No start fee.

| What | Price |
|---|---|
| **Website** (any depth) | **$1.50 per 1,000** |
| Email verified (decisive results only) | $2.50 per 1,000 emails |
| Best sales email picked | $2 per 1,000 websites |
| Website found from a company name | $3 per 1,000 names found |
| Social profile enriched | $3 per 1,000 profiles |
| Failed websites, invalid inputs, duplicates | **Free** |

🎉 **Launch offer: the add-ons are free until November 7, 2026.** You pay only $1.50 per 1,000 websites.

Examples:

| Run | Cost |
|---|---|
| 1,000 websites | $1.50 |
| 1,000 websites, up to 2 emails verified each (≈1,500 decisive) | ≈ $5.25 |
| 500 company names, 400 websites found | $1.20 + $0.60 = $1.80 |
| 1,000 websites + Instagram and X profiles (≈1,200 found) | $1.50 + $3.60 = $5.10 |

💡 Apify's free plan includes $5 of credit every month — **3,000 free websites, every month**. Set a **Maximum cost per run** in the run options and the Actor stops cleanly when it is reached.

👉 [**Scrape your first 3,000 websites free**](https://apify.com/omkar-cloud/website-email-contact-scraper)

### FAQ

**How fast is it?** Ten websites at a time; most finish in a few seconds. 16 websites with verification, best-email and social profiles took about a minute in our test.

**Why did a website end up in Failed websites?** The table says why: `unreachable` (the domain does not resolve or answer), `blocked`, `timeout`, `invalid` (not a website), `website_not_found` (for a company name) or `no_emails` (with "only keep websites with an email" on). Nothing in that table is billed.

**Can I get employees' personal emails?** No. This Actor reads what each website publishes. Personal emails of staff come from licensed people databases, which we don't resell.

**Is it legal?** We read public web pages only, with no login. Emails and phones of named people are personal data under the GDPR and similar laws: make sure you have a legitimate reason to use them.

**Why does a cached website come back so quickly?** A website scraped in the last 90 days is served from our store; ask for a deeper crawl and it is read again.

### Run It from Code

Grab your API token from [Integrations Settings here](https://console.apify.com/settings/integrations) and replace `<YOUR_API_TOKEN>` below.

**Python** (`pip install apify-client`)

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("omkar-cloud/website-email-contact-scraper").call(run_input={
    "websites": ["postman.com", "manufactum.de"],
    "verifyEmails": True,
})
for site in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(site["website"], site["primary_email"], site["deliverable_emails"])
```

**Node.js** (`npm install apify-client`)

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('omkar-cloud/website-email-contact-scraper').call({
    companyNames: ['Blue Bottle Coffee, Oakland'],
    findBestSalesEmail: true,
    yourProductDescription: 'Inventory forecasting software for consumer brands',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

**AI agents (MCP)** — let Claude, Cursor or VS Code run it through the Apify MCP server:

```json
{
  "mcpServers": {
    "contacts": {
      "url": "https://mcp.apify.com?tools=omkar-cloud/website-email-contact-scraper",
      "headers": { "Authorization": "Bearer <YOUR_API_TOKEN>" }
    }
  }
}
```

### Changelog

- **2026-10-24** — Rebuilt. New: flat rows, company details, phone types, file and Google Sheet input, company names, input from other Apify runs, crawl depth, email filters, email verification, AI best sales email, social profile details, a Contacts-with-sources table and a free Failed-websites table. New price: $1.50 per 1,000 websites.

### 💬 Have Questions? We Have Answers.

You're a business owner — we know how hard completing a project can be. So we offer full support: just message us and we'll reply ✅ with a solution within 1 working day.

[![Message Us on WhatsApp](https://raw.githubusercontent.com/omkarcloud/assets/master/images/whatsapp-us.png)](https://www.omkar.cloud/l/website-email-contact-scraper-apify-whatsapp)

[![Ask Us on Email](https://raw.githubusercontent.com/omkarcloud/assets/master/images/ask-on-email.png)](mailto:happy.to.help@omkar.cloud?subject=Help%20with%20Website%20Email%20%26%20Contact%20Scraper\&body=I%20need%20help%20with%20using%20the%20Website%20Email%20%26%20Contact%20Scraper%20Actor.)

You are important to us — just message us and we will solve your problem ✅ within 1 working day. 🩷 Pinky Promise 🤙!

### Love It? Star It! ⭐

If this Actor saved you hours of copying emails off websites, please [rate it on Apify](https://apify.com/omkar-cloud/website-email-contact-scraper/reviews). It takes one second and helps the next person decide.

### Popular Actors by Omkar Cloud

- [**G2 Scraper**](https://apify.com/omkar-cloud/g2-product-scraper) — G2 reviews, products, pricing, categories and sellers
- [**Crunchbase Scraper**](https://apify.com/omkar-cloud/crunchbase-scraper) — company profiles, funding and people
- [**Crunchbase Funding Rounds Scraper**](https://apify.com/omkar-cloud/crunchbase-funding-rounds-scraper) — who raised how much, from whom
- [**Moz DA Checker**](https://apify.com/omkar-cloud/moz-domain-authority-checker) — Domain Authority for any list of domains
- [**Semrush Keyword Scraper**](https://apify.com/omkar-cloud/semrush-keyword-scraper) — search volume, difficulty and CPC

👉 [**Scrape your first 3,000 websites free now**](https://apify.com/omkar-cloud/website-email-contact-scraper)

# Actor input Schema

## `websites` (type: `array`):

Domains or URLs, one per line: <code>acme.com</code>, <code>https://www.acme.com/</code>. Each website becomes one row with its emails, phones, social links, company details and tech stack.

## `websitesFile` (type: `array`):

Upload a text or CSV file, or link a Google Sheet, with one website per line or cell.

## `companyNames` (type: `array`):

No website? Type the company name, optionally with a city or country after a comma: <code>Blue Bottle Coffee, Oakland</code>. AI finds the company's website, checks it is online, then scrapes it. A name we can't find a working website for goes to the <b>Failed websites</b> table and is not billed.

## `fromDatasetId` (type: `string`):

The dataset ID of another run — Google Maps Scraper, G2 Scraper, any import. Each row's website is scraped. Rows without a website are skipped.

## `fromDatasetField` (type: `string`):

The field holding the website. Leave empty to use the usual ones: <code>website</code>, <code>url</code>, <code>domain</code>, <code>company_website</code>.

## `crawlDepth` (type: `string`):

<b>Key pages</b> reads the home page plus contact, about, team and legal pages — where contacts live. <b>Deep</b> reads up to 20 pages. <b>Homepage</b> is fastest. One flat price whatever you choose.

## `onlyWithEmails` (type: `boolean`):

Websites with no email (after the filters below) go to the <b>Failed websites</b> table instead, and are not billed.

## `siteDomainEmailsOnly` (type: `boolean`):

Keep <code>sales@acme.com</code> for acme.com, drop partners' and agencies' addresses found on the site.

## `excludeFreeEmails` (type: `boolean`):

Drop Gmail, Yahoo, Outlook, iCloud and similar addresses.

## `verifyEmails` (type: `boolean`):

Check each email's mailbox: deliverable, invalid, disposable, catch-all or unknown, plus role-account and free-provider flags. Billed only for a decisive answer (deliverable, invalid or disposable).

## `maxEmailsToVerify` (type: `integer`):

The first emails of each website are verified, best first.

## `findBestSalesEmail` (type: `boolean`):

AI reads each website's emails and picks the one to send a sales pitch to, with the reason. Needs <b>Your product</b> below. Billed only when an email is picked.

## `yourProductDescription` (type: `string`):

One or two sentences on what you sell, e.g. <code>AI customer-support chatbot for e-commerce stores</code>.

## `enrichSocialProfiles` (type: `array`):

For the website's official profile on each chosen network: name, followers, following, posts, bio, verified badge, link in bio. One row per profile in the <b>Social profiles</b> table, billed per profile.

## Actor input object example

```json
{
  "websites": [
    "vercel.com",
    "stripe.com"
  ],
  "crawlDepth": "key_pages",
  "onlyWithEmails": false,
  "siteDomainEmailsOnly": false,
  "excludeFreeEmails": false,
  "verifyEmails": false,
  "maxEmailsToVerify": 5,
  "findBestSalesEmail": false
}
```

# Actor output Schema

## `websites` (type: `string`):

One row per website: emails, phones, social links, company details, tech stack.

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

One row per email, phone and social link, with the pages it was found on.

## `social_profiles` (type: `string`):

Enriched social profiles (add-on).

## `failed_websites` (type: `string`):

Inputs that produced no website row, with the reason. Not billed.

# 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 = {
    "websites": [
        "vercel.com",
        "stripe.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("omkar-cloud/website-email-contact-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 = { "websites": [
        "vercel.com",
        "stripe.com",
    ] }

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

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

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

```

## CLI example

```bash
echo '{
  "websites": [
    "vercel.com",
    "stripe.com"
  ]
}' |
apify call omkar-cloud/website-email-contact-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,omkar-cloud/website-email-contact-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/prMm5nTMlWCW1Hj3C/builds/47LcBsO42EEhw2l5c/openapi.json
