Stop Form Spam Bots — Honeypot + AI Classifier Strategy
Two layers stop most form spam without CAPTCHA: a honeypot field (catches 40-60%) and a backend AI classifier (catches the rest). Working code below; no third-party JS, no user friction, no privacy concerns.
Most form spam comes from cheap automated bots that scrape the web for forms and submit garbage to all of them. The bots don't render JavaScript, don't read CSS, and don't follow CAPTCHA puzzles — they parse the HTML, fill every input, and POST. That's the spam profile to defend against, and the defense is cheaper than CAPTCHA.
Layer 1: a honeypot field. Add an `<input>` that's visually hidden via CSS but present in the HTML. Bots that fill every input will fill it; real users won't (they don't see it). splitforms recognizes several common honeypot field names (`botcheck`, `_gotcha`, `hp`, `honey`, `trap`, `do_not_fill`, `leave-blank`, `fax`, `website`, `url`) — any submission where one of these is non-empty gets flagged as spam.
Layer 2: an AI spam classifier on the backend. splitforms runs every submission through a machine-learning model trained on millions of real form submissions. The model catches the spam that gets past the honeypot — modern LLM-written submissions that look human, automated submissions that game the honeypot, and other edge cases.
Together, honeypot + AI classifier catches ~95% of automated spam. No third-party JavaScript, no Google or hCaptcha tracking, no user-facing friction, no accessibility tax. Reach for CAPTCHA only if you're seeing human-driven abuse that the AI classifier misses — which is rare for a contact form.
How to set this up
Add a honeypot field
Hidden input that bots fill but humans don't see. splitforms recognizes it automatically.
Use a backend AI classifier
splitforms ships one. Every submission scored; spam routed to a separate folder.
Configure rate limits
Per-IP and per-access-key. Sliding window with burst allowance. splitforms handles this server-side.
(Only if needed) Add CAPTCHA
If the above isn't catching your specific spam, then add reCAPTCHA or hCaptcha. Honest, but rare.
Honeypot + AI classifier + rate limits. 95% of spam blocked. No CAPTCHA.
Frequently asked questions
How do I stop email spam bots from filling out my contact form?
Two layers. (1) Honeypot — a hidden form field bots fill but humans don't see; backend recognizes non-empty submissions as spam. (2) AI spam classifier — every submission scored by an ML model; flagged submissions routed to a separate folder. splitforms ships both on every plan including free.
Why don't I need CAPTCHA for most forms?
Most form spam is cheap automated bots that don't render JS or solve puzzles. They parse HTML, fill inputs, POST. A honeypot catches them (bots fill every input; humans skip hidden ones). The AI classifier catches the smarter ones. Combined, ~95% of automated spam blocked with zero user friction.
What's a honeypot field?
A form input that's visually hidden via CSS (display:none, or position:absolute off-screen). Bots fill it because they parse HTML and fill every input. Real users never see it. Submissions with a non-empty honeypot get classified as spam server-side.
How does splitforms detect spam?
Three layers. (1) Honeypot recognition — common honeypot field names are flagged if non-empty. (2) AI classifier — every submission scored by an ML model trained on millions of real submissions. (3) Rate limits and origin checks. Combined catches ~95% with zero user friction.
When should I add CAPTCHA?
Only when honeypot + AI classifier isn't catching your specific spam pattern. Usually that means human-driven abuse, not automated spam. CAPTCHA hurts conversion, breaks accessibility, and adds third-party JS — only worth it when the simpler layers genuinely fail.
Related guides
Ship the form, not the backend.
Free for 1,000 submissions/month. Email delivery, AI spam filtering, signed webhooks, real dashboard — all on the free plan. No credit card.
Get a free access key →