# LinkedIn Decision Makers Finder (`george.the.developer/linkedin-decision-makers-finder`) Actor

Find the decision makers of any LinkedIn company. Company URL or name in, owners, founders, C level executives, VPs and directors out with seniority band, department, headline and profile URL. You pay only for decision makers whose own headline names the company you asked for. No login, no cookies.

- **URL**: https://apify.com/george.the.developer/linkedin-decision-makers-finder.md
- **Developed by:** [George Kioko](https://apify.com/george.the.developer) (community)
- **Categories:** Lead generation, Social media
- **Stats:** 4 total users, 3 monthly users, 72.7% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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?

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

## LinkedIn Decision Makers Finder, Owners, Founders, C Level, VPs and Directors by Company

> **Company in, buying committee out.** Give it a LinkedIn company URL or a company name and get back the owners, founders, partners, C level executives, vice presidents and directors, each with a seniority band, a department, the current headline and the public profile URL.
> You pay $0.022 per decision maker whose own LinkedIn headline names the company you asked for. Everyone below director is skipped before any charge. Rows that cannot be tied to the company are delivered free.

**LinkedIn Decision Makers Finder is an Apify Actor that takes a LinkedIn company URL or a company name and returns its decision makers, meaning owners, founders, partners, C level executives, vice presidents and directors, with a seniority band, a department, the current headline and the public profile URL, without a login, cookies or a LinkedIn account.** It is built for cold email and lead generation agencies that start from a company list and need the buying committee, for founders doing their own outbound, and for AI agents that need a stable JSON source of **decision makers by company**.

Decision makers only. Seniority and department filters run before the charge. **$22 per 1,000 decision makers.** MCP ready for AI agents.

### Pricing

| Event | Price | You pay when |
|---|---|---|
| `decision-maker` | $0.022 | A decision maker is delivered whose own indexed LinkedIn headline names the company you asked for and who passes your seniority and department filter |
| `actor-start` | $0.00005 | The run starts |

**$22 per 1,000 decision makers.** Classification into seniority band and department is included in the row price. Managers, individual contributors, interns and anyone below director are skipped before any charge. A decision maker that Google returned near your company but whose headline does not name it is delivered with `charged` set to false and costs nothing.

Worked example. Ten companies, `maxDecisionMakersPerCompany` left at 10, and the run finds 62 company matched decision makers. You pay 62 times $0.022 plus the start fee, so **$1.36** in total.

### What counts as a decision maker

| Band | Titles that land here | Charged |
|---|---|---|
| `owner` | Owner, Founder, Co-Founder, Proprietor | Yes |
| `partner` | Partner | Yes |
| `cxo` | CEO, CTO, CFO, COO, CMO, CRO, CIO and any Chief Officer | Yes |
| `vp` | VP, Vice President, SVP, EVP | Yes |
| `director` | Director, Head of | Yes |
| `manager`, `senior`, `entry`, `training`, `unpaid`, `unknown` | Everyone else | Never, skipped before charge |

Every row also carries a `department` value from this list. executive, sales, marketing, engineering, data, product, design, finance, hr, legal, support, operations and other. Pass `departments` to keep only the functions you sell to.

### How it works

```
   company URL or name
         |
         v
   Google SERP discovery (Apify GOOGLE_SERP proxy group, no LinkedIn login)
   one base query + grouped title queries (CEO, CTO, Founder, VP, Director ...)
         |
         v
   candidate profiles (name, headline, profile URL)
         |
         v
   classify each headline  ->  seniorityBand + department + isDecisionMaker
         |
         +--- not a decision maker, or outside your bands and departments
         |         -> skipped, never charged
         v
   company match bar. does the person's own headline name this company?
         |
         +--- no  -> delivered free, charged false, confidence low
         v
   yes -> charged decision-maker row ($0.022), confidence medium
         |
         v
   dataset, one row per decision maker
   optional free diff vs your previous run (new decision makers, departures, title changes)
```

Google may also index a person who merely mentioned the company. That is why the company match bar exists. A row is charged only when the person's own headline names the company. Former staff whose headline reads ex or former next to the company name are not charged.

### What data does it extract?

```json
{
  "publicIdentifier": "thegdb",
  "profileUrl": "https://www.linkedin.com/in/thegdb/",
  "fullName": "Greg Brockman",
  "firstName": "Greg",
  "lastName": "Brockman",
  "headline": "President and Co-Founder at OpenAI",
  "isDecisionMaker": true,
  "seniorityBand": "owner",
  "department": "executive",
  "matchedTitles": ["President", "Co-Founder"],
  "titleMatchType": "partial",
  "location": "San Francisco",
  "company": "openai",
  "source": "google-serp-company-matched",
  "confidence": "medium",
  "charged": true,
  "scrapedAt": "2026-09-02T10:15:09.102Z"
}
```

| Field | Type | Description |
|---|---|---|
| `publicIdentifier` | string | LinkedIn profile slug |
| `profileUrl` | string | Public profile URL |
| `fullName`, `firstName`, `lastName` | string | Name as indexed by Google |
| `headline` | string | Current headline as indexed by Google |
| `isDecisionMaker` | boolean | Always true on decision maker rows |
| `seniorityBand` | string | owner, partner, cxo, vp or director |
| `department` | string | executive, sales, marketing, engineering, data, product, design, finance, hr, legal, support, operations or other |
| `matchedTitles` | string\[] | Target titles found in the headline |
| `titleMatchType` | string | exact, partial or none |
| `location` | string | Location when Google exposes it, often empty |
| `company` | string | The company slug you asked for |
| `source` | string | google-serp-company-matched or google-serp-unverified |
| `confidence` | string | medium when the headline names the company, low otherwise |
| `charged` | boolean | true only on billed rows |
| `scrapedAt` | string | Scrape time, ISO 8601 |

### What is NOT returned

- Emails and phone numbers. Rows carry the name, headline, profile URL and location. Pair the profile URL with the enrichment step you already use.
- Employees below director. Managers and individual contributors are skipped before any charge. Use LinkedIn Company Employees Scraper when you need the whole company.
- Full work history, education or skills. This ships the current headline.
- Live verification of current employment. The company match bar reads the person's own indexed headline. Rows are tagged `confidence` medium when the headline names the company and low when it does not.
- Anything from a logged in session. No cookies, no Sales Navigator, no account.

### Input

```json
{
  "companies": ["https://www.linkedin.com/company/openai"],
  "seniorityBands": ["owner", "cxo", "vp"],
  "departments": ["sales", "marketing"],
  "maxDecisionMakersPerCompany": 10,
  "location": "United States",
  "compareWithPreviousRun": false
}
```

| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| `companies` | array | Yes | none | LinkedIn company URLs or company names, up to 200 per run |
| `seniorityBands` | array | No | all five | owner, partner, cxo, vp, director. Values outside the set are ignored |
| `departments` | array | No | any | executive, sales, marketing, engineering, data, product, design, finance, hr, legal, support, operations, other |
| `targetTitles` | array | No | built in set | Titles that expand the Google search. CEO, CTO, CFO, COO, CMO, President, Founder, Co-Founder, Owner, Managing Director plus Spanish equivalents. Pass your own for a narrower ICP |
| `maxDecisionMakersPerCompany` | integer | No | 10 | 1 to 50 |
| `location` | string | No | empty | Location phrase added to the search |
| `searchQuery` | string | No | empty | Extra keyword added to the base search |
| `compareWithPreviousRun` | boolean | No | false | Free diff row per company vs your previous run |
| `maxConcurrency` | integer | No | 3 | Companies processed in parallel, 1 to 10 |
| `proxyConfiguration` | object | No | GOOGLE\_SERP | Country routing honored, other groups ignored |

### Use it from AI agents and code

#### MCP (Claude, Cursor, ChatGPT and any MCP client)

```
https://mcp.apify.com/?tools=george.the.developer/linkedin-decision-makers-finder
```

#### JavaScript

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_TOKEN' });

const run = await client.actor('george.the.developer/linkedin-decision-makers-finder').call({
  companies: ['https://www.linkedin.com/company/openai'],
  seniorityBands: ['owner', 'cxo', 'vp'],
  maxDecisionMakersPerCompany: 10,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
// every row is a decision maker; items[i].charged tells you which rows were billed
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient('YOUR_TOKEN')

run = client.actor('george.the.developer/linkedin-decision-makers-finder').call(run_input={
    'companies': ['https://www.linkedin.com/company/openai'],
    'departments': ['sales', 'marketing'],
})

for item in client.dataset(run['defaultDatasetId']).iterate_items():
    print(item['fullName'], item['seniorityBand'], item['department'], item['profileUrl'])
```

#### HTTP

```bash
curl -X POST "https://api.apify.com/v2/acts/george.the.developer~linkedin-decision-makers-finder/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"companies": ["https://www.linkedin.com/company/openai"], "maxDecisionMakersPerCompany": 10}'
```

### Monitor new decision makers (free)

Turn on `compareWithPreviousRun` on a scheduled run and every run adds one free `company-diff-summary` row per company with the decision makers who appeared since your previous run, the ones who left the list and title changes. A new VP of Sales at a target account is a buying window. Snapshots live in a key value store in your own account and the diff rows are never charged.

```json
{
  "recordType": "company-diff-summary",
  "company": "openai",
  "newDecisionMakers": [
    { "fullName": "Jane Doe", "title": "VP of Sales", "seniorityBand": "vp" }
  ],
  "newDecisionMakersCount": 1,
  "departures": [],
  "titleChanges": []
}
```

### FAQ

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

No. Discovery runs on Google search through the Apify GOOGLE\_SERP proxy group. Nothing logs in to LinkedIn.

#### Why was a decision maker delivered free?

Because the company match bar was not met. Google returned the person near your company but their own headline does not name it. You get the row with `charged` false and `confidence` low and decide for yourself.

#### Does it return emails?

No. It returns the profile URL, the headline and the classification. Feed the profile URLs to the email finder you already use.

#### How is this different from LinkedIn Company Employees Scraper?

That Actor returns every employee it can find. This one returns only the buying committee, with seniority and department filters applied before the charge, at a start fee close to zero. Same engine, same company match bar.

#### What if a company yields no decision makers?

Small companies with few indexed profiles can come back empty. You pay the start fee only.

#### Can I run many companies at once?

Yes, up to 200 per run. Large lists on the default 20 minute timeout finish gracefully with partial coverage and the log names the suggested batch size.

#### Can AI agents use it?

Yes. Stable JSON schema, an output view in the Console and the MCP endpoint above.

### Related Actors

- LinkedIn Company Employees Scraper at https://apify.com/george.the.developer/linkedin-company-employees-scraper returns the whole company with the same classification fields.
- LinkedIn Company by Domain at https://apify.com/george.the.developer/linkedin-company-by-domain turns a website domain into the LinkedIn company URL you feed into this Actor.

### Support

Open an issue on the Issues tab. It is read.

# Actor input Schema

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

LinkedIn company URLs such as https://www.linkedin.com/company/openai/ or plain company names. Mix both freely. Up to 200 companies per run. Large lists finish gracefully with partial coverage on the default 20 minute timeout, so split very large lists.

## `seniorityBands` (type: `array`):

Which decision maker bands to deliver and charge. Everyone outside the decision maker set (managers, seniors, individual contributors, interns) is always skipped before any charge.

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

Leave empty for every department. Pick some to deliver and charge only decision makers in those functions, for example sales and marketing for a GTM list.

## `maxDecisionMakersPerCompany` (type: `integer`):

Stop after this many charged decision makers per company. Between 1 and 50.

## `targetTitles` (type: `array`):

Titles used to expand the Google search per company. Leave empty for the built in set (CEO, CTO, CFO, COO, CMO, President, Founder, Co-Founder, Owner, Managing Director plus Spanish equivalents). Pass your own list, for example Head of Sales and VP Marketing, for a narrower ICP. Up to 30 titles.

## `location` (type: `string`):

Optional location phrase added to the search, for example United States or Berlin.

## `searchQuery` (type: `string`):

Optional extra keyword added to the base company search, for example fintech or supply chain.

## `compareWithPreviousRun` (type: `boolean`):

On a scheduled run, adds one free company-diff-summary row per company listing the decision makers who appeared since your previous run, the ones who left the list and title changes. Snapshots live in a key value store in your own account and are never charged.

## `maxConcurrency` (type: `integer`):

Companies processed in parallel. Between 1 and 10.

## `proxyConfiguration` (type: `object`):

Discovery runs through the Apify GOOGLE\_SERP proxy group. Country routing is honored. Custom proxy URLs and other groups are ignored.

## Actor input object example

```json
{
  "companies": [
    "https://www.linkedin.com/company/apify-technologies/"
  ],
  "seniorityBands": [
    "owner",
    "partner",
    "cxo",
    "vp",
    "director"
  ],
  "departments": [],
  "maxDecisionMakersPerCompany": 10,
  "targetTitles": [],
  "compareWithPreviousRun": false,
  "maxConcurrency": 3,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "GOOGLE_SERP"
    ]
  }
}
```

# Actor output Schema

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

One row per decision maker with name, headline, seniority band, department, profile URL, company slug, confidence and whether the row was charged. Free company-diff-summary rows appear when monitoring is on.

# 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": [
        "https://www.linkedin.com/company/apify-technologies/"
    ],
    "seniorityBands": [
        "owner",
        "partner",
        "cxo",
        "vp",
        "director"
    ],
    "departments": [],
    "targetTitles": [],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "GOOGLE_SERP"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("george.the.developer/linkedin-decision-makers-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": ["https://www.linkedin.com/company/apify-technologies/"],
    "seniorityBands": [
        "owner",
        "partner",
        "cxo",
        "vp",
        "director",
    ],
    "departments": [],
    "targetTitles": [],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["GOOGLE_SERP"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("george.the.developer/linkedin-decision-makers-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": [
    "https://www.linkedin.com/company/apify-technologies/"
  ],
  "seniorityBands": [
    "owner",
    "partner",
    "cxo",
    "vp",
    "director"
  ],
  "departments": [],
  "targetTitles": [],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "GOOGLE_SERP"
    ]
  }
}' |
apify call george.the.developer/linkedin-decision-makers-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,george.the.developer/linkedin-decision-makers-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/V1jurT0cSLy9uw9hl/builds/Kg2zdqQTdU7WWGQLx/openapi.json
