Email Finder — Name + Domain to Work Email + Score avatar

Email Finder — Name + Domain to Work Email + Score

Pricing

from $1.45 / 1,000 email results

Go to Apify Store
Email Finder — Name + Domain to Work Email + Score

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

Vitalii Bondarev

Maintained by Community

Actor stats

0

Bookmarked

275

Total users

40

Monthly active users

2 days ago

Last modified

Features

Limited permissions

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 status is verified. If port 25 cannot be opened, verificationMethod is mx_pattern and SMTP did not confirm the mailbox. Port 25 is often blocked on cloud networks, including Apify's, so unverified_guess is the normal outcome there and verified is 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.

FieldTypeMeaning
firstNamestringCleaned given name; not empty in saved rows.
lastNamestringCleaned family name; empty if no last name.
domainstringBare host after removing scheme, path, port, www., or an email domain.
emailstringChosen address; null only on invalid input, which is not saved.
confidencenumberScore from 0 to 1.
statusstringverified, accept_all, unverified_guess, no_valid_pattern, no_mx, or invalid_input.
verificationMethodstringsmtp, mx_pattern, or none.
isCatchAllbooleanCatch-all result; null if SMTP never completed.
isDisposablebooleanMatch against a bundled, non-exhaustive disposable-domain list; false does not prove a domain is not disposable.
isRoleAccountbooleanLocal 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.
mxFoundbooleanMail-host lookup result.
mxHoststringHost used for the SMTP probe, e.g. aspmx.l.google.com; null when none was found.
patternUsedstringPattern id of email, such as first.last; null on invalid input.
alternativeEmailsarrayOther candidates, highest confidence first, limited by maxAlternatives.
parse_confidencenumber1 normally, 0.9 with the port-25 warning, 0.5 with no MX, and 0 on invalid input.
warningsarray of stringssmtp_unreachable_port25, smtp_dropped_midrun, no_mx_record, or invalid_input.
scoredAtISO 8601 stringUTC time the person was scored.
scrapedAtISO 8601 stringUTC 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

  1. Open Email Finder on Apify and sign in.
  2. Paste people with a first or full name and company domain.
  3. Leave verifySmtp on, or turn it off to rank by MX and pattern.
  4. Set maxAlternatives, smtpTimeoutSecs, and maxItems.
  5. Start the run and open the dataset.
  6. 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.

ParameterWhat it doesDefault
peopleArray 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
verifySmtpRuns the catch-all probe and RCPT checks when true; otherwise ranks after MX.true
maxAlternativesKeeps ranked alternatives besides the chosen email; clamped to 0–12.5
smtpTimeoutSecsSeconds per SMTP connection; clamped to 2–20.5
maxItemsStops once this many output rows are queued; 0 means no cap of your own (the Free plan run cap still applies).0
disableUsageStatsTurns 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–z after transliteration; hyphens and apostrophes disappear.
  • A fullName with 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/about becomes stripe.com, as does an email at stripe.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 people value or no usable entries leaves no dataset rows; OUTPUT stores {"error": "people_not_a_list"} or {"error": "no_people"}.
ConditionWhat you seeWhat to do
Port 25 does not opensmtp_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 dropssmtp_dropped_midrun, mx_pattern, unverified_guess.Use the ranked guess or run again where SMTP stays reachable.
Domain accepts all recipientsaccept_all, smtp, isCatchAll true.Do not treat the top pattern as the only real mailbox.
SMTP works and no pattern is acceptedno_valid_pattern; top pattern remains and the row is charged.Try another spelling of the name.
No MX recordno_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 lettersDropped or skipped, not saved and not charged.Send a host such as stripe.com and a name with letters.
maxItems is greater than 0The 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.

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.

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.

Full list of collected fields