# Ultimate AI B2B Company & Contact Enricher (`cerridwen/company-enricher`) Actor

Extract complete B2B company profiles, emails, phones, social links, DNS deliverability setup, and a lightweight tech stack from any list of domains. Ultra-fast, low compute costs, and Cloudflare bypass.

- **URL**: https://apify.com/cerridwen/company-enricher.md
- **Developed by:** [Cerridwen](https://apify.com/cerridwen) (community)
- **Categories:** Lead generation, Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$25.00 / 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

## Ultimate AI B2B Company & Contact Enricher

An all-in-one company intelligence and contact harvesting tool. Turn a raw list of domain names or website URLs into complete B2B company profiles, emails, phones, social links, DNS deliverability status, and a lightweight tech stack.

Unlike heavy, browser-based alternatives, this actor runs on an ultra-lightweight async architecture (`curl_cffi` and `asyncio`), allowing you to enrich thousands of domains in minutes at a fraction of the compute costs.

---

### 🌟 Key Features

1. **General Metadata & Branding:** Extracts company title, description, logo, site language, and inferred country.
2. **Contact Harvesting:** Extracts emails and phone numbers. Supports **Cloudflare email protection decoding** to retrieve obfuscated emails.
3. **Social Profile Finder:** Automatically discovers and cleans profiles for LinkedIn, Twitter/X, Facebook, Instagram, YouTube, GitHub, and TikTok.
4. **Lightweight Tech Stack:** Detects key marketing, analytics, CRM, payment, and hosting technologies using a lightweight Wappalyzer integration.
5. **DNS & Deliverability Diagnostics:** Resolves MX records, identifies the email hosting provider (e.g., Google Workspace, Microsoft 365), and parses SPF/DMARC alignment.
6. **Anti-Bot & Concurrency:** Employs Chrome/Firefox TLS fingerprint impersonation to bypass Cloudflare/Akamai bot detection natively.
7. **AI-Powered Validation & Fallback Insights:** Automatically sanitizes raw scraped contact lists (removes placeholders like email@domain.com or third-party support addresses), generates a 1-sentence business summary, categorizes the company niche (SaaS, E-commerce, Agency etc.), and extracts legal name, founders, founded year, employee count, and physical addresses using Gemini 2.5 Flash.

---

### ⚙️ Input Parameters

- `domains` (Array of Strings, Required): List of target domains to enrich (e.g., `stripe.com`, `apify.com`).
- `maxPagesPerDomain` (Integer, Default: `5`): Max pages to check per domain (e.g., homepage, contact, about, careers, pricing, terms). Maximum value: `15`. Ignored if `unlimitedSubpages` is enabled.
- `unlimitedSubpages` (Boolean, Default: `false`): If enabled, crawls and parses *all* discovered company contact and legal subpages, bypassing the `maxPagesPerDomain` limit.
- `maxConcurrency` (Integer, Default: `10`): Number of domains to process concurrently.
- `checkDeliverability` (Boolean, Default: `true`): Resolve DNS records (MX, SPF, DMARC) for deliverability insights.
- `detectTechStack` (Boolean, Default: `true`): Scan HTML and cookies for technology fingerprints.
- `openrouterApiKey` (String, Optional): Custom OpenRouter API key. If omitted, falls back to the actor's default system key.

---

### 📊 Output Schema

Below is an example result from enriching `apify.com`:

```json
{
  "domain": "apify.com",
  "companyName": "Apify: The largest marketplace of trusted tools for AI",
  "companyDescription": "Thousands of tools to automate your business. Get real-time web data, track competitors, generate leads, and integrate your apps and AI agents.",
  "logo": "https://apify.com/img/og/landing.png",
  "language": "en",
  "country": null,
  "emails": [
    "hello@apify.com"
  ],
  "phones": [
    "04788290",
    "373153700"
  ],
  "socialLinks": {
    "linkedin": "https://www.linkedin.com/company/apify",
    "twitter": "https://x.com/apify",
    "facebook": null,
    "instagram": null,
    "youtube": "https://www.youtube.com/apify",
    "github": "https://github.com/apify",
    "tiktok": "https://www.tiktok.com/@apifytech"
  },
  "techStack": [
    "Amazon Web Services",
    "Bootstrap",
    "Google Analytics",
    "Google Tag Manager",
    "Google Workspace",
    "HubSpot",
    "Mailgun",
    "Mixpanel",
    "Vercel",
    "YouTube"
  ],
  "techStackCount": 10,
  "deliverability": {
    "hasMx": true,
    "mxRecords": [
      "aspmx.l.google.com",
      "alt1.aspmx.l.google.com"
    ],
    "emailProvider": "Google Workspace",
    "hasSpf": true,
    "spfRecord": "v=spf1 a mx include:_spf.google.com include:mailgun.org -all",
    "hasDmarc": true,
    "dmarcRecord": "v=DMARC1; p=reject; sp=reject; pct=100; rua=mailto:dmarc-reports@apify.com",
    "dmarcPolicy": "reject"
  },
  "aiSummary": "Apify is a cloud platform for web scraping, data extraction, and web automation.",
  "aiCategory": "SaaS / DevTools",
  "scannedAt": "2026-06-18T06:45:18.601940+00:00"
}
````

***

### ⚡ Pricing & Margin Advantage

This actor is powered by a high-performance, fully asynchronous architecture (`curl_cffi` and `asyncio`) combined with Gemini 2.5 Flash for data hygiene and intelligence.

- Recommended pricing: **$25 per 1,000 results** (Full AI Mode)
- Estimated cost per 1K (Compute + Gemini API): **~$6.36**
- Net profit per 1K: **~$18.64**
- Profit Margin: **~74.5%**

Since pricing is set to **Pay-per-result**, your revenue scales 1:1 with your costs. There is zero risk of costs outrunning revenue when users run large batches of 1,000+ domains.

***

### 🔌 Integrations & Automations

This actor integrates natively with Apify's platform-level integrations, allowing you to feed enriched company profiles and leads directly into your existing workflow:

- **Clay:** Sync and enrich B2B leads inside your Clay tables automatically by triggering this actor for your domain lists.
- **Zapier & Make (Integromat):** Connect with 6,000+ apps. Instantly sync enriched profiles to CRMs like HubSpot, Salesforce, Pipedrive, or close.com.
- **Google Sheets & GDrive:** Automatically export results into Google Sheets or CSV files on Google Drive when runs complete.
- **Webhooks / API:** Send POST webhooks or query dataset endpoints programmatically to feed enriched B2B data into your private databases or apps.

***

### 🗺️ Google Maps Lead Generation Workflow

A very popular use-case for this actor is extracting B2B emails and social profiles for businesses scraped from Google Maps.

Here is how you can set up a fully automated pipeline:

1. Run **Google Maps Scraper** (e.g., `apify/google-maps-scraper`) to gather local business leads.
2. In the **Integrations** tab of the Google Maps Scraper, select **Run another Actor**.
3. Choose this actor (**Ultimate B2B Company & Contact Enricher**) and configure it to read the `website` field from the Google Maps output dataset.
4. Save the integration. Now, every time you scrape Google Maps, our actor will automatically run in the background to enrich those leads with direct emails, phones, social handles, and technical details.

# Actor input Schema

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

List of company domains to enrich (e.g. stripe.com). Max 100 per run suggested.

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

Maximum number of pages to crawl per domain to search for contact info. Standard pages checked: homepage, contact, about, team, careers, privacy, terms.

## `unlimitedSubpages` (type: `boolean`):

If enabled, scans all discovered contact, about, legal, and career pages without any maximum limit (ignores the Max Pages per Domain setting).

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

Maximum number of domains to enrich concurrently.

## `checkDeliverability` (type: `boolean`):

Resolve DNS records to find MX hosts, identify email provider, and verify SPF/DMARC configurations.

## `detectTechStack` (type: `boolean`):

Analyze HTML headers and cookies using lightweight rules to identify key marketing, sales, and infrastructure technologies.

## `openrouterApiKey` (type: `string`):

Your OpenRouter API key. If left blank, it will fall back to the configured system key.

## Actor input object example

```json
{
  "domains": [
    "stripe.com",
    "github.com",
    "apify.com"
  ],
  "maxPagesPerDomain": 5,
  "unlimitedSubpages": false,
  "maxConcurrency": 10,
  "checkDeliverability": true,
  "detectTechStack": true
}
```

# Actor output Schema

## `defaultDataset` (type: `string`):

The primary dataset containing enriched company profiles with contact details, social links, deliverability diagnostics, tech stack, and AI categorization.

## `OUTPUT` (type: `string`):

Raw JSON array containing all enriched domain profiles.

# 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": [
        "stripe.com",
        "github.com",
        "apify.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("cerridwen/company-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": [
        "stripe.com",
        "github.com",
        "apify.com",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("cerridwen/company-enricher").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 '{
  "domains": [
    "stripe.com",
    "github.com",
    "apify.com"
  ]
}' |
apify call cerridwen/company-enricher --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Ultimate AI B2B Company & Contact Enricher",
        "description": "Extract complete B2B company profiles, emails, phones, social links, DNS deliverability setup, and a lightweight tech stack from any list of domains. Ultra-fast, low compute costs, and Cloudflare bypass.",
        "version": "1.0",
        "x-build-id": "Vwau0eO6hTTO74ObW"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/cerridwen~company-enricher/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-cerridwen-company-enricher",
                "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/cerridwen~company-enricher/runs": {
            "post": {
                "operationId": "runs-sync-cerridwen-company-enricher",
                "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/cerridwen~company-enricher/run-sync": {
            "post": {
                "operationId": "run-sync-cerridwen-company-enricher",
                "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": [
                    "domains"
                ],
                "properties": {
                    "domains": {
                        "title": "Domains to Enrich",
                        "type": "array",
                        "description": "List of company domains to enrich (e.g. stripe.com). Max 100 per run suggested.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxPagesPerDomain": {
                        "title": "Max Pages per Domain",
                        "minimum": 1,
                        "maximum": 15,
                        "type": "integer",
                        "description": "Maximum number of pages to crawl per domain to search for contact info. Standard pages checked: homepage, contact, about, team, careers, privacy, terms.",
                        "default": 5
                    },
                    "unlimitedSubpages": {
                        "title": "Unlimited Subpages",
                        "type": "boolean",
                        "description": "If enabled, scans all discovered contact, about, legal, and career pages without any maximum limit (ignores the Max Pages per Domain setting).",
                        "default": false
                    },
                    "maxConcurrency": {
                        "title": "Max Concurrency",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Maximum number of domains to enrich concurrently.",
                        "default": 10
                    },
                    "checkDeliverability": {
                        "title": "Check Deliverability & MX",
                        "type": "boolean",
                        "description": "Resolve DNS records to find MX hosts, identify email provider, and verify SPF/DMARC configurations.",
                        "default": true
                    },
                    "detectTechStack": {
                        "title": "Detect Tech Stack",
                        "type": "boolean",
                        "description": "Analyze HTML headers and cookies using lightweight rules to identify key marketing, sales, and infrastructure technologies.",
                        "default": true
                    },
                    "openrouterApiKey": {
                        "title": "OpenRouter API Key",
                        "type": "string",
                        "description": "Your OpenRouter API key. If left blank, it will fall back to the configured system key."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
