Email Verifier Free to Use

Validate email syntax and domain mail readiness in bulk. Export normalized addresses, MX records, validation reasons, and timestamps for lead-list cleaning.

Data fields

FieldTypeDescription
inputEmailstringValue exported as inputEmail.
statusstringValue exported as status.
reasonstring | nullValue exported as reason.
normalizedEmailstring | nullValue exported as normalizedEmail.
localPartstring | nullValue exported as localPart.
domainstring | nullValue exported as domain.
asciiDomainstring | nullValue exported as asciiDomain.
syntaxValidbooleanValue exported as syntaxValid.

Input preview

emailsEmail addresses *
checkDeliverabilityCheck domain mail readiness
allowInternationalizedAllow internationalized local parts

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

Clean lead lists before CRM imports and outreach. Submit email addresses in bulk and receive a structured syntax and public domain mail-readiness result for every unique address.

What you get

  • Clear valid or invalid status with a reason
  • Normalized email, local part, Unicode domain, and ASCII domain
  • Public MX availability plus ordered mail-exchanger records
  • SMTPUTF8 requirement and verification timestamp
  • Deduplicated, export-ready JSON, CSV, Excel, or HTML results

Example input

{
  "emails": ["contact@gmail.com", "not-an-email"],
  "checkDeliverability": true,
  "allowInternationalized": false
}

Example output

{
  "inputEmail": "contact@gmail.com",
  "status": "valid",
  "reason": null,
  "normalizedEmail": "contact@gmail.com",
  "localPart": "contact",
  "domain": "gmail.com",
  "asciiDomain": "gmail.com",
  "syntaxValid": true,
  "hasMx": true,
  "mxRecords": [{"exchange": "gmail-smtp-in.l.google.com", "priority": 5}],
  "requiresSmtpUtf8": false,
  "checkedAt": "2026-09-06T14:22:51.267Z"
}

Use cases

  • Clean lead lists before sales outreach
  • Reject malformed signup addresses
  • Audit CRM email quality
  • Separate syntax failures from domains without public mail servers
  • Normalize internationalized domains for downstream systems

Input settings

Field Type Default Description
emails string[] required 1–10,000 email addresses
checkDeliverability boolean true Resolve public MX records
allowInternationalized boolean false Allow non-ASCII local parts

Input recipes

Fast syntax-only cleanup

{"emails":["lead@example.com","bad address"],"checkDeliverability":false}

Internationalized addresses

{"emails":["tèst@example.com"],"allowInternationalized":true}

Who is it for?

  • Sales operations teams cleaning lead lists before CRM import
  • Growth teams validating form submissions and prospect exports
  • Data teams that need deterministic, row-by-row validation reasons
  • Developers adding email hygiene to scheduled automations

Tips and limits

  • MX records prove that a domain advertises mail infrastructure; they do not prove that a specific mailbox exists.
  • This Actor does not perform SMTP handshakes, send messages, or claim catch-all detection.
  • DNS changes can alter results over time; use checkedAt when auditing snapshots.
  • A maximum of 10,000 input addresses is accepted per run.

API usage

cURL

curl -X POST "https://api.apify.com/v2/acts/fetch_cat~email-verifier-free-to-use-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"emails":["contact@example.com"],"checkDeliverability":true}'

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/email-verifier-free-to-use-scraper').call({
  emails: ['contact@example.com'], checkDeliverability: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Python

from apify_client import ApifyClient
import os
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('fetch_cat/email-verifier-free-to-use-scraper').call(
    run_input={'emails': ['contact@example.com'], 'checkDeliverability': True}
)
items = client.dataset(run['defaultDatasetId']).list_items().items

MCP and agents

Connect through Apify MCP at https://mcp.apify.com?tools=fetch_cat/email-verifier-free-to-use-scraper.

claude mcp add apify --transport http \
  "https://mcp.apify.com?tools=fetch_cat/email-verifier-free-to-use-scraper"

Equivalent JSON configuration:

{"mcpServers":{"apify":{"type":"http","url":"https://mcp.apify.com?tools=fetch_cat/email-verifier-free-to-use-scraper"}}}

Example prompts: “Validate these addresses and explain each rejection” or “Clean this exported lead list and return only rows whose domains publish MX records.”

Support

Open an issue on the Actor page with a minimal input and run ID. Do not post sensitive address lists publicly.

Common questions

Questions and answers reused from the canonical actor README.

Does valid guarantee mailbox delivery?

No. It means syntax passed and, when enabled, the domain published MX records.

Are emails retained by this Actor?

Results are written to your Apify run dataset and follow your Apify storage settings.

Why is hasMx null?

DNS checks were disabled with checkDeliverability: false.