# B2B Lead Finder & Contact Scraper: Emails & Phones (`laborious_rumor/b2b-lead-contact-tech-enricher`) Actor

Extract verified business emails, direct phone numbers, LinkedIn contacts, and 30+ technology stack signals from company domains at scale.

- **URL**: https://apify.com/laborious_rumor/b2b-lead-contact-tech-enricher.md
- **Developed by:** [Lakshay Papneja](https://apify.com/laborious_rumor) (community)
- **Categories:** Lead generation, Marketing, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 enriched b2b company leads

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

## B2B Lead, Decision-Maker Contact & Tech Stack Enricher (v2.0)

Transform any list of company URLs or domains into **verified, ready-to-contact B2B sales leads**. Built for outbound sales teams, cold email agencies, RevOps workflows, and AI SDR agents via the **Apify MCP Server**.

Unlike basic contact scrapers that only dump raw regex matches from a homepage, **B2B Lead, Decision-Maker Contact & Tech Stack Enricher** performs a multi-stage intelligence pass on every domain:

1. **Deep Internal Subpage Discovery**: Automatically locates and crawls `/contact`, `/about`, `/team`, `/leadership`, `/pricing`, and `/careers` subpages in parallel.
2. **Live DNS MX Record & Email Provider Verification**: Checks DNS MX records in real time to confirm the domain can receive email and identifies the exact mail gateway (`Google Workspace`, `Microsoft 365`, `Zoho Mail`, `ProtonMail`, `Mimecast`, `Proofpoint`).
3. **Executive & Decision-Maker Extraction**: Parses `Schema.org/Person` structured data, founder credits, and leadership bios to surface CEOs, Co-Founders, CTOs, and VPs.
4. **30+ Categorized Technology Stack Signals**: Detects Frameworks (`Next.js`, `React`, `Vue`), E-Commerce (`Shopify`, `WooCommerce`), CRM & Marketing (`HubSpot`, `Salesforce/Pardot`, `Marketo`, `Klaviyo`), Support (`Intercom`, `Zendesk`, `Drift`), Analytics (`GA4`, `Segment`, `PostHog`, `Mixpanel`), and Payments (`Stripe`, `Paddle`).
5. **Automated Lead Scoring (0–100)**: Scores every prospect based on verified emails, MX deliverability, LinkedIn presence, decision-makers found, and buying signals (`hasPricingPage`, `isHiring`).

***

### 🎯 Key Use Cases

- **Cold Email & Outbound SalesEnrichment**: Enrich domain lists from Apollo, Clay, Crunchbase, or LinkedIn with verified contact emails, phone numbers, and mail server providers.
- **Tech-Stack Targeting**: Filter leads by the exact software they use (e.g., pitch HubSpot agencies only to companies running HubSpot, or pitch Shopify apps to stores running Shopify + Klaviyo).
- **Hiring & Expansion Intent**: Identify companies actively hiring (`signals.isHiring: true`) with live pricing pages (`signals.hasPricingPage: true`).
- **AI SDR & MCP Agents**: Connect directly to Claude, Cursor, or LangChain via `mcp.apify.com` for autonomous B2B prospect research.

***

### ⚙️ Input Parameters

| Field | Type | Default | Description |
| :--- | :--- | :--- | :--- |
| `domains` | `array` | `["https://apify.com", "https://crawlee.dev"]` | List of company domains or URLs to enrich. |
| `scanContactPages` | `boolean` | `true` | Auto-discover and crawl `/contact`, `/about`, `/team`, and `/pricing` pages. |
| `maxSubpagesPerDomain` | `integer` | `5` | Max subpages to scan per company domain (0–20). |
| `verifyEmailMx` | `boolean` | `true` | Perform live DNS MX lookup to verify email deliverability and mail provider. |
| `extractDecisionMakers` | `boolean` | `true` | Extract executive names and roles (CEO, Founder, VP). |
| `excludeRoleEmails` | `boolean` | `true` | Exclude `noreply@`, `donotreply@`, `sentry@`, and placeholder addresses. |
| `minLeadScore` | `integer` | `0` | Filter out companies scoring below this threshold (0–100). |
| `maxConcurrency` | `integer` | `5` | Number of domains to enrich concurrently. |

***

### 📦 Sample Output (JSON)

```json
{
  "domain": "apify.com",
  "url": "https://apify.com",
  "companyName": "Apify",
  "tagline": "Apify: Full-stack web scraping and data extraction platform",
  "emails": [
    "hello@apify.com",
    "support@apify.com"
  ],
  "emailDeliverability": {
    "hasMx": true,
    "provider": "Google Workspace",
    "primaryMx": "aspmx.l.google.com"
  },
  "decisionMakers": [
    {
      "name": "Jan Curn",
      "role": "CEO & Co-Founder",
      "linkedin": null
    }
  ],
  "phones": [],
  "linkedin": "https://www.linkedin.com/company/apify",
  "twitter": "https://x.com/apify",
  "github": "https://github.com/apify",
  "youtube": "https://www.youtube.com/@apify",
  "instagram": null,
  "facebook": null,
  "techStack": [
    "Next.js",
    "React",
    "HubSpot",
    "Intercom",
    "Google Tag Manager",
    "Cloudflare"
  ],
  "techStackCategorized": [
    { "name": "Next.js", "category": "Framework" },
    { "name": "HubSpot", "category": "CRM & Marketing" },
    { "name": "Intercom", "category": "Customer Support" },
    { "name": "Cloudflare", "category": "Infrastructure" }
  ],
  "signals": {
    "hasPricingPage": true,
    "isHiring": true,
    "hasDeliverableMailServer": true,
    "emailProvider": "Google Workspace",
    "pagesScannedCount": 5
  },
  "leadScore": 90,
  "pagesScanned": [
    "https://apify.com",
    "https://apify.com/about",
    "https://apify.com/contact",
    "https://apify.com/pricing"
  ],
  "enrichedAt": "2026-10-28T10:20:00.000Z"
}
```

***

### 💰 Transparent Pay-Per-Event Pricing

You only pay for enriched company records delivered to your dataset — no wasted browser compute costs.

***

### 📖 How to Use (Step-by-Step)

1. **Enter Target Domains**: Input a list of company domains (e.g. `apify.com`, `stripe.com`, `linear.app`) or paste a list of URLs.
2. **Configure Verification**: Keep `verifyEmailMx` enabled to test mail servers and identify Google Workspace, Microsoft 365, or Zoho.
3. **Select Subpage Depth**: Set `maxSubpagesPerDomain` (recommended: 5) to auto-crawl `/contact`, `/about`, and `/team`.
4. **Click Start**: Run the actor locally or on Apify Cloud.
5. **Export Your Leads**: Download verified decision-maker emails, phones, and tech stack records as CSV, JSON, or Excel.

***

### 🏆 Why Use This Actor vs. Apollo or Clearbit?

| Feature | B2B Lead & Tech Enricher | Apollo / Clearbit |
| :--- | :--- | :--- |
| **Pricing** | **$0.005 / lead** (Pay-Per-Event) | $99 - $500 / month subscriptions |
| **Real-time DNS MX Check** | ✅ Yes (Live mail exchange query) | ❌ Database cached (often stale) |
| **30+ Tech Stack Signals** | ✅ Yes (Analyzes live website code) | ⚠️ Generic signatures |
| **Direct Phone & Socials** | ✅ Yes (LinkedIn, X, YouTube, Phone) | ✅ Yes |
| **API & MCP Agent Ready** | ✅ Yes (`mcp.apify.com`) | ❌ Custom webhook setup |

***

### ❓ Frequently Asked Questions (FAQ)

#### What does the MX verification check?

The actor performs a live DNS query against the target domain to verify active MX records and identify the mail provider (e.g. Google Workspace, Microsoft 365, Mimecast, Proofpoint). This prevents email bounces.

#### Can I run this with an AI Agent or Claude?

Yes! Connect directly using the official Apify MCP Server:
`https://mcp.apify.com/?tools=laborious_rumor/b2b-lead-contact-tech-enricher`

#### How many domains can I enrich in one run?

You can pass from 1 to 5,000 domains. Concurrency defaults to 5 and can be increased up to 25 for fast bulk processing.

#### What export formats are supported?

You can export results as JSON, CSV, XML, Excel (.xlsx), or pipe directly into Google Sheets, Airtable, or Make/Zapier webhooks.

# Actor input Schema

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

List of company URLs or domains to enrich (e.g. https://apify.com, crawlee.dev).

## `scanContactPages` (type: `boolean`):

Automatically discover and scrape /contact, /about, /team, /leadership, and /pricing subpages on each domain.

## `maxSubpagesPerDomain` (type: `integer`):

Maximum number of internal contact/about/team pages to crawl per company domain.

## `verifyEmailMx` (type: `boolean`):

Perform live DNS MX record lookup on extracted email domains to verify they can receive email and identify their email provider (Google Workspace, Microsoft 365, etc.).

## `extractDecisionMakers` (type: `boolean`):

Extract leadership names and job titles (CEO, Founder, CTO, VP, Head of Sales/Marketing) from Schema.org Person data and team sections.

## `excludeRoleEmails` (type: `boolean`):

Filter out noreply@, no-reply@, donotreply@, example@, and sentry@ addresses.

## `minLeadScore` (type: `integer`):

Only output companies that meet or exceed this lead quality score.

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

Number of company domains to enrich in parallel.

## Actor input object example

```json
{
  "domains": [
    "https://apify.com",
    "https://crawlee.dev"
  ],
  "scanContactPages": true,
  "maxSubpagesPerDomain": 5,
  "verifyEmailMx": true,
  "extractDecisionMakers": true,
  "excludeRoleEmails": true,
  "minLeadScore": 0,
  "maxConcurrency": 5
}
```

# 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 = {
    "domains": [
        "https://apify.com",
        "https://crawlee.dev"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("laborious_rumor/b2b-lead-contact-tech-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": [
        "https://apify.com",
        "https://crawlee.dev",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("laborious_rumor/b2b-lead-contact-tech-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": [
    "https://apify.com",
    "https://crawlee.dev"
  ]
}' |
apify call laborious_rumor/b2b-lead-contact-tech-enricher --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,laborious_rumor/b2b-lead-contact-tech-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/5RZX2rrWxBYmdoSq7/builds/cNcLBiuhhfkWlIwHY/openapi.json
