§ SEO EDITION · N° 053 · DeliverabilitySLUG · CATCH-SPAMTRAPS-BEFORE-SENDING
§ Spamtrap defense guideUpdated

How to catch spamtraps before hitting send

You cannot catch every spamtrap at SMTP-check time, because active traps accept mail exactly like real inboxes. What you CAN do: block the easy 80 percent (disposable, typo, no-MX) at signup capture, filter the next 15 percent at verification (pristine-trap heuristics, catch-all separation), and use engagement data (opens after 14 days) to spot the last few percent before they trigger a blocklist hit.

$4
per 1,000
3-layer
SMTP probe
0–100
score
  • No verifier catches 100 percent of spamtraps, and any claiming to is misrepresenting
  • Capture-time hygiene (double opt-in, CAPTCHA, disposable reject) blocks 80 percent
  • Verification filters another 15 percent (pristine traps, catch-all separation)
  • Engagement monitoring catches the last few percent before a blocklist trigger
§ Sample verificationN° 001
sarah.chen@acme.io
Sample result · what a clean Valid looks like
Status
Deliverable
Score
95
Syntax
MX records
SMTP accepted
Catch-all
Disposable
Role address
Mailbox provider
Google Workspace
+1 credit
§ 01 · THE THREE-LAYER001

The three-layer defense

  1. Layer 1: capture-time hygiene (blocks ~80 percent)

    Enforce double opt-in on every signup form. Add reCAPTCHA v3 (invisible). Reject role addresses (info@, admin@, sales@) at input. Reject disposable domains with a live API check. Reject any address whose domain has no MX record. This alone prevents most spamtrap ingestion.

  2. Layer 2: verification pass (filters another ~15 percent)

    Before every campaign, verify the list. Segment catch-all addresses separately (they carry the highest trap risk). Suppress addresses on high-risk domains (recent typos of major brands, freshly registered domains). This is where KillBounce sits in the stack.

  3. Layer 3: post-send engagement monitoring (catches the last few)

    Track opens and clicks per address. Addresses that have been on your list 6+ months with zero opens are dormant, and dormant addresses on B2C domains can become recycled spamtraps. Suppress or sunset them proactively.

§ 02 · THE TYPES002

The types of spamtraps and how to defend against each

Trap typeBest defense layerRealistic reduction
Typo-domain traps (gmial.com, hotnail.com)Capture-time input validation95%+
Disposable / throwaway trapsCapture-time disposable API95%+
Pristine (never-used) trapsVerification pass30 to 60%
Recycled (dormant real) trapsEngagement sunset (6mo no open)60 to 80%
Active seed traps in purchased listsDo not buy lists100%

Buying lists is the single highest-risk behavior for hitting blocklists. Every purchased list is seeded with active spamtraps precisely to catch buyers. No layer of hygiene defends against this. The only defense is not buying.

§ 03 · A PRACTICAL003

A practical signup form config that works

// Reject at capture time. Cheaper than post-hoc cleanup.
async function validateSignupEmail(email) {
  // 1. Syntax + no MX = block immediately (free)
  if (!/^[^@]+@[^@]+\.[^@]+$/.test(email)) return { ok: false, reason: 'syntax' }
  const mx = await dns.resolveMx(email.split('@')[1])
  if (!mx || mx.length === 0) return { ok: false, reason: 'no_mx' }

  // 2. Disposable domain check (KillBounce API)
  const check = await fetch('https://api.getkillbounce.com/v1/quick-check', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer ' + API_KEY },
    body: JSON.stringify({ email }),
  }).then(r => r.json())
  if (check.disposable) return { ok: false, reason: 'disposable' }

  // 3. Role address (never valuable for outreach)
  const localPart = email.split('@')[0].toLowerCase()
  if (['info','admin','sales','support','contact','noreply'].includes(localPart)) {
    return { ok: false, reason: 'role_address' }
  }

  // 4. Enforce double opt-in (send confirmation email)
  await sendConfirmationEmail(email)
  return { ok: true, pending: true }
}
§ FAQ · Common questionsN° 100

Answers to the questions teams ask first

Q · 01

Which blocklists actually matter?

For most senders: Spamhaus SBL/CSS/XBL (the big one, most ESPs consult it), SpamCop (populated by user reports, faster to trigger), and Invaluement (used by Microsoft properties). If you hit Spamhaus you will see delivery collapse within hours.

Q · 02

How do I know if I have already hit a spamtrap?

Watch Google Postmaster Tools spam-rate section. Watch Microsoft SNDS for your IP. Watch your ESP dashboard for a sudden bounce rate jump. Any of these ticking up 24 to 72 hours after a send is your signal.

Q · 03

Is double opt-in really necessary?

For lead-magnet signups and cold-outreach reply subscribers, yes. It doubles your defense against typo traps and drive-by fake signups. The 30 percent drop in list size from single to double opt-in is a feature, not a bug: those addresses were never going to convert.

Q · 04

Does KillBounce flag known spamtrap addresses directly?

KillBounce flags disposable-domain traps, no-MX domains, and known-bad typo patterns. Pristine traps and recycled traps are filtered heuristically (never with 100 percent accuracy). No provider directly identifies active seed traps because those are, by design, real deliverable mailboxes.

Q · 05

What is the fastest way to reduce spamtrap risk on an existing list?

Sunset dormant addresses. Remove anything on the list 12+ months with zero opens or clicks. This single step usually reduces spamtrap risk by more than any single verification pass.

No card · No subscription · Credits never expire

Verify your first 100 emails free.

Sign up in under 30 seconds. Paste a list, hit verify, see the real SMTP-level result with a 0–100 deliverability score.

Get 100 free credits