CAPTCHA, reconsidered

A CAPTCHA that doesn't watch your users while it watches for bots.

Three of the four major CAPTCHA services are owned by US advertising platforms. We built a fourth—hosted in Germany, operated under EU data law—that does the work without the surveillance.

No card required. GDPR-compliant by design. Drop-in replacement for reCAPTCHA, hCaptcha, and Turnstile.

Live
your-form.html
<form action="/signup"> <input name="email" …> <div class="trustedcaptcha" data-sitekey="0x…"></div> <button>Submit</button> </form>
Why we built it

Most CAPTCHAs aren't really about CAPTCHA.

reCAPTCHA enriches a behavioural profile attached to a Google identity. hCaptcha sells annotation labour to ML training pipelines. Turnstile routes every request through Cloudflare's network. All three work, technically. None of them are doing only what they say on the tin.

A CAPTCHA should keep bots out of your forms. That's it. It shouldn't be a tracking pixel, a sales funnel for an adjacent product, or a data-export pipe to a different jurisdiction. So we built one that isn't.

“If the only honest CAPTCHAs are the ones too obscure for anyone to have heard of, that's a problem worth fixing.”

TrustedCaptcha is a verification service—a small server in Germany, talking only to your servers and your users' browsers, signing the result, and forgetting the rest. Daily logs are truncated at /24 (IPv4) and /64 (IPv6). User agents are hashed with a per-deployment pepper. Nothing leaves the EU. There is no ad-tech partner.

— 01

Six modes, one widget

Smart-click for trusted users (85% of traffic). Image grid, math, logic, and audio for ambiguous risk scores. Invisible proof-of-work for low-stakes forms. The risk engine picks per request.

— 02

Drop-in compatible

Same embed shape as reCAPTCHA. Token surface fills g-recaptcha-response, h-captcha-response, and cf-turnstile-response. Most server code keeps working as-is.

— 03

You can read the source

PHP, JavaScript, and SQL. About 12 KB of widget code. No build step. No minified blob phoning home. Hostable on your own infrastructure if our service ever stops being the right answer for you.

What's under the hood.

Rev 2026.05
Modes
smart-click · image-grid · math · logic · audio · invisible (SHA-256 proof-of-work)
Risk engine
seven signals — IP reputation, ASN class, UA plausibility, request velocity, pointer entropy, hint consistency, TLS fingerprint
Widget size
~12 KB gzipped · no third-party scripts · no build step
Compatible APIs
reCAPTCHA v2 · hCaptcha · Cloudflare Turnstile (token field fills all four)
Data residency
Germany (Hetzner, Frankfurt) · all processing inside the EU
Operator
AESHA Technology Services Limited (Seychelles, CRN 210193)
Retention
raw verifications 30 days (free) / 90 days (Pro) · IPs truncated at /24 & /64 · UAs hashed with per-deployment pepper
Accessibility
WCAG 2.2 AA · keyboard · screen reader · audio fallback · high contrast
Locales
en · de · fr · es
SLAs (Pro)
99.9% verify-API uptime · <100ms p95 verify latency · EU support window

Same job. Different incentives.

TrustedCaptcha reCAPTCHA v3 hCaptcha Turnstile
Hosted in the EU Germany No (US) No (US) No (global)
Owned by an ad-tech company No Google Indirect Cloudflare
Sells solved challenges as ML labels No Yes Yes No
Source readable Yes No No No
Drop-in for reCAPTCHA code Yes Yes Mostly
Free tier daily limit 1,000 verifications 1M 1M Unlimited

We're not pretending to match Google's free tier. Our pricing reflects the cost of running a small, EU-only service that isn't subsidised by an adjacent business. If you genuinely need a million daily verifications and don't care where they're processed, you have other options.

Two snippets. One on the page, one on your server.

— 01 — Add to your form (any language)
<script src="https://cdn.trustedcaptcha.com/widget/v1/api.js"
        async defer></script>

<form action="/signup" method="POST">
  <input name="email">
  <div class="trustedcaptcha"
       data-sitekey="0x..."></div>
  <button>Sign up</button>
</form>
— 02 — Verify on your server (PHP)
$response = file_get_contents(
  'https://challenges.trustedcaptcha.com/api/v1/siteverify'
  . '?secret=' . urlencode($SECRET)
  . '&response=' . urlencode($_POST['trustedcaptcha-response'])
  . '&remoteip=' . urlencode($_SERVER['REMOTE_ADDR'])
);
$result = json_decode($response, true);
if (!$result['success']) { /* reject */ }

Examples for Python, Ruby, Node, Go, and Rust in the quickstart docs.

Two plans. No tiers, no sales calls.

Free
For personal sites and weekend projects.
€0/forever
  • 1,000 verifications per day
  • All six modes
  • One site
  • Community support
Start free

€200/year if billed annually. Cancel anytime — no clawbacks, no penalties.

"The right CAPTCHA is the one your users never notice and your bots can't pass. Everything else is theatre." Design brief, draft one