Back to Blog
Best Practices2026-03-068 min readUpdated 2026-03-18

How to Prevent Fake Signups: A Developer's Playbook

Bots don't sleep, and a single campaign can flood your user table with thousands of fake accounts overnight. Here's a five-layer defense system you can ship this week.

MS

MailSentry Team

Email validation experts

TL;DR

  • Email validation at signup is the single highest-impact defense against fakes
  • Layer defenses: validation, rate limiting, honeypots, double opt-in, CAPTCHA
  • Track signup-to-verification ratio and disposable email percentage monthly
5-Layer Defense Stack
1. Email Validation
2. Rate Limiting
3. Honeypot Fields
4. Double Opt-In
5. CAPTCHA
Highest impact ↑ • Highest friction ↓

Fake signups are one of the most universal problems in web development. Whether you are running a SaaS product, an e-commerce store, or a community platform, a percentage of your new registrations are not real people. They are bots probing for free-tier abuse, competitors scraping your onboarding flow, or bad actors creating throwaway accounts to exploit promotions. Left unchecked, fake signups corrupt your analytics, inflate your infrastructure costs, and erode trust in your metrics.

This guide covers the most effective techniques to prevent fake signups, ordered from simplest to most sophisticated.

Why Fake Signups Happen

Understanding the motivation helps you choose the right defenses:

  • Free-tier abuse — Users create multiple accounts with disposable emails to exceed free plan limits. A single person might generate 50 accounts to get 50x the free quota.
  • Referral fraud — Bad actors create fake accounts to trigger referral bonuses, credits, or promotional rewards.
  • Credential stuffing preparation — Bots register accounts to test whether stolen email/password combinations work on your platform.
  • Spam and phishing — Fraudulent accounts used to send messages, post content, or conduct social engineering within your platform.
  • Competitive intelligence — Competitors sign up with throwaway addresses to monitor your product, pricing, or feature releases.

Layer 1: Email Validation at the Point of Entry

The single highest-impact defense is validating email addresses before they enter your database. This one check eliminates the majority of fake signups because most fraudulent registrations use either disposable emails, non-existent domains, or mistyped addresses.

A comprehensive email validation check should cover:

  • Syntax verification — Reject malformed addresses immediately.
  • MX record lookup — Confirm the domain can actually receive email.
  • Disposable email detection — Block addresses from services like Guerrilla Mail, Mailinator, and the thousands of rotating disposable domains.
  • SMTP verification — Confirm the specific mailbox exists on the mail server.
  • Risk scoring — Assign a numeric risk level to flag borderline addresses for review.
// Server-side signup handler with email validation
async function handleSignup(email: string, password: string) {
  // Step 1: Validate the email before anything else
  const validation = await fetch("https://api.mailsentry.dev/api/v1/verify", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "X-API-Key": process.env.MAILSENTRY_API_KEY!
    },
    body: JSON.stringify({ email })
  });
  const result = await validation.json();

  // Block invalid, disposable, or high-risk emails
  if (!result.is_valid) {
    return { error: "Please use a valid email address." };
  }
  if (result.is_disposable) {
    return { error: "Disposable email addresses are not allowed." };
  }
  if (result.risk_score > 70) {
    return { error: "This email address could not be verified." };
  }

  // Step 2: Proceed with account creation
  const user = await createUser(email, password);
  await sendVerificationEmail(user);
  return { success: true };
}

Solve this with MailSentry

8 validation layers, real-time results, sub-50ms response.

Try MailSentry Free →

This single integration point — called before you write anything to the database — blocks throwaway emails, non-existent mailboxes, and high-risk addresses. MailSentry runs all of these checks in parallel in under 50ms, so the user experiences no noticeable delay.

Layer 2: Rate Limiting by IP and Fingerprint

Even with email validation, a determined attacker can use valid email addresses. Rate limiting constrains how many signups can originate from a single source within a time window:

// Simple IP-based rate limiting for signups
const signupAttempts = new Map<string, { count: number; resetAt: number }>();

function checkSignupRateLimit(ip: string): boolean {
  const now = Date.now();
  const record = signupAttempts.get(ip);

  if (!record || now > record.resetAt) {
    signupAttempts.set(ip, { count: 1, resetAt: now + 3600000 }); // 1 hour window
    return true;
  }

  if (record.count >= 3) { // Max 3 signups per IP per hour
    return false;
  }

  record.count++;
  return true;
}

Three signups per IP per hour is a reasonable default for most applications. Legitimate users rarely create more than one account, so this threshold catches automated abuse without blocking real signups behind shared networks like corporate offices or universities.

Layer 3: Honeypot Fields

Honeypot fields are invisible form inputs that real users never fill in but bots do. They are trivial to implement and surprisingly effective against unsophisticated bots:

// In your signup form JSX
<input
  type="text"
  name="website"
  autoComplete="off"
  tabIndex={-1}
  style={{ position: "absolute", left: "-9999px", opacity: 0 }}
  aria-hidden="true"
/>

// On the server
if (formData.get("website")) {
  // A bot filled in the honeypot field
  return { error: "Something went wrong. Please try again." };
}

Honeypot fields work best as a supplementary layer. They catch low-effort bots but are trivially bypassed by sophisticated attackers who parse the DOM and skip hidden fields.

Layer 4: Email Verification (Double Opt-In)

Email validation confirms that an address can receive mail. Email verification confirms that the person signing up controls that address. These are complementary, not redundant:

  • Validation (via API) — Catches disposable, non-existent, and malformed addresses before you send anything. Prevents wasted verification emails and protects sender reputation.
  • Verification (confirmation link) — Proves the human behind the address actually initiated the signup. Prevents account creation with someone else's real email.

The optimal flow is: validate first (reject bad emails immediately), then verify (send a confirmation link to addresses that pass validation). This order is important — sending verification emails to invalid addresses bounces, which damages your sending domain's reputation.

Layer 5: CAPTCHA as a Last Resort

CAPTCHAs add friction and hurt conversion rates. Data from multiple studies suggests that traditional CAPTCHAs reduce form completion rates by 10–30%. Use them selectively:

  • Invisible CAPTCHAs (like reCAPTCHA v3 or Turnstile) run in the background and only challenge suspicious sessions. These are the right default.
  • Visible CAPTCHAs should be reserved for high-risk actions — password resets, payment changes — not primary signup.

If your other layers (email validation, rate limiting, honeypots) are working well, you may not need CAPTCHA at all on your signup form. Add it only if you observe bot traffic that evades your existing defenses.

Measuring Your Fake Signup Rate

You cannot improve what you do not measure. Track these metrics monthly:

  • Signup-to-verification ratio — If only 40% of signups complete email verification, 60% are likely fake or disengaged.
  • Disposable email percentage — What fraction of signup attempts use disposable addresses? This number should trend toward zero as your validation improves.
  • Accounts with zero activity after 7 days — Real users do something. Fake accounts sit idle.
  • Signups per IP distribution — A healthy distribution is mostly 1 signup per IP. Clusters of 5+ from a single IP indicate abuse.

Key Takeaways

Preventing fake signups is a layered problem that requires a layered solution. Start with email validation at the point of entry — it delivers the highest impact for the least implementation effort. Add rate limiting and honeypot fields as low-friction supplementary defenses. Use email verification (double opt-in) to confirm address ownership. Reserve CAPTCHAs for situations where other layers are insufficient. Measure your fake signup rate continuously, and treat each blocked fraudulent registration as infrastructure cost avoided and analytics accuracy gained.

Try MailSentry Free

8 validation layers, sub-50ms response, 1,000 checks/month free.

Get Your Free API Key →

Keep Reading

More guides and insights on email validation.

Start validating emails today

1,000 free checks every month. All 8 validation layers included. No credit card needed.