Docs Bouncer

CAPTCHA Providers

CAPTCHA Providers#

Bouncer supports five CAPTCHA providers. You can switch between them at any time from WooCommerce > Settings > Bouncer without losing your form protection settings.

Cloudflare Turnstile#

Type: Invisible challenge (occasionally shows a brief widget) Cost: Free, unlimited requests Privacy: Cloudflare-managed, GDPR-friendly

Turnstile runs invisible browser challenges that verify visitors without interaction. Most legitimate users never see anything. Occasionally, a small widget appears for a few seconds while Turnstile verifies the browser.

When to use#

  • Default choice for most stores
  • Good balance of security and user experience
  • Free with no usage limits
  • Privacy-friendly (Cloudflare doesn’t use the data for ad targeting)

Configuration#

SettingDescriptionDefault
Site KeyFrom Cloudflare Turnstile dashboardRequired
Secret KeyFrom Cloudflare Turnstile dashboardRequired
ThemeAuto (match site), Light, or DarkAuto
SizeNormal or CompactNormal
AppearanceAlways, Interaction-only, or InvisibleAlways

The Appearance setting controls when the Turnstile widget is shown. “Always” shows it on every page load. “Interaction-only” shows it only when Turnstile needs to verify the visitor. “Invisible” never shows the widget.

Getting keys#

  1. Go to Cloudflare Turnstile dashboard.
  2. Click Add widget.
  3. Enter your site name and domain.
  4. Select Managed mode.
  5. Copy Site Key and Secret Key.

Google reCAPTCHA v3#

Type: Score-based, fully invisible Cost: Free up to 1M assessments/month Privacy: Google data collection applies

reCAPTCHA v3 runs entirely in the background. It assigns each visitor a score between 0.0 (likely bot) and 1.0 (likely human). No user interaction required.

When to use#

  • Maximum invisibility (no widget at all)
  • Stores already in the Google ecosystem
  • When you want score-based decisions rather than binary pass/fail

Configuration#

SettingDescriptionDefault
Site KeyFrom Google reCAPTCHA consoleRequired
Secret KeyFrom Google reCAPTCHA consoleRequired
Score ThresholdMinimum score to pass (0.0-1.0)0.5

Score threshold guide#

ThresholdEffect
0.3Permissive. Lets most traffic through. Some bots may pass.
0.5Balanced. Good default for most stores.
0.7Strict. May block some legitimate users on VPNs or shared IPs.
0.9Very strict. High false-positive risk. Not recommended for checkout.

Start with 0.5. If you still see spam, raise to 0.6 or 0.7. If legitimate customers report issues, lower it.

The threshold is filterable for developers:

add_filter( 'cfwc_recaptcha_v3_threshold', function( $threshold ) {
    return 0.6;
});

Alternative domain (recaptcha.net)#

In regions where google.com is blocked (China, Iran, etc.), the plugin can load reCAPTCHA from recaptcha.net instead. Configure this at WooCommerce > Settings > Bouncer > General > reCAPTCHA domain. Both the JavaScript API and the verification endpoint switch to recaptcha.net.

Getting keys#

  1. Go to google.com/recaptcha/admin/create.
  2. Select reCAPTCHA v3.
  3. Add your domain(s).
  4. Copy Site Key and Secret Key.

Google reCAPTCHA v2#

Type: “I’m not a robot” checkbox Cost: Free up to 1M assessments/month Privacy: Google data collection applies

The classic checkbox challenge. Users click “I’m not a robot” and occasionally solve an image puzzle. Visible confirmation that protection is active.

When to use#

  • When you want visible proof of bot protection (some users feel safer)
  • Registration and login forms where a checkbox is less disruptive
  • Stores with older demographics who may not trust invisible methods

Configuration#

SettingDescriptionDefault
Site KeyFrom Google reCAPTCHA consoleRequired
Secret KeyFrom Google reCAPTCHA consoleRequired
ThemeAuto, Light, or DarkAuto
SizeNormal or CompactNormal

Alternative domain (recaptcha.net)#

In regions where google.com is blocked (China, Iran, etc.), the plugin can load reCAPTCHA from recaptcha.net instead. Configure this at WooCommerce > Settings > Bouncer > General > reCAPTCHA domain. Both the JavaScript API and the verification endpoint switch to recaptcha.net.

Getting keys#

  1. Go to google.com/recaptcha/admin/create.
  2. Select reCAPTCHA v2 > “I’m not a robot” Checkbox.
  3. Add your domain(s).
  4. Copy Site Key and Secret Key.

hCaptcha#

Type: Challenge-based (image selection or invisible) Cost: Free up to 1M requests/month Privacy: Does not sell personal data, GDPR-friendly

hCaptcha is a privacy-focused alternative to Google reCAPTCHA. It can run as an invisible challenge or show image puzzles when needed.

When to use#

  • Privacy-conscious stores that want to avoid Google
  • EU/UK/Australian stores focused on data minimization
  • Stores that want an alternative to Cloudflare

Configuration#

SettingDescriptionDefault
Site KeyUUID format from hCaptcha dashboardRequired
Secret KeyFrom hCaptcha account settingsRequired
ThemeAuto, Light, or DarkAuto
SizeNormal or CompactNormal

Getting keys#

  1. Go to dashboard.hcaptcha.com.
  2. Create an account and add your site.
  3. Copy the Site Key (UUID format like a1b2c3d4-e5f6-...).
  4. Copy the Secret Key from your account settings.

Self-Hosted Honeypot#

Type: Multi-layer invisible bot trap Cost: Free Privacy: Maximum. No external calls, no cookies, no data leaves your server.

The honeypot is not a traditional single hidden field. It uses seven layers of detection:

  1. JavaScript-injected hidden fields — bots that don’t execute JS fill out visible-to-them fields
  2. Multiple decoy trap fields — with site-unique naming that changes per installation
  3. Time-based detection — forms submitted faster than the configurable minimum (default 3 seconds) are rejected
  4. Nonce protection — prevents replay attacks and form resubmission
  5. JavaScript math challenge — a simple math problem solved by the browser’s JS engine
  6. Form expiry — submissions older than 24 hours are rejected
  7. Spam statistics tracking — tracks blocked attempts for the dashboard widget

When to use#

  • GDPR-strict stores where no external service calls are acceptable
  • Stores that don’t want to require cookie consent for CAPTCHA
  • As a secondary layer alongside another provider (enable via Advanced Settings)
  • As a failsafe fallback when the primary provider is unreachable

Configuration#

SettingDescriptionDefault
Minimum submission timeSeconds before form can be submitted3

The minimum time is filterable:

add_filter( 'cfwc_honeypot_min_time', function( $min_time ) {
    return 5; // Require 5 seconds minimum
});

Limitations#

  • Less effective against sophisticated bots that execute JavaScript
  • No challenge-based verification for edge cases
  • Best used as a layer rather than sole protection for high-risk stores

Using honeypot as a secondary layer#

Regardless of which primary provider you use, you can enable the honeypot as an additional detection layer. Go to WooCommerce > Settings > Bouncer > Advanced and check Enable honeypot as secondary layer.

When enabled, both your primary provider and the honeypot must pass for a form submission to succeed. This catches bots that might solve the CAPTCHA challenge but still fail the time-based or JavaScript detection.

Language support#

All external CAPTCHA providers support displaying the widget in the visitor’s language. By default, the plugin auto-detects the visitor’s browser language. You can override this by selecting a specific language at WooCommerce > Settings > Bouncer > General > CAPTCHA language.

30+ languages are supported, including English, Spanish, French, German, Japanese, Chinese, Arabic, and more. The honeypot provider is invisible and doesn’t display any text, so the language setting doesn’t apply.

Switching providers#

Changing providers does not affect:

  • Which forms are protected (those settings are independent)
  • Rate limiting configuration
  • IP whitelist/blocklist
  • Any other settings

You only need to enter the new provider’s API keys. The old keys are not deleted, so switching back is instant.

Provider-specific settings like the Turnstile appearance mode, reCAPTCHA domain, and language are preserved when switching. They apply when you switch back.