People Finder & Email Verifier
Pricing
from $17.00 / 1,000 person founds
People Finder & Email Verifier
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.
Pricing
from $17.00 / 1,000 person founds
Rating
0.0
(0)
Developer
Mamba Labs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
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 makes it different
- Quick start
- API keys
- Input reference
- Output reference
- Cascade architecture
- Pricing
- Free tier
- GDPR and privacy
- 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
{"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:
{"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 | 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 | 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 | Email discovery relies on Icypeas alone. |
reoonApiKey | Email verification. Deliverability status per address. | 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 | 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 | 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. |
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 | Website: mambabuilt.com
Built by Mamba Labs.