Bulk Email & Phone Validator – MX Check, Dedupe, Lead Score
Pricing
from $0.40 / 1,000 cleaned rows
Bulk Email & Phone Validator – MX Check, Dedupe, Lead Score
Clean and validate any contact or lead list: dedupe, email syntax + domain MX check, disposable/role/free-mail flags, E.164 phone formatting, website check and a 0–100 quality score. No SMTP mailbox probing. $0.60 per 1,000 rows; duplicates are free.
Pricing
from $0.40 / 1,000 cleaned rows
Rating
0.0
(0)
Developer
Chris Elder
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Clean and validate a contact or lead list in one run. Upload a CSV, paste JSON or point at an Apify dataset, and this Actor removes duplicates, checks every email's syntax and domain MX records, flags role (info@), free-mail and disposable addresses, formats and validates phone numbers to E.164, checks each website is reachable, and gives every row a 0–100 quality score with a plain-English issues list.
It is a validator, not an SMTP mailbox verifier: it tells you which emails can never work (bad syntax, disposable, domain with no mail server) without probing inboxes, which is unreliable from cloud IPs and harms sender reputation.
Store page: apify.com/chris_elder/dataset-dedupe-enrich
✅ Pay per result: $0.60 per 1,000 cleaned rows · 🆓 Merged duplicates, dropped rows and input errors are never charged · 🔑 No API key
Formerly listed as Dataset Dedupe & Enrich. This is the generalist sibling of Google Maps Lead Cleaner: same hygiene pipeline, but Store-positioned for any CSV / JSON / Apify dataset (CRM exports, form dumps, contact extractors, job boards), not only Maps scrapes.
What it does
- 🧹 Dedupes by placeId (if present), else website domain+path, else phone, else name+address; merges contact fields from duplicates
- 📞 E.164 phones with national format, type and invalid list
- 📧 Email hygiene: split lists, fix
name @domain.com, stripmailto:, syntax check - 🌐 Domain MX check (cached per domain): no SMTP mailbox probing
- 🏷️ Role / free-mail / disposable flags; website alive check
- ⭐ 0–100 quality score +
issueslist for sorting
What it does not do: SMTP / mailbox verification (unreliable from cloud IPs and bad for sender reputation).
How to use it
Works with any columns: it auto-detects common names such as email/emails, phone/phoneNumber/mobile, website/domain/homepage, name/company/title and address (Apify CSV exports with emails/0, emails/1 columns work too). Use fieldMapping if your headers are unusual.
- Click Try for free: prefill has 8 public hotel contact rows (one duplicate, mistyped email, no-MX domain). A few seconds, about $0.004.
- Or set
datasetId/csvUrl/ pasteitems. - Set
defaultCountry(e.g.US) when phones lack country codes. - Download CSV/Excel/JSON from Storage.
RUN_SUMMARYis in the key-value store.
{"datasetId": "YOUR_DATASET_ID","defaultCountry": "GB","dedupeMode": "auto","checkMx": true,"checkWebsites": true}
Real example output
Public run on 20 Oct 2026 (run cQIQIxtnCC8uVeccQ, defaultCountry: "GB"): 5 rows in, 4 rows out (one duplicate merged, not charged). Fields trimmed for space.
Input rows:
[{ "title": "Apify", "email": "hello@apify.com", "website": "https://apify.com" },{ "title": "Apify", "email": "HELLO@apify.com ", "website": "https://apify.com/" },{ "title": "Throwaway Ltd", "email": "test123@mailinator.com", "phone": "07700 900123" },{ "title": "No Mail Co", "email": "info@no-mx-domain-xyz123.com", "website": "https://no-mx-domain-xyz123.com" },{ "title": "GOV.UK", "emails": "mailto:info@gov.uk; sales @gov.uk", "phone": "020 7946 0000", "website": "https://www.gov.uk" }]
What came back:
| Row | Email result | Phone result | Website | Score | Issues |
|---|---|---|---|---|---|
| Apify (2 rows merged) | hello@apify.com → valid-mx, role address | none | alive (200) | 65 medium | email-role-address-only, missing-phone, missing-address |
| Throwaway Ltd | test123@mailinator.com → disposable | 07700 900123 → invalid (Ofcom drama range) | none | 5 low | no-usable-email, email-disposable, phone-invalid, no-contact-method |
| No Mail Co | info@no-mx-domain-xyz123.com → no-mx | none | dns-not-found | 5 low | email-domain-no-mx, website-unreachable, no-contact-method |
| GOV.UK | mailto: stripped and sales @gov.uk repaired; both → no-mx-a-record | 020 7946 0000 → +442079460000 (fixed line) | alive (200) | 55 medium | email-domain-a-record-only, email-repaired, missing-address |
One output row in full shape (Apify):
{"name": "Apify","website": "https://apify.com/","primaryEmail": "hello@apify.com","primaryEmailStatus": "valid-mx","primaryEmailIsRole": true,"phone": null,"invalidPhones": [],"websiteAlive": true,"websiteStatus": 200,"leadQuality": 65,"leadQualityLabel": "medium","issues": ["email-role-address-only", "missing-phone", "missing-address"],"duplicatesMerged": 1,"mergedRowNumbers": [2],"emailDetails": [{ "email": "hello@apify.com", "status": "valid-mx", "role": true, "freeMail": false, "disposable": false, "matchesWebsite": true,"mxHosts": ["aspmx.l.google.com", "alt1.aspmx.l.google.com", "alt2.aspmx.l.google.com"] }]}
Email statuses
| Status | Meaning |
|---|---|
valid-mx | Syntax OK and the domain publishes MX records |
no-mx-a-record | No MX record; the domain only has an A record (mail may still be accepted, treat with care) |
no-mx | Domain has no mail server: the address cannot receive email |
disposable | Known throwaway-inbox domain |
invalid-syntax | Not a valid email address |
placeholder | Obvious placeholder or junk address |
unknown | DNS lookup failed, so the domain could not be checked |
not-checked | MX checking was switched off (checkMx: false) |
Pricing
| Plan | Per cleaned row | Per 1,000 |
|---|---|---|
| Free / Bronze | $0.0006 | $0.60 |
| Silver | $0.0005 | $0.50 |
| Gold+ | $0.0004 | $0.40 |
Actor start is a tiny one-time fee. Duplicates merged into another row and rows you drop are free.
Related Actors
- Google Maps Lead Cleaner: same pipeline, Maps-shaped docs and examples
- Dataset Transformer: filter / flatten / rename / CSV (no MX or phone enrichment)
- Website Contact Extractor: pull emails/phones from sites, then clean here
Support
Built by GPT Shop Ltd. Questions: chris@gptshopltd.com