# Company Team & Decision-Maker Finder: Names, Titles, Emails (`pandadad0214/company-team-finder`) Actor

Use this to find the people behind a company from its own website: names, job titles, seniority, department, published emails, LinkedIn links and the email pattern, from team, leadership and staff pages. No LinkedIn scraping. Excel and CSV.

- **URL**: https://apify.com/pandadad0214/company-team-finder.md
- **Developed by:** [Panda Federation](https://apify.com/pandadad0214) (community)
- **Categories:** Lead generation, Business, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% 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.
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

## Company Team & Decision-Maker Finder: Names, Titles, Emails

**Find the people behind a company from its own website.** Give it company domains and Company Team & Decision-Maker Finder reads each company's public **team, leadership, about, staff, attorney and partner pages**. It returns every person it finds with **name, job title, seniority, department, decision-maker flag, published email, LinkedIn and bio links**. It also works out the **company's email pattern** from the emails the site publishes. Results come as **Excel and CSV**. Apify's free plan includes $5 of monthly platform credit, enough for about 2,500 people at $0.002 each (pricing below).

**No LinkedIn scraping, no logins, no cookies, no proxies: only the company's own public pages, with robots.txt respected.**

Most "employee finder" tools scrape LinkedIn, which breaks often, needs accounts and puts you at risk. Small and mid-size companies, agencies, law and accounting firms, clinics, VCs and nonprofits already list their leaders on their own site. **Company Team Finder** turns those pages into a clean contact sheet:

- 👥 **People from company sites:** name, title and bio-page link from team / leadership / about / staff pages (and schema.org Person data)
- 🎯 **Decision makers:** seniority (C-level, founder/owner, president, partner, VP, director, manager) and an `isDecisionMaker` flag
- 🏷️ **Department guess:** executive, sales, marketing, engineering, product, finance, operations, HR, legal, customer success, medical, research
- ✉️ **Emails:** published emails when the site shows them; otherwise the company's **email pattern** (first.last, flast, first…) learned from its own published emails, or a clearly labeled unverified first.last guess when the domain accepts email
- 🔗 **LinkedIn and bio links** exactly as linked from the team page
- 🧹 **Testimonials filtered:** "CEO of SomeClient" quotes and case-study names are skipped
- 🧮 **Filters:** decision makers only, title keywords, departments, max people per company
- 💸 **$0.002 per person.** 100 companies × 10 people cost $2. Companies with no readable team page cost nothing

### Who it's for

- **SDRs and founders doing outbound:** get the right names and titles for an account list in minutes
- **Agencies and recruiters:** map the leadership of target firms (law, accounting, agencies, clinics, startups)
- **Investors and M\&A teams:** see who runs each company in a pipeline
- **RevOps and data teams:** add people to CRM accounts that only have a domain
- **AI agents:** a reliable "who runs X and what's their title?" tool that never needs a login

### How to use it

1. Click **Try for free**.
2. Paste **company websites**, one per line (domains, URLs, or a work email). If you know the exact team page, paste that URL.
3. Optionally turn on **Decision makers only** or add **title keywords** (e.g. marketing, sales).
4. Click **Start**. 50 companies take about 2 minutes. Download **PEOPLE_XLSX** or **PEOPLE_CSV** from **Storage → Key-value store**, or use the dataset via API.

#### Input example

```json
{
  "companies": ["sparkbox.com", "viget.com", "https://www.fishmanhaygood.com/attorneys/"],
  "decisionMakersOnly": true,
  "maxPeoplePerCompany": 20
}
```

### Task examples

- **Account list → decision makers:** your 200 target domains with `decisionMakersOnly: true`; import the Excel into your CRM.
- **Marketing leaders only:** `{"companies": [...], "titleKeywords": ["marketing", "growth", "brand"]}`.
- **Law firm partners:** paste the firms' attorney-page URLs; filter by `seniority: partner`.
- **VC / accelerator partners:** `["ycombinator.com", "a16z.com"]` for the partner list with titles.
- **Chain it:** run [Company Website Enricher](https://apify.com/pandadad0214/company-website-enricher) for tech stack and socials, and [Company Hiring Signals](https://apify.com/pandadad0214/company-hiring-signals) to see who is hiring, then find the people here.

### Output example

One row per person. An illustrative row (the person and company are made up):

```json
{
  "company": "Example Co",
  "domain": "example.com",
  "name": "Jane Example",
  "firstName": "Jane",
  "lastName": "Example",
  "title": "Vice President of Business Development",
  "seniority": "vp",
  "department": "sales",
  "isDecisionMaker": true,
  "email": null,
  "emailGuess": "jane.example@example.com",
  "emailConfidence": "unverified common pattern",
  "linkedinUrl": null,
  "profileUrl": "https://example.com/team/jane-example",
  "sourceUrl": "https://example.com/our-team",
  "foundVia": "page",
  "agentSummary": "Jane Example: Vice President of Business Development at Example Co (vp, sales); likely email jane.example@example.com (unverified common pattern); source https://example.com/our-team"
}
```

#### Fields

| Field | What it is |
|---|---|
| `company`, `domain` | Company name (from the site) and domain |
| `name`, `firstName`, `lastName`, `title` | The person as listed on the site |
| `seniority`, `department`, `isDecisionMaker` | Guessed from the title |
| `email`, `emailGuess`, `emailConfidence` | Published email; or a pattern email with how sure we are (`pattern from N published emails` or `unverified common pattern`) |
| `linkedinUrl`, `profileUrl`, `otherLinks` | Links from the person's card on the team page |
| `sourceUrl`, `foundVia` | The page the person was found on; `page` or `schema.org` |
| `agentSummary` | One plain-English line per person |

#### Files in the key-value store

| Key | What it is |
|---|---|
| `PEOPLE_XLSX` | Excel workbook: **People** (decision makers highlighted), **Companies** (team pages found, email pattern, status), **Run log**, **Read me** |
| `PEOPLE_CSV` | People table as CSV |
| `SUMMARY` | JSON: per-company status, `topPeople`, a one-line `takeaway` and `nextStep` |

### For AI agents

Use this Actor to answer "who are the leaders / decision makers at <company>?" or to turn a list of domains into named contacts with titles. Call it with Apify's MCP server (`https://mcp.apify.com`, tool `call-actor`, Actor `pandadad0214/company-team-finder`) or the API (`POST https://api.apify.com/v2/acts/pandadad0214~company-team-finder/run-sync-get-dataset-items`).

Minimal input:

```json
{"companies": ["sparkbox.com"], "decisionMakersOnly": true}
```

Each dataset item includes:

- `agentSummary`: one line with name, title, company, seniority, email and source page
- `seniority`, `isDecisionMaker`, `department`: for filtering
- `email` (published) vs `emailGuess` + `emailConfidence`: never mix them up; verify guesses before sending

The run's key-value store has a `SUMMARY` record with every company's status (team pages found, or why none were), `topPeople`, a one-line `takeaway` and `nextStep`.

### Pricing

**Apify paid-plan discounts:** Bronze members pay 10% less, Silver 20% less and Gold 30% less per person. Free-plan prices are shown below; the discount applies automatically.

**$0.002 per person returned** (pay-per-event), plus a tiny Actor-start fee of $0.00005. Titles, seniority, emails, links, Excel, CSV and summary are included. Companies where nobody is found, and people removed by your filters, cost nothing. Your **maximum charge per run** is respected.

### FAQ

**Does it scrape LinkedIn?** No. It only reads the company's own public website. LinkedIn URLs come from links the company itself put on its team page.

**Why did a company return nobody?** Some sites have no team page, or load it only with JavaScript, or block crawlers in robots.txt. Those companies are listed in the Companies sheet with the reason and are free. If you know the team page URL, paste it directly.

**How accurate are the emails?** `email` is published on the site. `emailGuess` follows the pattern seen in the company's own published emails when there is evidence; otherwise it is the common first.last pattern, labeled **unverified**. Verify before you send, and follow CAN-SPAM / GDPR rules for B2B outreach.

**Can it find people at very large companies?** It finds whoever the company lists publicly (usually the leadership team). For full employee lists, large companies are better served by other sources.

**Is this legal?** It reads public business information that companies publish about their own staff, respects robots.txt and does not log in anywhere. Use the data for legitimate B2B purposes and honor opt-outs.

**Can I use it from code or an AI agent?** Yes, via the Apify API, the Python/JS clients, or as a tool through Apify's MCP server.

### More Panda Federation tools

- [Company Website Enricher](https://apify.com/pandadad0214/company-website-enricher)
- [Company Hiring Signals](https://apify.com/pandadad0214/company-hiring-signals)
- [Email Domain Security Checker](https://apify.com/pandadad0214/email-domain-security-checker)
- [Trucking Company Leads (FMCSA)](https://apify.com/pandadad0214/trucking-company-leads)
- [Local Business Leads](https://apify.com/pandadad0214/local-business-leads)

[All Panda Federation Actors on Apify](https://apify.com/pandadad0214)

Questions or ideas? Open an issue on this Actor's **Issues** tab.

### Changelog

- **2026-11-03:** First public release: team / leadership / about / staff page discovery (robots.txt respected), people from page cards and schema.org, testimonial filter, seniority and department, decision-maker filter, title and department filters, email pattern detection, LinkedIn and bio links, Excel and CSV, agent-friendly `agentSummary` and `takeaway`, pay-per-event pricing with Bronze/Silver/Gold discounts.

# Actor input Schema

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

One per line: a domain (acme.com), a website URL, or a work email (the domain is used). Paste the exact team page URL when you know it. Leave empty for a 2-company demo.

## `decisionMakersOnly` (type: `boolean`):

Keep only C-level, founders/owners, presidents, partners, VPs and directors/heads. Everyone else is skipped and not charged.

## `titleKeywords` (type: `array`):

Optional. Keep people whose title contains one of these words.

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

Optional. Keep only these departments (guessed from the title).

## `maxPeoplePerCompany` (type: `integer`):

Most senior people first. Caps cost on companies with huge staff pages.

## `maxPagesPerCompany` (type: `integer`):

Home page plus team, leadership, about and staff pages. Default 6.

## `maxCompanies` (type: `integer`):

You pay per person found; companies with nobody found are free.

## Actor input object example

```json
{
  "companies": [
    "sparkbox.com",
    "https://www.fishmanhaygood.com/attorneys/"
  ],
  "decisionMakersOnly": false,
  "titleKeywords": [
    "marketing",
    "sales",
    "operations"
  ],
  "maxPeoplePerCompany": 50,
  "maxPagesPerCompany": 6,
  "maxCompanies": 100
}
```

# Actor output Schema

## `table` (type: `string`):

No description

## `xlsx` (type: `string`):

No description

## `csv` (type: `string`):

No description

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

Run-level summary record. Agent-friendly keys: `takeaway` (one-line result), `companies`, `topPeople`, `nextStep` and `nextSteps`.

# 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": [
        "sparkbox.com",
        "viget.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("pandadad0214/company-team-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": [
        "sparkbox.com",
        "viget.com",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("pandadad0214/company-team-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": [
    "sparkbox.com",
    "viget.com"
  ]
}' |
apify call pandadad0214/company-team-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,pandadad0214/company-team-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/XA0Q3HJntC2dbzbs7/builds/CaqihuKNjjKgplHWo/openapi.json
