# Email ✉️  & Phone ☎️ Extractor (`anchor/email-phone-extractor`) Actor

Extract emails, phone numbers, and other contact information like Twitter, LinkedIn, Instagram... from websites you provide. Best for lead generation and data enrichment. Export data in structured formats and dominate your outreach game. Capture your leads almost for free, fast, and without limits.

- **URL**: https://apify.com/anchor/email-phone-extractor.md
- **Developed by:** [Anchor](https://apify.com/anchor) (community)
- **Categories:** Lead generation
- **Stats:** 8,198 total users, 7 monthly users, 100.0% runs succeeded, 106 bookmarks
- **User rating**: 3.94 out of 5 stars

## Pricing

$30.00/month + usage

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

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

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

### Extract emails, phone numbers & social links from any website

**Email & Phone Extractor** is a no‑code **contact extractor** that finds **emails, phone numbers and social links** from any website at scale.

Get **clean contact lists** ready to download as CSV, Excel, JSON, HTML, XML, or RSS – or send them straight to your CRM via API.

### 👥 Who is this contact extractor for?

This **Email & Phone Extractor** is built for people who don’t want to write code but are comfortable using automation tools like **APIs, n8n, Make, Zapier**, etc.

- **Marketing & sales teams** who need a **steady stream of leads** with emails, phones and social profiles.
- **Founders & growth teams** who are building a **database of potential clients** from target websites.
- **Analysts & researchers** who want to **map key contacts and social presence** of companies in a market.
- **Agencies & freelancers** who deliver **prospecting lists** or enrichment as a service.

If you care about automation, see the **Integration** section below for ready‑made patterns with n8n, Make, and Zapier.

### 🔍 What does Email & Phone Extractor do?

This email and phone extractor allows you to scrape any website for contact information. That's right: **any website** 💪.

With this Email & Phone Extractor you can:

- **Scan entire websites automatically** from a single URL, a list of URLs, or a Google Sheet.
- **Capture all available contact details** (emails, phones, social profiles, etc.) instead of manually copy‑pasting.
- **Generate large contact lists automatically** and feed them directly into CRMs or spreadsheets.
- **Control extraction behaviour** with advanced options when you need fine‑tuning.

### 📋 What contact information can this actor extract?

This contact scraper can extract the following information:

- ✉️ **Email**
- ☎️ **Phone numbers**
- 🔗 **LinkedIn**
- 🐦 **Twitter (X.com)**
- 📸 **Instagram**
- 🎥 **Youtube**
- **Facebook**
- 🎵 **TikTok**
- 📌 **Pinterest**
- 🎮 **Discord**

If you only want emails, you can. For more configurations like this, have a look at the advanced configuration.

### 🏆 Satisfied users

+1 million successful phone numbers found.\
+3 million successful emails found.\
+10 million successful socials found.

### 👨🏻‍💻 How to extract contact ? Quick start ⚡

1. Prepare a list of **websites** (🔗 one URL , 🔗🔗 a list of URLs, or a public Google spreadsheet with a `URL` column).
   - `https://www.microsoft.com`
   - `https://www.apify.com`
2. (Optional) Choose your **advanced options** (only emails, depth of crawling...).
3. Click **Start** and the crawler will extract information from all listed websites.
4. Open results in the **Dataset** tab. You can then download your **data** as CSV, Excel, JSON, HTML, XML, or RSS. You can also forward it to integration tools like n8n, Make, Zapier, or any API !

See the results section below for more details on what it contains.

### 🎥 Video tutorial

If you want to read more about this scraper, its functionalities, and its setup, watch this video:

https://youtu.be/7eFWaYV66yo

### 📥 Input

The actor expects one or more **website URLs** you want to scan for contact information.

You can provide input as:

- A single URL
- A list of URLs (one per line)
- A public Google Sheet URL with a `URL` column
- A dataset of URLs from another actor

The JSON input example might look like this:

```json
{
  "startUrls": "https://www.microsoft.com/nhttps://www.apple.com/nhttps://www.apify.com"
}
```

### 📊 Results (Output)

You can download the results in formats such as JSON, HTML, CSV, XML, or Excel. For each page crawled, the following contact information is extracted (examples shown):

| ✉️ Email                        | ☎️ Phone    | 🔗 LinkedIn                            | 📸 Logo                                                 | 🐦 Twitter    | 📸 Instagram | Facebook              | 🎥 Youtube      |
| ------------------------------------------ | ---------------------------------------------------------- | ---------- | -------------- | ----------- | ----------- | ------------------------- | -------------------- |
| bill@gates.com                | +1234455667 | https://www.linkedin.com/in/williamhgates/ | ![bill gates](https://upload.wikimedia.org/wikipedia/commons/archive/9/96/20230221160915%21Microsoft_logo_%282012%29.svg) | https://x.com/billgates  | https://www.instagram.com/thisisbillgates/ | https://www.facebook.com/BillGates/ | https://www.youtube.com/billgates |
| hello@apify.com    | 04788290 | https://www.linkedin.com/company/apify              |                                                      | https://x.com/apify |             |                         |                      |

In JSON form, one item might look like:

```json
[
  {
    "image": "https://apify.com/favicon.ico",
    "url": "https://apify.com/contact",
    "emails": [
      "hello@apify.com"
    ],
    "phones": [
      "04788290",
      "373153700",
      "035500000000002",
    ],
    "linkedIns": [
      "http://linkedin.com/company/apify",
      "https://www.linkedin.com/company/apify/"
    ],
    "twitters": [
      "https://x.com/apify"
    ],
    "instagrams": [],
    "facebooks": [],
    "youtubes": [],
    "tiktoks": [],
    "pinterests": [],
    "discords": []
  }
]
```

Many of our users use the API to feed their **CRM like SalesForce, Hubspot or Pipedrive with the results**. But we have seen users that prefer to get the results by **email or directly in their google drive**. Everything is possible since we offer **all output formats, and since zapier** can be connected. Do what is simple for you!

### 💡 Why use Email & Phone Extractor?

Having a clean list of contact details for websites can serve many purposes.

Here are our favorite 3:

1. You are building a **database of potential clients** to contact. You want all emails, phones and socials in one place so your sales team can act quickly.
2. You are doing **market or competitor research** and want to understand who to contact and where they are active online.
3. You want to **enrich existing URLs** with verified contact details to improve your outreach performance and personalization.

This Email & Phone Extractor is very **fast, highly scalable and almost free**, making it a great fit for both small projects and large‑scale lead generation.

### 🧠 Use cases for Email & Phone Extractor

Some popular ways to use this contact extractor:

- **Lead generation & sales**: Build targeted contact lists (emails, phones, LinkedIn, socials) for outbound campaigns.
- **Agency services**: Deliver ready‑to‑use lead lists to clients as CSV/Excel or via API.
- **Market & competitor research**: Understand how competitors present themselves and how they can be contacted.
- **Data enrichment pipelines**: Use this actor as a **middle step** to enrich URLs coming from other scrapers or tools.
- **Automation & workflows**: Trigger this extractor from **n8n, Make, or Zapier** to continuously refresh and expand your CRM.

### 🥢 Which Actors should I use with this tool?

We recommend these actors that we maintain with 🚀 reliability, 🫰🏻 low cost & 🗯️ incredible support in mind:

#### Scraping small amounts (LinkedIn people)

When you need to gather data of less than 50 records per day, you can rely on actors who require your LinkedIn cookies. These actors will "act as you", so be careful. You will need the following actors:

- You have a few LinkedIn **people URLs**, now looking for their **information** like job, description, skills…: [LinkedIn x GPT](https://apify.com/anchor/linkedin-gpt-prompt)
- You have a few LinkedIn **people URLs** that you want to filter out using a ChatGPT prompt: [LinkedIn x GPT](https://apify.com/anchor/linkedin-gpt-prompt)

#### Scraping big amounts (LinkedIn at scale)

When you need to gather data, like more than 50 records per day, it's recommended to avoid using your Linkedin cookies. You will need the following actors:

- Looking for many LinkedIn **company URLs**: [Mass company finder](https://apify.com/anchor/linkedin-company-url-finder)
- Looking for many LinkedIn **people URLs**: [Mass people finder](https://apify.com/anchor/linkedin-people-finder)
- You have many LinkedIn **people URLs**, now looking for their **information** like job, description, skills…: [Mass profile scraper](https://apify.com/anchor/linkedin-profile-enrichment)

These tools are very valuable compared to tools like Chrome extensions that can get your LinkedIn account banned for too many requests per month. With these big‑amount scrapers, no risk!

#### ✉️ Email verifier

[Email Check, verify and validate](https://apify.com/anchor/email-check-verify-validate) is an email verification tool. It helps you validate any email address online. This email validator checks email address validity very fast and for almost free. Verification of emails is mainly based on servers’ responses for most accuracy.

### 🔌 Integration

Use the results of this actor automatically via the Apify API. See the [API v2 docs](https://docs.apify.com/api/v2) or [Webhooks docs](https://docs.apify.com/platform/webhooks).

- **n8n**: Trigger this actor from n8n to enrich rows in Google Sheets, Airtable, or your CRM with emails and phones.
- **Make**: Use the HTTP module to start a run and “Get a file/JSON” to pull dataset items, or receive items via [Make Webhooks](https://www.make.com/en/help/tools/webhooks) for stream processing.
- **Zapier**: Use [“Webhooks by Zapier”](https://zapier.com/apps/webhook/help) to catch Apify webhooks on “dataset item created” or “run succeeded,” then map fields to your CRM/Sheets. You can also start runs with a POST action.

### 🫰🏻 Email & contact scraping pricing

The Apify Free plan will give you 10,000 results, the Personal plan will give you 100,000 results, and the Team plan will deliver 1 million results! This is likely the most affordable cloud option on the market. That's why **hundreds of users use it daily**.

Check out [Apify pricing](https://apify.com/pricing) to see which plan is right for you.

### 📗 Is it legal to collect emails & contact information?

You should be aware that your results might contain personal data. Personal data is protected by GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers. You can also read this Apify blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

Always make sure your use case complies with the target website's terms and applicable laws in your jurisdiction.

### ❓ FAQ

**Q: How many websites can I scan per run?**\
A: It depends on your Apify usage limits and input size, but you can process thousands of URLs per run, as long as you stay within your account’s compute and dataset limits.

**Q: Can I extract only emails (or only phones)?**\
A: Yes. Use the advanced configuration in the INPUT tab to limit extraction to specific contact types, like emails only.

**Q: Does this actor log into my email, CRM, or LinkedIn accounts?**\
A: No. This actor does **not** log into any of your accounts. It only scans public webpages based on your input URLs.

**Q: Can I connect this actor to my CRM or spreadsheet automatically?**\
A: Yes. Use Apify webhooks with n8n, Make, or Zapier (see the **Integration** section) to send new contacts directly to your tools.

**Q: Can I write multiple URLs for the same website?**\
A: Yes, you can, but you don't have to. By default, the actor will click on links to ensure the entire website is screened. See the advanced configuration of the INPUT tab to learn more.

#### 📞 Support & feedback

- If you need any help or encounter a bug, please raise an issue directly on Apify. This allows us to better understand your problem by reproducing the issue.
- If you have a feature request, a question or a suggestion, please contact us at <anchor_apify@outlook.com>

Your feedback helps us improve this **Email & Phone Extractor** for everyone on Apify. And if it saved you time, please leave a quick review on the actor’s page.

# Actor input Schema

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

List of URLs where we will start crawling. You can provide a remote file like a <b>google spreadsheet</b> (public or as google say 'anyone on the internet can access', otherwise this actor will not have access)

## `maxRequests` (type: `integer`):

The maximum number of pages the crawler will load in total. It is always a good idea to limit the number of pages, since the actor will visit all the Start Urls + the links it might find

## `sameDomain` (type: `boolean`):

If set, the actor will only follow links within the same domain

## `onlyEmails` (type: `boolean`):

If set, the actor will only extract contact emails (in case you don't need phone numbers, FB links...)

## `onlyOneEmailPerDomain` (type: `boolean`):

If set, the actor will stop crawling a website once he finds one email. Useful when you have a list of many websites, and want to find an email structure for instance

## `maxDepth` (type: `integer`):

The maximum number of links away from the <b>Start URLs</b> that the actor will crawl. If <code>0</code>, the actor will not follow any links. If empty or null, the actor will follow links to arbitrary depth. Use this to limit your actor.

## `maxRequestsPerStartUrl` (type: `integer`):

The maximum number of links for each start URL. If empty or null, the actor has no limit. Use this to limit your actor.

## `pseudoUrls` (type: `array`):

Regex to filter links : Put `.*` to crawl every link. Put `https://www.google.com/search?q=ye.*` for every google query that begins with 'ye'. You can also put `.*help.*` if you only want links containing the work 'help'

## `proxyConfig` (type: `object`):

Proxy servers let you bypass website protections, avoid IP address blocking and view content for other countries. Try to use the proxy if you are experiencing timeout errors.

## `considerChildFrames` (type: `boolean`):

If set, the actor will extract contact information also from IFRAMEs. Sometimes, you might not want that (e.g. this will include data from online ads).

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://guillim.github.io/example-website-to-scrape/"
    }
  ],
  "maxRequests": 5,
  "sameDomain": true,
  "onlyEmails": false,
  "onlyOneEmailPerDomain": false,
  "maxDepth": 2,
  "pseudoUrls": [
    ".*"
  ],
  "proxyConfig": {
    "useApifyProxy": true
  },
  "considerChildFrames": true
}
```

# Actor output Schema

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

Each dataset item includes the original search query and either the LinkedIn company URL and info or an alternative info field.

# 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": [
        {
            "url": "https://guillim.github.io/example-website-to-scrape/"
        }
    ],
    "maxRequests": 5,
    "maxDepth": 2,
    "pseudoUrls": [
        ".*"
    ],
    "proxyConfig": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("anchor/email-phone-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": [{ "url": "https://guillim.github.io/example-website-to-scrape/" }],
    "maxRequests": 5,
    "maxDepth": 2,
    "pseudoUrls": [".*"],
    "proxyConfig": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("anchor/email-phone-extractor").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 '{
  "startUrls": [
    {
      "url": "https://guillim.github.io/example-website-to-scrape/"
    }
  ],
  "maxRequests": 5,
  "maxDepth": 2,
  "pseudoUrls": [
    ".*"
  ],
  "proxyConfig": {
    "useApifyProxy": true
  }
}' |
apify call anchor/email-phone-extractor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,anchor/email-phone-extractor"
        }
    }
}

```

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/bxrabKhLv1c3fLmoj/builds/8nfZBhYGRUyE8757p/openapi.json
