Back to blog
Validation··9 min read·WillItInbox Team

Fake Signups Are Costing You More Than You Think: Prevention with Email

Fake signups drain infra budget, skew metrics, and wreck deliverability. Here's the cost stack and a layered email-validation defense for your SaaS forms.

fake signups preventionEmail deliverability

Fake signup prevention means validating every registration email in real time — blocking disposable addresses, typos, and nonexistent mailboxes at the form before they create accounts. Fake signups cost you verification SMS/email fees, wasted infrastructure, skewed activation metrics, fraud exposure, and deliverability damage from bouncing welcome emails. A multi-layer validation API at the signup endpoint stops most of it.

Founders usually treat fake signups as a cosmetic problem — inflated user counts, whatever. It's not cosmetic. It's a bill you're already paying across five different line items, and most teams never add them up.

The true cost stack of fake accounts

Fake accounts tax you in ways that don't appear next to each other on any dashboard. Add them up once and the priority becomes obvious.

Cost layerWhat happensHedged magnitude
Verification sendsOTP emails and SMS to dead/disposable addressesSMS runs real money per message; a bot wave can burn hundreds of dollars in an afternoon
InfrastructureCompute, storage, and email sends for accounts that will never activateGrows with every fake cohort; dead accounts commonly reach double-digit percentages of unprotected SaaS user bases
Support loadPassword resets, "didn't get my code" tickets from garbage addressesScales with fake volume; each ticket costs real minutes
Metrics distortionActivation, conversion, and churn rates computed against phantom usersThe most expensive cost — bad numbers drive bad roadmap decisions
Fraud & chargebacksTrial abuse, promo-code farming, card testing through fake accountsHighly variable; the tail risk that kills startups
Deliverability damageWelcome emails bouncing to nonexistent mailboxes; complaints from unwilling "subscribers"Hard bounces above low single digits drag domain reputation down for all your mail

That last one deserves emphasis because it's the sneakiest: fake signups don't just fail to become customers, they actively damage your ability to email your real ones. Every welcome email to a nonexistent mailbox is a hard bounce, and Gmail's domain-reputation scoring doesn't care that a bot caused it.

The attack taxonomy: who's creating fake accounts and why

Different fake signups need different defenses. Four categories cover almost everything:

1. Disposable-address users. Real humans using throwaway inboxes (10-minute mail services) to farm free trials, referral bonuses, or gated content without giving you a real address. Not malicious bots — just users who want the value without the relationship. They're the most common category and the easiest to block: disposable domains are enumerable. Our guide to disposable email detection covers how these services work and why static blocklists go stale.

2. Typo squatters and fat-fingered humans. [email protected] isn't fraud — it's a real user who will never receive your verification email, will never activate, and will file a support ticket or just churn silently. This category is pure loss with zero intent, and it's fixable with suggestion prompts.

3. Bulk bots. Automated account creation at scale — for spam platforms, SEO abuse, credential stuffing prep, or list bombing (using your form to flood a victim's inbox; see list bombing attack prevention). Bots submit thousands of syntactically valid addresses at real domains that don't exist as mailboxes.

4. Stolen or synthetic identities. Addresses the attacker controls but that don't correspond to a consented relationship — used for card testing, promo abuse, and chargeback fraud. Hardest to catch with email signals alone; this is where risk scoring and allow-and-watch patterns matter.

How big is your fake signup problem? Measure it first

Before building defenses, quantify the problem — it takes an afternoon and tells you which attack categories you actually have:

1. Check your verification funnel. What percentage of signups never complete email verification? For a typical unprotected SaaS form, an unverified rate well into double digits is common. That cohort is your fake-account population, approximately.

2. Check your welcome-email bounce rate. Pull the hard-bounce rate on signup-triggered emails specifically (not campaign averages, which hide it). If it's above a percent or two, bots are submitting addresses that don't exist.

3. Audit the existing base. Export your registered-user emails and run them through bulk validation. The result breaks your base into valid, invalid, disposable, catch-all, and risky — you get exact counts of each attack category instead of guessing. This also doubles as a list-cleaning exercise: the invalids you find are already hurting your sends.

4. Plot activation curves by cohort. Fake accounts never activate, ever. If activation rates are declining across recent cohorts while traffic quality looks unchanged, fake signups are diluting the denominator.

5. Watch signup velocity. Sudden spikes in registrations from a single ASN, region, or IP range — especially outside your market — are bot traffic until proven otherwise.

The layered defense, mapped to the 12-layer validation model

The mistake most teams make is treating validation as a regex. /.+@.+\..+/ accepts every attack category above. Real defense is layered, and each layer catches a different attacker:

Layer 1 — Syntax. Rejects malformed input. Catches: sloppy bots, nothing else. Necessary, nowhere near sufficient.

Layer 2 — Typo detection. Catches gmial.com, hotmial.com, yaho.com. Catches: category 2, your accidental fakes. Show a suggestion, let the human correct it — highest ROI fix in this entire article. (More in email typo detection.)

Layer 3 — Disposable domain detection. Catches category 1 cold. The blocklist must be continuously updated — new throwaway providers launch constantly.

Layer 4 — DNS / MX. Does the domain exist and accept mail? Catches bot-generated garbage at made-up domains.

Layer 5 — SMTP handshake. Does the specific mailbox exist? Catches bulk bots submitting [email protected] — the domain is real, the mailbox isn't.

Layers 6–12 — Catch-all flagging, role-based detection, provider classification, domain age, suppression list hits, spam-trap signals. These don't block; they score. A brand-new domain registered last week, or an address on your own suppression list, or an address matching spam-trap patterns, shifts the signup from "allow" to "review."

The WillItInbox email validator runs exactly this 12-layer stack per address, via bulk upload or a real-time API — one call per signup, result back before your page finishes loading.

Why CAPTCHA alone doesn't solve this

CAPTCHA is the defense everyone reaches for first, and it helps — against category 3 bulk bots, an invisible challenge like Cloudflare Turnstile raises the cost of automation substantially. But it has three blind spots:

  1. It does nothing about category 1. A human using a disposable inbox solves CAPTCHAs perfectly, because they are a human. Trial farmers aren't bots.
  2. It does nothing about category 2. The fat-fingered gmial.com user passes every challenge and still never receives your email.
  3. Determined attackers route around it. CAPTCHA-solving services and click farms handle challenges at industrial scale for pennies each.

CAPTCHA filters who is signing up (human vs. machine). Email validation filters what they're signing up with (deliverable, durable address vs. garbage or throwaway). You need both — they're answers to different questions. Rate limiting per IP and per address rounds out the trio by capping how fast any single source can submit.

Friction trade-offs: block, flag, or allow-and-watch

Every fake-signup defense costs real users something. The skill is matching the response to the confidence level:

Validation resultResponseFriction
Invalid (no MX, mailbox doesn't exist)Block at form with "check your email address" errorZero for legitimate users — the address was undeliverable anyway
Disposable domainBlock or flag, depending on your growth postureSome real privacy-conscious users use these; flagging preserves the option
Typo with suggestionAllow with prompt ("did you mean gmail.com?")Actually reduces friction vs. silent failure
Catch-all / riskyAllow-and-watch — create the account, tag it, require email verification before full accessNone at signup; risk contained downstream
Valid + cleanAllow, normal flowNone

The principle: never block on probabilistic signals, never fully trust on a regex. Hard-block only what is provably undeliverable or provably disposable; quarantine the grey zone behind an email-verification step the abuser can't complete at scale.

Implementation patterns that work in production

Pattern 1: Block at the form (synchronous)

Validate in the signup handler before creating the account:

POST /api/signup { email, password }
  → validation API call (100–300ms)
  → result.invalid || result.disposable ? reject : create account

Pros: fakes never touch your database, no cleanup needed. Cons: adds latency to signup; requires a timeout fallback (if the validation call fails, decide your default — most teams default to allow-and-flag). The real-time validation API is built for this pattern — see real-time email validation at signup for the full integration walkthrough.

Pattern 2: Async review queue

Create the account immediately, validate in the background, and park failures in a review state: limited permissions until email verification completes. Pros: zero signup latency, no false-positive lockouts. Cons: fakes exist in your DB temporarily; you need the janitor job that reaps unverified accounts after N days.

Pattern 3: Shadow-ban

For repeat abusers and fraud patterns: let the signup "succeed," send nothing, show the account as active, but route its actions to a void. The abuser can't tell they've been detected, so they don't adapt. Use sparingly and only with high-confidence signals — shadow-banning a real user is a support nightmare.

Most production systems end up with Pattern 1 for the hard blocks and Pattern 2 layered behind it for the grey zone. Pattern 3 is the specialist tool for confirmed fraud rings.

One operational note on Pattern 1: log every rejection with its reason code. Within a week you'll have a breakdown of which attack categories are hitting you and in what proportion — disposable-heavy traffic points to trial abuse, invalid-heavy points to bots, typo-heavy points to a form UX problem worth fixing upstream. The rejection log is also your false-positive early-warning system: if legitimate users complain about being blocked, the logs tell you which layer is being too aggressive.

The economics: what prevention actually costs

Validation pricing is credit-based — fractions of a cent per check. Even at high signup volume, real-time validation on every registration typically costs single-digit dollars per month. Compare that to any single row of the cost stack above: one bot wave's SMS verification bill, one month of support tickets from typo signups, one deliverability incident's lost revenue. The ROI isn't subtle.

Credit pricing also matters for how you spend it: real-time checks at signup plus periodic bulk re-verification of the existing base (accounts decay; last year's valid signup may be dead now). WillItInbox credits never expire, so one purchase covers both patterns on whatever schedule fits — no use-it-or-lose-it pressure forcing you to validate when you don't need to.

Frequently asked questions

Sources reviewed

Factual review: June 13, 2026 by WillItInbox Editorial.

Keep reading