# AI Lead Enrichment — Firmographics, ICP Score & Outreach (`muhammadafzal/ai-lead-enrichment`) Actor

Enrich a list of companies, domains, or people with firmographics, role data, an ICP-fit score, and a personalized outreach line — powered by an LLM with live web search. Turn raw lists into sales-ready leads.

- **URL**: https://apify.com/muhammadafzal/ai-lead-enrichment.md
- **Developed by:** [Muhammad Afzal](https://apify.com/muhammadafzal) (community)
- **Categories:** AI, Lead generation, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $50.00 / 1,000 lead 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/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

## AI Lead Enrichment — Firmographics, ICP Score & Outreach

Turn a raw list of companies, domains, or people into **sales-ready leads**. Give the actor your list and it uses an LLM with **live web search** to fill in firmographics (industry, size, HQ, founded year), role/seniority, a concise summary, an **ICP-fit score** against your ideal customer profile, and a **personalized outreach opener** for each lead.

Export results, run via API, schedule and monitor runs, or integrate with your CRM and outbound tools.

---

### What you get per lead

| Field | Example |
|---|---|
| `company_name`, `domain` | Apify, apify.com |
| `industry`, `company_size`, `hq_location`, `founded_year` | Web scraping & automation, 51-200, Prague, 2015 |
| `company_description` | Full-stack web scraping and automation platform. |
| `person_name`, `role_title`, `seniority` | Jane Doe, VP of Sales, VP |
| `summary` | Mid-size scraping platform; strong fit for proxy cost savings. |
| `icp_fit_score` (0-100) + `icp_fit_reasons` | 85 — matches industry, headcount in range |
| `personalized_opener` | "Saw Apify scaled its proxy fleet—we cut similar costs 40% for data teams." |
| `citations`, `confidence` | source URLs, high/medium/low |

---

### Input

| Field | Type | Description |
|---|---|---|
| `leads` | array | Objects with any of `company`, `domain`, `fullName`, `role`, `location`, `notes`. |
| `icpDescription` | string | Your ideal customer profile — used to score each lead's fit. |
| `offerContext` | string | What you're selling — used to write the personalized opener. |
| `model` | string | OpenRouter model slug (default `openai/gpt-4o-mini`). |
| `useWebSearch` | boolean | Ground enrichment in live web results (recommended). |
| `webSearchResults` | integer | Web results per lead (1–10). |
| `maxLeads` | integer | Cap on leads per run (cost control). |

#### Example input

```json
{
  "leads": [
    { "company": "Apify", "domain": "apify.com" },
    { "fullName": "Jane Doe", "company": "Acme", "role": "VP Sales" }
  ],
  "icpDescription": "B2B SaaS, 50-1000 employees, data/AI teams",
  "offerContext": "Managed proxy + data pipeline that cuts scraping costs 40%",
  "model": "openai/gpt-4o-mini",
  "useWebSearch": true
}
````

***

### API key (required)

Enrichment runs through **[OpenRouter](https://openrouter.ai)** — set a single environment variable on the actor (Console → Settings → Environment variables, mark as **Secret**):

```
OPENROUTER_API_KEY = sk-or-...
```

Pick any model via `model`. You pay OpenRouter directly for model + web-search usage; the actor's PPE events cover the enrichment layer.

***

### Pricing (Pay Per Event)

| Event | When |
|---|---|
| `actor-start` | Once per run |
| `lead-enriched` | Each lead successfully enriched |

Leads that fail (missing key, model error) are **not charged** — but still appear in the dataset with an `error` so you know which ones to retry.

***

### Use cases

- **Outbound sales** — enrich a prospect list and get tailored openers in one run.
- **CRM hygiene** — fill missing firmographics on existing records.
- **Lead scoring / routing** — rank inbound leads by ICP fit before they hit a rep.
- **Agent pipelines** — call via the Apify MCP server to enrich leads on demand.

***

### Tips

- More input context (domain + role + notes) → better, higher-confidence enrichment.
- Write a specific `icpDescription` — vague profiles produce vague scores.
- For large lists, raise `maxLeads` and schedule runs; keep `webSearchResults` low to control cost.

# Actor input Schema

## `leads` (type: `array`):

The leads to enrich. Each item is an object with any of: company, domain, fullName, role, location, notes. Provide whatever you have — the more context, the better the enrichment. Example: \[{"company":"Apify","domain":"apify.com"},{"fullName":"Jane Doe","company":"Acme","role":"VP Sales"}].

## `icpDescription` (type: `string`):

Describe your ideal customer (industry, size, role, region, pain points). The actor scores each lead's fit against this and explains why. Leave empty to skip ICP scoring.

## `offerContext` (type: `string`):

What you're selling or why you're reaching out. Used to write a short, personalized outreach opener tailored to each lead. Leave empty to skip opener generation.

## `model` (type: `string`):

Internal: OpenRouter model used for enrichment. Managed by the actor; not user-editable.

## `useWebSearch` (type: `boolean`):

Ground enrichment in live web results via OpenRouter's web plugin. Strongly recommended for accurate firmographics. Turn off to rely on the model's built-in knowledge only (cheaper, less current).

## `webSearchResults` (type: `integer`):

How many web results to fetch per lead when web search is on (more = better data, higher cost).

## `maxLeads` (type: `integer`):

Safety cap on how many leads to enrich per run (cost control). Extra leads beyond this limit are ignored.

## Actor input object example

```json
{
  "leads": [
    {
      "company": "Apify",
      "domain": "apify.com"
    },
    {
      "company": "Vercel",
      "domain": "vercel.com"
    }
  ],
  "icpDescription": "B2B SaaS companies with 50-1000 employees that do web scraping, data extraction, or AI automation; decision makers in engineering or data roles.",
  "offerContext": "We provide a managed proxy and data-pipeline platform that cuts scraping infrastructure costs by 40%.",
  "model": "openai/gpt-4o-mini",
  "useWebSearch": true,
  "webSearchResults": 3,
  "maxLeads": 50
}
```

# Actor output Schema

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

Link to the dataset containing all enriched leads.

# 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 = {
    "leads": [
        {
            "company": "Apify",
            "domain": "apify.com"
        },
        {
            "company": "Vercel",
            "domain": "vercel.com"
        }
    ],
    "icpDescription": "B2B SaaS companies with 50-1000 employees that do web scraping, data extraction, or AI automation; decision makers in engineering or data roles.",
    "offerContext": "We provide a managed proxy and data-pipeline platform that cuts scraping infrastructure costs by 40%."
};

// Run the Actor and wait for it to finish
const run = await client.actor("muhammadafzal/ai-lead-enrichment").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 = {
    "leads": [
        {
            "company": "Apify",
            "domain": "apify.com",
        },
        {
            "company": "Vercel",
            "domain": "vercel.com",
        },
    ],
    "icpDescription": "B2B SaaS companies with 50-1000 employees that do web scraping, data extraction, or AI automation; decision makers in engineering or data roles.",
    "offerContext": "We provide a managed proxy and data-pipeline platform that cuts scraping infrastructure costs by 40%.",
}

# Run the Actor and wait for it to finish
run = client.actor("muhammadafzal/ai-lead-enrichment").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 '{
  "leads": [
    {
      "company": "Apify",
      "domain": "apify.com"
    },
    {
      "company": "Vercel",
      "domain": "vercel.com"
    }
  ],
  "icpDescription": "B2B SaaS companies with 50-1000 employees that do web scraping, data extraction, or AI automation; decision makers in engineering or data roles.",
  "offerContext": "We provide a managed proxy and data-pipeline platform that cuts scraping infrastructure costs by 40%."
}' |
apify call muhammadafzal/ai-lead-enrichment --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "AI Lead Enrichment — Firmographics, ICP Score & Outreach",
        "description": "Enrich a list of companies, domains, or people with firmographics, role data, an ICP-fit score, and a personalized outreach line — powered by an LLM with live web search. Turn raw lists into sales-ready leads.",
        "version": "1.0",
        "x-build-id": "GphrLrV1fAPURmwnC"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/muhammadafzal~ai-lead-enrichment/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-muhammadafzal-ai-lead-enrichment",
                "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/muhammadafzal~ai-lead-enrichment/runs": {
            "post": {
                "operationId": "runs-sync-muhammadafzal-ai-lead-enrichment",
                "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/muhammadafzal~ai-lead-enrichment/run-sync": {
            "post": {
                "operationId": "run-sync-muhammadafzal-ai-lead-enrichment",
                "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",
                "properties": {
                    "leads": {
                        "title": "Leads to Enrich",
                        "type": "array",
                        "description": "The leads to enrich. Each item is an object with any of: company, domain, fullName, role, location, notes. Provide whatever you have — the more context, the better the enrichment. Example: [{\"company\":\"Apify\",\"domain\":\"apify.com\"},{\"fullName\":\"Jane Doe\",\"company\":\"Acme\",\"role\":\"VP Sales\"}].",
                        "default": [
                            {
                                "company": "Apify",
                                "domain": "apify.com"
                            },
                            {
                                "company": "Vercel",
                                "domain": "vercel.com"
                            }
                        ]
                    },
                    "icpDescription": {
                        "title": "Ideal Customer Profile (ICP)",
                        "type": "string",
                        "description": "Describe your ideal customer (industry, size, role, region, pain points). The actor scores each lead's fit against this and explains why. Leave empty to skip ICP scoring.",
                        "default": "B2B SaaS companies with 50-1000 employees that do web scraping, data extraction, or AI automation; decision makers in engineering or data roles."
                    },
                    "offerContext": {
                        "title": "Your Offer / Outreach Context",
                        "type": "string",
                        "description": "What you're selling or why you're reaching out. Used to write a short, personalized outreach opener tailored to each lead. Leave empty to skip opener generation.",
                        "default": "We provide a managed proxy and data-pipeline platform that cuts scraping infrastructure costs by 40%."
                    },
                    "model": {
                        "title": "Model",
                        "type": "string",
                        "description": "Internal: OpenRouter model used for enrichment. Managed by the actor; not user-editable.",
                        "default": "openai/gpt-4o-mini"
                    },
                    "useWebSearch": {
                        "title": "Use Web Search",
                        "type": "boolean",
                        "description": "Ground enrichment in live web results via OpenRouter's web plugin. Strongly recommended for accurate firmographics. Turn off to rely on the model's built-in knowledge only (cheaper, less current).",
                        "default": true
                    },
                    "webSearchResults": {
                        "title": "Web Search Results",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "How many web results to fetch per lead when web search is on (more = better data, higher cost).",
                        "default": 3
                    },
                    "maxLeads": {
                        "title": "Max Leads",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Safety cap on how many leads to enrich per run (cost control). Extra leads beyond this limit are ignored.",
                        "default": 50
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
