reCAPTCHA migration
Replace the script, request a token on submit, and verify it on your server. Users do not solve a puzzle.
Why now
- reCAPTCHA's free tier includes 10,000 assessments a month per organization, across all sites.
- Without billing, requests return HTTP 429 after that limit until next month.
- With billing, the cost is $8 flat for 10,001–100,000, then $1 per 1,000.
Source: Google Cloud, reCAPTCHA billing information, checked 2026-10-22.
Swap in 3 steps
1. Script
<!-- remove -->
<script src="https://www.google.com/recaptcha/api.js?render=SITE_KEY"></script>
<!-- add -->
<script src="https://nolgard.com/v1/client.js" data-site-key="SITE_KEY" defer></script>2. Token on submit
// before: const token = await grecaptcha.execute('SITE_KEY', { action: 'signup' });
await Nolgard.ready;
const token = await Nolgard.execute({ action: 'signup' });3. Server verify
// before: POST https://www.google.com/recaptcha/api/siteverify, then if (score < 0.5) reject
const result = await fetch('https://nolgard.com/v1/verify', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ secret: process.env.NOLGARD_SECRET, token, remoteIp, action: 'signup', account: { email } }),
}).then(r => r.json());
// Use result.decision (allow | limit | challenge | shadow | block), not a score threshold.The scores run in opposite directions: reCAPTCHA 1.0 means human; Nolgard score 100 means automated. Branch on decision. Start the site in Observe mode. Decisions and modes
Plugins
Turn off the plugin's reCAPTCHA after you enable Nolgard.