Compare

Turnstile vs Nolgard

Turnstile checks that a signup is human. Nolgard checks for linked repeat accounts and tells your backend how many credits to give. Use both when a repeat trial costs you money.

What Turnstile is good at

Plan and feature details are Cloudflare's own documentation, read 2026-10-23. Turnstile is a separate product from Cloudflare's paid Bot Management and WAF.

What Turnstile does not decide

A Turnstile pass means a browser solved a challenge. It carries no opinion about the account behind it.

Row by row

Signup questions answered by Cloudflare Turnstile and by Nolgard
QuestionTurnstileNolgard
Is this session automated?Yes. This is its job, free and unlimited.Yes. Returns a score and a decision rather than a pass/fail only.
Is this the same person again?No on the free plan. Enterprise Ephemeral IDs give a device id that lasts days, scoped to your Cloudflare account.Yes. Per-site links across browser visitor id, device and normalized email; repeat_device fires on the fourth linked account.
How many credits should this account get?No. Pass or fail.Yes. grant.share and grant.credits in the verify response.
Is the email disposable or brand new?No.Yes. MX, domain age, alias normalization and signup bursts on one domain.
Is this account burning credits abnormally?No. Signup-time only.Yes. Usage events and spend limits after the account exists.
Is this referral self-dealing?No.Yes. Links the referrer and the referred account.
Is this login from a known device?No. It can gate the form, but it has no device history.Yes. Known-device checks and email step-up.
What does the server get back?success, hostname, timestamp, and on Enterprise metadata.ephemeral_id.decision, score, reason ids and grant.
Where does it run?Widget plus siteverify. No DNS change needed.client.js plus /v1/verify, plus server-side usage events.
PriceFree, unlimited verifications. Ephemeral IDs need a custom Enterprise plan.Free: 1,000 new accounts a month, no card. Pro $49 up to 10,000 and Business $199 up to 50,000 are planned and not yet on sale.

Turnstile column from Cloudflare's plan and feature docs, read 2026-10-23. Nolgard column matches the shipped API docs.

Use both

Run Turnstile first and drop the scripts. Then ask Nolgard what the survivor is worth. That is two network calls in one signup route.

const cf = await fetch('https://challenges.cloudflare.com/turnstile/v0/siteverify', { method: 'POST',
  body: new URLSearchParams({ secret: TURNSTILE_SECRET, response: cfToken, remoteip }) }).then(r => r.json());
if (!cf.success) return reject();                       // challenge failed: stop here
const nf = await fetch('https://nolgard.com/v1/verify', { method: 'POST', headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ secret: NOLGARD_SECRET, token: nfToken, remoteIp: remoteip, action: 'signup', account: { id, email } }) }).then(r => r.json());
if (nf.success) grantCredits(nf.grant.credits ?? Math.floor(nf.grant.share * FULL_TRIAL));

Example server-side flow. Both tokens come from the browser; secrets stay on your server. Handle network failures and failed verifies before granting anything, and grant only once per account. Under the default enforcing policy, a linked fourth account can receive 20 of 100 credits instead of a full trial. Follow the Clerk integration for error handling and grant.requires step-up handling.

If you use Clerk

Clerk's bot protection is a Turnstile challenge on suspicious sign-ups, on by default, plus automation and proxy checks. Corporate VPNs and iCloud Private Relay are exempted, and the feature does not challenge sign-in. Changing its setting requires Clerk's Business plan. (Clerk's own documentation, read 2026-10-23.)

So a Clerk app already has the human check. What it still lacks is the account-level answer: whether this new user is the same person as three existing ones, and what the trial should be worth. Keep Clerk's sign-up and bot protection exactly as is, verify a Nolgard token in your onboarding route, and write the grant to user metadata.

When Turnstile alone is enough

Turnstile alone is often enough when your only decision is whether to accept a form submission:

If a repeat signup costs you real money, pass/fail is not enough. If it only costs you a database row, it is.