A spam-free contact form without a single CAPTCHA.
splitforms keeps your contact form spam-free with a layered, server-side defense — a hidden honeypot, a time-trap, IP rate limiting, AI content scoring, and an account-wide blocklist. Typical sites block 95–99% of spam before it reaches the inbox, and your visitors never have to find a fire hydrant. Paste the HTML below into any site (HTML, React, Next.js, WordPress, Webflow, Carrd — anywhere) and submissions arrive clean.
No credit card. No reCAPTCHA cookies. GDPR-clean. Every spam layer is included free on all 500 submissions/month.
The spam-free contact form, in HTML
This is the whole form. The two hidden fields do the work: the botcheck honeypot catches bots that fill every input, and the _start_time time-trap rejects anything submitted in under two seconds. Replace YOUR_ACCESS_KEY with your key and paste it anywhere — no CAPTCHA, no scripts to configure.
Submitting from a React/Next.js app or another SPA? Send the same fields over fetch() with botcheck: "" (kept empty) and _start_time set on mount — see the React & Next.js spam guide.
Five layers, zero CAPTCHAs
No single trick stops every bot, so splitforms runs five together on every submission — in under 50 milliseconds, entirely on the server, with nothing loading in your visitor's browser.
- Layer 01
Honeypot field
A hidden botcheck input that real visitors never see but bots auto-fill. Any submission that arrives with it filled is dropped before it reaches your inbox. Zero friction, zero CAPTCHA.
- Layer 02
Time-trap
A real person takes seconds to read and type; a bot fills a form in ~50ms. Submissions completed in under 2 seconds are rejected automatically — tunable per form for slow forms like job applications.
- Layer 03
IP rate limiting
One submission per IP per minute by default throttles flooders that hammer your endpoint, without ever challenging a normal visitor who submits once.
- Layer 04
AI content scoring
A machine-learning layer scores every message for link spam, repeated phrases, banned TLDs, and known spam corpora — the part that catches human-looking, AI-written spam a honeypot can't see.
- Layer 05
Account-wide blocklist
Mark one sender as spam and they're blocked across every form on your account, forever. The Spam folder also lets you recover any false positive in one click — which trains the filter to let similar messages through next time.
Want the full breakdown? Read the complete form spam protection guide, the server-side checklist, or see how the AI content scoring catches human-looking spam.
Why spam-free shouldn't mean CAPTCHA
The reflex fix for form spam is to bolt on a reCAPTCHA. It works, but it taxes the wrong people: every legitimate visitor now has to prove they're human, image puzzles add friction that measurably lowers conversion, and screen-reader and low-vision users hit a wall. On top of that, reCAPTCHA sets Google cookies and runs third-party JavaScript in your visitors' browsers — a recurring GDPR headache for any site with EU traffic.
The insight behind a spam-free form is that the bot can convict itself without involving the user at all. A honeypot it fills, a timer it beats, an IP it floods from, a message that scores like spam — none of those require a single click from a real person. That removes 95–99% of spam invisibly, and keeps the page GDPR-clean because nothing third-party ever loads.
If you still want a challenge for a high-value or heavily-targeted form, you can layer reCAPTCHA, hCaptcha, or Cloudflare Turnstile on top — it's just no longer the thing standing between you and a clean inbox. For the full argument and the trade-offs, see contact form without CAPTCHA and honeypot vs reCAPTCHA. Prefer a challenge? Compare the best CAPTCHA options.
Spam-free, on your stack
Platform-specific guides and deep dives on every layer of the defense. Same access key, same protection, wherever your form lives.
Spam-free WordPress contact form
Stop Contact Form 7 / WPForms spam without a plugin or CAPTCHA.
/blog/spam-free-wordpress-contact-form →Contact form without CAPTCHA
The full no-CAPTCHA stack that replaces reCAPTCHA — and why.
/blog/contact-form-without-captcha →Spam-free React & Next.js form
Server-side honeypot + time-trap for fetch() and Server Actions.
/blog/spam-free-react-contact-form →What is a honeypot field?
The invisible bot trap explained, with code and honest limits.
/blog/what-is-a-honeypot-field →Honeypot vs reCAPTCHA
Which actually stops form spam, measured on real traffic.
/blog/honeypot-vs-recaptcha →Form spam protection: complete guide
The pillar — every tactic, what's defeated by LLMs, what works.
/blog/form-spam-protection-complete-guide-2026 →
Generate a free access key, paste the snippet, and your contact form is filtering spam on the very next submission — no CAPTCHA, no plugin, no waiting for a model to warm up.
Spam-free contact form FAQ
What makes a contact form "spam-free"?
A spam-free contact form filters out automated and low-quality submissions before they reach you, so your inbox only shows real messages. splitforms does this with a layered server-side defense — honeypot, time-trap, IP rate limiting, AI content scoring, and an account-wide blocklist — that runs on every submission in under 50ms. Typical sites stop 95–99% of spam at the edge. No form is 100% spam-proof forever, but layered filtering removes the overwhelming majority with no work on your side.
Does it use a CAPTCHA or reCAPTCHA?
No. There is no CAPTCHA, no reCAPTCHA checkbox, and no "select all the traffic lights" puzzle. The defense is entirely server-side, so your visitors never get challenged and your conversion rate doesn't take the hit that CAPTCHAs cause. If you specifically want a CAPTCHA you can still add reCAPTCHA, hCaptcha, or Turnstile on top, but it isn't required to stop spam.
How much spam does it actually block?
Typical sites block 95–99% of spam before it ever reaches an inbox or webhook. The honeypot alone catches roughly 85% of the cheap, high-volume bots; adding the time-trap and the AI content-scoring layer lifts that to the 95–99% range. It works on the very first submission — there is no model warm-up and no script to load.
Is spam protection included on the free plan?
Yes — every layer (honeypot, time-trap, IP rate limit, content scoring, account-wide blocklist, and the Spam folder) is included on the Free 500-submissions/month plan. There is no upsell for spam filtering. Paid plans add notification delivery features and higher submission limits, but the filtering itself is identical at every tier.
Will it ever block real visitors (false positives)?
It's tuned to avoid that, and the edge cases are handled: the honeypot is aria-hidden and tabindex=-1 so screen readers and keyboard users skip it; back-button re-submits and password-manager autofill are accounted for; and slow legitimate forms (job applications, long surveys) can raise the time-trap threshold per form. On the rare occasion something real is filtered, it lands in the dashboard's Spam folder and you recover it in one click — which also trains the filter so similar messages aren't flagged again.
Does it work on WordPress, Wix, Webflow, React, and plain HTML?
Yes. The filtering is server-side, so it doesn't care what rendered the form. Anywhere you can paste HTML — a WordPress Custom HTML block, a Webflow embed, a Carrd element, a Squarespace code block — the spam-free form works without a plugin. For React, Next.js, Vue, or any SPA that submits via fetch(), send an empty botcheck field and a _start_time timestamp and the same protection applies.
Is it GDPR-compliant?
Yes. Because there's no Google reCAPTCHA, there are no reCAPTCHA cookies, no device fingerprinting, and no third-party JavaScript executing in your visitors' browsers — three of the most common GDPR headaches with CAPTCHA-based spam protection. Notification emails are sent from a warmed, SPF/DKIM/DMARC-aligned sender so they land in the inbox rather than a spam folder.
What about sophisticated bots and AI-written spam?
That's exactly why the defense is layered rather than a single trick. A honeypot is blind to headless-browser bots and human-looking, AI-generated messages submitted through the real form — so the AI content-scoring layer analyzes the message itself, and the account-wide blocklist learns from every "mark as spam" click. No system stops a determined attacker writing a bot for your specific form, but layered filtering plus one-click blocking keeps even that under control.