# Lead Enrichment — Enrich Leads with Emails, Phones & Tech (`nexgendata/lead-list-enricher`) Actor

Lead enrichment from any company website: upload domains or company URLs to enrich leads with emails, phone numbers, social profiles and tech stack. Bulk domain enrichment for sales teams — a Clearbit & ZoomInfo alternative. No API key. Pay per record.

- **URL**: https://apify.com/nexgendata/lead-list-enricher.md
- **Developed by:** [NexGenData](https://apify.com/nexgendata) (community)
- **Categories:** Lead generation, Business, Marketing
- **Features:** Limited permissions
- **Stats:** 65 total users, 5 monthly users, 98.6% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $20.00 / 1,000 domain enricheds

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 Enrichment — Enrich Leads with Emails, Phones & Tech

Lead Enrichment is a NexGenData tool on Apify that returns emails, phone numbers, social profiles and tech stack per company from each company's own website.

**Lead enrichment** from company websites: give it domains and it will **enrich leads with emails**, phones, socials and the tech stack for each.

Point it at a list of domains and get back emails, phones, socials and the tech stack for each — a full enrichment pass for your sales team.

> Output is a prospect list for your sales team, assembled from public web and business sources. Use it in line with applicable outreach and privacy law.

### 📊 Sample Output

![2 real rows delivered by Lead List Enricher — Emails, Phones & Tech from a Domain API — run lu6Ij85AUiwhZciQ0 on build 0.0.25](https://api.apify.com/v2/key-value-stores/8gLgXMBveEI1tTz1z/records/lead-list-enricher-sample)

| `domain` | `url` | `status` | `company` | `phones` | `enriched_at` |
|---|---|---|---|---|---|
| apple.com | https://apple.com | ok | Apple | \['\[phone on record]', '\[phone on record]', '\[phone on record]', '\[pho… | 2026-09-25T00:05:48+00:00 |
| stripe.com | https://stripe.com | ok | Stripe | \['\[phone on record]'] | 2026-09-25T00:05:49+00:00 |

Real rows from run `lu6Ij85AUiwhZciQ0` on build 0.0.25 (2026-09-25), unedited apart from masked emails/phones and shortened long text; fields the source does not publish are empty.

### ⚙️ Sample inputs

This is the Store example input — the same input Apify's automated check runs — so it is proven to return rows on the current build. Paste it into the input form, or send it through the API, CLI or a schedule:

```json
{
  "domains": [
    "apple.com",
    "stripe.com"
  ],
  "maxContactsPerDomain": 5,
  "crawlContactPages": true
}
```

### 🔧 Input reference

| Field | Type | Default | What it does |
|---|---|---|---|
| `domains` (required) | array | `["apple.com", "stripe.com"]` | List of domains (e.g. \['apple.com','stripe.com']) — actor returns one enriched record per domain |
| `maxContactsPerDomain` | integer | `5` | Cap on contacts returned per domain (default 5) |
| `crawlContactPages` | boolean | `true` | Visit additional pages for richer enrichment (slower but more accurate) |
| `notionConnector` | string |  | Optional. Connect your Notion workspace and the enriched leads are also written as a Notion page in the same run — the Actor never sees your Notion credentials. Authorize a Notion… |
| `notionParentId` | string |  | Optional Notion page ID to create the page under. Blank = a private page in your workspace. |

### 🧾 JSON sample record

One real record from run `lu6Ij85AUiwhZciQ0` (emails/phones masked, long text shortened):

```json
{
  "domain": "apple.com",
  "url": "https://apple.com",
  "status": "ok",
  "company": "Apple",
  "emails": [],
  "phones": [
    "[phone on record]",
    "[phone on record]",
    "[phone on record]",
    "[phone on record]"
  ],
  "socials": {
    "linkedin": [
      "linkedin.com/company/apple"
    ],
    "twitter": [
      "twitter.com/Apple"
    ],
    "facebook": [
      "facebook.com/Apple"
    ],
    "youtube": [
      "youtube.com/user/Apple"
    ]
  },
  "technologies": [],
  "server": "Apple",
  "contacts_count": 4,
  "enriched_at": "2026-09-25T00:05:48+00:00"
}
```

### 💰 Pricing

| Event | Price (USD) | When it is charged |
|---|---|---|
| Actor Start (`apify-actor-start`) | $0.005 | Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). |
| Domain enriched (`domain-enriched`) | $0.02 | Charged for each domain successfully enriched with contact data |
| Add-on: Phone verification (`addon-phone-verify`) | $0.03 | Verify each phone number found via carrier lookup. Returns line type, carrier, and active/disconnected status. Fires per phone successfully… |

Pay-per-event: you pay only for what the run delivers. A run that delivers nothing bills no result events (only the actor-start event, when the actor defines one). Example: a run that delivers 100 results costs 100 × $0.02 = $2.00 plus the start fee.

### 📊 What you get

Clean JSON, one record per domain enriched (11 fields):

- `domain` — Domain
- `url` — Url
- `status` — Status
- `company` — Company
- `emails` — Emails
- `phones` — Phones
- `socials` — Socials
- `technologies` — Technologies
- `server` — Server
- `contacts_count` — Contacts count
- `enriched_at` — Enrichment timestamp (UTC)

Data comes from the domain's own public pages: the homepage plus `/contact`, `/contact-us`, `/about` and `/about-us` when "Crawl contact pages" is on.

### 💵 Pricing

- **Actor start:** $0.005 per event (one event per GB of run memory, minimum one)
- **Domain enriched:** **$0.02** per record — about **50 records per $1**

One charge per record delivered, no exceptions:

- A domain that does not answer (DNS failure, timeout, 4xx/5xx) produces **no record and no charge**. It is named in the run status message instead.
- If the run hits its time limit, the domains it never reached are **not charged**.
- If nothing at all can be fetched, the run **fails** with a status message naming the cause rather than finishing green and empty.

**About `addon-phone-verify` ($0.03).** This event appears on the pricing list but the Actor does **not** perform carrier lookups, so **it is never charged**. Phone numbers in the `phones` field are extracted from the page text and format-checked — they are not verified as active, and no line type or carrier is returned. For phone verification, use a dedicated verification Actor.

Email addresses are likewise extracted from public pages. They are not SMTP-verified.

### 🤖 Use with AI agents

Point Claude, the OpenAI Agents SDK, an n8n flow or any MCP-aware client at it and run prospecting on demand.

**Agentic payments (x402):** Supports agentic payment via x402 — agents can call this actor with USDC, no API key required.

### 📬 Optional Notion delivery

Connect a Notion MCP connector and the enriched rows are also written to a Notion page in the same run. The Actor never sees your Notion credentials, and a Notion failure never fails the run or changes what you are charged.

### Run it on a schedule

Monthly is a realistic cadence, because company websites change their contact pages and listed tools slowly. Schedule the same domain list each month to catch new emails, phone numbers, social profiles and technologies, or run it whenever a new batch of domains lands in your list. Each run returns a fresh record per domain, with updated values rather than a running history. The actor has no new-only mode, so compare `enriched_at` and the contact fields with your last run to see what changed. Send each run's results onward with a webhook, Google Sheets, Zapier, Make or the Apify API.

Video guides from Apify: [Schedule your Actor](https://www.youtube.com/watch?v=1jI7WcVQmwM) · [Integrations](https://www.youtube.com/watch?v=bNACk1_S_6w)

### FAQ

#### Why use this instead of visiting each company's own website?

The data comes from each domain's own public pages, so you could collect it by hand. This actor does it in bulk: give it a list of domains and get one clean JSON record per domain with emails, phones, social profiles, tech stack and a contact count. It needs no API key, you pay per domain enriched, and it can also write the results to a Notion page in the same run.

#### What does a typical run cost?

You pay per result, not for run time: $0.02 for each row in the results, plus $0.005 per run start (charged per GB of run memory, minimum one). A run that returns 2 domains enriched costs about $0.04. Optional extras are charged only when you turn them on: phone-verify add-on $0.03. Live prices are always shown in the Pricing tab.

#### How do I find emails and phone numbers for a list of company domains?

Put the domains in `domains`, for example `apple.com` and `stripe.com`. Keep `crawlContactPages` on so the actor also visits `/contact`, `/contact-us`, `/about` and `/about-us`, and set `maxContactsPerDomain` to cap contacts per domain. Some domains publish no email address at all, in which case `emails` comes back empty.

#### Are the emails and phone numbers verified?

No. Emails are taken from public pages and are not SMTP-verified. Phone numbers are taken from page text and format-checked only. They are not checked as active, and no carrier or line type is returned. A phone-verification event appears on the pricing list, but the actor does not do carrier lookups and never charges it.

#### What happens when a domain does not respond?

A domain that fails (DNS failure, timeout, or a 4xx or 5xx error) gives no record and no charge, and it is named in the run status message. If the run hits its time limit, the domains it never reached are not charged. If nothing at all can be fetched, the run fails with a message naming the cause.

### Related actors

- [Email Verification API — Bulk Syntax, MX & Disposable Checks](https://apify.com/nexgendata/email-verification-tool) — check the emails you found before you send to them.
- [Phone Number Validation API — Format, Carrier & Line Type](https://apify.com/nexgendata/phone-number-validator) — get carrier and line type for the phone numbers found.
- [Company Enrichment API — Domain to Firmographics & Tech](https://apify.com/nexgendata/company-enrichment-tool) — add firmographics to the same domain list.
- [Business Email Lookup — Email Finder by Name and Domain](https://apify.com/nexgendata/person-business-email-finder) — find a named person's email at a domain.
- [Leads to Notion CRM — Verified Lead Delivery API](https://apify.com/nexgendata/leads-to-notion-crm) — push finished leads into a Notion CRM.

### Related actors from NexGenData

If this actor is useful, these related ones from the same publisher may cover your next step:

- **[Person Enrichment API — Name & Company to Public Profile](https://apify.com/nexgendata/person-enrichment-lookup)** — A person's public profile from their company's own site, from name + company.
- **[Phone Number Validation API — Format, Carrier & Line Type](https://apify.com/nexgendata/phone-number-validator)** — Phone number check: format, line type, carrier and country.
- **[Sales Intelligence MCP — B2B Leads & Enrichment for Agents](https://apify.com/nexgendata/sales-intelligence-mcp)** — B2B lead finding, enrichment, email discovery and funding tracking as AI-agent tools.
- **[Company LEI Lookup — Company Data, SEC Form D & Tech Stack](https://apify.com/nexgendata/company-data-aggregator)** — A company's legal identity (GLEIF LEI), SEC Form D raises and domain/tech profile.
- **[Leads to Notion CRM — Verified Lead Delivery API](https://apify.com/nexgendata/leads-to-notion-crm)** — Verified business contacts for a list of domains, delivered as a Notion CRM.

# Actor input Schema

## `domains` (type: `array`):

Company domains to run lead enrichment on (enrich leads with emails, phones, tech). List of domains (e.g. \['apple.com','stripe.com']) — actor returns one enriched record per domain

## `maxContactsPerDomain` (type: `integer`):

Cap on contacts returned per domain (default 5)

## `crawlContactPages` (type: `boolean`):

Visit additional pages for richer enrichment (slower but more accurate)

## `notionConnector` (type: `string`):

Optional. Connect your Notion workspace and the enriched leads are also written as a Notion page in the same run — the Actor never sees your Notion credentials. Authorize a Notion MCP connector in Apify Console → Settings → API & Integrations, then select it here.

## `notionParentId` (type: `string`):

Optional Notion page ID to create the page under. Blank = a private page in your workspace.

## Actor input object example

```json
{
  "domains": [
    "apple.com",
    "stripe.com"
  ],
  "maxContactsPerDomain": 5,
  "crawlContactPages": true
}
```

# Actor output Schema

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

Default dataset of Lead List Enricher records (11 fields per row: domain, url, status, company, emails, phones, socials, technologies, server, contacts_count, enriched_at).

# 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 = {
    "domains": [
        "apple.com",
        "stripe.com"
    ],
    "maxContactsPerDomain": 5,
    "crawlContactPages": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("nexgendata/lead-list-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 = {
    "domains": [
        "apple.com",
        "stripe.com",
    ],
    "maxContactsPerDomain": 5,
    "crawlContactPages": True,
}

# Run the Actor and wait for it to finish
run = client.actor("nexgendata/lead-list-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 '{
  "domains": [
    "apple.com",
    "stripe.com"
  ],
  "maxContactsPerDomain": 5,
  "crawlContactPages": true
}' |
apify call nexgendata/lead-list-enricher --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nexgendata/lead-list-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/KYd910fyOnKVzNq0a/builds/yCZVKi8vFBcKn49oG/openapi.json
