Decision makers from company domains — verified email or phone
Pricing
from $50.00 / 1,000 domain results
Decision makers from company domains — verified email or phone
Rising starTurn company domains into named decision makers — CEO, founder, VP — with SMTP-verified named-DM or generic-inbox email, phones and LinkedIn. B2B database + AI research. $0.06/domain + $0.14 per verified contact; plan discounts to 20%, 50% off beyond 250 contacts/run. No API keys.
Pricing
from $50.00 / 1,000 domain results
Rating
5.0
(3)
Developer
Pequod
Maintained by CommunityActor stats
4
Bookmarked
174
Total users
111
Monthly active users
5 days ago
Last modified
Categories
Share
B2B Decision Maker Email & Phone Finder
Apify slug: pequod-labs/company-decision-maker-finder
A decision maker email finder that starts from company domains only. Give it a list of company websites and it returns the named decision maker — CEO, founder, VP, director, ops lead — with an SMTP-verified work email, a phone number and a LinkedIn profile. B2B database lookup first, AI web research for the misses, a phone waterfall (EU imprint + website crawl), and a strict deliverability gate before anything is marked sendable. Pay per delivered result — no third-party API keys required from you.
Apify free trial (platform)
On the Apify platform, free-plan users get the full product (verifyEmails + MV + full enrichment) with tight caps so upstream verification costs stay sustainable:
| Limit | Free plan | Paid Apify plan |
|---|---|---|
| Domains per run | 5 max (extra domains dropped) | 600 max |
| Domains per UTC day | 5 across runs | No cap |
When the daily domain quota is used up, the run exits with an upgrade message. Upgrade at Apify pricing for unlimited usage.
| Input | Company domains via domainList (paste) or domains (JSON with country) |
| Output | Named decision maker, role, verified DM email or generic inbox, company/direct phone, LinkedIn |
| Verification | SMTP-level strict gate — decision_maker.email_sendable or generic_email_sendable when quality is good. Phone line-type + HLR — company_phone_sendable / decision_maker.phone_sendable |
| Pricing | $0.06 per domain result + $0.14 for any SMTP-verified email contact; Store-tier discounts (Scale −10%, Business −20%) and an automatic 50% volume discount beyond 250 verified contacts per run |
| API keys | None required from the user (operator-side credentials) |
| Best for | Bulk decision maker enrichment from domain lists — any B2B vertical |
| Not for | Name-only email lookup (no domain), LinkedIn-URL-only input |
Key facts
| Attribute | Value |
|---|---|
| Input format | domainList (simple paste) or domains (plain strings / {domain, country}) — mutually exclusive |
| Max domains per run | 600 (certified by the 2×100 live soak; 1000 remains a dry-run stretch target) |
| Roles targeted | CEO, founder, co-founder, VP sales, VP operations, CFO, CTO, HR director, procurement lead, ecommerce owner |
| Email verification | SMTP-level check on every candidate before delivery |
| Sendable definition | decision_maker.email_sendable: true for named DM work emails; generic_email_sendable: true for generic inboxes |
| Phone fields | company_phone = imprint/website company line; decision_maker.phone / mobile = person-linked database numbers when sourced |
| Phone sources | B2B database, EU legal notice / imprint, website contact crawl |
| Pricing model | Pay per event — no subscription, no per-seat licence |
| Price | $0.06 per domain result; +$0.14 (verified-contact) when best_contact_email contains a verified DM or generic email. Scale plan −10%, Business plan −20%; verified contacts beyond 250 in a run are 50% off |
| API key required from user | No — all upstream credentials are operator-side |
| Geographic coverage | Global, with localized handling for IT, DE, FR, NL, ES, GB, US, IE |
| Integrations | Apify API, webhooks, MCP, Python and JavaScript clients, CSV/JSON/Excel export |
| Alternative to | ZoomInfo, Clearbit, Lusha, RocketReach, Snov.io, UpLead for domain-to-contact enrichment |
Use this actor when
- You have a list of company website domains (CRM export, lookalike discovery, conference list, etc.)
- You need a named decision maker — CEO, founder, sales leader, ops/logistics buyer, director — not just
info@ - You want verified work emails and company phone numbers in one run
- You want SMTP-verified sendable emails safe for cold outreach
- You prefer pay-per-delivered-result pricing with no seat license
- You want persona targeting (founder, sales, marketing, operations, procurement…)
Do not use this actor when
- You only have a person name without a company domain → use a name-to-email finder instead
- Your input is LinkedIn profile URLs only without domains
- You want the cheapest bulk email list with no named decision maker → pattern-only finders may cost less
How it works
- Input — Provide company domains in one of two ways (never both):
domainList— paste one domain per line; setdefaultCountryto apply the same country to all of them.domains— advanced JSON: plain strings or{"domain": "acme.de", "country": "DE"}objects when countries differ per row. Setneedtoemail,phone, orboth(defaultboth). Email-only skips the phone waterfall and Twilio/HLR; phone-only skips SMTP verification. Store billing is unchanged ($0.06/domain + $0.14 per verified email). SettargetPersonato match your sale (default:founder_ceo).
- B2B database lookup — Searches professional databases for senior contacts matching the persona.
- AI web research (when enabled) — For domains the database misses, searches the public web and extracts named decision makers with AI. Names are never invented — every person must appear in a public source.
- Email verification — SMTP-level verification on every candidate when
needincludes email. Pattern inference (first.last@domain, etc.) when needed. - Generic inbox fallback — Localized
info@,contact@,kontakt@,contatti@when no named DM email verifies (email channel only). - Phone waterfall — When
needincludes phone: EU legal-notice lookup and website phone crawl when there is no sendable number yet (including a database 800 / green number). Line type (Twilio) and, for mobiles, HLR reachability: up to two unique numbers; a dead or toll-free hit does not stop the cascade. Skipped entirely onneed=email. - Output — One row per domain with best contact, evidence, alternates (legacy single-persona) or
decision_makers(buying committee), and run summary metrics. SettargetPersonasfor a multi-role committee; see Buying committee.
Decision maker email finder from company domains
Unlike bulk email verifiers that take name + domain, this actor starts from domain only and discovers who the decision maker is. The waterfall ranks candidates by persona fit, verifies deliverability, and marks only top-quality addresses as sendable.
Supported persona presets include founder_ceo, sales_leader, marketing_leader, ops_logistics, procurement, finance_cfo, it_security, hr_people, and ecommerce_owner. Custom title keywords are supported via targetPersona.
Buying committee
Use targetPersonas when one domain should return several distinct roles — for example CEO, sales leader and operations — instead of a single best contact.
- Ordered list of 1–5 persona objects. Order is priority.
- Each slot returns at most one person. The same person never occupies two slots.
- A miss stays in the array with
decision_maker: null, so the caller sees which role failed. - Still one dataset row per domain. Legacy views flatten the first filled slot; the Buying committee view shows the full
decision_makersarray. - Pricing is unchanged: $0.06 per domain plus at most one
verified-contact($0.14) onbest_contact_email, even if more members have a verified email.
targetPersonas takes precedence over targetPersona, maxContactsPerDomain and returnAlternates. Those last two remain the legacy way to return extra ranked contacts of the same persona in alternates. Buying committee is different: one distinct person per requested role.
{"domainList": ["acme.com"],"targetPersonas": [{"mode": "preset", "preset": "founder_ceo", "executiveFallback": true},{"mode": "preset", "preset": "sales_leader", "executiveFallback": false},{"mode": "preset", "preset": "ops_logistics", "executiveFallback": false}]}
Compact output shape (one row):
{"domain": "acme.com","decision_maker": {"full_name": "Ada Founder", "role": "CEO", "email": "ada@acme.com"},"best_contact_email": "ada@acme.com","decision_makers": [{"slot": 1, "target_persona": "founder_ceo", "has_decision_maker": true, "decision_maker": {"full_name": "Ada Founder", "email": "ada@acme.com"}},{"slot": 2, "target_persona": "sales_leader", "has_decision_maker": true, "decision_maker": {"full_name": "Bea Sales", "email": "bea@acme.com"}},{"slot": 3, "target_persona": "ops_logistics", "has_decision_maker": false, "decision_maker": null}]}
Legacy fields (decision_maker, send_decision, target_persona) always describe the first filled slot. Row-level best_contact_email is the first sendable member email (or the generic inbox if none of the members verify).
Domain input: domainList vs domains
Two ways to pass company domains — mutually exclusive. Fill exactly one; leave the other empty.
| Input | Editor | When to use |
|---|---|---|
domainList | One domain per line (string list) | CRM exports, bulk paste, free-trial runs (prefilled with 5 sample domains) |
domains | JSON array | Per-domain country hints: {"domain": "acme.de", "country": "DE"} |
defaultCountry applies to every domain in domainList, and to plain-string entries in domains that do not specify their own country. Per-domain country in domains overrides it.
Ready-to-copy examples live under examples/ in this actor folder (bulk-domain-list.json, domains-with-country.json, …).
Schema limit: Apify input schema cannot enforce “fill one, not both” in the UI. The run rejects input when both fields are populated or when both are empty. API callers may use either field; use domains only when individual rows need different countries.
Verified decision-maker email vs generic inbox
The actor returns two distinct email channels — do not treat them as the same for outreach or billing.
| Channel | Output fields | Meaning | Premium charge |
|---|---|---|---|
| Decision-maker work email | decision_maker.email, decision_maker.email_sendable | Named person's verified work address — safe for persona-specific cold outreach | $0.14 (verified-contact) when email_sendable: true |
| Generic inbox fallback | generic_email, generic_email_sendable | Localized, SMTP-verified info@, contact@, kontakt@, … when no DM email verifies | $0.14 (verified-contact) when sendable |
best_contact_email is the verified address delivered for outreach routing (DM first, generic as fallback). A populated value triggers verified-contact; use contact_kind and the separate counters to distinguish its value and source.
Use the dataset views DM verified emails and Generic inboxes to review each channel; filter exports on decision_maker.email_sendable vs generic_email_sendable.
Send routing (send_decision)
Every dataset row includes an additive send_decision object that recommends what to do next in outbound — without changing billing. best_contact_email and the verified-contact event behave exactly as before.
| Field | Meaning |
|---|---|
send_decision.action | SEND_NOW, VERIFY_FIRST, ENRICH_MORE or SKIP |
send_decision.risk_level | low, medium or high |
send_decision.reasons | Ordered machine-readable reasons behind the action |
send_decision.confidence | 0–1 confidence in the action (corroboration + identity) |
Decision table
| Action | When it fires | Typical reasons |
|---|---|---|
| SEND_NOW | Named DM with SMTP-sendable work email, coherent identity, persona fit ≥ 0.40, positive public evidence, and corroboration (≥2 independent sources or recent on-domain evidence) | dm_email_sendable, positive_evidence, identity_coherent, on_domain_recent, independent_sources |
| VERIFY_FIRST | Sendable email exists but needs human review before a persona-specific sequence | generic_inbox_only, identity_suspect, no_positive_evidence, below_persona_threshold, weak_corroboration |
| ENRICH_MORE | Partial lead — DM without sendable email, phone-only, or persona below threshold with best_available audit | dm_email_not_sendable, phone_present, below_persona_threshold |
| SKIP | No usable outbound path or company quarantined | company_excluded, no_contact_channel, identity_incoherent, no_usable_outbound_path |
Proof-of-presence rule (Apify Academy): SEND_NOW requires corroborating evidence from a public page. A deliverable B2B-database email alone is not enough — those rows get VERIFY_FIRST with no_positive_evidence until a snippet or source link is present.
Send-gate v2: one off-domain mention is not enough to cold-send. SEND_NOW needs two independent sources (different hosts, or database + public page) or a recent on-domain page (evidence.observed_at inside the role TTL). Identity mismatch never becomes SEND_NOW, even with SMTP green.
Use the dataset view Send routing to filter on send_decision.action = SEND_NOW for proof-backed DM emails, or sort by outreach_score within each action bucket.
outreach_score (0–100) remains a composite utility score; send_decision is the explicit go/no-go layer on top.
Find CEO and founder emails from a company domain
To find a CEO email address when all you have is the company website, set targetPersona to the founder_ceo preset and paste the domains. The actor identifies the person holding the role, infers or retrieves the work email, and runs SMTP verification before returning it.
Executive fallback is on by default: on larger accounts where the CEO is unreachable, a senior functional leader is returned instead, flagged with its actual role. Set executiveFallback to false inside targetPersona to always prefer the functional leader.
Bulk B2B email finder from a domain list
Paste up to 600 domains per run. Every domain is processed independently, so a partial failure never blocks the batch. Domains with no billable deliverable are excluded from the dataset by default and listed for free in the FAILED_DOMAINS record of the key-value store — you never pay for a gap.
Export results as CSV, JSON, Excel or XML, or pull them straight from the Apify dataset API into your CRM or sequencer.
Capacity and reliability
The published 600-domain ceiling is tied to the current shard topology
(25 domains per shard, up to 3 shards in parallel) and the one-hour Actor
timeout. The 1,000-domain case remains a stretch target until a live soak proves
its p95 wall time with safe headroom.
The current prior comes from two consecutive 100-domain runs: both succeeded with exact billing and no log leaks; p95 wall time was 747 seconds and the slowest observed shard was about 369 seconds.
Operators can reproduce the capacity model without spending anything:
$python3 scripts/reliability_soak.py --sizes 100,250,600,1000
Live mode is opt-in and refuses synthetic domains. It requires a real JSON domain file, an explicit size, and a spend ceiling:
python3 scripts/reliability_soak.py --live --size 100 --runs 3 \--domains-file domains.json --max-spend-usd 50
The report records success rate, p50/p95 wall time, shard work vs wall timing,
billing invariants, proxy/block counters, and log-leak checks under reports/.
The harness never raises live shard concurrency automatically.
SMTP-verified work email finder with a deliverability gate
Every candidate email passes through a strict send gate: only addresses with verification result ok and quality good receive decision_maker.email_sendable: true (named DM) or generic_email_sendable: true (generic inbox). Catch-all, risky, and invalid addresses are flagged but not marked sendable, so you can filter them out of a campaign before they damage your sender reputation.
When mustHaveVerifiedEmail is enabled, ranking prioritizes decision makers with verified sendable emails. Generic inbox fallback still applies when no DM email verifies.
Contact identity checks
Name, role, email and LinkedIn URL come from different sources, so a partial match can otherwise arrive looking complete: a real person's name paired with a different person's LinkedIn profile, or a company page URL where a profile should be. identityStrictness cross-checks them — email local part and LinkedIn slug against the name, /in/ vs /company/ URLs, and the email domain against the one you asked for.
Default flag adds identity_status (coherent, suspect, incoherent) plus identity_flags, and lowers confidence when a check fails, so contradictory contacts rank last. Set enforce to discard them outright when mailing the wrong person costs more than a missing row. Legitimate group aliases are preserved: an address on the same brand under another TLD is not treated as a mismatch, and a holding-company domain only raises a soft flag.
Excluding companies you never want to contact
companyFilters.excludeCompanyTypes: ["recruitment_agency"] keeps recruitment and staffing intermediaries out of the results. This matters when you sell to employers: any list seeded from job ads is dense with agencies advertising on behalf of clients, and their names rarely give them away, so the actor reads the company's own pages instead of matching a blocklist.
companyFilters.requireCountryMatch: true drops domains whose suffix belongs to a different country than the one you gave for that row — a .edu or .de domain in a UK campaign — before any paid lookup runs.
Excluded companies never carry a contact email, so they cannot leak into your primary list — and they are not billed as results. Every verdict, with its reason, score and the signals behind it, lands in the EXCLUDED_COMPANIES record of the key-value store, free of charge. They enter the dataset only if you turn on pushEmptyResults, in which case they carry excluded: true, exclusion_reason and excluded_decision_maker for auditing.
company_type_verified: false means no page from the company could be read, so the verdict is "not checked" rather than "checked and clean". RUN_SUMMARY counts those under companyTypeUnverified.
Decision maker phone finder from company domains
When a named decision maker is found without a phone number, the actor runs a phone waterfall: EU imprint/legal-notice extraction first, then website contact-page crawl. Output distinguishes:
| Field | Typical source | Use |
|---|---|---|
company_phone | EU imprint or same-site legal/contact page | Company-level line — never claimed as the named person's direct number |
company_phone_sendable | Twilio line type + HLR (mobiles) | Working switchboard / company line after live checks |
decision_maker.phone | B2B database when linked to the person | Person-linked business phone; inspect source/confidence |
decision_maker.mobile | B2B database when exposed | Direct mobile when available; often absent |
decision_maker.phone_sendable | Twilio + HLR | Person-linked number passed line-type and reachability |
decision_maker.best_phone | Decision-maker record | Best person-linked number; does not include company_phone |
verifyPhones (default on) checks up to two unique candidates per company and keeps searching if the first number is dead, toll-free or otherwise not sendable. A sendable company_phone is a working company line, not the CEO's personal mobile.
This is what separates the actor from email-only finders: for European companies in particular, the legally mandated imprint page is a reliable source of a working company number. It is returned separately as company_phone, because a switchboard is not the decision maker's direct mobile.
LinkedIn email finder from company domains
Input is company domains only — this is not a LinkedIn-URL scraper. When the B2B database or public web research exposes a LinkedIn profile for the selected decision maker, it is returned in decision_maker.linkedin_url alongside the SMTP-verified work email in decision_maker.email. Unlike LinkedIn-based email finders, you do not need LinkedIn profile URLs, logins, cookies or sessions — no LinkedIn page is scraped behind authentication.
European B2B contact finder — Italy, Germany, France, UK
Country handling is localized. Set defaultCountry, or attach a country per domain with {"domain": "acme.de", "country": "DE"}, and the actor adapts:
| Country | Localized behaviour |
|---|---|
Italy (IT) | contatti@ inbox patterns |
Germany (DE) | kontakt@ patterns, Impressum legal-notice phone and company data |
France (FR) | contact@ patterns, mentions légales lookup |
| Netherlands, Spain, Ireland | Localized inbox prefixes and EU legal-notice parsing |
| United Kingdom, United States | Standard English inbox patterns and website contact crawl |
How this compares to ZoomInfo, Clearbit, Lusha and RocketReach
| This actor | Seat-based B2B databases (ZoomInfo, Lusha, RocketReach) | Enrichment APIs (Clearbit, Snov.io, UpLead) | |
|---|---|---|---|
| Pricing | Pay per delivered result, no subscription | Annual contract or monthly seat | Monthly credit bundle |
| Input | Company domain only | Domain, company name or person | Domain or email |
| Names the decision maker | Yes, with role and seniority | Yes | Partially — often firmographics only |
| SMTP verification before delivery | Yes, strict gate | Varies | Varies |
| Phone from EU legal notice | Yes | No | No |
| Requires your own API key | No | Yes | Yes |
| Minimum commitment | One run | Annual / monthly plan | Monthly plan |
Use this actor when you need domain-to-decision-maker enrichment in bursts without signing a seat contract. Use a full B2B database when you need a searchable universe of contacts, intent data and CRM-native workflows.
Pay-per-result alternative to subscription email finders
Subscription email finder tools — including Snov.io, Skrapp, Wiza, Findymail, Prospeo and Anymailfinder — charge monthly plans. Some support domain-only search, but those modes typically return multiple emails per domain without persona-based decision-maker selection. You pay for seats and lookups whether or not every contact verifies.
This actor is pay-per-delivered-result with no monthly seat. It is domain-first by design: it identifies the named decision maker by persona fit, applies a strict SMTP send gate, and runs a phone waterfall when needed. No third-party API keys are required from the user.
| Capability | Subscription email finders | This actor |
|---|---|---|
| Pricing model | Monthly subscription + per-lookup credits | Pay per delivered domain result (+ verified-contact only for DM email) |
| Input | Person name + domain, LinkedIn URL, or domain search | Company domain only — no name or LinkedIn URL required |
| Decision-maker selection | Often a list of emails per domain to sort yourself | Named decision maker ranked by persona fit |
| SMTP verification gate | Varies by tool; often pattern or catch-all tolerant | Strict gate — email_sendable: true only when SMTP quality is good |
| Phone waterfall | Often not included | EU imprint + website crawl when phone is missing |
| API keys needed | Usually required (your account) | None from the user (operator-side credentials) |
Company domain to named B2B contact
Simple bulk paste (domainList):
{"domainList": ["velasca.com", "satispay.com", "barilla.com"],"defaultCountry": "IT","verifyEmails": true,"aiDiscovery": true,"targetPersona": {"mode": "preset", "preset": "founder_ceo"},"includeGenericInbox": true}
Advanced JSON with per-domain country (domains):
{"domains": ["velasca.com", {"domain": "celonis.com", "country": "DE"}],"verifyEmails": true,"aiDiscovery": true,"targetPersona": {"mode": "preset", "preset": "founder_ceo"},"includeGenericInbox": true}
Output fields match the dataset schema (snake_case). Key fields: has_decision_maker, decision_maker, decision_maker.email_sendable, generic_email_sendable, best_contact_email, contact_kind, send_decision, outreach_score, evidence, company_phone, decision_maker.phone, decision_maker.mobile, decision_maker.best_phone, has_contact.
B2B contact enrichment with verified email and phone
The run summary (key-value store RUN_SUMMARY) reports withDecisionMaker, withDmVerifiedEmail, withGenericVerifiedEmail, withVerifiedContactEmail, withContactChannel, paidRows and verifiedContactCharges. esr is deliberately email-only (verified DM or generic inbox over in-scope domains); phone-only rows count under withContactChannel, not ESR. Quality counters include excludedCompanies, companyTypeUnverified and identityIncoherent. Domains with no billable deliverable are listed in FAILED_DOMAINS, and companies quarantined by companyFilters in EXCLUDED_COMPANIES — both at no charge when pushEmptyResults is false.
Work email and phone finder with deliverability check
Decision maker email + phone enrichment from domain lists — any industry, any country. Database-first, AI web research for misses, SMTP verification, phone waterfall for gaps.
No third-party enrichment API keys are required from the user — all upstream credentials are operator-side.
Ready-to-run examples
Each example is a pre-configured task you can run without touching the input schema.
| Example | What it does |
|---|---|
| Find CEO and founder emails from Italian company domains | Italian B2B domains, founder_ceo persona |
| Find founder and CEO emails from German company domains | German domains, Impressum phone lookup |
| Verify decision maker emails with SMTP | Strict deliverability mode for outbound teams |
| Find CEO email from a company domain | The core use case, global coverage |
| Find VP Sales email from company domains | sales_leader persona for sales-tool vendors |
| Find operations and logistics decision makers | ops_logistics persona for supply-chain vendors |
| Find company phone numbers from domains | Phone waterfall focus |
| Bulk B2B email finder from a domain list | Batch enrichment with verified-email ranking |
Browse them all in the Examples tab of this actor.
Use from Claude, ChatGPT and AI agents (MCP)
Connect the Apify MCP server in Claude, ChatGPT, or another MCP-capable agent, then call this actor with natural language. Example prompt: "Find CEO emails and phones for these company domains: acme.com, globex.io, initech.com — only include rows where decision_maker.email_sendable is true." Results arrive as structured JSON matching the dataset schema (has_decision_maker, decision_maker.email_sendable, generic_email_sendable, and related fields).
Automate with n8n, Make and Zapier
Run this actor from n8n or Make using the native Apify nodes — trigger on a new domain list, run the actor, and route verified contacts to any CRM or outreach tool. You can also connect via Apify's Zapier integration. A typical n8n flow: spreadsheet of domains → run this actor → filter rows where decision_maker.email_sendable is true for persona-specific outreach, or generic_email_sendable is true for company-level fallback → send to outreach.
Typical workflow
| Step | Actor | When |
|---|---|---|
| 1. Discover domains | Lookalike Discovery or Social Leads | You need store/company domains first |
| 2. Enrich contact | This actor | You have domains and need decision maker email + phone |
| 3. Enrich shipping | Shipping Intelligence | You also need carriers, returns portal, free-shipping threshold |
Use via Python API, JavaScript API, or MCP.
Example output
{"domain": "example-b2b.com","country": "US","has_decision_maker": true,"has_contact": true,"best_contact_email": "jane.smith@example-b2b.com","outreach_score": 87,"send_decision": {"action": "SEND_NOW","risk_level": "low","reasons": ["dm_email_sendable", "positive_evidence", "identity_coherent"]},"evidence": [{"type": "web_snippet","url": "https://example-b2b.com/about","snippet": "Jane Smith, CEO"}],"decision_maker": {"full_name": "Jane Smith","role": "CEO","seniority": "c_suite","email": "jane.smith@example-b2b.com","email_sendable": true,"email_status": "ok","email_quality": "good","best_phone": "+1 555 0100","linkedin_url": "https://linkedin.com/in/janesmith","source": "b2b_database","confidence": "high"}}
How to use it step by step
- Click Try for free and paste your company domains into
domainList(one per line), or use the advanceddomainsJSON when countries differ per row. - Pick your buyer with
targetPersona—founder_ceofor CEO and founder emails,sales_leaderfor VP Sales,ops_logisticsfor supply-chain buyers. - Leave Verify email deliverability and AI web research enabled for the best coverage.
- Optionally set Default country so localized inbox patterns and EU legal-notice lookups apply.
- Run the actor and watch the dataset fill, one row per domain.
- Export as CSV, JSON or Excel, or read the dataset from the Apify API, webhook or MCP integration.
Cost estimate
Pay-per-event on Apify Console — you pay for what is delivered, not for a seat.
| Event | Free / Starter | Scale (−10%) | Business (−20%) | Charged when |
|---|---|---|---|---|
| Domain result | $0.06 | $0.055 | $0.05 | A domain row is delivered to the dataset |
| Verified email contact | $0.14 | $0.125 | $0.11 | best_contact_email contains a verified DM work email or verified generic company inbox |
| Actor start | $0.00005 per GB | — | — | The run starts |
Billing contract: the verified-contact event applies whenever a row carries a verified, sendable email in best_contact_email — either a decision-maker work email or a verified generic company inbox. Phone-only rows (company line or direct mobile, no sendable email) bill the base rate only.
Store discounts: prices follow your Apify plan automatically — Scale plans pay ~10% less and Business plans ~20% less on both result events. Nothing to configure.
Automatic volume discount: within a single run, the first 250 verified contacts bill at list price; beyond that, every second verified contact is free — a 50% discount on all additional contacts. The discount is applied by charging fewer verified-contact events, so it shows up directly on your run bill.
A domain with any verified email contact therefore costs $0.20 ($0.06 + $0.14) on Free/Starter plans, $0.16 on Business. A 100-domain run with a 40% DM-verified rate and 50% generic-inbox-only rate costs roughly $0.06 × 100 + $0.14 × 90 = $18.60. A 415-domain run with 350 verified contacts costs $0.06 × 415 + $0.14 × 300 = $66.90 ($73.90 without the volume discount). Empty domains are excluded from the paid dataset by default and listed free of charge in FAILED_DOMAINS. Companies quarantined by companyFilters are also excluded from the paid dataset by default (listed free in EXCLUDED_COMPANIES) — you do not pay for the rows you asked us to reject. companyFilters.excludeCompanyTypes adds one search per domain to read the company's own pages; requireCountryMatch costs nothing and saves lookups by rejecting off-market domains first. There is no monthly seat fee and no minimum commitment.
FAQ
How can I find a CEO's email address if I only have the company domain?
Paste the domain into domainList (one per line) or the domains JSON array and set targetPersona to the founder_ceo preset. The actor searches B2B databases and the public web to identify the person holding the role, infers or retrieves their work email, and verifies it over SMTP before returning it with decision_maker.email_sendable: true.
How do I find decision makers in a company from just a website domain? Domain-only input is the design of this actor. It resolves the company behind the domain, ranks the senior people it can evidence in public sources against your target persona, and returns the best match with role, seniority and confidence.
How can I verify that a decision maker's email is valid and deliverable?
Keep verifyEmails enabled. Every candidate goes through an SMTP-level check, and only addresses with status ok and quality good come back with decision_maker.email_sendable: true. Generic inboxes use generic_email_sendable separately.
What does SMTP-verified email mean and why does it matter for cold outreach? SMTP verification asks the receiving mail server whether the mailbox exists before you send anything. It filters out invalid and risky addresses, which keeps bounce rates low and protects your sending domain reputation.
How can I find a company's phone number from their domain?
The phone waterfall runs when there is no sendable number yet — including when the database phone is an Italian 800 / green number or otherwise not usable for outbound. EU imprint plus the internal same-site crawler, then Exa only for residual misses. Read company_phone for the company line and decision_maker.mobile / decision_maker.phone only for person-linked database numbers.
What is the best way to enrich a list of 500 company domains in bulk?
Paste all 500 in one run (the certified ceiling is 600). Enable verifyEmails and aiDiscovery, leave pushEmptyResults off so you are not charged for gaps, and export the dataset when the run finishes.
How much does it cost to process 1,000 company domains?
Split them into two runs of 500 to maximise the volume discount. Pricing is $0.06 per delivered domain plus $0.14 for every row with a verified email in best_contact_email — and within each run, verified contacts beyond the 250th bill only every second one. Across 1,000 delivered domains with 900 verified email contacts (450 per run), the result events cost $60 + $0.14 × (250 + 100) × 2 = $158 instead of $186 at list price (plus the negligible Actor-start events). Scale and Business plans pay 10–20% less on top.
Do I need my own API key or a third-party subscription to use this actor? No. You provide domains only. Verification and research credentials are configured server-side by the operator, so there is nothing to sign up for beyond Apify.
How is this different from a cheap bulk email finder? Bulk finders often verify email patterns without identifying the decision maker. This actor discovers the named person, role, email and phone first, then verifies email deliverability, so you know who you are writing to.
Which decision maker personas can I target?
CEO/founder, sales, marketing, operations/logistics, procurement, finance, tech, HR, ecommerce owner — or custom title keywords via targetPersona.
Does it work outside ecommerce? Yes — any B2B company domain worldwide. The persona presets cover general B2B roles across SaaS, manufacturing, logistics, professional services, retail and healthcare.
How many domains can I process per run? Up to 600 domains per input. The actual count may be capped further by your Apify spending limit.
What happens when no contact is found for a domain?
The domain is listed in FAILED_DOMAINS in the key-value store. A company you asked us to quarantine via companyFilters is not a failure, so it goes to EXCLUDED_COMPANIES instead, with the reason and the evidence. Neither is charged as a dataset item unless pushEmptyResults is true. A non-sendable generic inbox alone (for example info@ that failed SMTP verification) is treated as empty and is not billed.
Can I get a decision maker's direct phone number?
Sometimes. decision_maker.mobile is a direct mobile when the person-data source exposes one; decision_maker.phone is a person-linked business number. Imprint and website numbers are deliberately kept separate in company_phone and must not be presented as the decision maker's direct line.
Does it verify emails with SMTP before returning them?
Yes, whenever verifyEmails is true, which is the default.
Can I use it as an alternative to a ZoomInfo, Lusha or Clearbit subscription? For domain-to-contact enrichment, yes — you get the named decision maker, verified email and phone without a seat licence or annual contract. For searchable contact universes and intent data, a full B2B database remains the better fit.
What happens if the actor cannot find the CEO of a large company?
Executive fallback returns the most senior reachable functional leader instead, labelled with their real role. Disable it in targetPersona if you only want exact-persona matches.
Are the names and emails invented or inferred? Names are never invented: every person returned must appear with their role in a public source. Email addresses may be pattern-inferred when no address is published, but they are only marked sendable after passing SMTP verification.
How do I get the results into my CRM or sequencer? Export CSV, JSON, Excel or XML from the dataset, call the Apify dataset API, subscribe to a run webhook, or connect the actor through MCP or the Python and JavaScript clients.
Do I need a paid Apify plan to run this actor? Free-plan users on the Apify platform can run a limited free trial: up to 5 domains per run and 5 domains per UTC calendar day, with the full product (verifyEmails + enrichment). Paid Apify plans have no trial caps. Upgrade at Apify pricing for unlimited usage.
Is scraping business contact data legal? The actor only reads publicly available business information. You remain responsible for how you use it, including compliance with GDPR, CAN-SPAM and local outbound marketing rules in the countries you contact.
Is there a pay-per-result alternative to subscription email finder tools like Snov.io or Skrapp?
Yes. This actor charges per delivered result with no monthly plan. You provide company domains only; it identifies the named decision maker by persona fit and applies a strict SMTP send gate before marking an address sendable. Verified generic inboxes remain clearly labeled through contact_kind.
Can I run this from n8n, Make or Zapier? Yes. Use the native Apify nodes in n8n or Make to trigger runs from domain lists and route output to your stack, or connect via Apify's Zapier integration.
Can AI agents like Claude or ChatGPT use this actor? Yes. Connect the Apify MCP server and ask the agent to find decision maker emails for a list of domains; results return as structured JSON matching the dataset schema.
Legal and fair use
This actor collects publicly available business contact information — the kind published on company websites, legal-notice pages and professional directories. It does not access private accounts and requires no login credentials from you.
You are the data controller for anything you export. Before running an outbound campaign, check that you have a lawful basis under GDPR (or the equivalent local regime), honour opt-out requests, and follow the anti-spam rules of the countries you contact.
Pequod ecommerce pipeline
Related: Discover offline/local prospects with the Google Maps lead scraper with website emails.
| Step | Actor | When |
|---|---|---|
| 1. Discover | Instagram TikTok Shop Leads | Hashtag-driven social sellers |
| 1. Discover | Lookalike Discovery | Domain/niche-based stores |
| 2. Enrich contact | Decision Maker Finder | Name, role, verified email & phone |
| 3. Enrich shipping | Shipping Intelligence | Carriers, returns, thresholds |