# People Finder & Email Verifier (`mambalabs/people-finder`) Actor

Find people at any company by seniority and department. Four-layer cascade: website, SERP, and database enrichment with company-match scoring. Two-provider email waterfall (Icypeas, Prospeo) plus catch-all verification (Reoon, BounceBan). No direct LinkedIn scraping.

- **URL**: https://apify.com/mambalabs/people-finder.md
- **Developed by:** [Mamba Labs](https://apify.com/mambalabs) (community)
- **Categories:** Lead generation, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $17.00 / 1,000 person founds

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/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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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

## People Finder

Find senior decision-makers at any company, discover their email, and verify it actually delivers.

Give it a domain. It returns a flat row per person with name, title, normalized seniority and department, LinkedIn profile URL, verified email, and the evidence behind every match. Built for Clay, CRM enrichment, and outbound prospecting.

---

### What's Inside

- [What it does](#what-it-does)
- [What makes it different](#what-makes-it-different)
- [Quick start](#quick-start)
- [API keys](#api-keys)
- [Input reference](#input-reference)
- [Output reference](#output-reference)
- [Cascade architecture](#cascade-architecture)
- [Pricing](#pricing)
- [Free tier](#free-tier)
- [GDPR and privacy](#gdpr-and-privacy)
- [Mamba Labs GTM Actor Fleet](#mamba-labs-gtm-actor-fleet)

---

### What it does

People Finder resolves a company domain into a list of the senior people you actually want to reach. It runs a four-layer cascade (cache, the company's own website, a search API, and a licensed contact database), stopping as soon as it has enough people who pass your filters. Every candidate is then company-match scored so you do not receive ex-employees, investors, or people at similarly-named companies. Survivors go through a two-provider email waterfall and a two-stage deliverability check that resolves catch-all domains instead of shrugging at them.

---

### What makes it different

**It never scrapes LinkedIn.** Zero requests to `linkedin.com` — no page fetches, no cookies, no authentication, no session. Profile URLs come from a search provider's public index and from licensed database APIs. This is enforced in code at the HTTP transport layer, not left to convention.

**Company matching, not keyword matching.** A search for `"Stripe" ("CRO" OR "VP of Sales")` returns everyone whose page mentions Stripe: former employees, investors, advisors, and people at Stripes Clothing Co. This actor parses the current-position clause of the headline, the profile subtitle, semicolon-delimited role history, and comma-form employer names, then drops anyone who cannot be shown to *currently* work at the target. Measured on a 20-company benchmark: 554 candidates in, 219 kept, zero wrong-company results in the delivered set.

**Seniority and department classification.** Titles are normalized into nine seniority levels and fourteen departments by a deterministic rule table, so `"Head of Revenue Operations"`, `"VP, RevOps"`, and `"CRO"` all become filterable values. Ask for `c_suite` and you get C-level people, not Account Executives who mention the CEO.

**Verification that resolves catch-alls.** Most verifiers stop at "risky" on a catch-all domain and leave you guessing. This one escalates those addresses to a second provider that determines whether that specific mailbox exists. `email_verified` is only `true` on a definitive answer, only `false` on a definitive bounce, and `null` when genuinely unresolved — three distinct facts, never collapsed into two.

---

### Quick start

```json
{
  "domain": "stripe.com",
  "serpApiKey": "your-serper-key"
}
````

That returns five senior people at Stripe with LinkedIn URLs. Add filters and enrichment keys as you need them:

```json
{
  "domain": "stripe.com",
  "targetCount": 10,
  "seniority": ["c_suite", "vp", "head"],
  "departments": ["sales", "marketing"],
  "serpApiKey": "your-serper-key",
  "icypeasApiKey": "your-icypeas-key",
  "reoonApiKey": "your-reoon-key"
}
```

***

### API keys

**Every key is yours. You supply it, the provider bills you directly, and this actor never sees, stores, logs, or marks up a third-party credential.** Keys are `isSecret` fields, encrypted by Apify, and are redacted from run logs.

The actor works with **no keys at all** — it will parse the company's own team page and return whoever it finds there. Each key unlocks one more layer.

| Key | Unlocks | Get it at | Without it |
|---|---|---|---|
| `serpApiKey` | **The search layer.** The single biggest lever on how many people you get. | [serper.dev](https://serper.dev) | Results come from the company website only. Measured at 0.65 people/company. |
| `icypeasApiKey` | **The database layer** (fills whatever the first three layers miss) **and the first email provider.** | [icypeas.com](https://icypeas.com) | Any shortfall is reported in the run summary; email discovery falls to Prospeo. |
| `prospeoApiKey` | **The second email provider.** Runs only for people the first could not resolve. | [prospeo.io](https://prospeo.io) | Email discovery relies on Icypeas alone. |
| `reoonApiKey` | **Email verification.** Deliverability status per address. | [reoon.com](https://emailverifier.reoon.com) | Emails are returned unverified, `email_verified: null`. |
| `bounceBanApiKey` | **Catch-all resolution.** Runs only on addresses the primary verifier could not settle. | [bounceban.com](https://bounceban.com) | Catch-all addresses stay `catch_all` with `email_verified: null`. |
| `claudeApiKey` | LLM fallback for job titles the rule table cannot classify. One batched call per run, never per person. | [console.anthropic.com](https://console.anthropic.com) | Those specific rows have `seniority` and `department` as `null`. Nothing else is affected. |

**Recommended minimum for real prospecting:** a Serper key. **For full contact records:** Serper + Icypeas + Reoon.

***

### Input reference

#### Company target (provide at least one)

| Field | Type | Default | Description |
|---|---|---|---|
| `domain` | string | — | Bare domain, no scheme or trailing slash. `stripe.com` |
| `domains` | array | — | Batch list of bare domains. Takes precedence over `domain`. Every output row echoes its source domain. |
| `company_name` | string | — | Used when no domain is available, or as a disambiguation hint alongside one. |
| `linkedin_company_url` | string | — | `https://www.linkedin.com/company/stripe`. Skips internal company resolution. |

#### API keys (all optional, all secret)

| Field | Type | Description |
|---|---|---|
| `serpApiKey` | string (secret) | Serper.dev key. Unlocks the search layer. |
| `icypeasApiKey` | string (secret) | Icypeas key. Unlocks the database layer and the first email provider. |
| `prospeoApiKey` | string (secret) | Prospeo key. Second email provider. |
| `reoonApiKey` | string (secret) | Reoon key. Primary email verification. |
| `bounceBanApiKey` | string (secret) | BounceBan key. Catch-all resolution. |
| `claudeApiKey` | string (secret) | Anthropic key. Title-classification fallback. |

#### Filters

| Field | Type | Default | Description |
|---|---|---|---|
| `targetCount` | integer | `5` | Maximum people per company, 1–100. Billing is per person returned, so this is a hard cost ceiling. |
| `seniority` | array | all | `founder`, `c_suite`, `vp`, `director`, `head`, `manager`, `senior`, `individual_contributor`, `entry` |
| `departments` | array | all | `executive`, `sales`, `marketing`, `revops`, `customer_success`, `product`, `engineering`, `design`, `finance`, `hr`, `legal`, `it`, `operations`, `other` |
| `jobTitles` | array | — | Case-insensitive substring match on the current title. Any match qualifies. Overrides the derived title search. |
| `excludeJobTitles` | array | — | Any match drops the person, even if they matched an include. |
| `countries` | array | — | ISO 3166-1 alpha-2 codes: `US`, `GB`, `NL` |
| `suppressLinkedInUrls` | array | — | Profile URLs to exclude. See [GDPR and privacy](#gdpr-and-privacy). |

#### Options

| Field | Type | Default | Description |
|---|---|---|---|
| `includeEmails` | boolean | `true` | Run the email waterfall. Turn off to build an org map cheaply. |
| `verifyEmails` | boolean | `true` | Verify discovered emails, escalating catch-alls. |
| `verifyPosition` | boolean | `false` | Reserved for a future release; fields are present and `null`. |
| `batchSize` | integer | `5` | Companies searched concurrently in batch mode, 1–10. |
| `skipCache` | boolean | `false` | Force a fresh search. Results are cached 7 days (14 for search-backed rows). |

***

### Output reference

One flat row per person. **Every field is always present**; missing values are `null`.

| Field | Type | Description |
|---|---|---|
| `full_name` | string | Full display name |
| `first_name` / `last_name` | string | Split from the full name, for merge fields |
| `name_normalized` | string | Lowercased, accent-stripped, punctuation-free. A dedupe key against your CRM. |
| `job_title` | string | Current title at the target company |
| `headline` | string | Public profile headline, when richer than the title |
| `seniority` | string | One of the nine normalized levels, or `null` |
| `department` | string | One of the fourteen normalized departments, or `null` |
| `linkedin_profile_url` | string | Canonical `https://www.linkedin.com/in/<slug>`. Locale hosts, tracking params, and `/pub/` forms are all normalized to this. |
| `country` | string | ISO 3166-1 alpha-2, or `null`. Never a raw address string. |
| `city` | string | City, or `null` |
| `company_domain` | string | Source domain. Your join key back to the account table. |
| `company_name` | string | Company name |
| `linkedin_company_url` | string | Company LinkedIn page, or `null` |
| `email` | string | Business email, or `null` |
| `email_status` | string | `valid`, `invalid`, `catch_all`, `risky`, `unknown`, `not_requested` |
| `email_verified` | boolean | `true` on a definitive valid verdict, `false` on a definitive bounce, `null` when unresolved |
| `email_source` | string | `icypeas`, `prospeo`, or `database` |
| `verification_source` | string | `reoon` or `bounceban` |
| `email_provider` / `email_confidence` | string | Mailbox provider and provider confidence grade, when supplied |
| `position_verified` / `position_verification_reasoning` | boolean / string | Reserved for a future release |
| `match_confidence` | string | Level plus reason: `"high: current employer Stripe in profile subtitle"` |
| `matched_filters` | array | Which of your filters this person satisfied |
| `source` | string | Contributing layers, comma-joined: `"website,serp"` |
| `run_date` | string | ISO 8601 timestamp |

Every run also writes a `RUN_SUMMARY` key-value record with per-layer counts, filter drop reasons, per-company shortfalls, `layers_available`, and a plain-language `coverage_note`.

***

### Cascade architecture

Four layers, cheapest first. The cascade stops as soon as it has enough people who would **survive your filters** — not merely enough raw candidates.

**Layer 0 — Cache.** Keyed by domain *and* your exact filter set, so a narrow search never reads a broad one's rows. 7-day TTL, 14 days for search-backed results. A cache hit costs you nothing: no `company-searched`, no `person-found`.

**Layer 1 — The company's own website.** Fetches `robots.txt`, honors it, then probes `/team`, `/about`, `/leadership`, `/people` and four more. Reads schema.org `Person` data, then card markup, then linked profiles. Free, and the strongest evidence available — the company published these people itself. Candidates are still company-match scored, because investor and board sections sit on the same pages as leadership.

**Layer 2 — Search API.** Queries `site:linkedin.com/in "<company>" (<senior titles>)` via Serper. At most **three searches per company**: one on the brand name, one on the domain variant, and one on C-level acronyms when you ask for `c_suite`. Requires your key.

**Layer 3 — Licensed database.** Fires only on a shortfall, asks only for the shortfall, and filters on the same senior titles. Requires your Icypeas key.

**Then:** dedupe and merge across layers, normalize titles and locations, suppress opted-out profiles, enforce your filters, discover email, verify email.

***

### Pricing

Pay per event. You are billed for what the actor delivers, not for attempts. Apify plan discounts apply automatically.

| Event | Price | Charged when |
|---|---|---|
| `actor-start` | $0.010 | Once per run |
| `company-searched` | $0.025 | Once per company that reaches a paid layer. Not charged for a cache hit or website-only resolution. |
| `person-found` | $0.020 | Per person returned that passed company matching and all your filters |
| `email-found` | $0.040 | Only when an email is actually returned |
| `email-verified` | $0.015 | Per email confirmed deliverable |
| `position-verified` | $0.015 | Reserved for a future release |

**Third-party API costs are separate and are not marked up.** Your search, database, email, and verification providers bill your own accounts directly. The prices above cover this actor's compute and orchestration only.

**Worked example — 10 companies, `targetCount: 10`, full pipeline:**

| Line | Calculation | Cost |
|---|---|---|
| Actor start | 1 × $0.010 | $0.01 |
| Companies searched | 10 × $0.025 | $0.25 |
| People found | 100 × $0.020 | $2.00 |
| Emails found | 100 × $0.040 | $4.00 |
| Emails verified | 100 × $0.015 | $1.50 |
| **Total** | | **$7.76** |

That is **$0.078 per fully enriched, verified contact.** Names and titles only (no email): **$2.26 for 100 people**, or $0.023 each.

***

### Free tier

| Plan | People per month | Email discovery | Verification |
|---|---|---|---|
| **Free Apify plan** | **50** (resets on the 1st) | Not available | Not available |
| **Any paid plan** | Unlimited | Available | Available |

Free-plan usage is cumulative across all runs in a month. Free-plan runs still receive fully resolved, company-verified, seniority-classified people — they just do not receive email addresses. The run summary states this explicitly rather than leaving you to infer it.

Upgrade: https://apify.com/pricing

***

### GDPR and privacy

This actor returns B2B contact data sourced from publicly accessible sources. You are the data controller under GDPR, CCPA, and applicable privacy laws. Use for legitimate B2B prospecting only. Comply with all applicable data protection regulations including transparency and opt-out obligations when using enriched data in outreach. To submit a data subject request, contact privacy@mambabuilt.com.

**What this actor does not do:** it sends no requests to `linkedin.com`, uses no cookies, transmits no authentication tokens or session credentials to any social network, and retains no personal data after a run completes. Results live in your own Apify dataset, under your control.

**Suppression.** `suppressLinkedInUrls` takes a list of profile URLs to exclude. They are removed **before** any billing event fires, so suppressed people cost you nothing. URLs are canonicalized before matching, so locale subdomains, tracking parameters, casing, and trailing slashes all match the same person — which means you can feed one run's output straight back in as the next run's suppression list.

Two uses: keeping already-contacted prospects out of repeat runs, and honoring removal requests so someone who asked to be excluded never re-enters your pipeline. This is a control you operate as the data controller; it does not replace suppression handling in your own CRM and sequencer.

***

### Mamba Labs GTM Actor Fleet

People Finder is the contact-level layer. The companion actors work at the account level, and they compose: resolve and score accounts first, then find people only at the accounts worth contacting.

| Actor | Actor ID | What it does |
|---|---|---|
| Company Firmographic Enricher | `YlUtLWjfPpqykmB8g` | Domain to employee band, industry, HQ, founded year, revenue estimate |
| Domain to LinkedIn URL Resolver | `3HtnSaqPHOg1Qg5gx` | Domain or name to LinkedIn company URL with confidence scoring |
| ICP Fit Scorer | `W161DT8W4kW55dMFh` | Scores a company against your ideal customer profile, 0 to 100 |

A typical chain: resolve the company URL (`3HtnSaqPHOg1Qg5gx`), enrich firmographics (`YlUtLWjfPpqykmB8g`), score the account (`W161DT8W4kW55dMFh`), then run People Finder on everything above your threshold.

All actors: [apify.com/mambalabs](https://apify.com/mambalabs) | Website: [mambabuilt.com](https://mambabuilt.com)

Built by Mamba Labs.

# Actor input Schema

## `domain` (type: `string`):

Bare domain without https:// or trailing slash. Example: stripe.com

## `company_name` (type: `string`):

Used when no domain is available, or as a disambiguation hint alongside a domain.

## `linkedin_company_url` (type: `string`):

Example: https://www.linkedin.com/company/stripe. Skips internal company resolution when provided.

## `domains` (type: `array`):

Optional list of bare domains. Takes precedence over the single domain field. Each domain is searched independently and every output row echoes its source domain.

## `targetCount` (type: `integer`):

Maximum people to return per company. Billing is per person actually returned, so a lower number is a hard cost cap.

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

Case-insensitive substring match against the person's current title. Any match qualifies. Leave empty for no title filter. Example: VP Sales, Head of Growth

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

Case-insensitive substring match. A person matching any of these is dropped even if they matched an include. Example: intern, assistant, former

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

Filter to these normalized seniority levels. Leave empty for all.

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

Filter to these normalized departments. Leave empty for all.

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

ISO 3166-1 alpha-2 codes. Filters to people located in these countries. Example: US, GB, NL

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

Discover a business email for each person found, using your Icypeas and/or Prospeo keys. Billed only when an email is actually returned. Turn off to build an org map cheaply.

## `verifyEmails` (type: `boolean`):

Check deliverability of each email found, escalating catch-all domains to a second provider for a definitive answer. Requires a Reoon and/or BounceBan key.

## `verifyPosition` (type: `boolean`):

Check that the person still holds the returned title at the target company, and report the reasoning. Reduces bounced outreach to people who have moved on.

## `suppressLinkedInUrls` (type: `array`):

LinkedIn profile URLs to exclude from results. Use to suppress already-contacted prospects or honor data subject removal requests.

## `batchSize` (type: `integer`):

How many companies to search concurrently in batch mode. Default 5, maximum 10.

## `skipCache` (type: `boolean`):

Results are cached for 7 days and reused on repeat lookups. Set true to force a fresh search.

## `serpApiKey` (type: `string`):

Serper.dev API key. Unlocks the search layer, which is the highest-coverage source of LinkedIn profile URLs. Without it this actor falls back to company website parsing only, which returns far fewer people. Get a key at https://serper.dev. You are billed by Serper for searches; this actor does not mark them up.

## `prospeoApiKey` (type: `string`):

Second provider in the email waterfall. Used only for people the first provider could not resolve. Get a key at https://prospeo.io. Billed to you by Prospeo; this actor does not mark it up.

## `reoonApiKey` (type: `string`):

Primary email verification. Returns deliverability status for each discovered address. Get a key at https://emailverifier.reoon.com. Billed to you by Reoon.

## `bounceBanApiKey` (type: `string`):

Catch-all resolution. Used only when the primary verifier returns catch-all or risky, to determine whether that specific mailbox exists. Get a key at https://bounceban.com. Billed to you by BounceBan.

## `icypeasApiKey` (type: `string`):

Optional. Only used for the licensed-database fallback layer, which runs when the company website and public search results do not yield enough people. Leave empty to skip that layer entirely; the run still succeeds and reports any shortfall in the summary.

## `claudeApiKey` (type: `string`):

Optional. Only used to classify job titles that the built-in rule table cannot place into a seniority and department. One batched call per run, never per person. Leave empty to leave those two fields null on the affected rows.

## Actor input object example

```json
{
  "domain": "stripe.com",
  "targetCount": 5,
  "includeEmails": true,
  "verifyEmails": true,
  "verifyPosition": false,
  "batchSize": 5,
  "skipCache": false
}
```

# 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 = {
    "domain": "stripe.com"
};

// Run the Actor and wait for it to finish
const run = await client.actor("mambalabs/people-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 = { "domain": "stripe.com" }

# Run the Actor and wait for it to finish
run = client.actor("mambalabs/people-finder").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 '{
  "domain": "stripe.com"
}' |
apify call mambalabs/people-finder --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "People Finder & Email Verifier",
        "description": "Find people at any company by seniority and department. Four-layer cascade: website, SERP, and database enrichment with company-match scoring. Two-provider email waterfall (Icypeas, Prospeo) plus catch-all verification (Reoon, BounceBan). No direct LinkedIn scraping.",
        "version": "0.0",
        "x-build-id": "BOZcwtcbSsdKAFTvC"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/mambalabs~people-finder/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-mambalabs-people-finder",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/mambalabs~people-finder/runs": {
            "post": {
                "operationId": "runs-sync-mambalabs-people-finder",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/mambalabs~people-finder/run-sync": {
            "post": {
                "operationId": "run-sync-mambalabs-people-finder",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "domain": {
                        "title": "Company Domain",
                        "type": "string",
                        "description": "Bare domain without https:// or trailing slash. Example: stripe.com"
                    },
                    "company_name": {
                        "title": "Company Name (optional)",
                        "type": "string",
                        "description": "Used when no domain is available, or as a disambiguation hint alongside a domain."
                    },
                    "linkedin_company_url": {
                        "title": "LinkedIn Company URL (optional)",
                        "type": "string",
                        "description": "Example: https://www.linkedin.com/company/stripe. Skips internal company resolution when provided."
                    },
                    "domains": {
                        "title": "Company Domains (batch)",
                        "type": "array",
                        "description": "Optional list of bare domains. Takes precedence over the single domain field. Each domain is searched independently and every output row echoes its source domain.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "targetCount": {
                        "title": "People Per Company",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Maximum people to return per company. Billing is per person actually returned, so a lower number is a hard cost cap.",
                        "default": 5
                    },
                    "jobTitles": {
                        "title": "Job Titles To Include",
                        "type": "array",
                        "description": "Case-insensitive substring match against the person's current title. Any match qualifies. Leave empty for no title filter. Example: VP Sales, Head of Growth",
                        "items": {
                            "type": "string"
                        }
                    },
                    "excludeJobTitles": {
                        "title": "Job Titles To Exclude",
                        "type": "array",
                        "description": "Case-insensitive substring match. A person matching any of these is dropped even if they matched an include. Example: intern, assistant, former",
                        "items": {
                            "type": "string"
                        }
                    },
                    "seniority": {
                        "title": "Seniority Levels",
                        "type": "array",
                        "description": "Filter to these normalized seniority levels. Leave empty for all.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "founder",
                                "c_suite",
                                "vp",
                                "director",
                                "head",
                                "manager",
                                "senior",
                                "individual_contributor",
                                "entry"
                            ]
                        }
                    },
                    "departments": {
                        "title": "Departments",
                        "type": "array",
                        "description": "Filter to these normalized departments. Leave empty for all.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "executive",
                                "sales",
                                "marketing",
                                "revops",
                                "customer_success",
                                "product",
                                "engineering",
                                "design",
                                "finance",
                                "hr",
                                "legal",
                                "it",
                                "operations",
                                "other"
                            ]
                        }
                    },
                    "countries": {
                        "title": "Countries",
                        "type": "array",
                        "description": "ISO 3166-1 alpha-2 codes. Filters to people located in these countries. Example: US, GB, NL",
                        "items": {
                            "type": "string"
                        }
                    },
                    "includeEmails": {
                        "title": "Find Email Addresses",
                        "type": "boolean",
                        "description": "Discover a business email for each person found, using your Icypeas and/or Prospeo keys. Billed only when an email is actually returned. Turn off to build an org map cheaply.",
                        "default": true
                    },
                    "verifyEmails": {
                        "title": "Verify Email Addresses",
                        "type": "boolean",
                        "description": "Check deliverability of each email found, escalating catch-all domains to a second provider for a definitive answer. Requires a Reoon and/or BounceBan key.",
                        "default": true
                    },
                    "verifyPosition": {
                        "title": "Verify Position Is Current",
                        "type": "boolean",
                        "description": "Check that the person still holds the returned title at the target company, and report the reasoning. Reduces bounced outreach to people who have moved on.",
                        "default": false
                    },
                    "suppressLinkedInUrls": {
                        "title": "Suppress These LinkedIn URLs",
                        "type": "array",
                        "description": "LinkedIn profile URLs to exclude from results. Use to suppress already-contacted prospects or honor data subject removal requests.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "batchSize": {
                        "title": "Batch Size",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "How many companies to search concurrently in batch mode. Default 5, maximum 10.",
                        "default": 5
                    },
                    "skipCache": {
                        "title": "Skip Cache",
                        "type": "boolean",
                        "description": "Results are cached for 7 days and reused on repeat lookups. Set true to force a fresh search.",
                        "default": false
                    },
                    "serpApiKey": {
                        "title": "Search API Key (optional)",
                        "type": "string",
                        "description": "Serper.dev API key. Unlocks the search layer, which is the highest-coverage source of LinkedIn profile URLs. Without it this actor falls back to company website parsing only, which returns far fewer people. Get a key at https://serper.dev. You are billed by Serper for searches; this actor does not mark them up."
                    },
                    "prospeoApiKey": {
                        "title": "Prospeo API Key (optional)",
                        "type": "string",
                        "description": "Second provider in the email waterfall. Used only for people the first provider could not resolve. Get a key at https://prospeo.io. Billed to you by Prospeo; this actor does not mark it up."
                    },
                    "reoonApiKey": {
                        "title": "Reoon API Key (optional)",
                        "type": "string",
                        "description": "Primary email verification. Returns deliverability status for each discovered address. Get a key at https://emailverifier.reoon.com. Billed to you by Reoon."
                    },
                    "bounceBanApiKey": {
                        "title": "BounceBan API Key (optional)",
                        "type": "string",
                        "description": "Catch-all resolution. Used only when the primary verifier returns catch-all or risky, to determine whether that specific mailbox exists. Get a key at https://bounceban.com. Billed to you by BounceBan."
                    },
                    "icypeasApiKey": {
                        "title": "Icypeas API Key (optional)",
                        "type": "string",
                        "description": "Optional. Only used for the licensed-database fallback layer, which runs when the company website and public search results do not yield enough people. Leave empty to skip that layer entirely; the run still succeeds and reports any shortfall in the summary."
                    },
                    "claudeApiKey": {
                        "title": "Claude API Key (optional)",
                        "type": "string",
                        "description": "Optional. Only used to classify job titles that the built-in rule table cannot place into a seniority and department. One batched call per run, never per person. Leave empty to leave those two fields null on the affected rows."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
