Email List Cleaner: Bulk Email Verify, Keep Qualified Emails avatar

Email List Cleaner: Bulk Email Verify, Keep Qualified Emails

Pricing

from $2.00 / 1,000 qualified email (rules only)s

Go to Apify Store
Email List Cleaner: Bulk Email Verify, Keep Qualified Emails

Email List Cleaner: Bulk Email Verify, Keep Qualified Emails

First 25 qualified emails free. Email list cleaner: check email deliverability (MX, disposable, role, typo), score ICP fit with AI and bill only qualified emails (โ‰ˆ $1.10 per 1,000 cleaned). Works on any plan; the optional deep SMTP check needs a plan that runs Store Actors.

Pricing

from $2.00 / 1,000 qualified email (rules only)s

Rating

0.0

(0)

Developer

Rich Minds

Rich Minds

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Every week, only the emails worth sending โ€” domain-checked, on-ICP, billed per keeper.

โšก First 25 qualified emails free ยท ๐Ÿ’ต $0.002 per qualified email ยท ๐Ÿค– $0.0404 all in with the AI fit score and call ยท ๐Ÿงฎ โ‰ˆ $1.10 per 1,000 addresses cleaned, all in (rules only; you pay for the keepers, not the junk) ยท โฑ๏ธ demo in seconds

One row per qualified email โ€” fit score, label, send call and the reason, best first

Try it in 30 seconds. Click Try it โ€” the form is already filled with 7 sample addresses (4 qualify, 3 are dropped for free). Then paste your own emails or a CSV / Google Sheet link: checked inside this Actor on any Apify plan, no second bill. The built-in check is domain-level; the Deep mailbox check preset adds SMTP. Check one email: one-click example input โ†’ a send / skip verdict in OUTPUT.verdict. โ†’ What a run costs ยท What the AI adds ยท Run it weekly

โšก At a glance

What you getthe emails of your list that are deliverable and on-ICP โ€” each with a fit score 0-100, reasons, first name, seniority and a send / send-with-care / skip call โ€” plus three cleaned CSV lists (sendable, risky, bad)
You providea list of emails (paste, a CSV / Google Sheet link, an Apify dataset, or scraper rows) and one sentence on who you want to reach
Outputa ranked sheet, best first (CSV, Excel, Google Sheets), the cleaned lists, the dropped rows with their reason, an e-mail digest
How deep the check goesbuilt-in: syntax, mail server (MX), disposable, role, typo. sendable.csv = lowest expected bounce, risky.csv = middle band, bad.csv = never send. Dead mailboxes need the Deep mailbox check preset (SMTP, โ‰ˆ $0.00089 per address extra)
Typical run100 emails โ†’ โ‰ˆ 55 qualified in seconds (built-in check: 100 addresses on 50 domains in 0.7 s, measured locally 2026-10-04; the 55 % keep rate is an estimate)
Cost of that run$0.11 rules only ยท $2.22 with AI (55 ร— $0.002 / 55 ร— $0.0404 with tokens) โ€” no second bill
Free tierfirst 25 qualified emails per account
Keys / setup๐Ÿ”‘ Apify plan with model access: no key ยท other plans: your own Gemini / Groq key (free = 1โ€“3 live AI verdicts per run, paid = every qualified email)
Which planFree demo, the built-in check and your own rows (template, exported from your CRM or Sheet): any plan ยท the optional deep SMTP check: a plan that runs Store Actors
Agencies10 clients ร— 1,000 addresses a month โ‰ˆ $11 rules only; one memory name and digest each (clients mode dated 2026-10-31)
Works withSchedules, webhooks, Sheets, Slack, Instantly / Smartlead / Mailchimp, Make / n8n / Zapier, MCP

๐ŸŽฏ What this Actor does

Email list cleaner and qualifier in one run: verify email list exports from a scraper, a webinar or a CRM and keep only what is safe and relevant to send to.

  • Only keepers are billed here. Invalid, disposable, role (info@), catch-all, low-score, deny-listed and duplicate addresses are dropped for free and listed with the reason.
  • Checked inside the Actor. Syntax, domain and mail server (MX), disposable domains, role mailboxes and typos, on any plan. It does not probe the mailbox, so it cannot see a catch-all domain or a dead mailbox; the Deep mailbox check preset adds BounceVerify's SMTP check.
  • An AI ICP-fit score with reasons against your ideal recipient, citing only the fields you supplied โ€” and a call per address: send, send with care or skip.
  • Never twice. Charged addresses are remembered, not even re-verified.

๐Ÿš€ How to use it

  1. Click Try it โ€” the form is pre-filled with the free demo on sample addresses; it works as is.
  2. Paste your emails โ€” or a CSV / Google Sheet link โ€” and describe who you want ("Emails to qualify", "Or your list as a CSV link", "Who is your ideal recipient?"). They replace the sample and start the live check; leave "AI assessment" on (your first 5 qualified emails get live AI verdicts on any plan). Want the price first? Switch on "Estimate the bill only".
  3. Press Start and open the key-value store โ€” three CSV lists (sendable, risky, bad) are ready to import; ranked rows are in the dataset, dropped ones with their reason in REJECTED.
  4. Schedule it weekly (Actions โ†’ Schedule) with your address in "E-mail me the new qualified emails" โ€” only new addresses are charged.

The outreach sheet โ€” first name, seniority, company type, the call and the next step

๐Ÿ“š Learn more: Step-by-step tutorial โ€” how to clean an email list and keep only the sendable emails

๐Ÿ†š Why this instead of running bounceverify/bounceverify-email-verifier yourself?

BounceVerify (bounceverify/bounceverify-email-verifier)clearpath/email-validation-apiautomation-lab/email-mx-verifierThis Actor
Price per email$0.00089 ยท 1,114 users / 30 days$0.008 ยท 19 users$0.00092 + $0.035 start ยท 5 usersfrom $0.002, first 25 free
Billed forevery rowevery rowevery rowqualified emails only
100 qualified emails, all inโ‰ˆ $0.16 (182 raw rows), then you filter by handโ‰ˆ $1.46 (SMTP and catch-all checks)โ‰ˆ $0.20, then you filter by hand$0.20 rules only for 100 ranked, explained emails ยท $4.04 with AI
Your time per 100 qualified emailsโ‰ˆ 3 h by hand (โ‰ˆ 2 min each, an estimate)โ‰ˆ 3 hโ‰ˆ 3 h0 h โ€” filtered, ranked, explained

๐Ÿ’ต Pricing โ€” what a run really costs

Pay per result: one event per qualified email, no start fee.

EventWhen it is chargedPrice
free-tieryour first 25 qualified emails on this Actor$0.00
qualified-email-basicAI off โ€” verifier fields, flags, rule score, call$0.002
qualified-email-aiAI on โ€” plus fit score, reasons, first name, seniority, company type, the AI's note$0.04

One free tier: your first 25 qualified emails are free, whatever the tier. Never charged: invalid or unknown addresses, disposable, role, catch-all and free-mail addresses you excluded, deny-listed domains, rows below the score floors, duplicates and addresses you already received. The built-in check has no second bill; with ownSource off BounceVerify bills โ‰ˆ $0.00089 per address on your account.

How that compares โ€” $0.002 is 2.7ร— one raw row of the cheapest verifier ($0.000736), but one qualified email replaces โ‰ˆ 1.8 raw rows ($0.0013โ€“$0.0016 per raw-row equivalent); per 1,000 addresses โ‰ˆ $1.10 here against $0.74โ€“$0.89 for raw verifiers that leave the filtering to you.

Worked example โ€” 100 addresses โ†’ 55 qualified (estimate): 55 ร— $0.002 = $0.11 rules only; with AI 55 ร— $0.0404 (the $0.04 plus โ‰ˆ $0.0004 tokens each) = $2.22 all in. Deep check on: add $0.09 per 100 addresses on your account.

๐Ÿค– What the AI tier adds

By hand: โ‰ˆ 2 minutes per email to judge fit (an estimate).

Try the AI on any plan: without model access the demo shows labelled sample verdicts, and your first real run gets 5 live AI verdicts on us; after that use your own key (llmProvider: byok): a free Gemini key (aistudio.google.com/apikey) assesses 1โ€“3 emails per run, a paid key every qualified email.

โš™๏ธ Input

The fields that decide the bill: emails / csvUrl (your list), icpDescription (who you want), minScore (default 50 โ€” the field that decides what you pay), allowRoleEmails / allowCatchAll (keep info@-style and catch-all addresses, flagged), maxQualified (default 100, the hard cap), enableAi (default on), ownSource (default on: built-in check, no second bill). Every field with its default: API reference.

More inputs: estimateOnly, allowFreeProviders, notifyEmail, allowDomains / denyDomains, suppressionList, fixTypos, sendAlertsTo (one field for Slack, Discord, Teams, Google Chat, Telegram or any webhook URL โ€” the service is read from the address), webhookHeaders, webhookSecret; the rest: API reference.

targetFlags values (personal_address, business_domain, has_context, typo_corrected, role_based, catch_all, free_provider, low_verifier_score): API reference.

๐Ÿ“ค Output

One dataset item per qualified email โ€” export as JSON, CSV or Excel, or stream it to a webhook. The cleaned list is also three files in the key-value store: sendable.csv (call send), risky.csv (send-with-care, skip, role, catch-all, free-mail and low-score addresses, with the reason) and bad.csv (invalid, disposable, no mail server); your own columns come along.

This is the AI run's row (2026-10-16 run of INPUT.ai.json); a row the built-in check verified has verifierMethod: "builtin" and smtpValid: null. Sort one run by score; assessedBy says which scale it is on (ai, sample or rules) and the AI-assessed rows lead their label โ€” trend across runs on ruleScore.

โญ Found it useful? A review on the Store helps others find it.

Upsert key for a CRM or Sheet: dedupeKey (email:<address>, lower case) โ€” one address is one row however many runs find it.

Dataset views: Shortlist, Outreach sheet and Verifier audit. REJECTED lists every dropped address with rejectReason; a DIGEST and a client-ready REPORT follow every run that delivered.

๐Ÿ” Run it weekly

  1. Open the saved task and click Schedule after your first real run (OUTPUT.scheduleTaskUrl). Put your address in notifyEmail ("E-mail me the new qualified emails") and every run with new addresses mails the digest with the trend vs the last run.
  2. Point csvUrl at a Google Sheet that keeps growing and leave dedupeAcrossRuns on โ€” charged addresses are remembered and not even re-verified, so a re-run of the same list costs $0. Several clients: one dedupeStoreName each.
  3. Paste a Slack, Teams, Google Chat, Discord or Telegram link into "Send alerts to", or a Zapier / Make hook, or use Google Sheets with the tracker sheet (dedupeKey first to upsert on); historyDatasetName keeps a dated log.

Re-check monthly: a list loses โ‰ˆ 2-3 % of its addresses a month; every run states the date to re-check (OUTPUT.recheckBy).

Week 2 is honest: a static list delivers nothing new (the memory skips every address you have; $0); a sheet gaining 500 rows a week costs โ‰ˆ 275 qualified ร— $0.002 โ‰ˆ $0.55 a week, rules only.

๐ŸŽฏ Try it for your niche

Pick one in Start from a ready niche search (preset), then paste your emails.

Six ready searches in preset: cold-email-agency, saas-sdr, scraped-leads-cleanup, newsletter-cleanup, event-attendee-list, deep-smtp-check โ€” yields not measured yet; table with what each looks for: API reference.

๐Ÿ”Œ Integrations, automation and API

Branch on OUTPUT.ok and OUTPUT.outcome (ok ยท empty ยท source_refused ยท source_failed), never on the run status or an empty dataset; retry only on source_failed.

  • Instantly โ€” Make / n8n / Zapier: trigger "Actor run succeeded" โ†’ "Get record" sendable.csv โ†’ "Add lead to campaign", upsert on dedupeKey.
  • Smartlead / Mailchimp โ€” the same trigger โ†’ "Add leads to campaign" / "Add/update subscriber" from the sendable.csv rows; bad.csv becomes the suppression list.
  • Webhook โ€” webhookUrl POSTs {"event": "email.qualified", "email": {โ€ฆ}, "runId": "โ€ฆ"} per keeper, retried once on 429 / 5xx; set webhookSecret and every POST carries X-Signature: sha256=<HMAC of the raw body>. A POST that still fails is listed in OUTPUT.webhook.failedKeys and not re-sent next run (it was delivered and charged).
  • Verify on form submit โ€” one address in, one verdict out: OUTPUT.verdict; recipes in the API reference.
  • Google Sheets / Slack โ€” one click from the Integrations tab, or the digest through "Send alerts to".
  • AI agents / MCP โ€” every input is a plain typed field; the free first call is {} (the demo).

Already scraping emails? Qualify your email scraper data

Clean the output of your scraper โ€” you already ran bounceverify/bounceverify-email-verifier or an email scraper (email_scraper/docker-email-scraper, vdrmota/contact-info-scraper, Google Maps or LinkedIn / Apollo-style lead scrapers): add a webhook on its "run succeeded" โ†’ this Actor with {"sourceMode": "dataset", "datasetId": "<the scraper's defaultDatasetId>", "emailField": "email", "enableAi": false} โ€” rules only by default, BounceVerify rows are used as they are, bare addresses get the built-in check. More: API reference.

Minimal agent input โ€” 35 fields on the form, five matter; every other one has a default (API reference):

{"sourceMode": "actor", "emails": ["a@b.io"], "icpDescription": "Heads of growth at B2B SaaS", "maxQualified": 50, "minScore": 50, "dedupeAcrossRuns": false}

๐Ÿ‘ฅ Who is it for?

๐Ÿง  How the AI works

One verified address at a time, judged against your ICP: every reason cites a field you supplied, no outside facts; default anthropic/claude-haiku-4.5 via Apify's model access or your own key (llmProvider: "byok"). If the model fails, the row keeps its rule score.

๐Ÿ”’ Data, compliance and limits

  • Only the addresses you supply are processed; nothing is stored outside your account. A lawful basis (GDPR, CAN-SPAM, CASL) for emailing them is yours.
  • The built-in check asks public DNS about each distinct domain โ€” never the mailbox. A CSV link must open without a login (25 MB / 200,000 rows).
  • A catch-all domain or a dead mailbox needs the Deep mailbox check preset (ownSource off, BounceVerify, 5,000 addresses per chunk); a catch-all is then dropped unless you allow it.

โ“ FAQ

How much will one run cost me? 100 addresses โ‰ˆ $0.11 rules only or โ‰ˆ $2.22 with AI, no second bill. The first 25 qualified emails are free; estimateOnly prints the number before anything runs.

Is this a ZeroBounce alternative? For list hygiene and ICP fit, yes โ€” and a NeverBounce alternative too: it drops invalid, disposable and role addresses and adds a fit score and a send call, billed per keeper. It does not probe the mailbox like theirs; their prices are not quoted here yet.

Is this a bulk email verifier validator? Yes, in bulk: domain and mail-server checks, junk cleaning and a fit ranking.

How do I clean scraped leads? Point datasetId at your scraper's dataset or give a csvUrl; keep the company and title columns so the AI can judge fit.

How do I check email deliverability for a whole list? Paste it, give a csvUrl or a scraper's datasetId: every address gets a domain and mail-server check and a call. Need the mailbox itself? Use the Deep mailbox check preset.

How do I verify one email address? Send emails: ["a@b.io"] โ€” the answer is OUTPUT.verdict; turn dedupeAcrossRuns off for signup checks, or a repeat address is "already delivered".

How long does a run take? Pass timeoutSecs of 600 + 2 s ร— qualified emails; OUTPUT.timing has the phases:

ModeTimetimeoutSecs
Demo, your own verified rowsunder 1 s (local run)120
Built-in check, rules only0.7 s per 100 addresses on 50 domains (local, 2026-10-04)300
Deep check (ownSource off)โ‰ˆ 1 min per 100 (estimate)600
AI via Apify's model accessโ‰ˆ 1โ€“2 s per qualified email (estimate)1800
AI with a free own keymeasured 2026-10-16: a free Gemini key (google:gemini-3.5-flash-lite) assessed 4 emails in 14.4 s, โ‰ˆ 3.6 s each; past its rate limit the rest keep their rule score after 60 s of waiting600
AI with a paid own keyโ‰ˆ 1โ€“2 s per qualified email (estimate)1800

Which Apify plan do I need? Any plan runs the demo, the built-in check, list mode and estimateOnly; the deep SMTP check and model access need a plan that runs Store Actors, else use llmProvider: "byok".

Will I be charged for the same email twice? No, with dedupeAcrossRuns on: charged addresses are remembered on your account and not verified again. Adding emails keeps the memory; each dedupeStoreName and targetFlags set keeps its own; after dedupeTtlDays days an address may return (0 = never).

Do rule-scored emails use my free ones? Yes, while the AI is unavailable โ€” except the last 5, kept so your first AI-assessed emails are free too (OUTPUT.chargeSplit.freeKeptForAi).

What if nothing matches? The run succeeds with 0 rows, nothing charged by us; OUTPUT.rejected counts the drops per reason.

๐Ÿงฉ More Actors from the same developer

๐Ÿ†˜ Support

Something missing? Open an issue on the Actor's page. Developer detail: API reference.

๐Ÿ“ Changelog

  • 0.1.6 (2026-10-16) โ€” One "Send alerts to" field now takes your Slack, Discord, Teams, Google Chat, Telegram or webhook link, and webhook posts can be signed so your tool knows they came from this Actor; An address you already paid for under another list or filter set is delivered again but never charged twice, and AI-scored emails now rank ahead of rule-scored ones in the same label; Your own Gemini key works with the model field left empty, and a refused deep check now ends the same way on every run with a clear "source refused" result, so nothing is charged and no run is counted as a failure.
  • 0.1.5 (2026-10-04) โ€” Bring your own data: send rows in itemsList or a dataset ID in datasetId and the Actor picks the mode itself, starts no source Actor and charges only for the analysis. Fields it cannot read are listed in the run log instead of being dropped silently.
  • 0.1.4 (2026-10-04) โ€” The run status counts what was loaded, kept and removed (sendable, risky, bad) and links the dropped addresses with their reason; every run names the date to re-check your list.