# Website Crawler | Email Extractor | Social Media Scraper (`ha55an_dev/website-crawler-email-extractor-social-media-scraper`) Actor

Extracts emails and social media links (Facebook, LinkedIn, Twitter/X, Instagram) from 100+ websites in second. Crawls homepages, Contact, About, and Subpages. Outputs clean, deduplicated contact lists exportable to CSV/JSON for lead generation and outreach.

- **URL**: https://apify.com/ha55an\_dev/website-crawler-email-extractor-social-media-scraper.md
- **Developed by:** [Hassan Amer](https://apify.com/ha55an_dev) (community)
- **Categories:** Lead generation, Social media, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 website with email or social links founds

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## 📧 Email & Social Media Link Extraction From Any Website

[![Apify Actor](https://img.shields.io/badge/Apify-Actor-orange?logo=apify)](https://apify.com/store)
[![Python 3.12](https://img.shields.io/badge/Python-3.12-blue?logo=python)](https://python.org)
[![Zero Paid Proxies](https://img.shields.io/badge/Proxies-100%25%20Free%20Built--in-green)]()
[![JavaScript Support](https://img.shields.io/badge/JavaScript-Stealth%20CDP%20Browser-purple)]()
[![Export](https://img.shields.io/badge/Export-Excel%20%7C%20CSV%20%7C%20JSON-teal)]()
[![Pricing](https://img.shields.io/badge/Pricing-%240.01%20per%20success-brightgreen)]()

An industrial-grade, high-speed **Email and Social Media Link Extractor** designed to discover public email addresses, corporate social media links, and contact channels from any list of websites or domain names in seconds.

> ### 💎 100% Fair-Billing Guarantee (Pay-Per-Event)
>
> - **Only pay for real results:** You are billed just **$0.01 per successful discovery** ($1 per 100 leads).
> - **Zero risk on empty sites:** If a website has no email and no social media links, you are charged **$0.00**!

Whether you are building verified cold outreach prospect lists, enriching B2B CRM records, conducting marketing intelligence, or generating inbound sales leads, this Actor automates the entire discovery process without manual clicking or expensive paid proxy subscriptions.

***

### 🚀 What Does This Actor Do?

Traditional email finders often fail when encountering modern JavaScript-rendered websites (React, Vue, Angular, Next.js), Cloudflare email protection ciphers (`data-cfemail`), or obfuscated numeric HTML entities. This Actor solves these challenges.

***

### 💼 Use Cases

- **🎯 B2B Lead Generation & Sales Prospecting:** Convert raw domain lists or Google Maps exports into actionable prospect lists with direct emails and social profiles.
- **📬 Cold Email Outreach Campaigns:** Gather clean, deliverable corporate email addresses for sales sequences, link building, and PR outreach.
- **📊 CRM Database Enrichment:** Automatically backfill missing social media profiles (LinkedIn, Twitter/X, Instagram, Facebook) and emails into HubSpot, Salesforce, or Airtable.
- **🔍 Market Research & Competitor Intelligence:** Audit digital footprints and social media channels across hundreds of niche businesses in minutes.
- **🏢 Agency Client Onboarding:** Rapidly audit client websites and identify broken or missing contact pathways.

***

### 📥 Input Configuration

The Actor is designed with a simple, non-technical interface. You only need to provide a list of target website URLs or domain names (one per line):

```json
{
  "websites": [
    "https://www.kiteunion.com.au",
    "https://www.intrinsichr.com.au",
    "http://www.tenhats.com.au",
    "https://example.com"
  ]
}
```

#### Input Parameters

| Field        |          Type          |   Required   | Description                                                                                                                |
| ------------ | :---------------------: | :-----------: | -------------------------------------------------------------------------------------------------------------------------- |
| `websites` | Array / List of Strings | **Yes** | A list of website URLs or domain names to scrape (e.g.`https://example.com`, `http://site.org`, or `domain.com.au`). |

***

### 📤 Output Format

Every processed website produces a structured record in the Apify Dataset, perfectly formatted for 1-click export to **Excel, CSV, or JSON**:

```json
[
  {
    "Target website": "https://www.kiteunion.com.au",
    "Status": "SUCCESS",
    "Email": "contact@kiteunion.com.au",
    "Social media": "Facebook: https://www.facebook.com/alexey.prokopenko, Instagram: https://www.instagram.com/alexey_prokopenko, LinkedIn: https://www.linkedin.com/company/kiteunion, YouTube: https://youtube.com/@kiteunion"
  },
  {
    "Target website": "https://www.intrinsichr.com.au",
    "Status": "SUCCESS",
    "Email": "hello@intrinsichr.com.au",
    "Social media": "Facebook: https://facebook.com/intrinsichr, Instagram: https://instagram.com/intrinsichraustralia, LinkedIn: https://linkedin.com/company/intrinsichr"
  },
  {
    "Target website": "https://example.com",
    "Status": "NO_EMAILS_FOUND",
    "Email": "No direct email found on site. For your confirmation, you may check manually.",
    "Social media": "No social media found on site."
  }
]
```

#### Output Field Reference

| Column Name                  |  Type  | Description                                                                                                                                                |
| ---------------------------- | :----: | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **`Target website`** | String | The normalized URL of the analyzed website.                                                                                                                |
| **`Status`**         | String | Execution status:`SUCCESS` (emails found), `NO_EMAILS_FOUND`, or `INVALID_URL`.                                                                      |
| **`Email`**          | String | Discovered business email(s), or explicit manual confirmation prompt if none found.                                                                        |
| **`Social media`**   | String | Categorized social profiles (`Facebook`, `Instagram`, `LinkedIn`, `Twitter / X`, `YouTube`, `TikTok`, `Pinterest`, `Threads`, `GitHub`). |

***

### 🛠️ Step-by-Step Usage Guide

#### Method 1: Apify Console (No-Code)

1. Click **Try for free** on the Actor page.
2. In the **Target Website URLs** box, paste your list of domains or URLs (one per line).
3. Click **Save & Start**.
4. Once completed, navigate to the **Storage / Dataset** tab and click **Export** to download your leads in **Excel (.xlsx)** or **CSV**.

#### Method 2: Apify Python API

```python
from apify_client import ApifyClient

## Initialize client with your API token
client = ApifyClient("YOUR_APIFY_TOKEN")

## Prepare input
run_input = {
    "websites": [
        "https://www.kiteunion.com.au",
        "https://www.intrinsichr.com.au"
    ]
}

## Run the Actor and wait for completion
run = client.actor("your-username/email-extraction-and-social-media-link-extraction-from-any-website").call(run_input=run_input)

## Fetch results from dataset
dataset_items = client.dataset(run["defaultDatasetId"]).list_items().items
for item in dataset_items:
    print(f"Site: {item['Target website']} | Email: {item['Email']} | Socials: {item['Social media']}")
```

#### Method 3: Apify JavaScript / Node.js API

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

const client = new ApifyClient({
    token: 'YOUR_APIFY_TOKEN',
});

const input = {
    websites: [
        'https://www.kiteunion.com.au',
        'https://www.intrinsichr.com.au'
    ]
};

const run = await client.actor('your-username/email-extraction-and-social-media-link-extraction-from-any-website').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();

console.log(items);
```

#### Method 4: Integrations (Make, Zapier, Webhooks)

You can connect this Actor directly to **Make.com**, **Zapier**, or custom **Webhooks** to automatically scrape incoming domains from Google Sheets, Typeform submissions, or CRM lead triggers.

***

### ❓ Frequently Asked Questions (FAQ)

##### Q: Do I need to buy proxies to run this Actor?

**A:** No. The Actor includes built-in HTTP/2 connection pooling, TLS fingerprint impersonation, and direct stealth CDP browser automation. You do not need to configure or purchase paid proxy packages.

##### Q: How does the Actor handle sites that hide emails behind Cloudflare?

**A:** The Actor automatically detects Cloudflare email protection tags (`data-cfemail` and `/cdn-cgi/l/email-protection#`) and mathematically reverses the XOR cipher to reconstruct the plain-text email address.

##### Q: What happens if a website does not have any email published?

**A:** The Actor writes an explicit, user-friendly confirmation message in the `Email` column:
`"No direct email found on site. For your confirmation, you may check manually."`

##### Q: Can I run this on thousands of websites at once?

**A:** Yes. The Actor utilizes asynchronous concurrency to process dozens of domains in parallel, achieving speeds of 300–500 domains per minute.

***

### 🏷️ Search Keywords & Tags

`Email Extractor` · `Social Media Scraper` · `Email Extraction` · `Website Contact Extractor` · `Social Media Links Finder` · `Lead Generation Tool` · `B2B Email Finder` · `Cloudflare Email Decoder` · `Contact Details Scraper` · `Bulk Email Scraper` · `Instagram Scraper` · `LinkedIn Finder` · `Facebook Scraper` · `Twitter Scraper` · `Extract Emails From Any Website` · `Web Scraping` · `Cold Email Lead Generator` · `No Code Lead Scraper`

# Actor input Schema

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

Enter or paste website URLs or domain names (one per line, space-separated, or comma-separated).

## Actor input object example

```json
{
  "websites": "https://www.kiteunion.com.au\nhttps://www.intrinsichr.com.au\nhttps://www.tenhats.com.au\nhttps://www.brighte.com.au\nhttps://www.safetyculture.com"
}
```

# Actor output Schema

## `results` (type: `string`):

Dataset containing verified email addresses and social media profile links.

# 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": `https://www.kiteunion.com.au
https://www.intrinsichr.com.au
https://www.tenhats.com.au
https://www.brighte.com.au
https://www.safetyculture.com`
};

// Run the Actor and wait for it to finish
const run = await client.actor("ha55an_dev/website-crawler-email-extractor-social-media-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": """https://www.kiteunion.com.au
https://www.intrinsichr.com.au
https://www.tenhats.com.au
https://www.brighte.com.au
https://www.safetyculture.com""" }

# Run the Actor and wait for it to finish
run = client.actor("ha55an_dev/website-crawler-email-extractor-social-media-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": "https://www.kiteunion.com.au\\nhttps://www.intrinsichr.com.au\\nhttps://www.tenhats.com.au\\nhttps://www.brighte.com.au\\nhttps://www.safetyculture.com"
}' |
apify call ha55an_dev/website-crawler-email-extractor-social-media-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ha55an_dev/website-crawler-email-extractor-social-media-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/yKlKber47QzDe3Jyx/builds/glTQaKX37XvAZnunF/openapi.json
