Email Finder: Likely Business Addresses from Name and Domain
Pricing
from $1.50 / 1,000 email candidates founds
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
Maintained by CommunityActor 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_nameanddomain.
How a person is processed
- The name is normalised: lower case, accents transliterated (
übecomesue), everything except a-z removed. - 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 thebest_guess. - The domain's MX records are looked up (once per domain per run).
- 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.
- 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 givelikely. It is neverno, andcatch_all_methodis alwaysheuristic.
Input
| Field | Type | Description |
|---|---|---|
leads | object[] | 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.
| Field | Description |
|---|---|
first_name, last_name | The name as given (or split from fullName). |
domain | The cleaned domain. |
status | ok, risky, no_mx, free_mail_domain, disposable_domain, dns_error or invalid_input (see below). |
reason | Short explanation for rows without candidates. |
best_guess | The top-ranked candidate address. Left out when there are no candidates. |
best_guess_pattern | Pattern name of best_guess. |
candidates | Ordered list of {email, pattern}. Empty when none were generated. |
confidence | medium 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_provider | MX result for the domain. |
free_mail, disposable | Domain flags. |
catch_all, catch_all_method | likely or unknown, and always heuristic. |
checked_at | ISO 8601 timestamp. |
Status values:
ok: candidates were generated and the domain has MX records.risky: asok, but the catch-all heuristic sayslikely.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:
| Event | When it is charged |
|---|---|
actor-start | Once per run, after the first billable row has been delivered. A run that delivers no billable row is not charged. |
email-finder-result | Per 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.