Email Verifier — Syntax & MX Checks avatar

Email Verifier — Syntax & MX Checks

Pricing

from $0.47 / 1,000 email verifieds

Go to Apify Store
Email Verifier — Syntax & MX Checks

Email Verifier — Syntax & MX Checks

Check email syntax and public domain MX records in bulk. Export normalized addresses, validation status, lookup reasons, mail records, and timestamps for list cleanup.

Pricing

from $0.47 / 1,000 email verifieds

Rating

0.0

(0)

Developer

Fetch Cat

Fetch Cat

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

9 hours ago

Last modified

Share

Validate email syntax and public domain MX records in bulk for CRM cleanup, signup screening, and lead-list review. Get normalized addresses, validation status, mail-exchanger records, and timestamps—not a guarantee that a mailbox exists or a message will arrive.

Quick start

Paste at least one email address (maximum 10,000), choose whether to check domain mail readiness, and start the Actor. Open the dataset to export JSON, CSV, or Excel.

This safe example checks syntax only; reserved example domains are not delivery targets:

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

For addresses you want to assess, leave checkDeliverability enabled to also look up public MX records. valid means the selected checks passed, not that a mailbox was verified.

Ready-to-run examples

What you get

  • A valid or invalid result under the selected checks, with a reason when available.
  • Trimmed input, normalized address, local part, domain text, and DNS-ready ASCII domain.
  • MX records sorted by ascending priority when the lookup succeeds.
  • An SMTPUTF8 requirement flag and UTC verification timestamp.

Results follow first-seen input order. Exact duplicates after trimming are processed once; differently cased addresses are not merged.

Who is it for?

  • Sales operations teams reviewing lists before CRM imports.
  • Growth teams screening malformed signup addresses.
  • Data teams separating formatting issues from domain mail-readiness issues.
  • Developers adding bounded email checks to API and agent workflows.

Input settings

SettingAPI keyDefaultPurpose
Email addressesemailsRequired1–10,000 strings
Check domain mail readinesscheckDeliverabilitytrueInclude public MX checks
Allow internationalized local partsallowInternationalizedfalseAccept non-ASCII characters before @

For internationalized local parts, set allowInternationalized: true, for example with "emails": ["tèst@example.com"]. This does not establish that the destination accepts SMTPUTF8 mail. See input-field help for each setting's behavior and limitations.

Output

Illustrative syntax-only output shape, not a measured delivery result:

{
"inputEmail": "contact@example.com",
"status": "valid",
"reason": null,
"normalizedEmail": "contact@example.com",
"localPart": "contact",
"domain": "example.com",
"asciiDomain": "example.com",
"syntaxValid": true,
"hasMx": null,
"mxRecords": [],
"requiresSmtpUtf8": false,
"checkedAt": "2026-10-24T00:00:00.000Z"
}
FieldMeaning
inputEmailOriginal input after trimming
statusvalid or invalid under the selected checks
reasonSyntax or lookup failure explanation when available; otherwise null
normalizedEmailLocal part plus normalized domain; null for rejected syntax
localPartText before @; null for rejected syntax
domainLowercase domain with a trailing dot removed; null for rejected syntax
asciiDomainDNS-ready domain; null for rejected syntax
syntaxValidWhether the supported formatting checks passed
hasMxWhether the lookup returned MX records; null when disabled or syntax was rejected
mxRecordsExchanges and priorities, sorted by priority; empty when unavailable
requiresSmtpUtf8Non-ASCII local-part indicator for parsed addresses; rejected inputs flag non-ASCII characters anywhere in the input
checkedAtUTC check timestamp

Pricing and limits

This is a paid-per-event Actor, not a free or unlimited verification service. A start event is charged once per run and a result event for each saved verification row, including invalid addresses and DNS-failure rows. Exact duplicate inputs after trimming produce one row. See the live Pricing tab for current rates and discounts.

  • MX records describe domain mail infrastructure; they do not verify individual mailboxes, catch-all behavior, or successful delivery.
  • No SMTP handshakes, messages, disposable-address detection, or risk scores are provided.
  • DNS lookup failures, including temporary failures and timeouts, produce invalid rows with a lookup reason. A temporary failure is not proof that the address or domain is permanently unavailable.
  • An empty MX answer can produce invalid with reason: null; interpret syntaxValid, hasMx, and mxRecords together.
  • Formatting checks are practical checks, not a complete RFC-compliance certification.
  • Large lists or slow lookups can finish with partial results. Compare saved rows with unique inputs and resubmit missing addresses if needed; pending work is not automatically resumed.
  • DNS records change over time. Use checkedAt when comparing snapshots. Disable domain checks only when syntax-only results meet your needs.

API usage

Use an Apify API token in your environment. The asynchronous REST call returns a run; wait for completion and read its default dataset. The client examples wait for completion and retrieve rows.

cURL

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

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

MCP and agents

Use the official Apify MCP server, not a separate email-verification server. The general server can discover and run Actors; a focused configuration selects this Actor. Follow the official connection instructions for authentication in your client:

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

Ask: “Run fetch_cat/email-verifier-free-to-use-scraper with emails: [\"contact@example.com\"] and checkDeliverability: false; return the syntax status and reason.” For real domain checks, enable checkDeliverability and ask the agent to distinguish DNS failures from malformed inputs. Keep batches small, review the Pricing tab, and retrieve the run dataset before interpreting results.

FAQ

Does an email verifier confirm that a mailbox exists? No. This Actor checks formatting and, optionally, domain MX records. It does not verify mailbox existence or guarantee delivery.

Can I validate an email list without DNS? Yes. Set checkDeliverability: false; parsed addresses have hasMx: null and an empty mxRecords array.

Can I export the results? Yes. Use Apify dataset exports for CSV, Excel, or JSON, or retrieve the dataset with the API.

Why can an invalid result have no reason? A successful lookup with no returned MX records leaves reason null. Inspect hasMx and syntaxValid too. Lookup exceptions include their failure code in the reason.

Is this free to use? The stable Actor identifier contains that wording, but the service uses the paid events described above. Check current rates before running it.

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 ID, a non-sensitive input example and what you expected. Do not post private address lists publicly.

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