Email Finder — Name + Domain to Work Email + Score
Pricing
from $1.45 / 1,000 email results
Email Finder — Name + Domain to Work Email + Score
Build a likely work email from a name and company domain. Get an MX-checked guess, 0-1 confidence score, ranked alternatives, and role and disposable flags. Run with a people list; no buyer API key. Pricing: $0.0015 per email result on the Free plan.
Pricing
from $1.45 / 1,000 email results
Rating
0.0
(0)
Developer
Vitalii Bondarev
Maintained by CommunityActor stats
0
Bookmarked
275
Total users
40
Monthly active users
2 days ago
Last modified
Categories
Features
Share
Email Finder — Name and Domain to Work Email
Email Finder guesses a work email from a name and company domain using public DNS MX data, plus SMTP when the network allows it. Pay per event: $0.0015 per email result on the Free plan.
- Find a work-email guess with a 0–1 confidence score and no buyer API key.
- Build outbound lists with one top address and ranked alternatives per person.
- Get an MX host, disposable flag, and role-account flag before export.
- Run it on your own Apify account, with no provider API key or monthly seat.
- Entries without a domain or first/full name are dropped and not charged.
Note: A saved row is a ranked, MX-checked guess unless
statusisverified. If port 25 cannot be opened,verificationMethodismx_patternand SMTP did not confirm the mailbox. Port 25 is often blocked on cloud networks, including Apify's, sounverified_guessis the normal outcome there andverifiedis the exception.
What you get
Each saved row is one scored person. Names are lower case, accents are folded to ASCII, and Cyrillic is transliterated. A missing value is null.
| Field | Type | Meaning |
|---|---|---|
firstName | string | Cleaned given name; not empty in saved rows. |
lastName | string | Cleaned family name; empty if no last name. |
domain | string | Bare host after removing scheme, path, port, www., or an email domain. |
email | string | Chosen address; null only on invalid input, which is not saved. |
confidence | number | Score from 0 to 1. |
status | string | verified, accept_all, unverified_guess, no_valid_pattern, no_mx, or invalid_input. |
verificationMethod | string | smtp, mx_pattern, or none. |
isCatchAll | boolean | Catch-all result; null if SMTP never completed. |
isDisposable | boolean | Match against a bundled, non-exhaustive disposable-domain list; false does not prove a domain is not disposable. |
isRoleAccount | boolean | Local part found in a fixed list of common role names such as info or sales; not exhaustive. Uses the pattern id when there is no MX. |
mxFound | boolean | Mail-host lookup result. |
mxHost | string | Host used for the SMTP probe, e.g. aspmx.l.google.com; null when none was found. |
patternUsed | string | Pattern id of email, such as first.last; null on invalid input. |
alternativeEmails | array | Other candidates, highest confidence first, limited by maxAlternatives. |
parse_confidence | number | 1 normally, 0.9 with the port-25 warning, 0.5 with no MX, and 0 on invalid input. |
warnings | array of strings | smtp_unreachable_port25, smtp_dropped_midrun, no_mx_record, or invalid_input. |
scoredAt | ISO 8601 string | UTC time the person was scored. |
scrapedAt | ISO 8601 string | UTC time captured at run start and copied to every row. |
Each alternativeEmails object contains email, pattern, confidence, smtpStatus (not_checked, accepted, rejected, or inconclusive), and smtpCode (code or null). Codes 250 and 251 count as accepted.
How the address is chosen
Patterns are de-duplicated and sorted by weight. f and l are the first letters of the first and last names. Weights: first.last 0.34; first and flast 0.12 each; firstlast 0.09; f.last 0.07; first_last 0.05; last 0.04; lastfirst, last.first, firstl and first-last 0.03 each; lfirst and fl 0.02 each.
With no MX, the top pattern is still returned. With verifySmtp and an open connection, SMTP may confirm a candidate. If all recipients are accepted, none are accepted, verifySmtp is false, port 25 stays closed, or SMTP drops mid-run, the top pattern is returned.
Confidence
Prior = weight / 0.34, so first.last = 1. Accepted SMTP scores 0.90 + 0.10 × prior. Otherwise a base (accept_all 0.55, unverified_guess 0.45, no_valid_pattern 0.10, no_mx 0.05) is multiplied by 0.55 + 0.45 × prior. Rejected alternatives score 0.
Sample output
One record from a successful run. Four of five alternativeEmails objects are omitted. Email values are shown as "[hidden for privacy]" because they are guessed addresses of named people; every other value is unchanged.
{"firstName": "patrick","lastName": "collison","domain": "stripe.com","email": "[hidden for privacy]","confidence": 0.45,"status": "unverified_guess","verificationMethod": "mx_pattern","isCatchAll": null,"isDisposable": false, "isRoleAccount": false,"mxFound": true,"mxHost": "aspmx.l.google.com","patternUsed": "first.last","alternativeEmails": [{ "email": "[hidden for privacy]", "pattern": "first", "confidence": 0.319, "smtpStatus": "not_checked", "smtpCode": null }],"parse_confidence": 0.9,"warnings": ["smtp_unreachable_port25"],"scoredAt": "2026-10-31T18:59:55Z","scrapedAt": "2026-10-31T18:59:55Z"}
Pricing
The charge event is email-result: one saved person record with a best-guess work email, MX check, confidence, and ranked alternatives. It costs $0.0015 per event on the Free plan.
Free plan: 1,000 x $0.0015 = $1.50 for 1,000 email results.
Free plan: 10,000 x $0.0015 = $15.00 for 10,000 email results.
The Apify Free plan includes $5 of monthly platform usage credit and caps each run at 10 people, so these totals do not apply to a single Free plan run.
A row is charged only when saved with an email, confidence of at least 0.01, and status verified, accept_all, unverified_guess, no_valid_pattern, or no_mx. Invalid input and dropped people entries are not charged.
You pay only for the events listed above. This Actor does not use the Pay per event + usage option, so compute, proxy traffic, and storage are not billed separately to you.
How to use
- Open Email Finder on Apify and sign in.
- Paste
peoplewith a first or full name and company domain. - Leave
verifySmtpon, or turn it off to rank by MX and pattern. - Set
maxAlternatives,smtpTimeoutSecs, andmaxItems. - Start the run and open the dataset.
- Repeat through Apify Schedules; weekly is a starting point for a stored contact list.
{"people": [{ "firstName": "Patrick", "lastName": "Collison", "domain": "stripe.com" }],"verifySmtp": true,"maxAlternatives": 5,"smtpTimeoutSecs": 5,"maxItems": 0}
Input parameters
people is required. One object is wrapped as a list; other non-list values stop the run with no charge.
| Parameter | What it does | Default |
|---|---|---|
people | Array of people. Each object needs a domain and first name or full name. Accepted keys include firstName, lastName, surname, fullName, name, domain, companyDomain, website, url, and snake_case or lower-case variants. The input schema documents only firstName, lastName/surname, fullName and domain; other key spellings are also accepted. | Required; no default |
verifySmtp | Runs the catch-all probe and RCPT checks when true; otherwise ranks after MX. | true |
maxAlternatives | Keeps ranked alternatives besides the chosen email; clamped to 0–12. | 5 |
smtpTimeoutSecs | Seconds per SMTP connection; clamped to 2–20. | 5 |
maxItems | Stops once this many output rows are queued; 0 means no cap of your own (the Free plan run cap still applies). | 0 |
disableUsageStats | Turns off the run summary described in Usage statistics when true. | false |
Limits and edge cases
- Each run reads at most 5,000 people; extra entries are cut silently and only a log warning is written. Split larger lists across runs.
- The run timeout defaults to 3,600 seconds and there is no proxy input. Names retain only
a–zafter transliteration; hyphens and apostrophes disappear. - A
fullNamewith two or more words uses the first and last tokens when first and last names are not already set. An empty last name can leave a stray dot, underscore, or hyphen. - URLs and emails become hosts:
https://www.stripe.com/aboutbecomesstripe.com, as does an email atstripe.com. A host with no dot is invalid. - Rows are pushed in batches of up to 100. Previously pushed batches remain if an abort, timeout, or failure interrupts the run; the current unpushed batch is left out.
- An invalid
peoplevalue or no usable entries leaves no dataset rows;OUTPUTstores{"error": "people_not_a_list"}or{"error": "no_people"}.
| Condition | What you see | What to do |
|---|---|---|
| Port 25 does not open | smtp_unreachable_port25; unverified_guess; mx_pattern; isCatchAll null; alternatives are not_checked. | Treat the address as a ranked guess; SMTP needs outbound port 25. |
| SMTP starts, then drops | smtp_dropped_midrun, mx_pattern, unverified_guess. | Use the ranked guess or run again where SMTP stays reachable. |
| Domain accepts all recipients | accept_all, smtp, isCatchAll true. | Do not treat the top pattern as the only real mailbox. |
| SMTP works and no pattern is accepted | no_valid_pattern; top pattern remains and the row is charged. | Try another spelling of the name. |
| No MX record | no_mx, none, no_mx_record, mxFound false; top pattern remains and is charged when confidence is at least 0.01. | Check the domain spelling. |
| Entry lacks a domain or name, has a host with no dot, or a name with no letters | Dropped or skipped, not saved and not charged. | Send a host such as stripe.com and a name with letters. |
maxItems is greater than 0 | The loop stops once that many rows are queued. | Raise the cap or set 0 to remove it. |
FAQ
How much does it cost to find work emails from a name and domain?
It costs $0.0015 per email-result on the Free plan; 1,000 x $0.0015 = $1.50 on the Free plan. Invalid rows are not charged.
Why did the run return no emails?
Nothing was charged. The status message names the cause: an invalid people value, a missing domain or name, a host with no dot, or a name with no letters.
Why is the email only an unverified guess?
SMTP did not confirm a mailbox. smtp_unreachable_port25, verificationMethod mx_pattern, or verifySmtp being off can produce this status. verified requires RCPT code 250 or 251.
Is it legal to use these work-email guesses?
The Actor uses the supplied name and company domain, public DNS MX data, and SMTP when the run network allows port 25. Whether a use is legal, allowed, or within a mailbox provider's ToS depends on your use case and applicable law. This page is not a legal guarantee.
Related actors
- Bulk Email Verifier — checks emails you already have.
- Email Verifier — SMTP and MX validation, including catch-all, for supplied addresses.
- Email Finder Bulk — lists of domains or people instead of this per-person run.
Usage statistics
This Actor creates a small, content-free summary at the end of each run, used only to monitor reliability and improve this Actor. No input values, credentials or scraped data are sent.
A copy of the exact record for your run is saved as USAGE_STATS in your own Apify key-value store.
To opt out, set disableUsageStats to true in the input. Nothing is sent then.