Email Finder API avatar

Email Finder API

Pricing

from $14.00 / 1,000 work e-mail founds

Go to Apify Store
Email Finder API

Email Finder API

Find work e-mail addresses from a person's name and their company or domain: the address, its layout, a confidence level, the evidence behind it and the mail provider. Export scraped data, run the scraper via API, schedule and monitor runs, or integrate with other tools or AI workflows.

Pricing

from $14.00 / 1,000 work e-mail founds

Rating

0.0

(0)

Developer

Matvey

Matvey

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

2

Monthly active users

3 days ago

Last modified

Share

What is Email Finder API?

Email Finder API turns a person's name and their company into that person's work e-mail address. Give it Jane Doe, acme.com โ€” or Jane Doe, Acme Consulting, because it resolves company names to domains too โ€” and it returns jane.doe@acme.com together with the reason it believes that address, the alternatives worth trying if it bounces, and the state of the company's mail domain. No login, no API key, no official API needed.

The difference from an ordinary email finder is what happens before the address is written. Most tools apply the same guessed layout to every company. This one first reads the company's own website and looks at the addresses it already publishes. A team page that says michael.hart@acme.com has told you the rule for everyone else at Acme, and the Actor says so in the output: the layout, the addresses it was read from, and how many there were. When a company publishes nothing personal, you are told that as well, and the address is marked as a guess rather than dressed up as a find.

It is a pure HTTP Actor โ€” no browser, no proxy, no third-party paid API โ€” so it is fast and cheap to run. A three-person lookup finishes in about five seconds.

What data does Email Finder API return?

One row per person, one row per company, and one free row for anyone who could not be placed.

FieldWhat it holdsExample
fullNameThe person as you wrote themJason Fried
emailThe most likely work addressjason@basecamp.com
confidenceconfirmed, high, medium, low or unusableconfirmed
emailPatternThe layout used: first.last, first, flast, firstlast, first_last, firstl, f.last, last.first, lastfirst, first-last, last, flfirst
emailPatternSourcesite โ€” read off the company's own pages; default โ€” the company published nothing to learn fromsite
foundOnSiteTrue when the address was not constructed at all but found publishedtrue
alternativesThe next most likely addresses, each with its layout[{"email":"jason.fried@basecamp.com","pattern":"first.last"}]
patternEvidenceThe published addresses the layout was read from["jason@basecamp.com"]
patternEvidenceCountHow many of them there were1
domainThe company's mail domainbasecamp.com
domainSourceinput, directory or guess โ€” how the domain was arrived atinput
companyNameCompany name from the site's own structured dataBasecamp
emailStatusdeliverable, risky, undeliverable or unknowndeliverable
emailProviderWho runs the company's mailgoogle
emailMxHostHighest-priority mail serveraspmx.l.google.com
emailIsRole / emailIsFree / emailIsDisposableDepartment address, consumer mailbox, throwaway domainfalse
mailboxVerifiedAlways false, and here so nothing reads as more than it is โ€” see the FAQfalse
summaryOne sentence saying where the address came fromjason@basecamp.com is published on basecamp.com itself.

Company rows carry the same layout fields plus emailsFoundOnSite (every public address on that domain), pagesScanned and siteError.

How much does it cost to find e-mail addresses?

Pay-per-event, and you only pay for answers.

EventPriceCharged when
Work e-mail found$0.02One usable address is returned for one person
Company address layout read from its site$0.006One company's layout was read off addresses it publishes

That is $20 per 1,000 addresses, plus about $6 per 1,000 companies if you leave company rows on. A person whose company could not be resolved, a name with no usable letters in it, a domain that takes no mail, and every error row are free โ€” the Actor never bills you for a row it could not answer.

Apify's free plan includes $5 of platform usage a month, which is around 240 addresses before you pay anything. Bronze, Silver and Gold accounts pay 10%, 20% and 30% less per event.

Because the Actor sends plain HTTP requests and runs no browser, its compute cost is negligible โ€” you are paying for the answer, not for a proxy bill.

How to find someone's work e-mail address

  1. Open the Actor and paste your people into ๐Ÿ‘ค People to find, one per line: Full Name, company.
  2. The company half can be a domain (stripe.com), a full URL (https://stripe.com/about) or the company's name (Clifford Chance). Mixed lists are fine.
  3. Press Start. A run of a few people takes seconds; a thousand-person list takes a few minutes.
  4. Read the E-mails table. Sort by confidence and work the confirmed and high rows first.
  5. Export to CSV, JSON or Excel, or pull the same rows from the API.

Email Finder API input form โ€” names, companies and options

โฌ‡๏ธ Input

{
"people": [
"Jason Fried, basecamp.com",
"Patrick Collison, stripe.com",
"Maria Bennett, cliffordchance.com"
],
"candidatesPerPerson": 3,
"checkMx": true,
"includeCompanyRows": true,
"maxPagesPerCompany": 4
}

Lists that already have columns

If your data is already split into fields โ€” from a CRM export, a spreadsheet or another Actor โ€” use peopleList instead of the plain lines:

{
"peopleList": [
{ "firstName": "Jane", "lastName": "Doe", "company": "acme.com" },
{ "fullName": "Michael Hart", "domain": "example.co.uk" }
]
}

Chaining from another Actor

inputDatasetId reads the people straight out of an existing Apify dataset, and the four *Field inputs say which columns hold the name and the company. Point it at the output of US New Business Leads and you have newly registered companies enriched with addresses in one step.

โฌ†๏ธ Output

Email Finder API output table โ€” work emails with confidence and layout

A person row

{
"type": "person",
"fullName": "Maria Bennett",
"firstName": "maria",
"lastName": "bennett",
"companyInput": "cliffordchance.com",
"companyName": "Clifford Chance",
"domain": "cliffordchance.com",
"domainSource": "input",
"email": "maria.bennett@cliffordchance.com",
"emailPattern": "first.last",
"emailPatternSource": "site",
"confidence": "high",
"foundOnSite": false,
"alternatives": [
{ "email": "maria@cliffordchance.com", "pattern": "first" },
{ "email": "mbennett@cliffordchance.com", "pattern": "flast" }
],
"patternEvidence": ["richard.franco@cliffordchance.com", "maria.arnone@cliffordchance.com"],
"patternEvidenceCount": 22,
"emailStatus": "deliverable",
"emailProvider": "mimecast",
"emailMxHost": "eu-smtp-inbound-2.mimecast.com",
"emailIsRole": false,
"emailIsFree": false,
"emailIsDisposable": false,
"mailboxVerified": false,
"summary": "maria.bennett@cliffordchance.com follows the first.last layout confirmed on cliffordchance.com; the domain accepts mail."
}

A company row

{
"type": "company",
"domain": "basecamp.com",
"companyName": "Basecamp",
"emailPattern": "first",
"emailPatternSource": "site",
"patternEvidence": ["jason@basecamp.com"],
"patternEvidenceCount": 1,
"emailsFoundOnSite": ["jason@basecamp.com"],
"pagesScanned": 4,
"summary": "basecamp.com writes its e-mail addresses as first, seen in 1 address(es) published on its own site."
}

How the address layout is worked out

The Actor reads the company's home page and up to three more โ€” contact, about, team, legal โ€” and collects every address on the company's own domain. Then it asks of each one: is there a human name in this?

That question is the whole method. jane.diaz@ and complaints-in@ have the identical shape, and a tool that cannot tell them apart will decide that the company writes firstname-lastname on the strength of a complaints inbox. So each half of an address is checked against a list of common given names: an address with a recognised first name in it identifies the layout, an address made of department words is thrown out, and an address where nothing is recognisable is ignored rather than counted as weak evidence. The votes are then tallied, and a layout that two addresses agree on outranks one that a single address suggests.

What comes out the other side is the confidence column:

  • confirmed โ€” the address is not constructed. It is published on the company's own website.
  • high โ€” two or more of the company's own addresses agree on the layout.
  • medium โ€” exactly one address established the layout.
  • low โ€” the company publishes nothing personal, so the most common layout across companies (first.last) was used. This is a guess and is labelled as one.
  • unusable โ€” the domain exists but accepts no mail, so no address at it will arrive.

How often a layout is actually found. Measured on 34 company websites on 12 September 2026, reading four pages each: 8 published a personal address the layout could be read from. The split matters more than the total โ€” 6 of 9 law firms did, and only 2 of 25 technology companies. Professional services, agencies, clinics, brokerages and firms with a staff directory are where this works best, and those are also what most B2B lead lists are made of. Large consumer-facing tech companies publish almost nothing, and for them you will mostly get low.

Use cases for work e-mail addresses

Sales and lead generation

You have a list of decision-makers with names and companies and no addresses. Run it through and sort by confidence: the confirmed and high rows go into the sequence today, the low rows go in with a soft first touch or not at all.

CRM repair

Contacts imported years ago carry a name and an employer and an empty e-mail column. Point inputDatasetId at the export and fill the gaps, then keep emailProvider to know which contacts sit behind Microsoft 365 and which behind Google.

Recruiting

A shortlist of candidates from a conference programme, a paper's author list or a company's team page is names plus employers. This turns it into a way to write to them.

AI agents and automations

The Actor is small, literal and flat: one call in, one row per person out, every field a scalar. An agent can call it through the Apify MCP server or the API and act on confidence without reading any documentation.

Research and journalism

Finding the right person at a firm to put a question to, with the evidence for why that address is the right shape, and the mail provider that will handle it.

Integrations

  • API โ€” start a run and read the dataset with the Apify API: POST https://api.apify.com/v2/acts/lergassy~email-finder-api/runs?token=<TOKEN>.
  • Python and JavaScript clients:
from apify_client import ApifyClient
client = ApifyClient("<TOKEN>")
run = client.actor("lergassy/email-finder-api").call(run_input={
"people": ["Jane Doe, acme.com", "Michael Hart, Acme Consulting"]
})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
if row["type"] == "person":
print(row["email"], row["confidence"])
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<TOKEN>' });
const run = await client.actor('lergassy/email-finder-api').call({
people: ['Jane Doe, acme.com'],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.filter((i) => i.type === 'person'));
  • n8n, Make, Zapier, Google Sheets โ€” through the Apify integrations, so the addresses land in the sheet or the CRM without any code.
  • MCP server โ€” the Actor is callable as a tool by Claude, ChatGPT and any other MCP client through Apify's MCP server.
  • Webhooks โ€” fire a webhook on run completion to push the finished rows wherever they are needed.

Error items

Rows with "type": "error" are never charged. They carry a plain-language error field:

  • Could not work out a website for "โ€ฆ" โ€” the company name matched nothing and no obvious domain answered. Pass the domain instead.
  • No company given for this person โ€” the line had a name and nothing after the comma.
  • The name could not be turned into an address โ€” nothing usable in the name field.

A company row may also carry siteError (website_unreachable or website_blocked). The address is still produced from the default layout in that case, and marked low.

โ“ FAQ

Do you verify that the mailbox exists?

No, and the output says so in the mailboxVerified field, which is always false. Checking whether a specific mailbox exists needs an SMTP conversation on port 25, and outbound port 25 is blocked from Apify's cloud โ€” no Actor running there can do it, whatever its listing claims. What you get instead is domain-level truth (does the domain exist, does it accept mail, who runs it) and something better than an SMTP ping where it is available: evidence from the company's own website that this is the shape its addresses take.

How accurate is it?

Where confidence is confirmed, the address is published by the company itself โ€” there is nothing to be wrong about. Where it is high or medium, the layout came from the company's own addresses and the remaining risk is the spelling of the person's name, not the format. Where it is low, treat it as a guess: first.last is the most common corporate layout, but the Actor found no proof for this company and does not pretend otherwise.

What if the first address bounces?

Use alternatives. It holds the next most likely addresses for the same person, each labelled with its layout, so a bounce costs you a retry rather than a dead lead.

Does it work with company names, not just domains?

Yes. A company name is resolved through a public company index first, and if that finds nothing, the obvious spelling of the name is tested against DNS. domainSource tells you which route was taken โ€” input, directory or guess โ€” so you can decide how much to trust a row whose domain was inferred.

Does it handle accents and compound names?

Accents are stripped the way mail systems strip them (Josรฉ becomes jose). A compound given name is offered both ways: jeanpierre.dubois@ is the primary and jean-pierre.dubois@ sits directly behind it in alternatives. Surname particles stay attached โ€” van der Berg becomes vanderberg.

The Actor reads only pages that companies publish openly and works out an address format from them; it does not access any private system. Business contact data is treated differently from personal data in most jurisdictions, but sending unsolicited mail is regulated separately โ€” GDPR, CAN-SPAM, CASL and the rest apply to what you do with an address, not to knowing it. Check your obligations for your market, and consult a lawyer if a campaign is at stake.

Can I use Email Finder API with the Apify API?

Yes โ€” start runs, pass input and read results through the standard Apify API and the Python or JavaScript clients, as shown above.

Can I use it through an MCP server?

Yes. It is exposed as a tool through Apify's MCP server, so an AI agent can call it directly. The input schema is small and the output is flat on purpose.

Can I integrate it with other apps?

Yes โ€” n8n, Make, Zapier, Google Sheets, Slack and webhooks are all available through Apify's integrations.

Does one person always produce one row?

Yes. One row per person, plus one row per company when company rows are on, plus a free error row for anyone who could not be placed.

Do I need a proxy?

No. This Actor reads ordinary business websites with plain HTTP requests, and the proxy input is off by default. Turn it on only if you are reading thousands of sites in one run and some begin refusing.

Your feedback

Found a company whose layout it read wrongly, or a name shape it does not handle? Open an Issue on the Actor page with the company and the expected address โ€” those reports are what the given-name list and the layout rules grow from. Reviews are read and answered.

You might also like

ActorWhat it does
Website Contacts APIEvery public e-mail, phone, WhatsApp and social profile for a list of websites
Email Verifier & Phone Number ValidatorCheck addresses and numbers in bulk: domain deliverability, role and throwaway flags, numbering-plan validation
US New Business LeadsNewly registered US companies with addresses, industry codes and a lead score