# Decision Maker Finder + Verified Emails (by Domain) (`peoplesearch/decision-maker-finder`) Actor

Give company websites, LinkedIn pages or names and get each company's decision maker for the role you sell to: founder, CEO or owner, or the sales, marketing, HR, IT, finance or operations leader, most senior first, with verified work emails. No login.

- **URL**: https://apify.com/peoplesearch/decision-maker-finder.md
- **Developed by:** [PeopleSearch.im](https://apify.com/peoplesearch) (community)
- **Categories:** Lead generation, AI, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $6.00 / 1,000 decision makers

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

## Decision Maker Finder + Verified Emails (by Domain)

Give a list of companies and get, for each one, the person who decides for what you sell: its founder, CEO or owner, or its sales, marketing, HR, engineering, IT, finance, operations, product or procurement leader. You get the most senior person in that role first, as a clean row with name, job title, seniority, location and LinkedIn profile URL, plus a verified work email.

There is no LinkedIn login, no cookie and no browser session involved. The people come from a licensed B2B people database, so nothing can get an account restricted and a company takes seconds.

### What it does

- **Takes companies the way you have them**: a website (`stripe.com`), a LinkedIn company page (`linkedin.com/company/stripe`) or a name. Up to 100 companies per run, pasted from a CRM export, a Google Maps list or a spreadsheet.
- **Finds the most senior person in the role.** Each role is a ladder searched from the top. For sales: a Chief Revenue Officer or Chief Sales Officer, then a VP or Head of Sales or Sales Director, then a Sales Manager. For the founder, CEO or owner: a CEO, Founder, Owner, President, Managing Director, Managing Partner or Executive Director, then a General Manager or Proprietor. The first level that has anyone at that company is delivered, and each row says which level it came from (`seniority`).
- **Falls back to the person in charge.** A small company often has no sales or HR leader of its own, and its owner decides for it. When a role finds nobody, you get the company's founder, CEO or owner instead, marked `fallbackFor`. Switch **Fall back to the founder, CEO or owner** off to get only the role you asked for.
- **Leaves out lookalike titles.** Assistants, interns, coordinators and trainees are never delivered, even when their title holds the words ("Executive Assistant to the CEO"). A bare President or Owner never means a Vice President or a Product Owner.
- **Reads names the way companies' own pages carry them**: a legal form (Inc., Pvt Ltd, GmbH) and a listing's tagline after a dash or a pipe, as Google Maps titles have, are left out. A website or a LinkedIn page is the most exact way to name a company.
- **Never pads the list.** A company with nobody in the role (and no founder, CEO or owner on record) delivers nobody, and the run says so.
- **Finds verified work emails.** Each address is looked up live, not guessed from a pattern, and you pay only for an email that is found.

### Which companies it covers best

It finds people who list their employer on LinkedIn. That covers most companies with a team: on a real buyer's list of 25 company websites, 20 had people on record and 12 had a founder, CEO, owner or general manager, 9 of them among the 15 software and services firms. Very small local businesses (a motel, a vacation rental, a single shop) often have nobody on record at all; those deliver nobody and cost nothing.

### How to use it

1. Put one company per line in **Companies**.
2. Pick the **Decision makers to find** (up to 5 roles).
3. Optionally set **Decision makers per company and role** (1 to 10) and **Locations** for companies present in many countries.
4. Run it, then download the dataset as CSV, Excel or JSON, or read it through the Apify API.

### Input

| Field | What it is |
|---|---|
| `companies` | Websites, LinkedIn company pages or names, up to 100. Required. |
| `roles` | `owner_ceo`, `sales`, `marketing`, `hr`, `engineering`, `it`, `finance`, `operations`, `product`, `procurement`. Default `owner_ceo`. |
| `maxPerCompany` | People per company and role, most senior first, 1 to 10. Default 1. |
| `fallbackToTop` | When a role finds nobody, deliver the founder, CEO or owner instead. Default on. |
| `locations` | Countries, states, regions or cities. Optional. |
| `includeEmails` | Look up each person's verified work email. Default on. |

```json
{
    "companies": ["stripe.com", "notion.so", "https://www.linkedin.com/company/hubspot"],
    "roles": ["sales", "marketing"],
    "maxPerCompany": 1,
    "includeEmails": true
}
```

### Output

One row per decision maker. The values below are placeholders that show the shape.

```json
{
    "name": "Jane Doe",
    "firstName": "Jane",
    "lastName": "Doe",
    "title": "VP of Sales, North America",
    "company": "Example Payments",
    "companyWebsite": "https://example.com",
    "companyIndustry": "Financial Services",
    "companySize": 8200,
    "location": "New York, New York, United States",
    "linkedinUrl": "https://www.linkedin.com/in/jane-doe-example",
    "email": "jane.doe@example.com",
    "emailStatus": "found",
    "emailCertainty": "ultra_sure",
    "inputCompany": "example.com",
    "matchedBy": "website",
    "role": "sales",
    "roleLabel": "Sales leader",
    "seniority": "head",
    "rank": 1,
    "fallbackFor": null
}
```

`role` is the role the row answers and `seniority` the level of its ladder the person came from (`top` or `general manager` for the founder, CEO or owner; `chief`, `head` or `manager` for the other roles). `rank` orders the people of one role at one company. `fallbackFor` names the role a founder, CEO or owner stands in for, and is empty otherwise. `emailStatus` is `found`, `not_found` (no verified address exists; not charged), or empty when emails were not requested. The run's `OUTPUT` record lists every company with how it was matched, what each role found at which level, and why a company delivered nobody.

### What it costs

You pay per result, nothing per month:

| What | Price |
|---|---|
| One decision maker delivered as a full profile | $0.006 |
| One verified work email found | $0.02 |
| An email lookup that finds nothing | Free |
| A company where nobody is found | Free |
| The run start | $0.00005 |

So 100 decision makers with their verified emails cost at most $2.60. Set a maximum cost per run in the run options and the Actor stops delivering at that amount.

**On Apify's free plan** a run delivers up to 10 decision makers in total and does not look up emails. Paid plans get up to 10 per company and role, and verified emails.

### Use it from an AI agent

Every Apify Actor can be called as a tool through Apify's MCP server, so an AI agent can pass a list of companies to this Actor and read the decision makers back.

### Questions

**Does this scrape LinkedIn?**
No. It never opens LinkedIn and never needs your LinkedIn account. The profiles come from a licensed B2B people database (Icypeas), and a person's public LinkedIn URL is part of the profile you receive.

**I asked for the sales leader and got the CEO. Why?**
Nobody at that company holds a sales leadership title, so its founder, CEO or owner, who decides for it, was delivered instead. The row says `fallbackFor: "sales"`. Switch off **Fall back to the founder, CEO or owner** to get only the role itself.

**I gave a big company's website and got someone at another company. Why?**
A website finds the people whose employer lists it on its LinkedIn page, and some large companies list another site there (Amazon lists aboutamazon.com). Give the company's LinkedIn company page (`linkedin.com/company/amazon`) to get exactly its people.

**How is this different from the Company Employees Finder?**
The Company Employees Finder lists everyone at a company who holds the titles you type. This one answers whom to write to: it walks a ladder of seniority for the role and delivers the most senior person found, one per company unless you ask for more.

**Can a person be removed from results?**
Yes. Anyone can ask to be left out at peoplesearch.im/opt-out, and the request applies to every search and lookup.

### Using the data

The results are business contact data about real people. You are responsible for having a lawful basis for how you use them, including the rules on unsolicited email where your recipients live (for example GDPR and the ePrivacy rules in Europe, CAN-SPAM in the United States and CASL in Canada).

# Actor input Schema

## `companies` (type: `array`):

One company per line, up to 100 per run: its website (stripe.com), its LinkedIn company page (linkedin.com/company/stripe, the most exact for large companies), or its name. A name's legal form or a listing's tagline (Inc., Pvt Ltd, "- Software House") is left out.

## `roles` (type: `array`):

Who decides for what you sell. Each role is searched from the most senior title down (for sales: Chief Revenue Officer, then VP or Head of Sales and Sales Director, then Sales Manager), and the first level that has anyone is delivered. Up to 5 roles.

## `maxPerCompany` (type: `integer`):

How many people to deliver for each role at each company, most senior first. 1 is the person to write to; more gives alternates.

## `fallbackToTop` (type: `boolean`):

When a company has nobody in the role you chose (common at small companies), deliver its founder, CEO or owner instead, who decides for it there. Those rows say fallbackFor and the role they stand in for.

## `locations` (type: `array`):

Only decision makers in these places, for a company present in many countries: countries, states, regions or cities, for example Germany or London.

## `includeEmails` (type: `boolean`):

Look up each decision maker's verified work email. Charged only for emails that are found. Available on Apify paid plans.

## Actor input object example

```json
{
  "companies": [
    "stripe.com",
    "notion.so"
  ],
  "roles": [
    "owner_ceo"
  ],
  "maxPerCompany": 1,
  "fallbackToTop": true,
  "includeEmails": true
}
```

# Actor output Schema

## `decisionMakers` (type: `string`):

One row per decision maker delivered: name, job title, role, seniority, company, location, LinkedIn URL and, when asked for, the verified work email.

## `summary` (type: `string`):

For each company: how it was matched, which roles were found at what seniority, and why a company delivered nobody.

# 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 = {
    "companies": [
        "stripe.com",
        "notion.so"
    ],
    "roles": [
        "owner_ceo"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("peoplesearch/decision-maker-finder").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 = {
    "companies": [
        "stripe.com",
        "notion.so",
    ],
    "roles": ["owner_ceo"],
}

# Run the Actor and wait for it to finish
run = client.actor("peoplesearch/decision-maker-finder").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 '{
  "companies": [
    "stripe.com",
    "notion.so"
  ],
  "roles": [
    "owner_ceo"
  ]
}' |
apify call peoplesearch/decision-maker-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,peoplesearch/decision-maker-finder"
        }
    }
}
```

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/d8EoXXSXDKkjtmiSZ/builds/THrPaOpmfZICMhJj6/openapi.json
