Bot Signup Prevention: Why CAPTCHA Isn't Enough in 2026
CAPTCHA solved 2015. Bot farms solved CAPTCHA. Here's how modern SaaS teams actually stop bot signups — without adding friction for real users.

If you're still relying on reCAPTCHA to keep bots out of your signup form, your data has bad news for you. Modern bot farms solve CAPTCHAs at industrial scale — roughly $1 per 1,000 solves, with 99%+ success rates on the trickiest versions.
The arms race has moved on. This post is a practical breakdown of how bot signups actually happen in 2026, why CAPTCHA-alone is inadequate, and the detection stack that actually works.
The modern bot signup economy
It helps to understand what you're up against.
Residential proxy networks sell access to millions of real home IPs — literally, infected consumer devices and mobile phones — for $5 per GB. This means your "block Tor exit nodes and VPNs" strategy catches exactly none of the high-end attackers.
CAPTCHA-solving services (2Captcha, Anti-Captcha, CapMonster) solve any Google reCAPTCHA, hCaptcha, or Cloudflare Turnstile puzzle for cents. Their success rate on reCAPTCHA v2 is 95%+. On v3 (the "invisible" scoring one), they're 80%+ with specialized tooling.
Browser automation frameworks (Puppeteer with stealth plugins, Playwright with fingerprint spoofing) render exactly like Chrome, execute real JavaScript, and handle cookies/local storage identically to a real user.
LLM-driven form fillers can now pass "behavioral" challenges — they wait realistic amounts of time, type character-by-character with variable cadence, and generate plausible-looking names and addresses.
Put these tools together and you get a $50-a-day bot farm that signs up 50,000 accounts to your SaaS with addresses that pass CAPTCHA, come from clean residential IPs, and look like real humans on every behavioral axis.
Why bots sign up
The motivation is usually one of:
- Free-tier extraction — your compute or LLM credits have cash value.
- Affiliate farming — if you pay referrers, attackers harvest.
- SEO / backlink generation — some products let users create public profiles.
- Pre-attack reconnaissance — mapping your product before trying something worse.
- Scraping gated content — docs, pricing, tutorials behind signup walls.
Each has different economics, but the signup technique is similar: volume, from many different identities, fast.
What still works: a layered defense
No single signal stops modern bots. What works is a layered approach where each layer catches a different class of attack. In 2026, the stack looks like this.
Layer 1: Email quality filtering
Before anything else, validate the email. A bot using a disposable email is trivial to catch:
- Syntactic validation
- MX record presence
- Disposable provider blocklist
- Free-provider classification (not a block, but a signal)
- Role-based address check
This catches the lowest-effort bots — the ones using mailinator.com or @fake.org domains. About 30-40% of bot signups we see die at this layer alone.
Layer 2: IP reputation
Even with residential proxies, IP-based signals are useful:
- Geographic consistency check — the claimed location vs. the IP geolocation.
- VPN/proxy detection — not always a block signal, but a strong weight.
- IP risk scoring — commercial providers (IPQualityScore, MaxMind, Spur) maintain global risk scores based on historical abuse from each IP.
- ASN analysis — hosting provider ASNs (DigitalOcean, AWS, Hetzner) are red flags for consumer SaaS; legitimate B2B traffic is more mixed.
Pair IP reputation with geography. If your user base is 95% US and a signup arrives from a Vietnamese residential IP, weight accordingly.
Layer 3: Device and browser fingerprinting
This is where it gets sophisticated. Real browsers have ~500 inconsistencies between what they claim and what they are. Bots optimize for the ones they know defenders check:
- Canvas fingerprinting — each GPU produces slightly different pixels.
- WebGL fingerprinting — same idea, more entropy.
- Audio context fingerprinting — browser audio output has tiny device-level differences.
- Font enumeration — each OS has a unique font installation pattern.
- Navigator object inconsistencies — automation tools leave small telltales.
FingerprintJS, BotD, and similar libraries do this for you. Self-hosted BotD catches roughly 60-70% of sophisticated bots at essentially zero latency.
Layer 4: Behavioral signals
Real users touch the keyboard and move the mouse with variable cadence. Bots do it perfectly (straight lines, identical intervals) or skip the event entirely.
Capture and score:
- Time from page-load to signup submission (typical humans: 15-90 seconds)
- Mouse movement variance (humans: jittery, curved; bots: linear or absent)
- Keystroke interval entropy (humans: Poisson-ish distribution; bots: constant)
- Focus/blur events (real users tab between fields; bots fill programmatically)
This is the layer that ships last because it's the trickiest to instrument, but it's also the layer that catches LLM-driven bots that pass everything else.
Layer 5: Company and person validation
Finally, validate the claim. If the signup says they're from Stripe, does the email domain match? Does the domain actually exist and have a live website?
- Email domain → company website resolution
- Domain age check (very new domains are suspicious)
- Name vs. email local-part consistency
- Company enrichment (optional — providers like Clearbit confirm the company exists)
This catches bots that pass every technical check but submit mismatched identity claims.
What about CAPTCHA?
Yes, CAPTCHA still has a role — it's a cheap, high-friction extra layer that punishes the lowest-end attackers. But:
- Use hCaptcha or Cloudflare Turnstile instead of reCAPTCHA. They're both faster for real users and slightly harder to farm.
- Only challenge suspicious signups, not all of them. Use your other signals to decide when to challenge.
- Don't trust a CAPTCHA pass as "definitely human." It just means the attacker paid ¢1 to get past.
Progressive challenge is the pattern: serve no challenge to clean signups, serve hCaptcha to medium-confidence ones, serve hCaptcha + email OTP to low-confidence ones.
Putting it together
What does a full defense look like in 2026 for a typical SaaS? Something like:
signup request arrives
├── layer 1: email validation → 30% rejected
├── layer 2: IP reputation → 15% rejected
├── layer 3: fingerprinting → 10% rejected
├── layer 4: behavioral scoring → 5% rejected
└── remaining 40% → approve + monitor
Numbers depend on your product, but the cascade is the pattern. Each layer is cheap (milliseconds), and together they catch the overwhelming majority of bot traffic.
The legitimate users? They never see a CAPTCHA, never get flagged, never even know this is happening. That's the goal.
A practical integration
For most teams, layers 1, 2, and 5 are worth running on every signup. You can do this in one API call to Vouchley:
const resp = await fetch("https://api.vouchley.getrevlio.com/v1/verify", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.VOUCHLEY_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
email: signup.email,
name: signup.name,
company_name: signup.company,
ip_address: signup.ip,
}),
});
const { score, recommendation, ip } = await resp.json();
Layer 3 (fingerprinting) needs client-side instrumentation — BotD is the best open-source option. Layer 4 (behavioral) is optional and works best for high-value signups.
The mistake to avoid: friction-first thinking
The biggest mistake we see: teams add five layers of friction (CAPTCHA + email verification + phone verification + manual review) to fight bots. The bots get through anyway (they have budgets), and now every real user hits a 15-step signup flow.
Invert the thinking. Real users should see zero friction. Apply challenges only to suspicious signups. Use the trust score to decide.
if (score >= 70) {
// Clean. Onboard with no friction.
await createAccount(signup);
} else if (score >= 40) {
// Medium confidence. Require email verification.
await sendEmailOTP(signup.email);
} else {
// Low confidence. Block, or challenge with hCaptcha + OTP + manual review.
await flagSuspicious(signup);
}
Conclusion
CAPTCHA alone doesn't stop bots anymore. A layered defense — email validation, IP reputation, optional fingerprinting, and behavioral scoring — does. The win isn't just fewer bot signups. It's fewer bot signups without making legitimate users jump through hoops.
Vouchley handles layers 1, 2, and 5 in a single API call. Combined with client-side BotD and progressive CAPTCHA challenges, you have a defense that catches 95%+ of bot signups in 2026 while leaving real users untouched.
Your free tier's compute budget will thank you. Your conversion rate will too.
Rohit
Writing about signup verification, fraud prevention, and the boring-tech philosophy behind building Vouchley.
Further reading

How to Detect Fake Signups in Real Time: A Complete Guide for SaaS Teams
Fake signups are the silent tax on every growing SaaS. Here's how to detect and block them in real time — without adding friction for legitimate users.

Disposable Email Detection: What Works, What Doesn't, and Why It Matters
Disposable emails are the #1 indicator of low-intent signups. Here's a practical guide to detecting them — what works in 2026, what doesn't, and how to integrate detection into any stack.