Email Verifier, Finder & Deliverability Checker

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

Data fields

FieldTypeDescription
emailstring | nullValue exported as email.
firstNamestring | nullValue exported as firstName.
lastNamestring | nullValue exported as lastName.
domainstringValue exported as domain.
isValidFormatboolean | nullValue exported as isValidFormat.
syntaxErrorsarrayValue exported as syntaxErrors.
hasMxRecordsbooleanValue exported as hasMxRecords.
isVerifiedboolean | nullValue exported as isVerified.

Input preview

emailsEmail addresses
contactsPeople and company domains
domainsDomains
csvTextPasted emails
maxConcurrencyMaximum concurrency
maxRuntimeSecsMaximum runtime

API and agents

This actor can be run through Apify API, datasets, webhooks, schedules, and the official Apify MCP server.

How this actor works

See example inputs, outputs, API usage, and practical limits before running this actor on Apify.

Open Apify page

Verify known emails, find publicly listed business contact emails, and audit domain email authentication in one batch. The Actor exports transparent MX, SPF, DMARC, DKIM, provider, disposable, role-account, and confidence signals without treating MX records as proof that a mailbox exists.

Who is it for?

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

What you can do

  • Clean CRM and lead-list emails before outreach.
  • Find a named person's email when it is publicly listed on the supplied company website.
  • Audit company domains for mail routing and authentication gaps.
  • Separate invalid, risky, ready, not-found, and domain-only results.
  • Process up to 10,000 deduplicated targets with bounded concurrency and resumable cutoff evidence.

Example input

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

Example output

{
  "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": 85,
  "verificationMethod": "mx",
  "mxHost": "mail.example.com",
  "provider": "other",
  "patternsTried": 0,
  "sources": ["public-dns"],
  "verificationTimeMs": 120,
  "deliverabilityGrade": "A",
  "deliverabilityScore": 85,
  "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"
}

Input settings

Key Type Description
emails string[] Known email addresses to check.
contacts object[] Objects with firstName, lastName, and domain; only publicly evidenced matches are returned.
domains string[] Domains to audit without inventing an email address.
csvText string Comma, whitespace, or newline-separated email addresses.
maxConcurrency integer Concurrent independent targets, from 1 to 25.
maxRuntimeSecs integer Runtime budget from 60 to 270 seconds.

At least one target is required. Inputs are deduplicated before network work.

Input recipes

Verify 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" }] }

Limits and data availability

  • 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. Missing public evidence produces NOT_FOUND rather than a guessed address.
  • A valid format and MX record do not prove that a specific mailbox exists.
  • isVerified: null and isCatchAll: null mean the claim was not conclusively tested, not 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 stop before the platform cutoff and preserve pending targets in the run key-value store.

API usage

curl -X POST "https://api.apify.com/v2/acts/fetch_cat~email-enrichment-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"emails":["hello@example.com"]}'

JavaScript:

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'] });
const { items } = await client.dataset(run.defaultDatasetId).listItems();

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']}
)
items = client.dataset(run['defaultDatasetId']).list_items().items

Use with MCP and AI agents

Claude Code:

claude mcp add --transport http apify "https://mcp.apify.com?tools=fetch_cat/email-enrichment-scraper"

Desktop, Cursor, or VS Code MCP configuration:

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

Support

Open an issue from the Actor page with a sanitized input example, run ID, expected result, and observed result. Do not include private lead lists or credentials.

Common questions

Questions and answers reused from the canonical actor README.

Does this send email?

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

Does an MX result prove the mailbox exists?

No. The Actor reports mailbox-only claims as null unless conclusively supported.

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.