Email Finder: Likely Business Addresses from Name and Domain avatar

Email Finder: Likely Business Addresses from Name and Domain

Pricing

from $1.50 / 1,000 email candidates founds

Go to Apify Store
Email Finder: Likely Business Addresses from Name and Domain

Email Finder: Likely Business Addresses from Name and Domain

Turn a name and a company domain into a ranked list of likely business email addresses. Checks the domain's MX records, flags free-mail and disposable domains and adds a catch-all heuristic. It does not confirm that a mailbox exists. Pay per person with candidates.

Pricing

from $1.50 / 1,000 email candidates founds

Rating

0.0

(0)

Developer

NanoScrape

NanoScrape

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

Give the actor a first name, a last name and a company domain. For each person it builds the common address patterns, checks the domain's MX records, flags free-mail and disposable domains, adds a catch-all heuristic and returns the candidates ranked by how common each pattern is, with a best_guess on top.

The result is a likely address, not a confirmed one. The actor never contacts the recipient's mail server, so it cannot tell whether a mailbox exists or whether a message will be delivered. Use it to build a short list of candidates for outreach, and expect some of them to bounce.

What you can do with it

  • Turn a list of names and company domains into a ranked list of address candidates.
  • Skip domains that cannot receive mail (no MX records) before you spend time on them.
  • Spot free-mail and disposable domains in a lead list.
  • Join results back to your list by first_name, last_name and domain.

How a person is processed

  1. The name is normalised: lower case, accents transliterated (ü becomes ue), everything except a-z removed.
  2. The patterns are generated and ranked by how common they are in business addresses: first.last, first, flast, f.last, firstlast, first_last, first.l, last.first, last. The first one is the best_guess.
  3. The domain's MX records are looked up (once per domain per run).
  4. The domain is checked against a list of consumer mail providers and a bundled list of disposable-mail services. For those, and for domains without MX records, no candidates are generated.
  5. A catch-all guess is made from the MX host name. It is a heuristic: hosts of known mail providers give unknown, hosts that look like shared web hosting give likely. It is never no, and catch_all_method is always heuristic.

Input

FieldTypeDescription
leadsobject[]People to look up. Each has firstName, lastName and domain. You can give fullName instead of the two name fields: Jane Doe and Doe, Jane are split into first and last name; with more than two words the first and the last word are used. The domain may be a bare domain, start with www. or be a full URL. A single object instead of a list also works.

With no leads, four built-in sample people are used (placeholder names at apify.com, stripe.com, migros.ch and shopify.com). An explicit empty list checks nothing and charges nothing. The same person (same name and domain, ignoring case and www.) given twice produces one row.

{
"leads": [
{ "firstName": "Jane", "lastName": "Doe", "domain": "apify.com" },
{ "fullName": "John Smith", "domain": "https://www.stripe.com/" }
]
}

Output

One row per input person, in input order.

FieldDescription
first_name, last_nameThe name as given (or split from fullName).
domainThe cleaned domain.
statusok, risky, no_mx, free_mail_domain, disposable_domain, dns_error or invalid_input (see below).
reasonShort explanation for rows without candidates.
best_guessThe top-ranked candidate address. Left out when there are no candidates.
best_guess_patternPattern name of best_guess.
candidatesOrdered list of {email, pattern}. Empty when none were generated.
confidencemedium when the domain has MX records and the best guess uses one of the four most common patterns, low otherwise. Never higher.
mx_valid, mx_hosts, mx_providerMX result for the domain.
free_mail, disposableDomain flags.
catch_all, catch_all_methodlikely or unknown, and always heuristic.
checked_atISO 8601 timestamp.

Status values:

  • ok: candidates were generated and the domain has MX records.
  • risky: as ok, but the catch-all heuristic says likely.
  • no_mx: the domain has no MX records. No candidates.
  • free_mail_domain, disposable_domain: no candidates are generated for these domains.
  • dns_error: the MX lookup failed. No candidates.
  • invalid_input: a first name, last name or the domain is missing or unusable. No candidates.

Sample row:

{
"first_name": "Jane",
"last_name": "Doe",
"domain": "apify.com",
"status": "ok",
"best_guess": "jane.doe@apify.com",
"best_guess_pattern": "first.last",
"candidates": [
{ "email": "jane.doe@apify.com", "pattern": "first.last" },
{ "email": "jane@apify.com", "pattern": "first" },
{ "email": "jdoe@apify.com", "pattern": "flast" }
],
"confidence": "medium",
"mx_valid": true,
"mx_hosts": ["aspmx.l.google.com"],
"mx_provider": "google_workspace",
"free_mail": false,
"disposable": false,
"catch_all": "unknown",
"catch_all_method": "heuristic",
"checked_at": "2026-10-26T10:30:00Z"
}

(The candidate list is shortened here; real rows carry up to nine candidates.)

Pricing

Pay per event:

EventWhen it is charged
actor-startOnce per run, after the first billable row has been delivered. A run that delivers no billable row is not charged.
email-finder-resultPer delivered row that has at least one candidate (ok or risky).

Rows without candidates (invalid_input, no_mx, free_mail_domain, disposable_domain, dns_error) are delivered so you can see what happened, and are not charged. If you set a maximum total charge for the run, the actor stops when the next billable row would exceed it and the run ends with the status "Stopped at the max charge limit. N people checked."

Use with AI agents (MCP)

Connect this actor to an MCP-compatible client such as Claude Desktop, Cursor or VS Code.

{
"mcpServers": {
"apify": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://mcp.apify.com/?tools=santamaria-automations/email-finder-scraper",
"--header",
"Authorization: Bearer <YOUR_API_TOKEN>"
]
}
}
}

Example prompt: "Use email-finder-scraper to list the likely addresses for these 50 people and give me the rows with status ok."

FAQ

Is the address real? Unknown. The actor does not check mailboxes. best_guess is the most common pattern for the name, and the rest of the list is there for the cases where the company uses another pattern.

Why is there no candidate for a gmail.com address? Consumer mail domains do not follow a company pattern, so no guess is made. The row is free.

What does catch_all: likely mean? The MX host looks like shared web hosting, where catch-all setups are common. It is a guess from the host name, not a test.

Why did my row come back with invalid_input? A first name, last name or domain was missing, or the domain is not a valid host name. These rows are not charged.