Email Finder API & MCP for AI Agents | FetchLayer
Unofficial Third-party API
2 endpoints live

Contact emails.
Graded on who published them.

Address + source page Confidence you can check A "no" you can trust MCP ready

The public address a website, social profile or YouTube channel publishes — as JSON, with the page it came from and a confidence grade you can check yourself.

Free tier included No credit card No scraper maintenance

Trusted by developers shipping real products.

247,110 served today

POST /email-finder/find-email
200 OK

Request

$ curl -X POST \
  https://api.fetchlayer.dev/email-finder/find-email \
  -H "Authorization: Bearer ss-your-key" \
  -H "Content-Type: application/json" \
  -d '{"target":"python.org"}'

Response

{
  "email": "psf@python.org",
  "confidence": "high",
  "emailSource": "website",
  "sourceUrl": "https://www.python.org/about",
  "onTargetDomain": true,
  "status": "EMAIL_FOUND",
  "complete": true, "incomplete": [],
  "pagesCrawled": 16, "pagesFetched": 1
}

Used by developers at

Individual developers or teams — not official partnerships

Built for feedback workflows

Fetch the public signal. Use it wherever your team works.

One field in, a contact address out

Send a website, a social profile or a YouTube channel — nothing else to configure, and nothing to set up on the target's side. Back comes the public contact address that target publishes, the page it was read off, and how far to trust it.

Confidence graded on who published it

An address the target published on its own pages can grade high. An address found elsewhere cannot, however right the domain looks — stripe.com returned a genuine @stripe.com address found off Stripe's own pages and graded medium. That rule is what rules out a plausible address on a perfect domain that belongs to nobody.

Every grade is checkable

sourceUrl is the exact page the address was read off, and emailSource says how it relates to the target. You never have to take a grade on faith — open the page and see for yourself.

Triage a list before you spend on it

resolve-target normalises a target, says what kind it is and lists what a lookup would examine — fetching nothing and costing nothing. Sort a pasted list first, then spend lookups only where they are worth it.

Two MCP tools

Both routes are tools on the FetchLayer MCP server, so an agent can look up a contact mid-conversation and hand you the confidence grade and the source page with it, billed exactly like REST.

A clear answer when there is no address

Plenty of targets — large companies especially — publish no contact address anywhere. When that is the case you get a straight answer saying so, with a note naming what was examined, rather than a guessed address or a blank you have to run again. A target that genuinely could not be read comes back as a retryable error instead, so the two are never confused.

FetchLayer Research Chat

Turn a list of companies into a list you can act on.

Prefer not to write code? Paste the list into FetchLayer Research Chat and get a table back — with the targets that publish nothing marked plainly, rather than filled in with a guess.

  • Ask questions in plain English
  • Analyze themes, sentiment, and pain points
  • Download the structured results as CSV or JSON
Find emails in Chat

No code or setup required · Uses your FetchLayer credits

Email Finder research

Find the public contact email for each of these 40 companies. Tell me which ones publish nothing, and flag any address that was not published on the company's own pages.

Y

Twenty-three publish an address on their own pages. Nine publish nothing at all — that is a real answer for each of them, not a miss. Six turned up an address elsewhere on the web, flagged medium or low with the page it came from so you can check it. Two could not be read and are worth retrying.

contact-addresses.csv

40 companies · 7 columns · ready to download

CSV

From raw feedback to action

One request is the start of the workflow.

Store the structured response, run it on a schedule, pass it to an LLM, or feed it into the system your team already uses. FetchLayer handles retrieval so you can focus on the outcome.

  1. 01

    Send a target

    A bare domain, a social profile URL or a YouTube channel. One field, no configuration, and nothing to set up on the target's side.

  2. 02

    Read the grade, not just the address

    confidence tells you how far to trust it, emailSource and onTargetDomain tell you why, and sourceUrl lets you check it in one click. High means the target published it themselves.

  3. 03

    Take the "no" as an answer

    NO_EMAIL_LISTED with complete: true is a finished result — the target publishes nothing. Move on rather than re-running it. Keep your retries for the 503s, which are the ones that really could not be read.

MCP & agents

Live

Your AI already knows how to use this.

Use the Email Finder endpoint directly from your MCP-compatible agent. Ask it to retrieve public feedback, identify patterns, and turn the result into a useful brief without writing integration glue.

1
Pick your editor
2
Agent discovers 2 tools
3
Query any platform instantly
connect your agent ~30s

Pick your editor and we hand you the config with your key already in it — no JSON to hand-edit, no wrapper code.

Get your free API key

Free tier · no credit card · any MCP host

New chat fetchlayer connected

What's the contact email for python.org?

Used fetchlayer.email_finder_find_email

psf@python.org, graded high — published on the target’s own about page, which is the only way an address earns that grade. The search finished complete, with nothing left unchecked. If you want it verified by eye, sourceUrl points straight at the page.

Ask a follow-up…

Works with every MCP-compatible tool

Cursor
Claude
VS Code
Windsurf
Cline
Hermes
OpenClaw
Kiro
No wrapper code
All 2 endpoints exposed as tools
Official & maintained
Free to install

Use cases

What teams build on an address they can trust.

One target in, one graded answer out — including the answer that there is nothing to find.

01

Lead list enrichment

One domain in, one graded address out — with the page it came from, so a rep can check it before sending rather than trusting a score.

salesenrichmentcrm
02

Clean negative results

A target that publishes nothing comes back saying so, definitively. That is what lets you close a row out instead of re-running it every quarter.

opsdatasetssales
03

Creator and partner outreach

Turn a YouTube channel or a social profile into a contact, with the grade and the source page attached so a low-confidence hit is treated as a lead, not a fact.

influencerpartnershipsagencies
04

Deliverability protection

Sending to a plausible address nobody reads costs you reputation. Grading on who published an address is what keeps invented-looking addresses out of a send.

emailcomplianceops
05

Local business outreach

Pair with a places search: find the businesses, then turn each website into the address it actually publishes, and see which ones publish none at all.

localsalesleads
06

Data quality audits

Re-check a CRM against what targets publish today, and flag the rows whose address was never published by the company in the first place.

crmopsreporting

Compare approaches

Spend time on the insight, not the collection layer.

What you needFetchLayerOfficial APIBuild it yourself
Confidence graded on who published itn/aYou judge by domain
Source page returned with every addressn/aYou track it
"Publishes nothing" vs "could not read"n/aOne failure bucket
Partial answers marked as partialn/aYou would not know
Ready for AI and MCP workflowsn/aYour integration

FetchLayer provides access to publicly available data. It is not affiliated with, endorsed by, or sponsored by the platform.

Pricing

Start free. Scale when ready.

Pay per request with no commitment, or lock in a flat monthly rate with built-in savings.

Free plan — 30 requests

Verify responses, inspect the API, no credit card required.

Try free

Pay as you go

$1.99

per 1,000 requests

$0.00199 per request · credits never expire

How credits work — no multipliers

One credit = one API call, on every endpoint and platform. No matter how many results come back, you pay for the call, not the output size. Most scraping APIs charge multipliers of 5x, 25x, even 75x per call depending on the target — here it's always 1.

  • No multipliers — 1 request = 1 credit
  • No monthly commitment
  • Credits never expire
  • Same API & MCP access as subscribers
  • ∞ req/min, ∞ API keys
Get API key

Expiry

Credits stay until you use them. No monthly reset, no pressure to hit a quota.

0

Commitments

No subscription, no contract, no minimums. Start, pause, or scale whenever.

100%

Access

Every endpoint and MCP included. Not a limited tier — same data as any subscriber.

API reference

Every parameter, documented.

All requests are POST with a JSON body and Bearer auth header.

POST /email-finder/find-email

The public contact address a target publishes, with the exact page it came from and a confidence grade based on who published it. Answers either way: an address, or a plain NO_EMAIL_LISTED with a note naming what was examined.

target* string A website (python.org), a social profile URL, or a YouTube channel.
format string 'json' (default) | 'markdown'
POST /email-finder/resolve-target

Parse a target and see what a lookup would examine, before spending one. Returns the kind of target, the page a lookup would start from and the list of what it would check. Free — it reports pagesFetched: 0.

target* string Any website, social profile URL or YouTube channel.

Fields marked * are required. Full API reference →

FAQ

Common questions.

What is the Email Finder API?

One endpoint that takes a website, a social profile URL or a YouTube channel and returns the public contact address that target publishes — with the page it was found on and a confidence grade. You send a target with a Bearer token; you get an answer either way, and you always know how good it is.

What does "NO_EMAIL_LISTED" mean? Did it fail?

No — it is a successful answer. It means the search ran and the target publishes no readable contact address. That is the common outcome for large companies, not an edge case: github.com, g2.com and ticketmaster.com all answer this way, each with a note naming what was checked. Stripe publishes a support portal rather than an address. Treat it as the answer it is; do not retry it.

Then how do I tell a real "no" from something going wrong?

They are different HTTP statuses, deliberately. A target that publishes nothing is a 200 with status NO_EMAIL_LISTED. A target that could not be read at all is a 503 — indeed.com returned one in 6.2 seconds, and so did a domain that does not resolve. Retry the 503 and trust the 200. That separation is the whole reason a "no" here is worth anything.

Am I paying for a "not found"?

Yes — one credit, the same as a hit. The search is the work, and it is identical whether or not it turns up an address: the same target is examined either way, and you get back a full account of what was looked at. What you are buying is a definitive answer about a target, not a lottery ticket on one. A "no" you can rely on is worth as much as a "yes" when you are working a list — it is the result that lets you stop.

What does the confidence grade actually mean?

It is graded on who published the address, not on what it ends in. An address the target published on its own pages can grade high. An address found elsewhere cannot, however right the domain looks. python.org returned psf@python.org from the target's own about page and graded high. stripe.com returned an address that genuinely is @stripe.com, found somewhere other than Stripe's own pages, and graded medium — right domain, still not high.

Why does the domain not decide it?

Because a plausible address on a perfect domain can belong to nobody. A lookup once returned jane.diaz@stripe.com at high confidence — Stripe's own fictional demo persona from their checkout examples. Grading on where an address was published rather than on what it ends in is what rules that class of answer out. Every response carries sourceUrl, so you can check the grade against the page yourself.

Which targets work best?

Websites and YouTube channels are the strong inputs — every one measured returned a complete answer. Social profiles are supported too: they can take longer, and may return a partial result, which the response marks as incomplete rather than presenting as whole.

How do I know whether an answer is complete?

Read complete. searched[] lists what was examined, incomplete[] lists anything that could not be finished, and complete summarises the two. A partial answer is always distinguishable from a whole one and from a failed one, without guessing and without inferring anything from how long the call took.

How long does a lookup take?

Between about 10 and 100 seconds, measured across websites, X profiles and YouTube channels. It is driven by how much there is to look through for a given target rather than by the kind of target, so it does not sort neatly by input type. Budget your timeouts against the top of that range and run lookups in the background rather than in a request/response cycle.

What is pagesCrawled for, if it is not the price?

Visibility. It says how big the search actually was — 1 on a target that answers immediately, 65 on one that does not — so you can see the difference in effort between two targets that both cost you one credit. It prices nothing. pagesFetched is the billing figure, and on a completed lookup it is always 1.

Can I check a list before spending credits?

Yes. resolve-target parses a target and tells you what kind it is and what a lookup would examine, without fetching anything and without costing a credit. Run a pasted list through it first to normalise and sort it, then spend lookups only on the ones worth it.

Can my AI agent use it?

Yes. Both routes are MCP tools on the same FetchLayer MCP server: email_finder_find_email and email_finder_resolve_target. Tool calls use the same key and are billed exactly like REST, and the agent sees confidence, sourceUrl and complete, so it can tell you how much to trust an address rather than just handing one over.

Start pulling Public contact addresses today.

Get a free API key, make your first request, and put public feedback to work in your own product or research workflow.