Block form bots without a CAPTCHA

Contact forms, support tickets and review submissions are the cheapest way to send you unlimited mail. A CAPTCHA taxes every real sender to inconvenience a script.

How ZeroBot fits Form spam

Form spam is a resource problem before it is an inbox problem: every submission costs you a ticket, a queue entry, a notification email and a support person’s attention, and you pay all of that before anyone reads the content. Because ZeroBot scores the request rather than challenging the person, you get the effect a CAPTCHA would have had without the visual puzzle, the accessibility problems or the conversion drop on your form. Screen on submit, and keep the check off your page-load path entirely.

Screening a submission

php (form handler)

// Screen on submit — never on page load, and never with a visible challenge. $res = wp_remote_post('https://api.zerobot.info/v3/openapi', [ 'timeout' => 2, 'headers' => ['Authorization' => 'Bearer ' . ZEROBOT_KEY], 'body' => [ 'ip' => $_SERVER['REMOTE_ADDR'], 'domain' => $_SERVER['HTTP_HOST'], 'useragent' => $_SERVER['HTTP_USER_AGENT'] ?? '', ], ]); $v = is_wp_error($res) ? [] : json_decode(wp_remote_retrieve_body($res), true); if (($v['query'] ?? '') === 'failed') $v = []; // fail open if (($v['risk_score'] ?? 0) >= 80) { // Accept silently for bots: a rejection teaches them to adapt, // and a real user who trips this loses nothing by resubmitting. // Log it, discard the payload, show the normal success page. zerb_log_block($_SERVER['REMOTE_ADDR'], $v['reason'] ?? ''); return; // do not persist, do not email } // Otherwise handle the submission normally.

Full endpoint reference and an interactive tester are in the API docs. Get a key from the free tier — no card required.

What form spam actually costs

Support queue flooding

Real tickets from real customers sit behind hundreds of junk entries, and your first-response time is measured from the junk arriving.

Notification email volume

Every submission pages someone. At volume this is a deliverability problem for your own domain, not just an annoyance.

Injected payloads

Spam submissions are how injection attempts reach whoever reads the ticket, and how links get seeded anywhere the content is later rendered.

Review and listing spam

Anything user-generated and public becomes an SEO target for whoever can submit it fastest.

Frequently asked questions

Why accept silently instead of rejecting?

A rejection is feedback. It tells whoever is tuning a script exactly which threshold to stay under. Silently discarding leaves them guessing, and a real visitor who trips it just sees the form succeed.

Can I keep my CAPTCHA as well?

You can, but it is redundant work on the honest users. If ZeroBot is catching the traffic, consider disabling the CAPTCHA for a set of countries or traffic sources and measuring the spam rate before removing it entirely.

Does this add latency to the form submit?

One HTTP round trip, median under 50ms, and it is on submit rather than page load — so it is invisible unless your API is unreachable, in which case the submission is allowed through by default.

Protect your Form spam app this week.

Free tier, real verdicts, and documentation with a built-in tester.

Get started free →

Related problems ZeroBot solves

Stop scrapers Prevent fake signups Stop credential stuffing Stop card testing