Email Verifier — Syntax & MX Checks
Pricing
from $0.47 / 1,000 email verifieds
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
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
9 hours ago
Last modified
Categories
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
- Check and Verify a Lead Email List — Start with syntax and domain MX checks.
- Check Email Syntax for Lead List Cleanup — Check address formatting without DNS lookups.
What you get
- A
validorinvalidresult 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
| Setting | API key | Default | Purpose |
|---|---|---|---|
| Email addresses | emails | Required | 1–10,000 strings |
| Check domain mail readiness | checkDeliverability | true | Include public MX checks |
| Allow internationalized local parts | allowInternationalized | false | Accept 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"}
| Field | Meaning |
|---|---|
inputEmail | Original input after trimming |
status | valid or invalid under the selected checks |
reason | Syntax or lookup failure explanation when available; otherwise null |
normalizedEmail | Local part plus normalized domain; null for rejected syntax |
localPart | Text before @; null for rejected syntax |
domain | Lowercase domain with a trailing dot removed; null for rejected syntax |
asciiDomain | DNS-ready domain; null for rejected syntax |
syntaxValid | Whether the supported formatting checks passed |
hasMx | Whether the lookup returned MX records; null when disabled or syntax was rejected |
mxRecords | Exchanges and priorities, sorted by priority; empty when unavailable |
requiresSmtpUtf8 | Non-ASCII local-part indicator for parsed addresses; rejected inputs flag non-ASCII characters anywhere in the input |
checkedAt | UTC 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
invalidrows with a lookup reason. A temporary failure is not proof that the address or domain is permanently unavailable. - An empty MX answer can produce
invalidwithreason: null; interpretsyntaxValid,hasMx, andmxRecordstogether. - 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
checkedAtwhen 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 ApifyClientimport osclient = 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.
Related Actors
- Email MX Deliverability Verifier — Compare an adjacent mail-domain checking workflow.
- Email Finder API Scraper — Discover addresses before validating a list.
- Decision Maker Email Finder — Start a contact-enrichment workflow.
- LinkedIn Jobs Scraper — Research hiring activity alongside CRM work.
- Google Search Results Scraper — Research organizations before reviewing their contacts.
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. ♥