# Contact Details Scraper (`nogards95/website-contact-scraper`) Actor

Email extractor and lead scraper to extract and download emails, phone numbers, Facebook, Twitter, LinkedIn, Instagram, Threads, Snapchat, and Telegram profiles from any website. Extract contact information at scale from lists of URLs and download the data as Excel, CSV, JSON, HTML, and XML.

- **URL**: https://apify.com/nogards95/website-contact-scraper.md
- **Developed by:** [Nogards](https://apify.com/nogards95) (community)
- **Categories:** Lead generation, Social media, Jobs
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

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

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

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

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


# README

## Website Contact Scraper — Extract Emails, Phone Numbers & Social Profiles from Any Domain

Automatically extract business emails, phone numbers, WhatsApp links and social media profiles from any website. Fast, lightweight, one clean result per domain.

Stop wasting hours manually hunting for contact info. Paste a list of URLs and get back every email, phone number, WhatsApp link, LinkedIn, Instagram, Facebook, and more — structured and ready to use.

---

### What it does

Give this actor a list of websites. It crawls each one intelligently — hitting contact pages, about pages, and legal pages first — and returns a single clean record per domain with all the contacts it found.

No headless browser. No Playwright. No slow JavaScript rendering. Just raw HTTP speed with Cheerio.

---

### Features

- **Emails** — extracted from page text and `mailto:` links, deduplicated, spam-filtered
- **Phone numbers** — from `tel:` links and visible text, no SVG/CSS false positives
- **WhatsApp** — detects `wa.me` and `api.whatsapp.com` links, extracts the number
- **Social profiles** — LinkedIn, Facebook, Instagram, Twitter/X, YouTube, TikTok (share buttons excluded)
- **Smart crawl order** — contact and about pages are visited first, so you get results faster
- **Early stop** — stops crawling a domain the moment contacts are found (saves credits)
- **One result per domain** — clean, structured output, no duplicates
- **Proxy support** — works with Apify residential proxies to avoid blocks

---

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `startUrls` | array | — | List of website URLs to scrape (**required**) |
| `maxPagesPerDomain` | integer | `10` | Max pages crawled per domain (1–50) |
| `maxDepth` | integer | `2` | How deep to follow internal links (1–5) |
| `earlyStop` | boolean | `true` | Stop as soon as contacts are found |
| `proxyConfiguration` | object | — | Apify proxy settings (optional) |

#### Example input

```json
{
  "startUrls": [
    { "url": "https://example-agency.com" },
    { "url": "https://another-company.io" }
  ],
  "maxPagesPerDomain": 10,
  "maxDepth": 2,
  "earlyStop": true
}
````

***

### Output

One flat record per domain — ready to export as CSV or filter directly in the Apify dataset viewer.

```json
{
  "domain": "example-agency.com",
  "startUrl": "https://example-agency.com",
  "finalUrl": "https://www.example-agency.com",
  "emails": "info@example-agency.com, sales@example-agency.com",
  "phones": "+39 02 1234567",
  "whatsapps": "+393331234567",
  "linkedin_url": "https://linkedin.com/company/example-agency",
  "facebook_url": "",
  "instagram_url": "https://instagram.com/exampleagency",
  "twitter_url": "",
  "youtube_url": "",
  "tiktok_url": "",
  "pagesVisited": 3,
  "stoppedReason": "early-stop",
  "updatedAt": "2026-05-25T10:30:00.000Z"
}
```

#### Fields

| Field | Description |
|---|---|
| `domain` | Cleaned domain (no www) |
| `startUrl` | The URL you provided as input |
| `finalUrl` | The last URL loaded (after redirects) |
| `emails` | Comma-separated list of found emails |
| `phones` | Comma-separated list of found phone numbers |
| `whatsapps` | Comma-separated list of WhatsApp numbers |
| `linkedin_url` | First LinkedIn company/profile URL found |
| `facebook_url` | First Facebook page URL found |
| `instagram_url` | First Instagram profile URL found |
| `twitter_url` | First Twitter/X profile URL found |
| `youtube_url` | First YouTube channel URL found |
| `tiktok_url` | First TikTok profile URL found |
| `pagesVisited` | Number of pages crawled for this domain |
| `stoppedReason` | Why crawling stopped (see below) |
| `updatedAt` | ISO timestamp of when the record was saved |

#### `stoppedReason` values

| Value | Meaning |
|---|---|
| `early-stop` | Contacts found, crawl stopped early (saves credits) |
| `max-pages` | Reached the `maxPagesPerDomain` limit |
| `no-more-links` | Ran out of internal links to follow |
| `error` | Site was unreachable |

***

### Use cases

- **Lead generation** — build prospect lists with verified contact info at scale
- **Sales outreach** — enrich a list of company domains before cold emailing
- **Marketing agencies** — research competitor contacts and partner directories
- **Recruitment** — find HR and hiring manager contacts on company websites
- **Data enrichment** — add emails and socials to existing domain lists

***

### Tips

- For best results, use **Apify residential proxies** — many sites block datacenter IPs
- Set `earlyStop: true` (default) to minimize credit usage on large lists
- Set `maxDepth: 1` if you only want to check the homepage and direct links
- URLs with or without `https://` are both accepted — the actor normalises them automatically

***

### Technical notes

- Built with [Crawlee](https://crawlee.dev) `CheerioCrawler` on `apify/actor-node:22` — pure HTTP, no browser overhead
- Priority crawl order: contact → about → legal → team → homepage → other
- Phone extraction runs only on visible text nodes — no false positives from SVG or CSS
- Social share buttons (`/sharer`, `/intent/tweet`, etc.) are excluded from social results

# Actor input Schema

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

List of website URLs to scrape contacts from.

## `maxPagesPerDomain` (type: `integer`):

Maximum number of pages to crawl per domain.

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

How deep to follow links within the same domain.

## `earlyStop` (type: `boolean`):

Stop crawling a domain as soon as contacts are found.

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

Optional Apify proxy settings.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://apify.com/contact"
    }
  ],
  "maxPagesPerDomain": 10,
  "maxDepth": 2,
  "earlyStop": true
}
```

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

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

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

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Contact Details Scraper",
        "description": "Email extractor and lead scraper to extract and download emails, phone numbers, Facebook, Twitter, LinkedIn, Instagram, Threads, Snapchat, and Telegram profiles from any website. Extract contact information at scale from lists of URLs and download the data as Excel, CSV, JSON, HTML, and XML.",
        "version": "0.1",
        "x-build-id": "ZQcWjoUoa0IPDyY20"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/nogards95~website-contact-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-nogards95-website-contact-scraper",
                "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/nogards95~website-contact-scraper/runs": {
            "post": {
                "operationId": "runs-sync-nogards95-website-contact-scraper",
                "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/nogards95~website-contact-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-nogards95-website-contact-scraper",
                "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": "Start URLs",
                        "type": "array",
                        "description": "List of website URLs to scrape contacts from.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxPagesPerDomain": {
                        "title": "Max pages per domain",
                        "minimum": 1,
                        "maximum": 50,
                        "type": "integer",
                        "description": "Maximum number of pages to crawl per domain.",
                        "default": 10
                    },
                    "maxDepth": {
                        "title": "Max crawl depth",
                        "minimum": 1,
                        "maximum": 5,
                        "type": "integer",
                        "description": "How deep to follow links within the same domain.",
                        "default": 2
                    },
                    "earlyStop": {
                        "title": "Early stop",
                        "type": "boolean",
                        "description": "Stop crawling a domain as soon as contacts are found.",
                        "default": true
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Optional Apify proxy settings."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
