Work Email Finder by Name and Domain | from $0.742/1k
Pricing
from $0.74 / 1,000 email-founds
Work Email Finder by Name and Domain | from $0.742/1k
Email finder for work addresses: give a person's name and company domain, get their work email with a validity status and a 0-1 confidence score. Returns addresses on file, not pattern guesses. Pay per email found, misses are free. Does not verify lists you already have. Free plan: 100 per run.
Pricing
from $0.74 / 1,000 email-founds
Rating
0.0
(0)
Developer
Open Enrich
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
2 days ago
Last modified
Categories
Share
Email finder for work addresses: give a person's name and company domain, get their work email back with a status field and a 0-1 confidence score. It returns addresses the data holds for that person on your domain, it does not invent pattern guesses. No login, no cookies, no start fee. You pay only for each email found.
No login | Name + domain in, work email out | Status + confidence per row | Up to 1,000 people per run | Misses are free | JSON/CSV export
Not an email verifier. This actor finds one work email per person. It does not check lists of emails you already have. For that, run your own deliverability check before a campaign.
💳 Pricing and plans
One event, email-found, charged once per row delivered. Prices per 1,000 emails found (draft, set on the Pricing tab):
| Event | When it is charged | Free plan | Gold plan |
|---|---|---|---|
email-found | A work email on the domain you gave is found and the row is delivered | $0.963 | $0.742 |
Bronze, Silver, Platinum and Diamond prices are on the Pricing tab. Higher Apify plans only lower the price. Empty runs, failed lookups, unreadable input lines and notices are free, and there is no start fee.
Plan-credit math. The free plan's $5 monthly credit covers about 5,190 emails at the Free price.
Success-only billing
You are charged only for a row you receive. A person who is not found, a lookup that fails, or an address that is not on the domain you gave is listed in MISSES with a reason and costs nothing. Use maxChargeUsd (advanced input) to stop a run at a spend you choose.
The free plan
Free Apify accounts get up to 100 inputs looked up per run, and as many runs as their Apify credit covers. Nothing is stored on our side. When a list is longer, the first 100 are looked up and one free notice row (reason: "free_plan_limit") says how many inputs were not looked up; they are not charged. Run again with the rest, or use a paid Apify plan for no per-run limit.
Keep a run small while you test
Use limit to cap the number of people looked up. The default is 25, the maximum is 1,000, 0 means all lines up to 1,000. Try 1 to 3 people first, read the row, then scale up.
⚖️ This vs. the alternatives
Public Apify Store prices, read on 2026-10-13. Re-check on each linked page before you decide; prices change.
| This actor | snipercoder | bovi | clearpath | crustapi | |
|---|---|---|---|---|---|
| Price per 1,000, Free plan | $0.963 per email found | $1.00 per result | $1.50 per result | $8.00 per pattern tested | $5.00 per verified email |
| Price per 1,000, Gold plan | $0.742 | $0.60 | $1.455 | $8.00 | $5.00 |
| Start fee per run | none | $0.00005 | none | $0.005 | none |
| Status field on every row | yes, often unknown (no mailbox check) | not stated | not stated | not stated | not stated |
| Misses charged | never | not stated | not stated | pattern tests are charged | not stated |
We compare on price and the fields listed above only. Check that the columns you need are in the row before you compare cost. Units differ: one pattern tested is not one email found.
⚡ Why this email finder by name and domain?
- Evidence, not guesses. Each row comes from addresses the data holds for that person. The actor keeps only an address on your domain and tells you its status.
- Status and confidence on every row.
emailStatusisvalid,catch_all,invalidorunknown;unknownis common, because a status is only set when the data holds a check for that address.confidenceis a fixed rule you can read below, not a black box. - You see who you matched. Title, headline, location and profile link come with the email when available, plus
matchMethod. - Accepts messy input.
First Last @ domain,First Last, domain, JSON objects, domains withhttps://orwww.. - Success-only, no start fee. Misses, invalid lines and notices are free.
🎯 Use cases: find business email from name
- Outbound prospecting. You have names from a conference list and company domains. Add the work email column.
- CRM gap fill. Contacts with a name and company but no email. Run the list and write the email back.
- Recruiting. Reach a candidate at their current employer's domain.
- Agent workflows. An AI agent holds a name and a company and needs one address to continue. One call, one row.
- Pair with a phone lookup. Take the email into email-phone-finder for direct dials.
🔗 Pipeline guide: from a name to a contact
[1] Name + company domain (your list, a CRM export, a conference list)|v[2] email-finder -> work email + status + confidence|v[3] your own deliverability check (before any campaign)|v[4] email-phone-finder -> phone numbers, title, LinkedIn URL
If you only know the company, start with ceo-founder-email-finder-by-domain or executive-contact-finder-by-domain to get the names.
🚀 Quick start: find work email by name
1. One person
{ "items": ["Patrick Collison @ stripe.com"], "limit": 1 }
2. A list in mixed formats
{"items": ["Patrick Collison @ stripe.com","Satya Nadella, https://www.microsoft.com",{ "first": "Sam", "last": "Altman", "domain": "openai.com" },{ "fullName": "Jensen Huang", "domain": "nvidia.com" }],"limit": 0}
3. A traced batch with a spend cap and the audit view
{"items": ["Patrick Collison @ stripe.com", "Sam Altman @ openai.com"],"includeAudit": true,"maxChargeUsd": 0.5,"sourceTag": "crm-export-2026-10"}
⚙️ Inputs
| Key | Type | Default | What it does |
|---|---|---|---|
items | array | required | One person per entry. Strings First Last @ domain or First Last, domain, or objects {first,last,domain} / {fullName,domain}. First and last name are both required. Duplicates are collapsed. |
limit | integer | 25 | Maximum people looked up, which also caps the emails charged. 0 = all lines. Maximum 1,000; a higher number stops the run with a message before any charge. |
includeAudit | boolean | false | Adds an audit object to each row. |
maxChargeUsd | number | none | Advanced. Stops new lookups once the run has charged this much. |
sourceTag | string | none | Advanced. Up to 64 characters, copied into each row and RUN_SUMMARY. |
Any other field stops the run before a lookup with remove unsupported fields: .... Nothing is charged.
📤 Output
One row per person whose email was found on the domain you gave. Rows keep input order. Empty values are left out of the row.
| Key | Type | Meaning, and when it is missing |
|---|---|---|
fullName, firstName, lastName | string | As matched, otherwise as you gave them |
email | string | Work email on your domain, lower case |
emailStatus | string | valid, catch_all, invalid or unknown. unknown is common: the address is not mailbox-checked. Rows with invalid are not delivered |
confidence | number | 0-1, see the rule below |
matchMethod | string | How the person was matched. Missing when not reported |
companyDomain | string | The domain you gave, cleaned |
slug | string | Professional profile slug, when matched |
profileUrl | string | Professional profile link. Often missing; the address match does not always return it |
headline, jobTitle | string | Current, when on file |
location, country | string | Free-text location and ISO-2 country, when on file |
connections | integer | Connection count, when on file |
updatedAt | string | When the person record was last updated, when on file |
inputQuery | object | The cleaned input behind this row |
scrapedAt | string | ISO time the row was produced |
sourceTag | string | Your tag, only if you set one |
audit | object | Only with includeAudit |
{"fullName": "Patrick Collison","firstName": "Patrick","lastName": "Collison","email": "patrick.collison@stripe.com","emailStatus": "unknown","confidence": 0.5,"matchMethod": "work-email","companyDomain": "stripe.com","slug": "patrickcollison","headline": "Stripe CEO","jobTitle": "CEO","location": "San Francisco Bay Area","country": "US","connections": 500,"updatedAt": "2026-10-13T14:15:13.902Z","inputQuery": { "fullName": "Patrick Collison", "domain": "stripe.com" },"sourceTag": "zz1","scrapedAt": "2026-10-13T14:15:14.341Z"}
A real row from a test run. The status was unknown, so the confidence is the base 0.5. Which fields appear depends on what is on file for the person.
Confidence rule
Base by status: valid 0.95, catch_all 0.6, unknown 0.5. Add 0.05 only when the response carries a profile link (profileUrl); a row without it stays at the base. Maximum 1. A catch_all domain accepts any address, so even a good status there is a weaker signal.
Other records in the run
MISSES(key-value store):[{input, reason}]for every line that produced no row:not_found,no_address_on_domain,invalid_input, orUpstream HTTP <code>.errors-email-finder(key-value store): the lookups that failed for a technical reason, so you can re-run only those.RUN_SUMMARY: counts, stop reason, yoursourceTag.- Notice rows (
type: "notice",reason: "charge_limit_reached"or"free_plan_limit") appear when your spend cap is reached or a free-plan list is longer than 100. A capped run delivers the rows it already charged for, then one notice row. Notices are never charged.
What is NOT returned
- ❌ Personal email addresses
- ❌ Phone numbers (use email-phone-finder)
- ❌ Several alternative addresses per person
- ❌ A live mailbox check of the address
🛡️ Reliable results
Our data promise. We work to keep every contact current, and we stand behind it. If a record is outdated, an email bounces or a person has moved on, open the Issues tab with your run link. We review every report and sort it out with you, case by case.
- Misses are free and visible. Every line without a row is in
MISSESwith a reason and is never charged. - Only addresses on your domain. An address on another domain is never returned as the result.
- Duplicates are collapsed. The same person written two ways is looked up once and charged once.
- Each row is saved as it is delivered. A run that stops keeps what it already produced.
- Bounded pace. Lookups run at 60 per minute, so a list of 1,000 people needs roughly 17 minutes.
- Typos fail early. An unsupported input field or a limit above 1,000 stops the run before any charge.
- Check before you send.
emailStatusandconfidenceare signals, not a guarantee. Run the emails through your own deliverability check before a campaign.
🤖 For AI agents (MCP)
This actor runs through the Apify MCP server. Prompt to copy:
"Use b2bdata/email-finder with items=["Patrick Collison @ stripe.com"] and limit=1. Return email, emailStatus and confidence."
When to use it. You hold a person's full name and a company domain and need one work email.
When not to. You hold only a company (use ceo-founder-email-finder-by-domain), or only an email (use email-phone-finder).
Input contract. items array of "First Last @ domain" strings or {first,last,domain} objects; limit 1-1,000 (0 = all).
Output contract. One row per found person with email, emailStatus, confidence. Output is deterministic and schema-stable, rows keep input order. Not-found people are absent from the dataset and listed in MISSES.
Smoke test. limit: 1 on a well-known person returns one row.
Error cases. An empty items list is rejected by the input form before the run starts. No valid items means no line had both a first and last name plus a domain. remove unsupported fields means a misspelled input key and the run ends FAILED with nothing charged.
🔌 Integrations: send results anywhere
- API. Fetch rows from the run's default dataset:
GET /v2/datasets/{datasetId}/items?format=csv. - Webhook on run success to push rows to your own endpoint.
- n8n, Make, Zapier. Use the native Apify nodes: run the actor, then read the dataset.
- Google Sheets, Airtable, HubSpot, Salesforce, Clay. Map
emailto the email field andemailStatusto a status column.
🕐 Schedule examples
- Weekly CRM gap fill. A Monday schedule with a saved task that points at your latest export.
- New-lead enrichment. A webhook from your form tool starts a run with one person.
🔗 Related actors
b2bdata/ceo-founder-email-finder-by-domain: you know the company, not the person. Openb2bdata/executive-contact-finder-by-domain: get the decision makers at a domain first. Openb2bdata/email-phone-finder: you have the email and need a phone. Openb2bdata/linkedin-lead-generation: build a lead list by job title and country. Open
❓ FAQ
Data & coverage
How do I find someone's work email by name and company domain?
Add a line First Last @ domain and run. Each found person becomes one row with the email, its status and a confidence score.
Can I use this as an email finder API for AI agents?
Yes. Call it through the Apify API or MCP with limit: 1. The output is stable and one row per person.
Do I need a LinkedIn account or cookies? No. It is a work email finder without LinkedIn login, cookies or an account to ban.
Is this an email finder with confidence score per row? Yes. The confidence score follows the fixed rule in the Output section: status first, plus a small bonus when the person was matched to a profile. It is a signal for sorting, not a promise.
Can I find professional email from first name, last name and domain only? Yes. Both names and the domain are required. A single name or a bare email address is rejected as an invalid line and is free.
Pricing
What do I pay when nobody is found? Nothing. There is no start fee, and misses, invalid lines and notices are free.
🛟 Support
Use the Issues tab on this actor's Apify page for bugs, questions and feature requests. We answer within 48 hours on working days. Please include the run ID and the input you used.
📜 Legal
Use for B2B prospecting only. Comply with all applicable laws including GDPR, CCPA, and CAN-SPAM.
This actor returns work email addresses and professional profile facts from a database. It does not log in, use cookies, access private pages or bypass authentication. Published on Apify by b2bdata as proprietary software. Not affiliated with, endorsed by, or sponsored by any company or person named in the examples above.