OA-4 · Outbound Automation · 100 XP · ~18 min
The Four Validation Layers
Not all validation is equal. Most teams only do one or two layers and wonder why their bounce rates creep up.| Layer | What It Checks | When to Run |
|---|---|---|
| Syntax | Valid email format (has @, valid domain structure) | Always, first |
| Domain | Does the domain exist and accept email? (MX record check) | Always |
| Catch-all detection | Does the server accept all emails regardless of whether the mailbox exists? | Before enrichment |
| Mailbox verification | Does this specific mailbox exist? (SMTP probe) | Final layer, before sending |
Catch-All Domains: The Hidden Problem
A “catch-all” domain is configured to accept email addressed to any address at that domain — even if the mailbox doesn’t exist. This means validation services will return “valid” forsdflkjsdf@catch-all-company.com even though nobody checks that inbox.
Catch-all addresses are common at mid-market and enterprise companies. If you’re seeing high bounce rates despite “validated” lists, catch-all addresses are usually the culprit.
How to handle catch-all addresses in Bitscale:
- Tag them separately in a
validation_statuscolumn - Apply a separate sending strategy: lower volume, more conservative sending windows
- Or deprioritize entirely if you have enough valid addresses in the segment
Building a Validation Column in Bitscale
The cleanest approach is a dedicated validation column that runs an external API, then a routing column that sorts addresses into buckets. Step 1: Add an API integration column Connect to your preferred validation provider (NeverBounce, ZeroBounce, Millionverifier). The Bitscale enrichment column can call any API that accepts an email address and returns a status. Input:{{email}}
Step 2: Map the response to a status bucket
Your AI column processes the API response into clean categories:
Validation at the Domain Level
Before you even verify individual mailboxes, you can filter at the domain level. This is much cheaper (no per-address API cost) and removes obvious dead weight. Domains to filter immediately:- Free email providers: gmail.com, yahoo.com, hotmail.com, outlook.com (for B2B)
- Role-based addresses: info@, hello@, admin@, support@, sales@ (usually unmonitored)
- Known spam traps: check against blacklists
- Domains with no MX records: the company literally doesn’t have email set up
Bounce Rate Management
Even with perfect validation, you’ll get some bounces. The goal is staying under thresholds:| Metric | Green | Yellow | Red — Stop sending |
|---|---|---|---|
| Hard bounce rate | < 1% | 1–2% | > 3% |
| Soft bounce rate | < 3% | 3–5% | > 8% |
| Spam complaint rate | < 0.08% | 0.08–0.3% | > 0.3% |
Validation Workflow: The Full Sequence
Here’s the complete validation pipeline as a Bitscale grid flow:- Import raw list → your source data
- Domain filter column → remove personal/role-based emails
- MX record check column → remove domains with no mail server
- Catch-all detection column → tag catch-all domains
- Mailbox verification column → SMTP probe on remaining addresses
- Routing column → send / send_carefully / skip / manual_review
- Export filtered list → only
sendandsend_carefullyrows go to sequencer
OA-4 Challenge: Build a Validation Pipeline (+100 XP)
Take a list of at least 50 email addresses (use a sample from a public dataset or generate test addresses) and build the full 4-layer validation pipeline in Bitscale. Requirements:- At least 4 validation columns (syntax, domain filter, catch-all detection, routing)
- A
validation_statuscolumn with clean bucketed output - A
routing_decisioncolumn (send / send_carefully / skip / manual_review) - Screenshot showing the distribution of each bucket
- Brief paragraph explaining your decision-making on the catch-all addresses
Submit OA-4 Challenge →
Share your grid link + screenshot of bucket distribution. +100 XP on approval.
Next: OA-5 — Multichannel Orchestration →
Email is one channel. OA-5 covers how to coordinate LinkedIn, email, and phone into a single orchestrated outbound motion.