# Vertical Lead Pack (`enezli/vertical-lead-pack`) Actor

Decision-maker leads for one vertical (real estate or clinics). Merges multi-source data into one contact record per business: dedup, named decision-maker and vertical-specific fields. Reach the person who actually signs off, not a generic inbox.

- **URL**: https://apify.com/enezli/vertical-lead-pack.md
- **Developed by:** [Turgay NANTA](https://apify.com/enezli) (community)
- **Categories:** Lead generation, Automation
- **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 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

## Vertical Lead Pack — Named Decision-Makers + Send-Readiness

Turns raw, multi-source business data for a **single vertical** (real estate / clinic) into a **decision-maker-ready lead pack**. Generic scrapers hand you a flat contact list; this actor finds the **named decision-maker**, adds **vertical-specific attributes**, and tells you **who to email first**.

### What it does

Connect the output of a Maps/web/directory scraper (or your own record list). For each business the actor:

- **Merges multi-source data** into one rich record (cross-source dedup) — split fragments from Maps + web + social become a single lead
- **Extracts the named decision-maker** — surfaces the clinic's chief physician or the agency's broker by name, instead of a generic `info@`
- **Adds vertical-specific attributes** — real estate: brokerage · license no · office-or-agent; clinic: specialty · booking channel
- **Scores send-readiness** — a deterministic `READY` / `REVIEW` / `WEAK` verdict + reason for every lead
- **Ranks priority (0–100)** + a "reach these first" shortlist so the salesperson starts with the best leads

### Why it's different

Most lead scrapers stop at a raw contact dump. This actor **behaves like a sales researcher**: it decides who the real decision-maker is, enriches each lead with attributes that drive segmentation and personalization, and flags which leads are actually worth contacting. No LLM, fully deterministic → no hallucination, low cost, predictable output.

### Input

| Field | Description |
|---|---|
| `vertical` | The vertical: **Real Estate** or **Healthcare / Clinic** (decision-maker rules + attribute fields change accordingly) |
| `records` | Raw records to merge (output of a Maps/web/directory scraper). `contacts[{name,title,email}]` powers decision-maker extraction |
| `datasetId` | OR the ID of a connected Apify dataset |
| `searchTerms` | OR, when you have no data, terms used to call an upstream Maps scraper |
| `maxPlaces` | Max places per search in scrape mode |

### Output

Delivered in two layers:

- **Dataset (table view):** one row per lead with flat, scannable columns — `priority` · `business` · `decision_maker_name` · `decision_maker_title` · `decision_maker_email` · `vertical_attributes` · `send_readiness`. Sort, filter, and export directly.
- **Full record (per lead):** `business`, `website`, `phone`, `address`, `vertical`, **`decision_maker`** (name / title / email / source / role-account flag), **`vertical_fields`** (real estate: brokerage / license\_no / office\_or\_agent · clinic: specialty / booking\_channel), `socials`, `all_emails`, **`send_readiness`** (`READY` / `REVIEW` / `WEAK`) + reason. A final `_summary` row carries totals, verdict distribution, and the priority-ranked **reach-first list**.

### Why this actor

1. **Multi-source merge** → one rich record per business (cross-source dedup, multi-key bridging, false-merge shield).
2. **Decision-maker extraction** → a named broker / chief physician instead of `info@`.
3. **Vertical-specific attributes** → real estate brokerage/license · clinic specialty (for segmentation + personalization).
4. **Send-readiness verdict** → niche leads are expensive; hit the best ones first.

Niche focus = lower competition + higher margin + a clear buyer.

### How to use

1. Collect your business data with a Maps/web/directory scraper (or paste your own list).
2. Connect the output to this actor as `records` (or `datasetId`).
3. Pick the vertical (real estate / clinic) → **Start**.
4. Grab your prioritized lead pack from the Dataset tab.

### Pricing (Pay-Per-Event)

You only pay for what you use: per run + per 100 records processed + per enriched lead. No monthly subscription.

# Actor input Schema

## `vertical` (type: `string`):

The single vertical the lead pack focuses on. Decision-maker rules and the extracted attribute fields change accordingly.

## `records` (type: `array`):

Raw business records to merge (output of a Maps/web/directory scraper connected directly). The name/title, website, phone, emails, contacts\[{name,title,email}] and social fields are auto-detected.

## `datasetId` (type: `string`):

Instead of records: the ID of an Apify dataset containing the raw records to merge.

## `searchTerms` (type: `array`):

If no dataset is given, these vertical terms are used to call an upstream Maps scraper (e.g. 'orthodontics clinic London'). Scraping is left to upstream; this actor's focus is producing the vertical decision-maker pack.

## `maxPlaces` (type: `integer`):

When searchTerms is provided, the maximum number of places to fetch per search.

## Actor input object example

```json
{
  "vertical": "emlak",
  "records": [
    {
      "title": "Acme Orthodontics Clinic",
      "url": "https://acmeortho.com",
      "phone": "+1 212 555 12 34",
      "emails": [
        "appointments@acmeortho.com"
      ],
      "social": [
        "instagram.com/acmeortho"
      ]
    },
    {
      "name": "Acme Ortho Center",
      "website": "acmeortho.com",
      "contacts": [
        {
          "name": "Dr. Jane Carter",
          "title": "Chief Physician",
          "email": "jane.carter@acmeortho.com"
        }
      ],
      "rawText": "Implant and orthodontics specialist clinic"
    }
  ],
  "maxPlaces": 50
}
```

# 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 = {
    "records": [
        {
            "title": "Acme Orthodontics Clinic",
            "url": "https://acmeortho.com",
            "phone": "+1 212 555 12 34",
            "emails": [
                "appointments@acmeortho.com"
            ],
            "social": [
                "instagram.com/acmeortho"
            ]
        },
        {
            "name": "Acme Ortho Center",
            "website": "acmeortho.com",
            "contacts": [
                {
                    "name": "Dr. Jane Carter",
                    "title": "Chief Physician",
                    "email": "jane.carter@acmeortho.com"
                }
            ],
            "rawText": "Implant and orthodontics specialist clinic"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("enezli/vertical-lead-pack").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 = { "records": [
        {
            "title": "Acme Orthodontics Clinic",
            "url": "https://acmeortho.com",
            "phone": "+1 212 555 12 34",
            "emails": ["appointments@acmeortho.com"],
            "social": ["instagram.com/acmeortho"],
        },
        {
            "name": "Acme Ortho Center",
            "website": "acmeortho.com",
            "contacts": [{
                    "name": "Dr. Jane Carter",
                    "title": "Chief Physician",
                    "email": "jane.carter@acmeortho.com",
                }],
            "rawText": "Implant and orthodontics specialist clinic",
        },
    ] }

# Run the Actor and wait for it to finish
run = client.actor("enezli/vertical-lead-pack").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 '{
  "records": [
    {
      "title": "Acme Orthodontics Clinic",
      "url": "https://acmeortho.com",
      "phone": "+1 212 555 12 34",
      "emails": [
        "appointments@acmeortho.com"
      ],
      "social": [
        "instagram.com/acmeortho"
      ]
    },
    {
      "name": "Acme Ortho Center",
      "website": "acmeortho.com",
      "contacts": [
        {
          "name": "Dr. Jane Carter",
          "title": "Chief Physician",
          "email": "jane.carter@acmeortho.com"
        }
      ],
      "rawText": "Implant and orthodontics specialist clinic"
    }
  ]
}' |
apify call enezli/vertical-lead-pack --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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