# Website Contact Finder — Emails, Phones & Socials (`night111/website-contact-finder`) Actor

Fast lead-gen crawler: paste website URLs, get emails, phone numbers, and social profile links. Built for sales, agencies, and enrichment pipelines.

- **URL**: https://apify.com/night111/website-contact-finder.md
- **Developed by:** [ng. night](https://apify.com/night111) (community)
- **Categories:** Lead generation, AI, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $5.00 / 1,000 contact\_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 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

## Website Contact Finder — Emails, Phones & Socials

Extract **emails**, **phone numbers**, and **social media profiles** from any list of websites. Built for lead generation, sales enrichment, and agency workflows.

Paste company websites (from Google Maps, directories, CRM, or outbound lists) → get clean, structured contact data you can export as CSV, Excel, or JSON.

### What is Website Contact Finder?

Website Contact Finder is a fast **lead generation scraper** for Apify Store. For every website you provide, it:

1. Opens the homepage (and optional contact / about pages)
2. Collects public **emails**, **phones**, and **social links**
3. Saves **one clean result per domain** — ready for CRM import

It is designed for users who already have a list of websites and only need contact fields at scale. No coding required.

### What data can I extract?

| Field | Examples |
| --- | --- |
| 📧 **Emails** | `hello@company.com`, `sales@company.com` |
| 📞 **Phone numbers** | From `tel:` links and common page patterns |
| 💼 **LinkedIn** | Company or profile URLs |
| 🐦 **X / Twitter** | Profile links |
| 📘 **Facebook** | Pages / profiles |
| 📸 **Instagram** | Profiles |
| ▶️ **YouTube** | Channels |
| 🎵 **TikTok** | Profiles |
| 📌 **Pinterest** | Profiles |
| 💻 **GitHub** | Org / user pages |

Also returns: domain, seed URL, page title, pages scraped, and counts.

### Why use this Actor?

- ⚡ **Fast** — HTTP + Cheerio crawler (no heavy browser by default)
- 📦 **One row per domain** — easy for lead lists and enrichment pipelines
- 🧭 **Contact-page aware** — optionally follows contact / about / team / impressum links
- 💰 **Fair pricing** — pay only when an email or phone is found (empty rows free)
- 🔗 **Integrations-ready** — export CSV/Excel/JSON or pull via Apify API, Make, Zapier, webhooks

### How to use Website Contact Finder

Even if you have never scraped the web before:

1. [Create a free Apify account](https://console.apify.com/sign-up)
2. Open **Website Contact Finder**
3. Add one or more website URLs (homepages work best)
4. Click **Start** and wait for the run to finish
5. Open the **Dataset** tab and download results as JSON, CSV, Excel, or HTML

#### Tips for best results

- Prefer **homepages** or known company domains (not random deep links)
- Keep **max pages per domain** at 3–5 for speed and cost control
- Enable **Apify Proxy** if many sites time out or block datacenter IPs
- Not every website publishes a public email — empty email fields are normal
- **Full pipeline:** Google Maps / directory → **[Domain List Cleaner](https://apify.com/night111/domain-list-cleaner)** → **this Actor**
- **One Actor:** **[Maps to Contacts](https://apify.com/night111/maps-to-contacts)** (clean + contacts in one run)

### Input

| Field | Required | Description |
| --- | --- | --- |
| **Website URLs** (`startUrls`) | Yes | List of websites to scan |
| **Max pages to visit (total)** | No | Global request cap (default: 50) |
| **Max pages per domain** | No | How deep to go per site (default: 5) |
| **Follow contact / about links** | No | Visit contact-like pages (default: true) |
| **Proxy configuration** | No | Enable Apify Proxy when sites block you |

#### Example input

```json
{
  "startUrls": [
    { "url": "https://apify.com" },
    { "url": "https://www.ycombinator.com" }
  ],
  "maxRequestsPerCrawl": 50,
  "maxPagesPerDomain": 5,
  "followContactLinks": true
}
```

### Output

Each dataset item is **one domain** with contacts merged from the pages crawled:

```json
{
  "domain": "example.com",
  "url": "https://example.com/",
  "emails": ["hello@example.com", "sales@example.com"],
  "phones": ["+1 (415) 555-0100"],
  "socials": {
    "linkedin": "https://www.linkedin.com/company/example",
    "twitter": "https://x.com/example",
    "facebook": "https://www.facebook.com/example"
  },
  "emailCount": 2,
  "phoneCount": 1,
  "pageTitle": "Example — Home",
  "pagesScraped": [
    "https://example.com/",
    "https://example.com/contact"
  ],
  "scrapedAt": "2026-07-28T12:00:00.000Z"
}
```

You can view results in the Apify UI table or export them for CRM / spreadsheet use.

### Who is this for?

- **Sales / SDR teams** enriching domain lists
- **Agencies** building prospect lists for clients
- **Founders & marketers** collecting public contacts from local businesses
- **Data pipelines** that already have websites and only need contact fields

### How much does it cost?

This Actor uses **pay-per-event** pricing. You are charged **only when a domain has at least one public email or phone**. Rows with socials only (or no contacts) are still saved — free.

| Event | Price |
| --- | --- |
| **Contact result** (email **or** phone found) | **$0.005** → **$5.00 / 1,000 results** |
| Actor start | $0.0005 per run (infrequent) |
| Platform usage | Included in pricing for users |

Example: scan **1,000** sites and find contacts on **600** of them ≈ **$3** in result charges.

Always check the **Pricing** tab for the live rates on your plan.

### FAQ

#### Can I extract emails from Google Maps?

Not in one hop from the map pin alone. Recommended path:

1. [Google Maps / Places scraper](https://apify.com/compass/crawler-google-places) → websites
2. **[Domain List Cleaner](https://apify.com/night111/domain-list-cleaner)** → normalize & drop junk
3. **This Actor** → emails, phones, socials

Or run **[Maps to Contacts](https://apify.com/night111/maps-to-contacts)** for steps 2+3 in one Actor.

#### Can I use integrations (Make, Zapier, Sheets)?

Yes. Connect via Apify integrations, webhooks, or the API. Push results to Google Sheets, Slack, your CRM, or any workflow tool.

#### Can I use the Apify API?

Yes. Run the Actor programmatically with the Apify API / `apify-client` (Node.js or Python), then read the default dataset.

#### Why are some emails or phones empty?

Many sites hide contacts behind forms, images, or login walls. This Actor only collects **publicly visible** contact data from HTML. Partial results are normal.

#### Is it legal to scrape contact details?

Web scraping of **publicly available** information is generally legal, but results may include personal data protected by GDPR and similar laws. Only use data for legitimate purposes and respect each site’s terms. If unsure, consult your own legal advice. See also [Apify’s overview of scraping legality](https://blog.apify.com/is-web-scraping-legal/).

### Limitations

- Works best on **public marketing websites**
- Strong anti-bot sites, pure JS apps, and login walls may return partial data
- Phone extraction is conservative to reduce junk matches
- Social links are first-match per network per domain

### Feedback & support

Found a bug or need a feature? Open an issue on the Actor’s **Issues** tab. Active maintenance keeps results reliable as websites change.

***

**Keywords:** website email extractor, contact scraper, phone number scraper, social media profile extractor, lead generation, domain contact finder, sales enrichment, website contact details scraper

# Actor input Schema

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

List of website URLs to scan for contact details (homepage or any page). Each item should have a `url` field.

## `maxRequestsPerCrawl` (type: `integer`):

Hard cap on total HTTP requests across all sites. Protects cost on large runs.

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

How many pages to follow on each website (home + contact/about links).

## `followContactLinks` (type: `boolean`):

If true, also visit pages whose URL or link text looks like contact, about, impressum, team.

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

Optional Apify Proxy. Enable for sites that block datacenter IPs.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://apify.com"
    },
    {
      "url": "https://www.example.com"
    }
  ],
  "maxRequestsPerCrawl": 50,
  "maxPagesPerDomain": 5,
  "followContactLinks": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

Dataset of domain contact records (emails, phones, socials, billable flag).

## `summary` (type: `string`):

Optional OUTPUT key with counts (if present).

# 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"
        },
        {
            "url": "https://www.example.com"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("night111/website-contact-finder").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" },
        { "url": "https://www.example.com" },
    ] }

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

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/SjJnDT4AaKRi77YW1/builds/WUTx6KtgKzhn6z4xE/openapi.json
