B2B Lead Cleaner — Bulk Email Verification & Data Quality avatar

B2B Lead Cleaner — Bulk Email Verification & Data Quality

Pricing

from $1.70 / 1,000 lead auditeds

Go to Apify Store
B2B Lead Cleaner — Bulk Email Verification & Data Quality

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

Kamer Ozkan

Maintained by Community

Actor 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 rules
  • REVIEW: evidence is incomplete or uncertain
  • REJECT: 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

ResultWhy it matters
One explained decision per leadRoute usable leads automatically and keep uncertain rows out of live campaigns
Duplicate and historical duplicate detectionStop paying twice for the same contact
Email syntax, MX, provider, role, and company-domain checksCatch risky contact data before it reaches outreach
Country, city, industry, title, and account targetingReject leads that do not match the audience you paid for
Stable JSON fields and reason codesConnect the result to Make, Zapier, n8n, webhooks, CRMs, or AI agents
Source economics reportSee 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@ and support@
  • 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

  1. Run any lead scraper.
  2. Select its result under Source Apify dataset.
  3. Keep Balanced quality mode.
  4. 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:

  • decision
  • qualityScore
  • reasonCodes
  • 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 REVIEW when 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

ResultWhy it matters
One explained decision per leadRoute usable leads automatically and keep uncertain rows out of live campaigns
Duplicate and historical duplicate detectionStop paying twice for the same contact
Email syntax, MX, provider, role, and company-domain checksCatch risky contact data before it reaches outreach
Country, city, industry, title, and account targetingReject leads that do not match the audience you paid for
Stable JSON fields and reason codesConnect the result to Make, Zapier, n8n, webhooks, CRMs, or AI agents
Source economics reportSee 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@ and support@
  • 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

  1. Run any lead scraper.
  2. Select its result under Source Apify dataset.
  3. Keep Balanced quality mode.
  4. 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:

  • decision
  • qualityScore
  • reasonCodes
  • 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 REVIEW when 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.