Email Verifier, Finder & Deliverability Checker · Apify
Email Verifier, Finder & Deliverability Checker avatar

Email Verifier, Finder & Deliverability Checker

Pricing

from $0.60 / 1,000 email or domain results

Go to Apify Store
Email Verifier, Finder & Deliverability Checker

Email Verifier, Finder & Deliverability Checker

Verify email syntax and domains, find publicly listed business contact addresses, and export transparent deliverability and authentication signals.

Pricing

from $0.60 / 1,000 email or domain results

Rating

0.0

(0)

Developer

Fetch Cat

Fetch Cat

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

19 days ago

Last modified

Categories

Features

Limited permissions

Share

Check email syntax and domain mail signals, find matching business addresses on public company pages, and audit domain authentication in one batch. This email verifier exports MX, SPF, DMARC, common DKIM, provider, and risk signals—not proof that a mailbox exists or that a message will be delivered.

Quick start

  1. Paste a small list of addresses into Email addresses, or use this JSON:
{ "emails": ["hello@example.com"], "maxConcurrency": 10, "maxRuntimeSecs": 270 }
  1. Start the Actor and open its dataset when it finishes.
  2. Review status alongside syntaxErrors and deliverabilityIssues. Export JSON, CSV, or Excel. READY means syntax and MX checks passed and the domain is not on the built-in disposable list. It does not confirm the mailbox.

Prefer a video guide? This short Apify walkthrough shows you how to set up and run an Actor. It uses a different Actor, but the setup steps are the same.

Ready-to-run examples

Choose a public example to see its settings before starting a run:

What you get

One row per saved email, contact or domain outcome, with available syntax, mail-routing, authentication and risk signals. status, syntaxErrors, deliverabilityIssues and checkedAt support manual review. Mailbox existence and catch-all behavior are not tested, and their output claims remain null.

Who is it for?

Sales operations teams, lead-generation agencies, recruiters, founders and developers can use this Actor to review public business-contact data and diagnose domain email setup before outreach.

How you can use the data

  • Triage an existing contact list. Submit a small set of known business addresses and inspect status, syntaxErrors, hasMxRecords and deliverabilityIssues. Separate invalid and risky rows for review rather than treating READY as mailbox confirmation.
  • Audit domain authentication. Submit known company domains and compare available SPF, DMARC and common-DKIM signals. Keep checkedAt and issue codes with each observation, and review negative DNS results before treating them as definitive.
  • Check a supplied person's public company address. Provide their first name, last name and company domain. Inspect the returned address and sources before importing it into your own contact system. A search indicator alone does not prove a matching public address.
  • Keep outcome types separate in reporting. Preserve INVALID, RISKY, READY, NOT_FOUND and DOMAIN_ONLY distinctions. Compare your own dated exports using their collection times without converting heuristic scores into delivery probabilities.

Input settings

{
"emails": ["sales@example.com", "person@company.com"],
"contacts": [{ "firstName": "Ada", "lastName": "Lovelace", "domain": "example.org" }],
"domains": ["example.net"],
"maxConcurrency": 10,
"maxRuntimeSecs": 270
}

More input settings

KeyTypeDescription
Email addresses (emails)string[]Known addresses to check. Form prefill is an example, not an API default.
People and company domains (contacts)object[]Objects with firstName, lastName, and domain. Returns matching public-page addresses only.
Domains (domains)string[]Domain mail checks without inventing an email address.
Pasted emails (csvText)stringComma, whitespace, or newline-separated addresses, not a file upload.
Maximum concurrency (maxConcurrency)integerConcurrent targets, from 1 to 25. Default 10.
Maximum runtime (maxRuntimeSecs)integerBudget from 60 to 270 seconds. Default 270.

Provide at least one target across emails, contacts, domains, or csvText. Modes can be combined. Repeated targets within the same mode are deduplicated. Results are saved as they complete, not in input order.

Input recipes

Check a pasted list

{ "csvText": "hello@example.com\nsales@example.org" }

Audit domains

{ "domains": ["google.com", "microsoft.com"] }

Find a public contact email

{ "contacts": [{ "firstName": "Jane", "lastName": "Smith", "domain": "example.com" }] }

Output data

Illustrative shape only, not a measured DNS result. Values vary by domain and check time.

{
"email": "sales@example.com",
"firstName": null,
"lastName": null,
"domain": "example.com",
"isValidFormat": true,
"syntaxErrors": [],
"hasMxRecords": true,
"isVerified": null,
"isCatchAll": null,
"isDisposable": false,
"isFreeProvider": false,
"isRoleAccount": true,
"confidenceScore": 90,
"verificationMethod": "mx",
"mxHost": "mail.example.com",
"provider": "other",
"patternsTried": 0,
"sources": ["public-dns"],
"verificationTimeMs": 120,
"deliverabilityGrade": "A+",
"deliverabilityScore": 90,
"spfExists": true,
"spfValid": true,
"dmarcExists": true,
"dmarcPolicy": "reject",
"dkimFound": false,
"deliverabilityIssues": ["COMMON_DKIM_SELECTOR_NOT_FOUND"],
"status": "READY",
"checkedAt": "2026-09-07T07:00:00.000Z"
}

More output fields

FieldDescription
emailSubmitted or publicly evidenced email. Null for domain-only/not-found rows.
firstName, lastNameSubmitted contact identity when using finder mode.
domainNormalized ASCII mail/company domain.
isValidFormat, syntaxErrorsLocal syntax result and explicit issue codes.
hasMxRecords, mxHostPublic mail-routing result and preferred host.
isVerifiedAlways null: this Actor does not confirm mailbox existence.
isCatchAllAlways null: catch-all behavior is not tested.
isDisposable, isFreeProvider, isRoleAccountAddress risk classifications.
confidenceScoreDeterministic 0–100 confidence for the supplied/evidenced address.
verificationMethodDeepest supported check: domain, format, or mx.
providerProvider inferred from the preferred MX hostname.
patternsTried, sourcesDistinct name-pattern count and source indicators. A search indicator alone does not prove a match.
verificationTimeMsProcessing time for the row.
deliverabilityGrade, deliverabilityScoreDomain authentication grade and 0–100 score.
spfExists, spfValidSPF record retrieved and basic version-marker check, not complete SPF validation.
dmarcExists, dmarcPolicyDMARC publication and policy.
dkimFoundWhether one of several common public selector records was found.
deliverabilityIssuesExplicit mail/authentication issue codes.
statusREADY, RISKY, INVALID, NOT_FOUND, or DOMAIN_ONLY. Failed targets can be absent from the dataset.
checkedAtISO timestamp for freshness.

Download your results

Open your run's dataset, choose Export and select JSON, CSV or Excel. JSON keeps nested fields together. CSV and Excel are useful when you want to review the records in a spreadsheet.

See Apify's download and export guide for the available formats and field options.

Pricing

Pay-per-event pricing includes one start charge per run and one result charge per saved row, including INVALID, NOT_FOUND and DOMAIN_ONLY rows. Failed targets producing no row do not incur a result event.

Keep input lists small to bound the number of results. See the live Actor Pricing tab for current rates.

Tips for best results

  • Read status and issue fields together. A READY result confirms the stated syntax and domain checks, not the mailbox.
  • Retry a small negative DNS check later. Missing records can reflect a timeout or lookup failure, and DNS changes can take time to propagate.
  • Treat common DKIM checks as partial evidence. A domain can use a custom selector outside the bounded list.
  • Inspect public-contact evidence before importing. Finder results require a matching address on checked company pages, and a search indicator alone is not proof.
  • Review unfinished and failed targets separately. Resubmit remaining targets through normal inputs when needed. Pending records exclude failed targets and do not trigger automatic resume.

Limits and caveats

  • The maximum batch size is 10,000 unique targets. Finder mode checks a bounded set of public company pages.
  • Results depend on public DNS and website availability. NOT_FOUND means no matching address was found on the checked pages. It does not establish that the address does not exist or is private.
  • No MX or authentication record retrieved can mean absence, a failed lookup, or a timeout. Retry a small input later before treating a negative signal as definitive.
  • Scores are heuristics, not delivery probabilities. Disposable, free-provider, and role-account flags use finite built-in lists.
  • A valid format and MX record do not prove that a specific mailbox exists.
  • isVerified and isCatchAll are always null because mailbox existence and catch-all behavior are not tested. Null does not mean false.
  • DKIM selectors are chosen by each sender. Common-selector discovery is useful but not exhaustive.
  • Public contact discovery returns only an address found on the supplied company's public pages and textually matching a conventional person pattern.
  • DNS changes can take time to propagate. Use checkedAt when comparing runs.
  • Large workloads may finish only partially. The run key-value store can contain RUN_SUMMARY counts and PENDING_TARGETS for targets not started before cutoff. Failed targets are not included in that pending list. There is no automatic resume input—resubmit remaining targets in the normal input fields.
  • Use smaller batches for finder lookups. A successful run status alone does not mean every submitted target produced a row.

Automation and integrations

Save your settings for next time

Once you have an input that works for you, save it as an Apify task. This keeps your settings together so you can use them again without filling in the form from scratch.

Run on a schedule

Need fresh results regularly? You can schedule the Actor or a saved task to run at a time that suits you.

Each scheduled run collects the data again. If you want to compare results or highlight changes, add that step in your own workflow.

Send results to your other tools

Use n8n, Make or Zapier to connect this scraper to the rest of your workflow. For example, you could pass its results to an AI assistant or add records to a spreadsheet. Follow the Apify integration guides for your chosen tool.

For a custom connection, an Apify webhook can notify your app when a run finishes or fails. Your app can then fetch the results or handle the failure.

API usage

Want to collect this data from your own app or automation? The examples below send input to the scraper and show how to collect its results.

The Node.js and Python examples wait for the run to finish before reading its results. The cURL example starts the run and returns its details. Wait for that run to finish, then use its defaultDatasetId to fetch the results.

For setup instructions, see Apify's JavaScript client guide, Python client guide and Actor runs API reference.

cURL

curl -X POST 'https://api.apify.com/v2/acts/fetch_cat~email-enrichment-scraper/runs' \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H 'Content-Type: application/json' \
--data @- <<'JSON'
{
"emails": [
"hello@example.com"
],
"maxConcurrency": 10,
"maxRuntimeSecs": 270
}
JSON

Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/email-enrichment-scraper').call({
"emails": [
"hello@example.com"
],
"maxConcurrency": 10,
"maxRuntimeSecs": 270
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('fetch_cat/email-enrichment-scraper').call(run_input={'emails': ['hello@example.com'], 'maxConcurrency': 10, 'maxRuntimeSecs': 270})
print(client.dataset(run['defaultDatasetId']).list_items().items)

MCP and AI agents

You can ask your AI assistant to collect data with Email Verifier, Finder & Deliverability Checker and help you work with the results. The scraper returns the data, and your assistant can then summarize it, compare records or prepare notes.

Connect your assistant through the Apify MCP server. MCP gives your assistant a way to find this scraper, run it and read the results. Follow the official setup and sign-in guide for your app.

Easier setup with an Apify plugin

If you use a supported coding assistant, the official Apify plugin can set up the connection for you. It connects your assistant to Apify and includes instructions for common tasks. Follow the guide for your particular app.

Use Apify AI in Console

Prefer to keep everything in Apify? Open Apify AI in Console and ask it to find Fetch Cat's Email Verifier, Finder & Deliverability Checker. You can describe the data you want and ask questions about the results.

Apify AI is currently in beta. It asks for confirmation before starting an Actor, and normal run charges apply.

Choose your assistant

Connect just this scraper

To keep your setup focused on this scraper, add this server configuration to a compatible MCP client:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=fetch_cat/email-enrichment-scraper"
}
}
}

Sign in to Apify when your client asks. If your client uses a Bearer token instead, follow its setup guide and keep the token in its secure configuration. Configuration formats vary by app, so use the linked guide if your client needs a different format.

Use Apify's general server

Already connected to the general Apify MCP server at https://mcp.apify.com? You can use it to find this scraper without adding another server. Ask your assistant to use Email Verifier, Finder & Deliverability Checker by Fetch Cat, or give it the identifier fetch_cat/email-enrichment-scraper.

Your assistant can check the available settings and retrieve the results from the returned run. If the run is still working, it should follow that run rather than start it again. Both connection options use Apify's hosted service.

Example requests

  • “Use Fetch Cat’s Email Verifier, Finder & Deliverability Checker to retrieve syntax and domain-mail results for the 3 business email addresses I provide. Show statuses and issue codes without claiming mailbox existence or delivery probability.”
  • “Collect authentication signals for google.com and microsoft.com. Show available MX, SPF, DMARC and common-DKIM results with check times, and distinguish missing records from conclusive delivery findings.”
  • “Retrieve public-company-page email matches for the 2 named contacts and company domains I provide. Keep source indicators and explicit not-found outcomes for manual review, without guessing addresses or testing mailboxes.”

Normal Apify charges apply. Check the live Pricing tab before asking your assistant to run a larger batch.

Pay with x402

If your AI agent has a funded wallet, it can pay for Apify usage through x402. This experimental option lets an agent use Apify without a conventional account.

Apify AGI provides a prepaid API token with a spending cap after payment. Your agent can use that token to run this scraper through the Apify API or an authenticated MCP connection.

Some MCP setups also support paying for each request directly. That is a different payment option, so check the official guide for its availability.

Follow the official guide for wallet setup, supported payment options and current terms. Apify handles the payments. Keep wallet keys and payment tokens in your agent's secure configuration.

Other ways for agents to pay

Apify also supports MPP for prepaid access through AGI and Skyfire for eligible Actors. If your agent already uses one of these, see the agentic payment guide to choose the right setup.

FAQ

Does this send email?

No. It analyzes supplied/public addresses and domain mail configuration.

Does an MX result prove the mailbox exists?

No. isVerified and isCatchAll are always null because the Actor does not test mailbox existence or catch-all behavior.

Why is DKIM false when a domain sends signed mail?

The domain may use a custom selector not included in the bounded common-selector check.

Can I combine all modes?

Yes. emails, contacts, domains, and csvText can be submitted together.

Can I export results or use an API?

Yes. Export the dataset as JSON, CSV, or Excel, or use the API examples above. No target-site login or cookies are required.

Can this replace an SMTP mailbox verifier?

No. It supplies public-page and domain signals. Choose a mailbox-verification service if you need a conclusive recipient or catch-all test. Neither is performed here.

  • Email MX & Deliverability Verifier — Check supplied email addresses for syntax, public MX routing and risk signals. These are not proof that a mailbox exists or will accept mail.
  • Public B2B Email Finder & MX Verifier — Find source-cited business emails for named people on company websites, with syntax and public MX checks rather than guessed addresses.
  • Google Maps Email Extractor & Lead Finder — Collect public Maps business listings and optionally published website contact details for lead research. Contact coverage varies.
  • Decision-Maker Public Email Finder — Find publicly posted person-bound contact emails on company websites, with page evidence, for role-focused contact research.
  • Public Email Domain Verifier — Check email syntax and public DNS MX and Gravatar signals. These checks do not establish mailbox ownership, identity or deliverability.

Support and feedback

For custom additions or integrations, email hello@fetchcat.dev.

Found an error or have a feature request? Open an issue with the run URL, a non-sensitive input example and what you expected.

Need help sharing it? See Apify’s guide to sharing a run when reporting an issue. Sharing a run can give the developer access to its input, logs and results, so use a run that contains no sensitive data. Please leave out API tokens, passwords, cookies, private documents and personal data. Use a public sample URL or a redacted example instead.

Tried this scraper? We'd love to hear how it worked for you. Leave a review to help others choose the right tool and help us improve it. Your feedback means a lot to us.

Made with care for curious people, AI agents and the possibilities in data. ♥