The CAPTCHA your users
will actually enjoy.
Replace the checkbox with a 10-second arcade game. Bots fail. Humans smile. Two lines of code to integrate.
Try a game — this is exactly what your users see
Connect 4
Get 4 in a row to pass
1 of 7 games
Dead simple to integrate.
Step 01
Purchase a game
Buy any of the 7 arcade mini-games — or grab the full pack. Pay what you want, yours forever.
Step 02
Copy your embed code
Your dashboard shows a two-line snippet — a script tag and a div with your unique site key.
Step 03
Paste into your form
Drop it into any HTML form. When a visitor passes the game, a token is generated. Verify it server-side before processing the submission.
Try before you buy.
Click any game to play it live. This is exactly what your users will see.
🟢 All 7 games playable now · Click any card to try instantly
The checkbox is dead.
Security doesn't have to be annoying. Here's why developers are switching.
Bots can't play games
Game logic requires real-time human input — spatial reasoning, reaction time, decision making. No scraper, headless browser, or ML model beats it without your token system catching it.
Users actually enjoy it
Instead of squinting at blurry letters or clicking fire hydrants, visitors play a 10-second arcade game. Conversion rates go up. Bounce rates go down. People screenshot it.
Two lines to embed
One script tag. One div. Drop it anywhere — React, Vue, plain HTML, WordPress. No SDK, no npm package, no bundler required.
Server-side token verification
Game completion generates a signed short-lived JWT. Verify it on your server before processing any form submission. Bots can't fake the token.
Pay what you want, keep forever
No monthly fees. No per-verification charges. No usage limits. Pay once, embed everywhere, use indefinitely.
Your brand, not Google's
No reCAPTCHA watermark. No Google tracking. No privacy policy footnotes about third-party data collection. Your form, your experience.
Legacy CAPTCHA
Privacy · Terms
- ✕Users find it frustrating
- ✕Google tracks your visitors
- ✕Fails silently on VPNs
- ✕Free, but you pay in data
CaptchaKit
CaptchaKit · No tracking
- ✓Users genuinely enjoy it
- ✓Zero third-party tracking
- ✓Works on all devices & VPNs
- ✓Pay what you want, keep forever
Pay what you want.
Name your price. Get access for free, or support the project with whatever feels right.
Full Pack
All 7 Games
Every arcade CAPTCHA we make. Sign up, grab your embed code, protect your forms today.
You choose the price · or get access for free
Pay what you want · min $5 · or
Connect 4
Get 4 in a row to pass
Pay what you want · min $1 · or
Pac-Man Lite
Eat both fruits before time runs out
Pay what you want · min $1 · or
Whack-a-Bot
Whack 5 humans, avoid bots
Pay what you want · min $1 · or
Color Match
Repeat the color sequence
Pay what you want · min $1 · or
Maze Runner
Navigate to the exit in time
Pay what you want · min $1 · or
Fruit Sorter
Sort 5 fruits into the correct baskets
Pay what you want · min $1 · or
Stack It
Stack 3 blocks to pass
Pay what you want · min $1 · or
Secure checkout via Stripe · All major credit cards accepted
Two lines. Any framework.
Add the script. Add the div. Done.
Client embed
<!-- 1. Load the widget script -->
<script src="https://captchakit.com/widget.js"></script>
<!-- 2. Drop the widget into your form -->
<form action="/submit" method="POST">
<input type="email" name="email" placeholder="Email" />
<div
data-gamecaptcha
data-site-key="gc_connect4_a8f3bc"
data-game="connect4"
></div>
<!-- widget.js sets this automatically on pass -->
<button type="submit">Sign up</button>
</form>
<!-- gamecaptcha_token is added to the form automatically -->Server verification
// Node.js — verify on your server before processing the form
const res = await fetch('https://captchakit.com/api/verify', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer cgv_your_api_key',
},
body: JSON.stringify({
token: req.body.gamecaptcha_token,
siteKey: 'gc_connect4_a8f3bc',
}),
});
const { success, gameId } = await res.json();
if (!success) {
return res.status(400).json({ error: 'Bot detected' });
}
// ✅ Human verified — process the form
await createUser(req.body.email);