
Email Verifier
hipersoft/email-verifier
Bulk-verify email addresses without sending mail: syntax, MX/domain deliverability, disposable and role-address detection. Clean your list before outreach or CRM import.
Total users
2Monthly users
1Total runs
77Per email verified
$0.002Last rebuilt
Oct 28, 2026Overview
Clean your email list before you send. Verify addresses in bulk — syntax, mail-server (MX) deliverability, disposable/throwaway domains and role inboxes — without ever sending an email. No account, no API key.
What it does
Give it a list of emails and get one clear row back per address:
- Syntax check — catches typos and malformed addresses.
- MX / domain check — confirms the domain actually has a mail server that can receive mail.
- Disposable detection — flags temporary/throwaway domains (mailinator, 10minutemail, yopmail, …).
- Role-address detection — flags
info@,admin@,support@,sales@,noreply@and other shared, non-personal inboxes. - Best-effort mailbox probe — an optional deliverability signal (see FAQ).
validverdict + reason — every row explains itself, so you can set your own cut-off.
Use cases
- Verify before you email — strip bounces and throwaway addresses out of a cold-outreach list to protect sender reputation.
- Clean before CRM import — validate contacts before they hit HubSpot, Salesforce or your database.
- Signup hygiene — flag disposable emails at registration.
- Automate it in n8n / Make / Zapier — drop verification into a workflow: scrape or collect leads, verify the list, then only email or import the good ones.
Input
{
"emails": ["hello@apify.com", "info@gmail.com", "sales@mailinator.com", "bad@@nope"],
"smtpCheck": false,
"concurrency": 10
}
| Field | Type | Description |
|---|---|---|
emails |
array | Addresses to verify (one per line). No mail is sent. |
smtpCheck |
boolean | Attempt a best-effort SMTP deliverability probe (off by default — see FAQ). |
concurrency |
integer | How many addresses to verify in parallel (1–30). |
Output
One record per email:
{
"email": "info@gmail.com",
"valid": true,
"syntaxOk": true,
"domain": "gmail.com",
"mxFound": true,
"mxHost": "gmail-smtp-in.l.google.com",
"disposable": false,
"role": true,
"smtpChecked": false,
"deliverable": null,
"reason": "Domain can receive mail; role address (shared inbox, not a person).",
"ok": true
}
Output schema
| Field | Type | Description |
|---|---|---|
email |
string | The address you submitted. |
valid |
boolean | Overall verdict: good syntax, a real mail server, and not a disposable domain. |
syntaxOk |
boolean | Whether the address is well-formed. |
domain |
string | Domain part of the address. |
mxFound |
boolean | Whether the domain has a mail server (MX / A record). |
mxHost |
string | Primary mail host, when found. |
disposable |
boolean | Whether the domain is a known throwaway/temporary provider. |
role |
boolean | Whether it's a shared role inbox (info@, support@, …) rather than a person. |
smtpChecked |
boolean | Whether the best-effort mailbox probe actually ran. |
deliverable |
boolean | Best-effort mailbox result (null when not checked or inconclusive). |
reason |
string | Human-readable explanation of the verdict. |
ok |
boolean | Whether this address was processed without error. |
FAQ
Do you send any email? No. Verification is done from address format and public DNS records — nothing lands in anyone's inbox.
What is the SMTP probe? An optional, best-effort deliverability signal. Most cloud networks block the outbound port it needs, so it often can't run — when that happens smtpChecked stays false and you still get the full syntax / MX / disposable / role verdict, which already removes the large majority of bad addresses.
Can I automate it? Yes — via integrations on the Apify platform (n8n, Make, Zapier, and more) and the Apify API. Verify a freshly scraped list before you email it or push it into your CRM.
Notes
Original clean-room implementation.
Input
| Field | Type | Description |
|---|---|---|
emailsEmails | array | Email addresses to verify. One per line. No mail is sent. |
smtpCheckSMTP mailbox check (best-effort) | boolean | Attempt a live SMTP RCPT probe for a deliverability signal. Best-effort only: many networks (including most cloud platforms) block outbound port 25, in which case the address still gets a full syntax/MX/disposable/role verdict and smtpChecked stays false. Off Default: false |
concurrencyConcurrency | integer | How many emails to verify in parallel (1–30). Higher is faster for large lists. Default: 10 |
API
curl -X POST "https://api.apify.com/v2/acts/hipersoft~email-verifier/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"emails": [
"hello@apify.com",
"info@gmail.com",
"sales@mailinator.com",
"test@nonexistentdomain-xyz-9999.tld",
"bad@@nope"
]
}'from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("hipersoft/email-verifier").call(run_input={
"emails": [
"hello@apify.com",
"info@gmail.com",
"sales@mailinator.com",
"test@nonexistentdomain-xyz-9999.tld",
"bad@@nope"
]
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('hipersoft/email-verifier').call({
"emails": [
"hello@apify.com",
"info@gmail.com",
"sales@mailinator.com",
"test@nonexistentdomain-xyz-9999.tld",
"bad@@nope"
]
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);Pricing
| Event | Price | Paid plans from |
|---|---|---|
| Email Verified Charged per email address verified. | $0.002 | $0.001 |
You pay only for what the run returns. Set a maximum cost per run and it stops cleanly at that limit.
Related scrapers
North Data Scraper
Look up European companies on North Data: legal name, former names, register number, address, founding date, LEI, business purpose, managing directors and officers, and recent register publications. Germany, UK, France, Austria and 20+ countries. Bulk lookups.
2,467 runs · 5 users · $0.004 / companyWebsite Content Crawler
Extract clean, readable content from any list of websites: page title, meta description, headings, main body text, word count and link/image counts. Optional same-domain crawl. Bulk-ready. Great for LLM/RAG ingestion, content audits and research.
206 runs · 20 users · $0.0024 / page scrapedSpyFu Domain Scraper
Bulk SEO and PPC reports for any domain from SpyFu: organic keywords, monthly SEO clicks and value, Google Ads budget, paid keywords, top keywords, competitors, top countries and monthly history. Competitor research for agencies. Export CSV/JSON.
185 runs · 7 users · $0.008 / domain reportTrustpilot Reviews Scraper
Scrape Trustpilot reviews and company ratings by company domain or Trustpilot URL: star rating, title, text, reviewer name & country, verification, date, company reply, plus company TrustScore and total reviews.
146 runs · 4 users · $0.0006 / review scrapedACRA Singapore Company Registry Scraper
Search and export Singapore's full ACRA corporate registry: UEN, entity name, status, incorporation date, address, SSIC industry codes, officers, former names and audit firms. Filter by name, status, entity type or industry. Public open data, no setup.
138 runs · 10 users · $0.01 / company scrapedWayback Machine Scraper
List every Internet Archive (Wayback Machine) snapshot of a URL or whole domain: timestamp, snapshot URL, status code, MIME type and content digest. Filter by date, status and dedupe. For SEO, OSINT and historical research. No setup.
135 runs · 15 users · $0.002 / snapshot scrapedSend the site and the fields. We build it and you get it first.