# Decision Makers Finder ✅ CEO, CTO & Founder Emails by Country (`b2bsearch/decision-makers-leads-finder`) Actor

✅ Decision maker email finder by segment: founders, owners, CEOs, CTOs and VPs by country, industry and company size, for B2B lead generation. ✅ Every row has a live work or personal email and the LinkedIn URL. ✅ No email = no charge, no minimum, no cookies. From $1.50 per 1,000.

- **URL**: https://apify.com/b2bsearch/decision-makers-leads-finder.md
- **Developed by:** [B2B Search Enriched](https://apify.com/b2bsearch) (community)
- **Categories:** Lead generation, Automation, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 lead delivered with an emails

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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 Makers Finder ✅ CEO, CTO & Founder Emails by Country

**The people who sign: founders, owners, C-level and VPs, by country,
industry and company size, every row with a live email and the LinkedIn
profile URL.** A decision maker email finder for whole segments, built on
our own database of 800M+ professional profiles, no login, no cookies; for
the leadership of one company by its domain, use
[Decision Maker Finder by Domain](https://apify.com/b2bsearch/domain-to-decision-makers).
From $1.50 per 1,000 decision makers; people without an email are skipped
and cost nothing.

- ✅ **Decision makers by default.** Seniority is preset to C-level,
  Founder, Owner and VP, read from the job title so that `CTO`, `Chief
  Technology Officer` and `Head of Technology` all land where they belong.
  Assistants, interns and students are excluded before anything is counted.
- ✅ **A live email on every row.** A work address on the current employer's
  domain, or a personal mailbox. Addresses that only match an old employer
  never ship. Those are the ones that bounce.
- ✅ **Any segment, not one company.** Country or region, industry,
  headcount, city, headline keywords. For the leadership of one company by
  its domain, use [Decision Maker Finder by Domain](https://apify.com/b2bsearch/domain-to-decision-makers).
- ✅ **No minimum order, no charge for misses.** Pay per decision maker
  delivered, from the first one.
- ✅ **Mobile numbers on request**, charged only on rows that carry one.

### Why this decision makers finder

| | This Actor | A typical "decision makers" listing on this shelf |
|---|---|---|
| Where the data comes from | Our own database, 800M+ profiles and 115M companies | Source not stated |
| What an email means | On record at the current employer, or personal; otherwise the person is skipped free | "Verified", no rule stated |
| Who counts as a decision maker | Seniority read from the title: C-level, Founder, Owner, VP by default, Director and Head of on request | A title keyword list |
| Minimum order | None | Often 100 rows charged per run |
| Sizing a list before buying | Free counts in [People Database Search](https://apify.com/b2bsearch/people-database-search) | No |
| Exclusions | Titles, keywords, companies, countries and earlier runs | Rarely |

### What you get per decision maker

- ✅ Full name, first name, last name, job title, headline
- ✅ `email` and `emailType` (`work` or `personal`), plus `workEmail` and `personalEmail` when both are on record
- ✅ Company name, website domain, headcount, industry
- ✅ Location and country code
- ✅ LinkedIn profile URL; X, GitHub and Facebook links when on record
- ✅ `phoneOnRecord`, and the number itself with **Add mobile phone numbers** on

### Quick start

1. Type the titles you want (`ceo`, `cto`, `founder`, `vp sales`) or clear
   the list to take every title at the preset seniority levels. Pick the
   countries; add an industry or a headcount range to narrow.
2. Set **Maximum leads** and press **Start**. People without a live email
   are skipped free; a note row at the end says how many.
3. Export the dataset as CSV, Excel or JSON, or open the **Emails for
   outreach tools** view for a send-ready file.

### Run Decision Makers Finder from Python, Node.js or the API

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("b2bsearch/decision-makers-leads-finder").call(run_input={
    "jobTitles": ["ceo", "founder"],
    "countries": ["us"],
    "companySizeMin": 11,
    "companySizeMax": 200,
    "maxResults": 100,
})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(row["fullName"], row["jobTitle"], row["email"])
```

The same call in Node.js is `new ApifyClient({ token }).actor('b2bsearch/decision-makers-leads-finder').call(input)`
from the `apify-client` package. Over plain REST, `POST
https://api.apify.com/v2/acts/b2bsearch~decision-makers-leads-finder/run-sync-get-dataset-items`
with the input as the JSON body returns the rows in one response. The price
is the same from code and from the form.

### Measured

Runs on the live database on 2026-10-04:

| Segment | Live email found for |
|---|---|
| German CTOs at companies under 200 people | 60% of matching people |
| UK marketing directors in software | 67% |
| US heads and VPs of sales, companies of 50–500, `emailType: any` | 70% (58 work, 42 personal per 100 leads) |

About a third of US sales leaders also have a verified mobile number on
record.

### Input

| Field | What it does |
|---|---|
| `jobTitles` | Words in the current job title: `ceo`, `cto`, `founder`. Any of them matches. Clear the list to take every title at the seniority levels below. |
| `seniority` | Default C-level, Founder, Owner, VP. Add Head of, Director or Partner for a wider list. |
| `excludeJobTitles` | Default `assistant`, `intern`, `student` — so "executive assistant to the CEO" never lands in a CEO list. |
| `titleMatch` | `substring` (default) or `word`. Use `word` for short titles — `cto` as a substring also hits *director*. |
| `departments` | Sales, marketing, engineering, finance… the function read from the title. |
| `countries`, `countryGroups`, `cities` | Where the people live: `us`, `gb`, groups like `dach` or `nordics`, city text like `austin`. |
| `industries` | Industry of the current company: `Software Development`, `Financial Services`… |
| `companySizeMin`, `companySizeMax` | Employees at the current company. |
| `companyDomains`, `excludeCompanyDomains` | Account lists by website domain. |
| `keywords`, `excludeKeywords` | Words in the profile headline. |
| `maxResults` | Decision makers to deliver (default 100, up to 10,000). You pay only for these. |
| `emailType` | `any` (default), `work` (current employer only) or `personal`. |
| `includePhones` | Put each row's verified mobile number on it; charged on top, only for rows that have one. |
| `maxPerCompany` | Cap on people per company — `1` gives one decision maker per company. |
| `excludeDatasets` | Datasets of earlier runs: people already delivered are skipped free. |
| `updatedAfter` | Only records updated on or after this date (`2025-10` or `2025-10-19`). |

```json
{
  "jobTitles": ["ceo", "cto", "founder"],
  "countries": ["us"],
  "industries": ["Software Development"],
  "companySizeMin": 11,
  "companySizeMax": 200,
  "maxPerCompany": 1,
  "maxResults": 100
}
```

### Output

One row per decision maker:

| Column | Example |
|---|---|
| `fullName`, `firstName`, `lastName` | Jane Doe |
| `jobTitle`, `headline` | Founder & CEO |
| `email`, `emailType` | jane.doe@acme-example.com, `work` or `personal` |
| `workEmail`, `personalEmail` | both, when both are on record |
| `companyName`, `companyDomain`, `companySize`, `companyIndustry` | Acme Example · acme-example.com · 45 · Software Development |
| `primaryTitle`, `primaryCompany` | the role the profile lists first, when it is another current job (a founder who also advises) |
| `location`, `countryCode` | Austin, Texas, United States · US |
| `linkedinUrl` | the public profile link |
| `twitterUrl`, `githubUrl`, `facebookUrl` | when on record, no extra charge |
| `phoneOnRecord`, `phone`, `phones` | whether a verified mobile number is on record; the number(s) with **Add mobile phone numbers** on |
| `personId` | stable id, used by *Skip people from earlier runs* |

Rows with another `_status` are free notes. The values above are fictional.

### Pricing

| Apify plan | Per 1,000 decision makers | Per 1,000 mobile numbers (optional) |
|---|---|---|
| Free | $3 | $5 |
| Starter | $2.50 | $4 |
| Scale | $2 | $3.50 |
| Business and up | $1.50 | $3 |

One distinct person delivered with a live email is one charge. Not charged:
people without one, repeats, people from your excluded datasets, every note
row. The number event is charged only on rows that come back with a
verified mobile number. A small per-run start fee applies (Pricing tab).

### Ready-made examples

Each one opens with the input filled in; press Try for free and change it to your own.

- [US Software Founders and CEOs with Emails, One per Company](https://apify.com/b2bsearch/decision-makers-leads-finder/examples/us-software-founders-ceos-emails): Founders and CEOs of US software companies with 11 to 200 employees, one per company, each with a live email and LinkedIn URL. No email, no charge.
- [CTOs and VPs of Engineering at European Startups with Emails](https://apify.com/b2bsearch/decision-makers-leads-finder/examples/cto-emails-europe-startups): CTOs and VPs of engineering at EU companies with 11 to 500 employees, each with a live email and LinkedIn URL. People without an email are free.

### FAQ

#### I want one decision maker per company.

Set `maxPerCompany` to `1`. The first match per company ships, the rest are
skipped free and counted in one note row.

#### Why does my list hold "Head of" people when I asked for C-level?

It does not, unless you add the Head of bucket. Seniority is read from the
title: "Head of Technology" is Head of, "Chief Technology Officer" is
C-level. Add the bucket you want, or put the title words in `jobTitles`.

#### Do I need a LinkedIn or Apollo account?

No. No login, cookies or API key besides Apify. Nothing is collected from
any network while your run is in progress.

#### Can I run it from n8n, Make or an AI agent?

Yes. The Actor is a tool on the Apify MCP server
(`https://mcp.apify.com?tools=b2bsearch/decision-makers-leads-finder`) and a
step in n8n, Make and Zapier. Cap what one call may spend with `maxTotalChargeUsd`.

### Related Actors

| Need | Actor |
|---|---|
| The leadership of one company, by its domain | [Decision Maker Finder by Domain](https://apify.com/b2bsearch/domain-to-decision-makers) |
| Any title, not only decision makers | [B2B Leads Finder](https://apify.com/b2bsearch/b2b-leads-finder) |
| Every row with a verified mobile number | [Leads Scraper with Mobile Numbers](https://apify.com/b2bsearch/b2b-leads-with-phones) |
| Free counts and market breakdowns | [People Database Search](https://apify.com/b2bsearch/people-database-search) |
| Companies first, then their decision makers and open jobs | [Full ICP Search](https://apify.com/b2bsearch/full-icp-search) |

### Free Apify plan

Free accounts get the same rows as paid ones, with three limits. A run delivers
at most 100 results when started from Apify Console and 25 when started through
the API, a schedule or an integration; an account gets 500 dataset rows per calendar
month on this Actor, found rows and misses alike; and a row that finds nothing
carries only its status. Previews and counts, where this Actor offers them, stay
free and outside the monthly allowance. When a limit stops a run, the status
line and the last dataset row say which limit it was, what is left and when it
resets. Any paid Apify plan removes all of this: Starter is $19/month and
includes $19 of usage.

### Feedback and reviews

How did it go? A rating on this Actor's [Reviews page](https://console.apify.com/actors/Fcaj9oQdIhXRFd6Bu/info/reviews)
tells the next buyer what to expect; we read every word, good or bad. Got a wrong or stale
row? Open the **Issues** tab with the run ID. Issues are public, so leave out
emails, phones and names; the run ID is enough for us to find the row. We
check every report, fix what is ours to fix and answer in the thread.

### Disclaimer and permitted use

**Independent product.** This Actor is an independent tool. It is not
affiliated with, endorsed by, or sponsored by LinkedIn Corporation or
Apollo.io; their names appear only to describe the kind of list this Actor
builds.

**No platform access.** This Actor does not log in to any network and does
not collect anything from one. Every answer comes from our own database of
publicly available professional data.

**Permitted use.** Business-to-business purposes only: sales prospecting,
recruiting outreach and CRM enrichment. You may not use this Actor or its
output to stalk, harass or dox anyone; to decide on anyone's eligibility for
credit, employment, housing or insurance (this is not a consumer report under
the U.S. Fair Credit Reporting Act); to send unsolicited bulk messages or
place autodialed or prerecorded calls or texts without the consent the law
requires; or to build or resell a contact database.

**Your responsibilities.** You are responsible for having a lawful basis for
your use and for complying with the laws that apply to you, including GDPR
and UK GDPR, ePrivacy and PECR, CCPA/CPRA, CAN-SPAM and, for any number you
call or text, the TCPA and Do Not Call rules. Honor every opt-out you receive.

**Removal requests.** To have a person's data removed, open an issue on this
Actor with only the profile link; the record is removed from every listing.

**Accuracy.** Records can be incomplete or out of date. Output is provided as
is. Check before you rely on it.

# Actor input Schema

## `jobTitles` (type: `array`):

Words in the current job title (ceo, cto, founder, "vp sales"...). Each 3-64 characters, at most 10. Clear the list to take every title at the seniority levels below.

## `countries` (type: `array`):

Where the leads live: two-letter codes (us, gb, de...), up to 60. Combine with country groups. Leave empty to search every country.

## `maxResults` (type: `integer`):

Stop after this many leads (default 100, maximum 10,000). You pay from $1.50 per 1,000 leads delivered ($3 on the Free plan), each with an email — people without one are skipped free. Free Apify plan: up to 100 from Console, 25 via the API, and 500 rows per month per account.

## `emailType` (type: `string`):

Which mailbox every lead must have. any: a work address at the current employer, else a personal one. work: current-employer address only (fewer leads). Addresses at earlier employers never count.

## `includePhones` (type: `boolean`):

Each lead's verified mobile number on record in phone (US-centric, about 1 in 4 US decision makers). Free until its price starts in mid-November 2026, then $4 per 1,000 leads that come back with one ($5 on the Free plan, $3 on Business). Off: the row only says whether a number is on record (phoneOnRecord).

## `seniority` (type: `array`):

Which decision makers: C-level, Founder, Owner and VP by default. Buckets are read from the job title, so CTO and Chief Technology Officer both land in C-level. Add Head of or Director for a wider list, or clear the job titles above to take every title at these levels.

## `departments` (type: `array`):

The function the person works in, read from their job titles: sales, marketing, engineering and so on. Combines with Seniority and the job title keywords (a VP in sales = Seniority VP + Department Sales). Any of the chosen departments matches.

## `companySizeMin` (type: `integer`):

Keep only leads at companies with at least this many employees.

## `companySizeMax` (type: `integer`):

Keep only leads at companies with at most this many employees.

## `industries` (type: `array`):

Industry of the current company: names in either wording, any case (Software Development also finds Computer Software). Up to 20. Examples: Financial Services, Hospitals and Health Care. Each covers its sub-industries (Software Development includes Computer Games); rows show the company's own industry.

## `keywords` (type: `array`):

Match any of these words in the profile headline — what people say they do ("revops", "fractional cfo", "shopify"). Each 3-64 characters, at most 10. Alone, job-title words (founder, recruiter) find that title with the word in the headline; topic words (fintech, rust) need job titles, seniority or companies too.

## `companyDomains` (type: `array`):

Account-based lists: only people currently at these companies, by website domain (stripe.com). Brand domains resolve to the real company. At most 1,000.

## `cities` (type: `array`):

Narrow inside the chosen countries by city or region text (san francisco, greater london). 3-64 characters each, at most 10.

## `countryGroups` (type: `array`):

Whole regions at once, added to the countries above: eu, eea, dach, nordics, baltics, benelux, cee, cis, post_soviet, mena, gcc, latam.

## `titleMatch` (type: `string`):

How headline and past-title keywords match (job titles are read as tags). Leave empty: a list with a short keyword (4 letters or fewer) matches whole words, otherwise the letters match anywhere. substring: "cto" also hits "director"; word: whole words only.

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

Deliver at most this many leads per company across the whole run. The rest are skipped free and counted in one note row.

## `excludeDatasets` (type: `array`):

Pick datasets of earlier runs of this Actor: everyone in them is left out and never charged again. Rerun the same search weekly and get only new leads. People an earlier run of the same search skipped (no email, left the role) are not read again either.

## `updatedAfter` (type: `string`):

Only leads whose record was updated on or after this date, YYYY-MM or YYYY-MM-DD — the row's updatedAt. Narrows an Apollo URL too.

## `excludeJobTitles` (type: `array`):

Drop people by the title tags these titles mean. Default: assistant, intern, student — so "executive assistant to the CEO" never lands in a CEO list. 3-64 characters each, at most 10.

## `excludeKeywords` (type: `array`):

Drop people whose profile headline contains any of these words (example: fractional, advisor, freelance, student). 3-64 characters each, at most 10.

## `excludeCompanyDomains` (type: `array`):

Drop people currently at these companies, by website domain — your customers, competitors, your own company. At most 1,000.

## `excludeCountries` (type: `array`):

Two-letter codes to drop, for example a group minus one country (eu without de).

## `companyHqCountries` (type: `array`):

Keep leads whose company is headquartered in these countries, wherever the lead lives — for example people in Poland working for US companies.

## `pastCompanyDomains` (type: `array`):

People who USED to work at these companies, by website domain — alumni of a competitor or of a former customer. At most 100.

## Actor input object example

```json
{
  "jobTitles": [
    "ceo",
    "cto",
    "founder"
  ],
  "countries": [
    "us"
  ],
  "maxResults": 25,
  "emailType": "any",
  "includePhones": false,
  "seniority": [
    "cxo",
    "founder",
    "owner",
    "vp"
  ],
  "excludeJobTitles": [
    "assistant",
    "intern",
    "student"
  ]
}
```

# Actor output Schema

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

No description

# 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 = {
    "jobTitles": [
        "ceo",
        "cto",
        "founder"
    ],
    "countries": [
        "us"
    ],
    "maxResults": 25
};

// Run the Actor and wait for it to finish
const run = await client.actor("b2bsearch/decision-makers-leads-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 = {
    "jobTitles": [
        "ceo",
        "cto",
        "founder",
    ],
    "countries": ["us"],
    "maxResults": 25,
}

# Run the Actor and wait for it to finish
run = client.actor("b2bsearch/decision-makers-leads-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 '{
  "jobTitles": [
    "ceo",
    "cto",
    "founder"
  ],
  "countries": [
    "us"
  ],
  "maxResults": 25
}' |
apify call b2bsearch/decision-makers-leads-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,b2bsearch/decision-makers-leads-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/Fcaj9oQdIhXRFd6Bu/builds/vO1KDJwapoJ0GLsEg/openapi.json
