# Lead Enrichment & Scoring - Email/Domain to ICP Fit (`renzomacar/lead-enrichment`) Actor

Give it an email, a domain or a person's name and get an enriched lead with a 0-100 fit score, a Hot/Warm/Cold tier and the reasons behind it. Optional ICP filters (target industries, minimum employee band) rank an inbound list before sales touches it.

- **URL**: https://apify.com/renzomacar/lead-enrichment.md
- **Developed by:** [Renzo Madueno](https://apify.com/renzomacar) (community)
- **Categories:** Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $20.00 / 1,000 enriched & scored 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## Lead Enrichment & Scoring — Email or Domain to ICP-Fit Score

Turn a raw list of **leads** — emails, domains, or names + companies — into **enriched, scored rows** ready to prioritize and route. Each lead gets firmographics, tech stack, a contact, **and a 0–100 lead score with a Hot/Warm/Cold tier and the reasons behind it** — read **live from the company's own website**, not a stale database.

Unlike database tools (Apollo, Clay, ZoomInfo) that serve **cached records**, this Actor enriches **in real time** and **scores each lead against your ICP** (target industries + minimum size), so your reps work the hottest leads first. Every row is confidence-scored.

⭐ **Using it and it works? [Leave a 30-second review](https://apify.com/renzomacar/lead-enrichment/reviews)** — and tell me what signal to add next via the **Issues** tab.

### What you get

One scored, CRM-ready row per lead:

| Column | Example |
|---|---|
| `leadScore` + `leadTier` | 82 · **Hot** |
| `fitReasons` | \["industry known", "decision-maker found", "matches target industry"] |
| `companyName`, `domain`, `industry` | "Stripe" · stripe.com · "Financial Services & Fintech" |
| `employeeBand`, `revenueBand`, `country` | "1001-5000" · "$100M-$500M" · "United States" |
| `contactName`, `contactTitle`, `contactEmail` | "Jane Smith" · "VP Sales" · jane@… |
| `roleEmail` | "sales@company.com" |
| `techStack` | "HubSpot, Shopify, Google Analytics" |
| `domainHasMx`, `mxProvider` | true · "Google Workspace" |
| `confidenceScore` | 0–1 |

### How the lead score works

The score rewards **firmographic completeness + reachability + ICP fit**:

- **Data signals** — industry, company size, tech stack, valid mail server.
- **Reachability** — a role email, a decision-maker, a direct contact email, or a known email pattern.
- **ICP fit** — set `targetIndustries` and/or `minEmployeeBand` and leads that match are boosted; leads that don't are penalized.

`leadTier`: **Hot** (≥70), **Warm** (40–69), **Cold** (<40). Every score ships with `fitReasons` so it's never a black box.

### How do I score my leads?

1. Paste your **leads** — one per line. Any format works: `jane@acme.com`, `acme.com`, or `Jane Smith, acme.com`.
2. (Optional) Set your **ICP**: `targetIndustries` (e.g. "SaaS", "Fintech") and `minEmployeeBand`.
3. Run it — one scored row per lead, sorted-ready for your CRM, CSV, or sequencer.

```json
{ "leads": ["patrick@stripe.com", "hubspot.com", "Jane Smith, acme.com"], "targetIndustries": ["SaaS", "Fintech"], "minEmployeeBand": "51-200" }
```

### Output example

```json
{
  "input": "hubspot.com",
  "companyName": "HubSpot",
  "industry": "Software & SaaS",
  "employeeBand": "5000+",
  "revenueBand": "$500M+",
  "contactName": "Yamini Rangan",
  "contactTitle": "Chief Executive Officer",
  "roleEmail": "sales@hubspot.com",
  "techStack": "HubSpot, Cloudflare, Google Analytics",
  "domainHasMx": true,
  "leadScore": 78,
  "leadTier": "Hot",
  "fitReasons": ["industry known", "size known", "role email found", "matches target industry"],
  "confidenceScore": 0.65
}
```

### Use cases

- **Lead scoring & prioritization** — work Hot leads first; skip Cold.
- **Inbound routing** — route by tier, industry, and size to the right rep.
- **List cleaning & ICP filtering** — score a raw list and keep only ICP-fit leads.
- **CRM enrichment** — append firmographics + contact + score to your records.
- **Sequencer prep** — enrich + score before pushing to your outreach tool.

### Pricing

Pay-per-result — no subscription, no seat license:

| Event | Price |
|---|---|
| Actor start | $0.01 |
| Enriched & scored lead (above your confidence threshold) | $0.02 |

**You only pay for substantive leads above `minConfidence`.** 1,000 leads that resolve 700 substantive rows costs about **$0.01 + 700 × $0.02 ≈ $14** — versus a per-seat sales-intelligence license.

### Lead Enrichment vs the alternatives

| | This Actor | Apollo / Clay / ZoomInfo | Generic scraper |
|---|---|---|---|
| Live crawl (not stale DB) | ✅ | ❌ cached | ✅ |
| Lead score + tier + reasons | ✅ | partial | ❌ |
| ICP fit (industry + size) | ✅ | ✅ | ❌ |
| Firmographics + tech stack | ✅ | ✅ | ❌ |
| Confidence score per row | ✅ | ❌ | ❌ |
| No API key / no seat · pay per result | ✅ | ❌ | varies |

### FAQ

**How is the score calculated?** From data completeness, reachability, and ICP match — every score includes `fitReasons`. It's a transparent routing signal, not a black-box grade.

**Do I need an API key?** No. It runs on Apify and exports anywhere.

**What if I only have emails (or only domains)?** All work. Emails and names add a contact; domains alone still score on firmographics + reachability.

**Is this compliant to use?** It reads only publicly published business information from a company's own website. You are responsible for lawful use under your jurisdiction.

### Other Actors by this author

- **[Company Enrichment API](https://apify.com/renzomacar/company-enrichment)** — full nested company profile.
- **[CRM Enrichment](https://apify.com/renzomacar/crm-enrichment)** — flat, CRM-ready firmographics.
- **[People Enrichment](https://apify.com/renzomacar/people-enrichment)** — name + company → title, seniority & email.
- See all my [Actors](https://apify.com/renzomacar).

***

Built by [Renzo Madueño](https://apify.com/renzomacar). Found a bug or want a signal added? Open an **Issue** — I read and respond to every one.

# Actor input Schema

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

One lead per line. Any format: an email (jane@acme.com), a domain (acme.com), or a name + company (Jane Smith, acme.com).

## `targetIndustries` (type: `array`):

Boost leads whose industry matches these (e.g. "SaaS", "Fintech", "E-commerce"). Leave empty to score by data completeness only.

## `minEmployeeBand` (type: `string`):

Boost leads at/above this size band; penalize below.

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

Pages crawled per company. More = richer data, slightly slower.

## `minConfidence` (type: `number`):

You only pay for results: leads below this confidence (or without substantive data) are returned but NOT charged.

## Actor input object example

```json
{
  "leads": [
    "patrick@stripe.com",
    "hubspot.com",
    "Amir Salihefendic, doist.com"
  ],
  "targetIndustries": [],
  "maxPagesPerDomain": 5,
  "minConfidence": 0.3
}
```

# Actor output Schema

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

One row per lead with its 0-100 ICP fit score and Hot/Warm/Cold tier.

# 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": [
        "patrick@stripe.com",
        "hubspot.com",
        "Amir Salihefendic, doist.com"
    ],
    "targetIndustries": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("renzomacar/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": [
        "patrick@stripe.com",
        "hubspot.com",
        "Amir Salihefendic, doist.com",
    ],
    "targetIndustries": [],
}

# Run the Actor and wait for it to finish
run = client.actor("renzomacar/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": [
    "patrick@stripe.com",
    "hubspot.com",
    "Amir Salihefendic, doist.com"
  ],
  "targetIndustries": []
}' |
apify call renzomacar/lead-enrichment --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/tfoRa7Z42XwpafmqY/builds/oMR6wfaVXHH547qI3/openapi.json
