B2B Lead Cleaner — Bulk Email Verification & Data Quality
Pricing
from $1.70 / 1,000 lead auditeds
B2B Lead Cleaner — Bulk Email Verification & Data Quality
Bulk email verification and lead list cleaning for any Apify dataset. Verify business emails with MX and deliverability checks, remove duplicates, catch role and disposable addresses, and flag off-target contacts with an explained ACCEPT, REVIEW or REJECT decision on every row.
Pricing
from $1.70 / 1,000 lead auditeds
Rating
0.0
(0)
Developer
Kamer Ozkan
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
an hour ago
Last modified
Categories
Share
Verify business emails in bulk and stop bad leads before they reach your CRM.
Every row gets syntax, MX, provider, role-inbox, disposable, and company-domain email checks, plus duplicate detection and ICP targeting rules.
This Actor turns raw Apify lead datasets into explained decisions before you spend outreach credits or SDR time. Give it a dataset ID and receive one decision for every row:
ACCEPT: usable under the configured rulesREVIEW: evidence is incomplete or uncertainREJECT: a deterministic quality or targeting rule failed
It works with output from Google Maps, company databases, people search tools, contact scrapers, custom Actors, and uploaded JSON rows.
From $2 per 1,000 audited leads. No start fee.
What you get
| Result | Why it matters |
|---|---|
| One explained decision per lead | Route usable leads automatically and keep uncertain rows out of live campaigns |
| Duplicate and historical duplicate detection | Stop paying twice for the same contact |
| Email syntax, MX, provider, role, and company-domain checks | Catch risky contact data before it reaches outreach |
| Country, city, industry, title, and account targeting | Reject leads that do not match the audience you paid for |
| Stable JSON fields and reason codes | Connect the result to Make, Zapier, n8n, webhooks, CRMs, or AI agents |
| Source economics report | See the real source cost per accepted lead |
What problem does it solve?
A successful scraper run does not mean every returned lead is useful.
Raw lead datasets commonly contain:
- duplicate contacts
- invalid email syntax
- domains with no mail server
- personal and disposable inboxes
- role inboxes such as
info@andsupport@ - email and company domain mismatches
- contacts outside the requested country, city, industry, title, or account list
- stale records
- inconsistent field names across different lead sources
The Firewall checks these problems in one step and explains every decision with machine-readable reason codes.
Who it is for
- lead generation agencies checking scraped lists before delivery
- sales teams protecting CRM and cold email workflows
- automation builders connecting multiple Apify Actors
- data buyers comparing the usable yield of different lead sources
- AI agents that need a deterministic gate before taking outreach actions
Quick start
- Run any lead scraper.
- Select its result under Source Apify dataset.
- Keep Balanced quality mode.
- Click Start.
The Actor automatically detects common fields such as name, job title, email, phone, LinkedIn URL, company, website, industry, country, city, and timestamp.
No API token or manual field mapping is normally required. The Actor receives read-only access to the dataset you select and cannot access other datasets in your account.
Minimal input
{"datasetId": "YOUR_DATASET_ID","qualityMode": "BALANCED","maxItems": 1000}
You can also paste rows directly:
{"rows": [{"full_name": "Ada Rivera","job_title": "VP Marketing","email": "ada@stripe.com","country": "United States","company_name": "Stripe","company_domain": "stripe.com","industry": "Software"}]}
Optional targeting contract
Use targeting rules when the source promised a specific audience:
{"datasetId": "YOUR_DATASET_ID","qualityMode": "BALANCED","targeting": {"countries": ["United States"],"titleKeywords": ["CMO", "VP Marketing", "Head of Growth"],"industries": ["Software", "SaaS"],"excludedTitleKeywords": ["Assistant", "Intern"]}}
A missing or mismatched targeting field is rejected with a specific reason. The Actor never silently treats missing evidence as a match.
Real example output
This row comes from a successful cloud run of the current build candidate:
{"sourceIndex": 1,"decision": "REJECT","qualityScore": 60,"primaryReason": "Email uses a personal inbox provider.","reasonCodes": ["EMAIL_PERSONAL"],"fullName": "Personal Inbox","title": "CMO","email": "buyer@gmail.com","companyName": "Acme","companyDomain": "acme.com","emailStatus": "PERSONAL","mxStatus": "VALID","duplicate": false,"historicalDuplicate": false,"reasons": [{"code": "EMAIL_PERSONAL","severity": "REJECT","penalty": 40,"message": "Email uses a personal inbox provider.","evidence": {"domain": "gmail.com"}}]}
The original source row is preserved in original, so downstream systems do not lose fields that are specific to the source Actor.
qualityScore measures how completely a row passes the configured checks. It is not an email deliverability percentage and does not claim that an individual mailbox exists.
Quality modes
Balanced
Recommended for most B2B workflows.
- requires an email by default
- validates syntax and MX records
- rejects personal and disposable inboxes
- rejects confirmed email and company domain mismatches
- warns about role inboxes
- does not require a website request
Strict
Designed for higher-value outreach where false positives are expensive.
- includes all Balanced checks
- rejects role inboxes
- checks company website reachability
- checks freshness up to 365 days
- uses higher score thresholds
Custom
Use the advanced section to choose your own rules and score thresholds.
Historical duplicate protection
Set a monitorName when running the Actor on a schedule:
{"datasetId": "YOUR_DATASET_ID","monitorName": "us-saas-outbound"}
Later runs with the same key reject previously processed leads as HISTORICAL_DUPLICATE.
The history store contains SHA-256 hashes of deduplication keys. It does not store raw email addresses in the history record.
Source economics
If you enter the original batch cost, the quality report calculates the real cost per accepted lead:
{"rules": {"sourceCostUsd": 50}}
A cheap list can become expensive when most rows are duplicates or unusable. This metric exposes that cost.
Use in automations
Each row includes stable fields for Make, Zapier, n8n, webhooks, and AI agents:
decisionqualityScorereasonCodes- normalized contact and company fields
- validation evidence
- the untouched original row
Route only decision = ACCEPT to your CRM or outreach system. Send REVIEW to a manual queue and archive REJECT.
More than an email validator
An email validator normally checks one address at a time. This Actor evaluates the whole lead record and the dataset around it.
It combines email and domain evidence with duplicate detection, ICP targeting, freshness checks, historical suppression, source economics, and automation-ready decisions. It does not claim SMTP mailbox verification.
What the Actor does not claim
MX records prove that a domain is configured to receive email. They do not prove that a specific mailbox exists.
Public web evidence cannot guarantee that a person still works at a company, will read a message, or will reply.
The Actor reports uncertainty instead of inventing certainty:
- temporary DNS errors go to
REVIEW - uncertain website results go to
REVIEW - missing freshness evidence goes to
REVIEWwhen freshness rules are enabled
Security
- private, local, and reserved network targets are never requested
- no lead values are written to logs
- manual field paths block prototype pollution segments
- historical deduplication stores hashes instead of raw contact data
- the source dataset is read-only
Pricing
The Actor costs $2 per 1,000 audited leads. A lead-audited event represents one delivered ACCEPT, REVIEW, or REJECT quality decision.
There is no start fee. Rows blocked by the Apify run budget are not delivered or charged.
Responsible use
Process only data you are authorized to use. Follow applicable privacy, marketing, and anti-spam laws, including GDPR, CAN-SPAM, and local equivalents. A technical quality decision does not create a lawful basis for outreach. N rows.
From $2 per 1,000 audited leads. No start fee.
What you get
| Result | Why it matters |
|---|---|
| One explained decision per lead | Route usable leads automatically and keep uncertain rows out of live campaigns |
| Duplicate and historical duplicate detection | Stop paying twice for the same contact |
| Email syntax, MX, provider, role, and company-domain checks | Catch risky contact data before it reaches outreach |
| Country, city, industry, title, and account targeting | Reject leads that do not match the audience you paid for |
| Stable JSON fields and reason codes | Connect the result to Make, Zapier, n8n, webhooks, CRMs, or AI agents |
| Source economics report | See the real source cost per accepted lead |
What problem does it solve?
A successful scraper run does not mean every returned lead is useful.
Raw lead datasets commonly contain:
- duplicate contacts
- invalid email syntax
- domains with no mail server
- personal and disposable inboxes
- role inboxes such as
info@andsupport@ - email and company domain mismatches
- contacts outside the requested country, city, industry, title, or account list
- stale records
- inconsistent field names across different lead sources
The Firewall checks these problems in one step and explains every decision with machine-readable reason codes.
Who it is for
- lead generation agencies checking scraped lists before delivery
- sales teams protecting CRM and cold email workflows
- automation builders connecting multiple Apify Actors
- data buyers comparing the usable yield of different lead sources
- AI agents that need a deterministic gate before taking outreach actions
Quick start
- Run any lead scraper.
- Select its result under Source Apify dataset.
- Keep Balanced quality mode.
- Click Start.
The Actor automatically detects common fields such as name, job title, email, phone, LinkedIn URL, company, website, industry, country, city, and timestamp.
No API token or manual field mapping is normally required. The Actor receives read-only access to the dataset you select and cannot access other datasets in your account.
Minimal input
{"datasetId": "YOUR_DATASET_ID","qualityMode": "BALANCED","maxItems": 1000}
You can also paste rows directly:
{"rows": [{"full_name": "Ada Rivera","job_title": "VP Marketing","email": "ada@stripe.com","country": "United States","company_name": "Stripe","company_domain": "stripe.com","industry": "Software"}]}
Optional targeting contract
Use targeting rules when the source promised a specific audience:
{"datasetId": "YOUR_DATASET_ID","qualityMode": "BALANCED","targeting": {"countries": ["United States"],"titleKeywords": ["CMO", "VP Marketing", "Head of Growth"],"industries": ["Software", "SaaS"],"excludedTitleKeywords": ["Assistant", "Intern"]}}
A missing or mismatched targeting field is rejected with a specific reason. The Actor never silently treats missing evidence as a match.
Real example output
This row comes from a successful cloud run of the current build candidate:
{"sourceIndex": 1,"decision": "REJECT","qualityScore": 60,"primaryReason": "Email uses a personal inbox provider.","reasonCodes": ["EMAIL_PERSONAL"],"fullName": "Personal Inbox","title": "CMO","email": "buyer@gmail.com","companyName": "Acme","companyDomain": "acme.com","emailStatus": "PERSONAL","mxStatus": "VALID","duplicate": false,"historicalDuplicate": false,"reasons": [{"code": "EMAIL_PERSONAL","severity": "REJECT","penalty": 40,"message": "Email uses a personal inbox provider.","evidence": {"domain": "gmail.com"}}]}
The original source row is preserved in original, so downstream systems do not lose fields that are specific to the source Actor.
qualityScore measures how completely a row passes the configured checks. It is not an email deliverability percentage and does not claim that an individual mailbox exists.
Quality modes
Balanced
Recommended for most B2B workflows.
- requires an email by default
- validates syntax and MX records
- rejects personal and disposable inboxes
- rejects confirmed email and company domain mismatches
- warns about role inboxes
- does not require a website request
Strict
Designed for higher-value outreach where false positives are expensive.
- includes all Balanced checks
- rejects role inboxes
- checks company website reachability
- checks freshness up to 365 days
- uses higher score thresholds
Custom
Use the advanced section to choose your own rules and score thresholds.
Historical duplicate protection
Set a monitorName when running the Actor on a schedule:
{"datasetId": "YOUR_DATASET_ID","monitorName": "us-saas-outbound"}
Later runs with the same key reject previously processed leads as HISTORICAL_DUPLICATE.
The history store contains SHA-256 hashes of deduplication keys. It does not store raw email addresses in the history record.
Source economics
If you enter the original batch cost, the quality report calculates the real cost per accepted lead:
{"rules": {"sourceCostUsd": 50}}
A cheap list can become expensive when most rows are duplicates or unusable. This metric exposes that cost.
Use in automations
Each row includes stable fields for Make, Zapier, n8n, webhooks, and AI agents:
decisionqualityScorereasonCodes- normalized contact and company fields
- validation evidence
- the untouched original row
Route only decision = ACCEPT to your CRM or outreach system. Send REVIEW to a manual queue and archive REJECT.
More than an email validator
An email validator normally checks one address at a time. This Actor evaluates the whole lead record and the dataset around it.
It combines email and domain evidence with duplicate detection, ICP targeting, freshness checks, historical suppression, source economics, and automation-ready decisions. It does not claim SMTP mailbox verification.
What the Actor does not claim
MX records prove that a domain is configured to receive email. They do not prove that a specific mailbox exists.
Public web evidence cannot guarantee that a person still works at a company, will read a message, or will reply.
The Actor reports uncertainty instead of inventing certainty:
- temporary DNS errors go to
REVIEW - uncertain website results go to
REVIEW - missing freshness evidence goes to
REVIEWwhen freshness rules are enabled
Security
- private, local, and reserved network targets are never requested
- no lead values are written to logs
- manual field paths block prototype pollution segments
- historical deduplication stores hashes instead of raw contact data
- the source dataset is read-only
Pricing
The Actor costs $2 per 1,000 audited leads. A lead-audited event represents one delivered ACCEPT, REVIEW, or REJECT quality decision.
There is no start fee. Rows blocked by the Apify run budget are not delivered or charged.
Responsible use
Process only data you are authorized to use. Follow applicable privacy, marketing, and anti-spam laws, including GDPR, CAN-SPAM, and local equivalents. A technical quality decision does not create a lawful basis for outreach.