# Lead Enricher — Emails, Phones & Socials from Any URL (`memo23/lead-enricher`) Actor

Turn any list of business URLs into contact records: emails, phones, and social profiles. No source-sorting, no per-credit fees. JSON or CSV out.

- **URL**: https://apify.com/memo23/lead-enricher.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 scraped items

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

## Lead Enricher — Emails, Phones & Socials from Any URL

<p align="center"><img src="https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/lead-enricher-logo.png" width="140" alt="Lead Enricher"></p>

Turn any list of business URLs into contact records: emails, phones, and social media profiles. No source-sorting, no per-credit fees. One row per URL, clean JSON out.

***

### Why use this scraper

- **Full contact extraction.** Emails (from mailto: links and page text), phone numbers (from tel: links), and social media profiles (Facebook, Instagram, Twitter/X, LinkedIn, YouTube, TikTok, GitHub, Pinterest, Threads, WhatsApp, Telegram).
- **Any URL type.** Mix websites and social pages — all are processed the same way.
- **No login, no API key.** Reads the public page HTML, no credentials needed.
- **Batch processing.** Enrich one URL or thousands — parallel fetching with configurable concurrency.
- **No per-credit fees.** Pay-per-event pricing, not per-contact. Extract as many contacts as you want from each page.

***

### Overview

This actor takes a list of business URLs, fetches each page, and extracts contact information: email addresses, phone numbers, and links to social media profiles. Each URL becomes one contact record with all the contact data found on that page.

***

### Use cases

- **Outbound sales** — turn scraped business lists into outreach-ready leads with emails and phones.
- **Contact database** — build a directory of business contacts from website lists.
- **Social research** — find all social media profiles for a business.
- **BD prospecting** — enrich company URLs with contact info before outreach.

***

### How it works

<p align="center"><img src="https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/how-it-works-lead-enricher.png" width="900" alt="How it works"></p>

1. You provide a list of business URLs.
2. The actor fetches each page with impit (real Chrome TLS fingerprint).
3. It extracts emails from mailto: links and page text, phones from tel: links, and social media profile links.
4. Each URL becomes one contact record in the dataset.

***

### Input

| Field | Type | Default | Notes |
|---|---|---|---|
| `startUrls` | array | — | Business URLs to enrich. https:// added automatically. |
| `maxItems` | integer | 1000 | Maximum URLs to process. |
| `maxConcurrency` | integer | 10 | How many URLs to fetch in parallel. |
| `proxy` | object | Apify proxy | Proxy configuration. |

```json
{
  "startUrls": [
    { "url": "https://shopify.com" },
    { "url": "https://netlify.com" }
  ]
}
```

***

### Output

One row per URL:

```json
{
  "type": "lead",
  "url": "https://shopify.com",
  "emails": [],
  "phones": [],
  "socials": [
    { "platform": "facebook", "url": "https://www.facebook.com/shopify" },
    { "platform": "twitter", "url": "https://twitter.com/shopify" },
    { "platform": "youtube", "url": "https://www.youtube.com/user/shopify" },
    { "platform": "instagram", "url": "https://www.instagram.com/shopify/" },
    { "platform": "tiktok", "url": "https://www.tiktok.com/@shopify" },
    { "platform": "linkedin", "url": "https://www.linkedin.com/company/shopify" },
    { "platform": "pinterest", "url": "https://www.pinterest.com/shopify/" }
  ],
  "emailCount": 0,
  "phoneCount": 0,
  "socialCount": 7
}
```

#### Key output fields

- **`url`** — the source URL.
- **`emails`** — array of email addresses found on the page.
- **`phones`** — array of phone numbers from tel: links.
- **`socials`** — array of `{ platform, url }` for each social media profile found.
- **`emailCount` / `phoneCount` / `socialCount`** — quick counts for filtering.

***

### FAQ

**What social platforms are detected?**
Facebook, Instagram, Twitter/X, LinkedIn, YouTube, TikTok, GitHub, Pinterest, Threads, WhatsApp, and Telegram.

**How are emails extracted?**
From mailto: links and from email patterns in the page text. Common false-positive domains (analytics, CDN, hosting) are filtered out.

**How are phones extracted?**
From tel: links — these are explicit phone number markers in the HTML. This avoids false positives from numbers in CSS, IDs, and other non-phone contexts.

**Can I mix website URLs and social page URLs?**
Yes — all URLs are processed the same way. The actor fetches whatever page is at the URL and extracts contacts from it.

***

### ⚠️ Disclaimer

This Actor scrapes publicly available contact data from web pages. It does not access authenticated or private content. You are responsible for using the output in line with the target websites' terms, privacy laws (GDPR, CCPA, etc.), and any applicable regulations in your jurisdiction.

***

### SEO Keywords

lead enrichment, email scraper, phone extractor, social profile finder, business contact scraper, website email extractor, contact data enrichment, b2b lead enrichment, email phone social, url to contact, website contact scraper, lead enrichment api, email finder from url, social media profile scraper, contact information extractor, sales lead enrichment, outreach lead builder

# Actor input Schema

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

Website URLs to enrich. Mix websites and social pages — all are processed the same way.

## `maxItems` (type: `integer`):

Maximum URLs to process.

## `maxConcurrency` (type: `integer`):

How many URLs to fetch in parallel.

## `proxy` (type: `object`):

Apify proxy to use.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://example.com"
    },
    {
      "url": "https://shopify.com"
    }
  ],
  "maxItems": 1000,
  "maxConcurrency": 10,
  "proxy": {
    "useApifyProxy": 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://example.com"
        },
        {
            "url": "https://shopify.com"
        }
    ]
};

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

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,memo23/lead-enricher"
        }
    }
}
```

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/P1uJ4MZishxkKweHM/builds/emsu8HN8eoawEq4ea/openapi.json
