Form spam protection
Incoming submissions
- deals.outreach@mailbox-7.co
- seo.partners@inbox-92.net
- dana.okafor@example.com
- webteam@studio-offers.co
- growth@rank-first.biz
Five submissions arrive.
The filter
One passes. Four held, excluded from counts.
Dana Okafor
How this was put together: tools were selected from the options a small service business actually encounters on a WordPress, Webflow or Squarespace site, then sorted by the layer they operate at rather than by feature count. Pricing and detection claims are as published by each vendor in 2026. Lead Source is our own product and appears with the same limits stated as every other entry.
No single tool covers form spam, because the tools work at four different layers and each answers a different question.
- Free and immediate: a honeypot field, a time to submit check, and Cloudflare Turnstile. Covers the crude automated end at no cost.
- Junk in a language or country you do not sell to: OOPSpam or CleanTalk, using the geographic controls rather than the scoring.
- Dead numbers and bounced addresses: Clearout Form Guard, or NeverBounce for email alone.
- Filtering a browser cannot switch off: Basin, running server side.
- Junk reaching your lead reporting and your ad conversions: none of the above fix that. You need filtering inside the form, so the junk is never counted.
What is the best anti-spam tool for web forms?
There is no single best one. Anti-spam tools for web forms work at four layers: challenge tools that ask whether a human is present, reputation filters that ask whether the content looks like known spam, validation services that ask whether the details are real, and form backends that decide what happens to a submission that fails. Most sites run three tools from the first layer and nothing from the other three, which is why the junk keeps arriving.
Why your current setup is not working
You added reCAPTCHA. The junk kept coming. You added a honeypot plugin and it went quiet for a fortnight. Now there is a captcha, a plugin and a validation service running on the same contact form, you still get three SEO pitches before lunch, and you have started skimming enquiries instead of reading them.
That last part is the expensive bit. The day you stop trusting your own inbox is the day you start missing real jobs in it. If the junk is arriving with plausible names and real looking addresses, the reason is usually not your captcha, and we have covered that separately in why am I getting fake leads.
Why the advice you followed in 2022 stopped working
The tools most sites run were designed for a web where a bot was a crude script hitting your form endpoint from one address. That web is gone.
Thales, which publishes the Imperva Bad Bot Report, found that automated traffic made up 53 percent of all web traffic in 2025, with bad bots alone at 40 percent and human traffic down to 47 percent. The same report logged a twelve-fold rise in AI-driven attacks, and found 41 percent of bot attacks presenting as Chrome so they look like an ordinary visitor.
Challenges did not keep up. A 2024 paper from researchers at ETH Zurich, presented at COMPSAC, reported solving reCAPTCHA v2 image challenges at a 100 percent rate using an off-the-shelf object detection model. DataDome puts the share of passed reCAPTCHAs that were actually completed by bots at around half. Solver farms publish price lists: Prosopo tracked reCAPTCHA v2 solves at roughly 50 cents to a dollar per thousand in 2026, with v3 tokens a little higher.
Read that as a price, not a defence. A captcha is a toll booth. At a dollar per thousand, anyone with a commercial reason to submit your form has already paid it and moved on.
Meanwhile the bill went the other way. Google cut the reCAPTCHA free tier from one million assessments a month to ten thousand, after which it moves to paid tiers. Plenty of sites are now paying for verdicts that farms bypass for less than the coffee that paid for them.
None of this means captchas are useless. It means a captcha is one layer, it is not the layer, and it is the wrong one to reach for first.
The economics
Cost to bypass
- One reCAPTCHA v2 solve
- $0.001
- One thousand solves
- $1
Value of one bypass
- One SEO pitch in front of a business owner
- One fake lead counted in that business’s reporting
The four layers, and the question each one answers
Every tool below sits in one of four layers. Each layer answers a different question, and a tool cannot answer a question its layer does not ask.
Layer 1. Challenge. Is a human present?
Layer 2. Reputation and content. Does this look like spam we have seen before?
Layer 3. Field validation. Are these details real?
Layer 4. The form backend. What happens to a submission that fails?
The four layers
- 1ChallengeIs a human present?
- 2Reputation and contentDoes this look like spam we have seen before?
- 3Field validationAre these details real?
- 4The form backendWhat happens to what we catch?
The reason your stack is not working is almost always that you bought three tools from layer 1 and none from layers 2 to 4. A captcha, a second captcha and a honeypot all answer the same question three times, and a real person paid to type an SEO pitch into your form answers it correctly every time.
Layer 4 is the one nobody shops for, and it is the one that decides what form spam costs you. More on that below.
Layer 1. Challenge tools
These ask whether a human is present. Useful as a last resort, wrong as a first move.
Google reCAPTCHA v2 and v3
The default. v2 shows a checkbox or an image grid; v3 runs invisibly and returns a risk score you act on yourself. Free to ten thousand assessments a month, paid above that. Stops crude scripts. Does not stop solver farms, does not stop vision models on the v2 fallback, and tells you nothing about whether the details submitted are real. If a captcha is your main defence, this is the one being bypassed.
hCaptcha
A privacy-oriented alternative to reCAPTCHA with a similar challenge model and a free tier. Better data posture, same structural weakness: farms price hCaptcha solves in the same band as reCAPTCHA.
Cloudflare Turnstile
Free, invisible, no puzzle for the visitor, and it runs on browser and network signals rather than an image test. This is the best of the challenge layer for most small sites, and if you are going to run one captcha, run this one. It raises the cost of bypass without taxing your customer. It still cannot tell a real enquiry from a fake one submitted by a real person.
Friendly Captcha and Prosopo
Proof-of-work based. Instead of asking the visitor to solve something, they make the submitting machine do a small piece of computation, which is cheap once and expensive at volume. Good fit if you need a visible compliance story with no user friction. Same limit as every other layer 1 tool.
Where the whole layer gives up. It authenticates presence. It never authenticates intent. The moment the spam is typed by a person, or relayed through a farm, layer 1 is spent.
Layer 2. Reputation and content filters
These ask whether the submission looks like spam that has been seen before, on your site or elsewhere. This is the layer most sites are missing.
Akismet
The best-known content filter, originally for WordPress comments, now widely used on form submissions. Scores content against a very large corpus of known spam. Strong on obvious junk, and it has the network effect that plugins lack. Pricing rises with the number of sites, and it is an API call on every submission, which adds latency.
CleanTalk
Similar model at lower cost, with more platform coverage and IP and email blocklists on top of content scoring. Roughly a low-hundreds annual spend for a small portfolio. Same latency trade-off as Akismet, since every submission is checked against a remote database.
OOPSpam
Machine learning scoring plus country and language filtering, run server side so the visitor solves nothing. The country and language controls are genuinely useful for a service business with a fixed service area, and they are the single fastest way to cut volume if your spam is arriving in a language you do not trade in.
Antispam Bee
Free, open source, WordPress only, runs entirely on your own server with no external calls. Good privacy posture and no vendor. Weaker detection than a networked filter, because it only knows what has happened to you.
Cloudflare WAF and IP reputation lists
Sits in front of the site and rejects traffic from data centres, known proxy networks and addresses on reputation lists such as Spamhaus. Effective against volume attacks and useless against a single well-behaved submission. Worth having if you are already on Cloudflare.
Where the layer gives up. A filter can only recognise a pattern once that pattern has reached its database. It also cannot tell you whether the phone number is answerable. And every one of these tools works on a form you already run, which means it makes a judgement after the submission exists.
Layer 3. Field validation
These ask whether the details are real. This is the layer that stops junk data rather than junk messages, and the two are not the same problem.
NeverBounce, ZeroBounce and BriteVerify
Real-time email verification. Check syntax, domain, MX records and mailbox existence at the point of submission, and flag disposable addresses. Solid at their job. Email only, and every one of them is an API integration you own and maintain.
Clearout Form Guard
Validates email, phone and name together at the point of entry rather than one field at a time, which removes the coordination problem of running three vendors. Broad form builder support. Still validation only, so a real address attached to a fake intent passes cleanly.
Phone validation services
Check that a number is in a valid format and currently active. Worth it if your sales team calls first, because a dead number costs a dial and a follow-up attempt before anyone notices.
Double opt-in
Not a tool, a pattern, and the cheapest one on this list for newsletter signups. Send a confirmation email and activate nothing until it is clicked. Costs you some genuine signups to drop-off, and stops a real bot with a real mailbox from nothing at all.
Where the layer gives up. Validation confirms the details exist. It does not confirm anyone wants what you sell. A competitor filling your quote form with their own real email passes every check on this list.
Layer 4. Form backends with filtering built in
These are the tools where the filtering is part of the form rather than bolted to it. That difference matters more than any feature comparison, because a check that lives inside the form can act before a submission exists, and a check bolted to someone else’s form can only judge one that already does.
Basin
A form backend that runs server side, so the checks cannot be disabled in the browser. Content scoring, duplicate detection, email validation and burner domain filtering, plus country, language and origin domain controls. Spam does not count toward your plan limits, and you can route completed, abandoned and spam submissions to different webhooks. If you want a developer-friendly form endpoint that handles filtering for you, this is a good one.
Formspree, Netlify Forms and similar endpoints
Baseline filtering plus honeypot support, bundled with a form endpoint you were going to need anyway. Lighter filtering than Basin, fine for a low-volume contact form.
Native form builder filtering
Gravity Forms, Jotform, WPForms, Fluent Forms and the rest all ship some combination of honeypot, captcha integration and keyword blocking. Configure what is there before buying anything. It is free and it catches the bottom tier of junk. The settings that actually help differ by tool, which we have gone through for Jotform spam submissions and for Gravity Forms spam.
Lead Source
Filtering happens inside the form, invisibly, with no widget on the page and no captcha unless you ask for one. Anything caught is held rather than deleted, excluded from your lead counts, and restorable in one click with its source and page journey intact. Because a pattern caught on one site running Lead Source is recognised on every other site running it, a new tactic only has to be new once. We cover what we do and do not cover on the form spam protection page.
How do I stop form spam for free?
Four of these cost nothing and remove a real share of the volume. Do them first.
Honeypot field
A hidden input that a human never sees and a crude bot fills in anyway. Give it an ordinary name like company_url or secondary_phone, never the word honeypot, and discard anything that arrives with it populated. Free, invisible to customers, beaten by any bot that parses your HTML properly.
Time to submit
Record when the form loaded and check the gap at submission. Nobody fills in a quote request in under three seconds. Reject anything that does.
Rate limiting
Cap submissions per address per hour at your form’s action URL. If you run Cloudflare, this is a rule in the dashboard rather than code. It ends floods and does nothing about a slow drip.
Origin and referrer checks
Reject posts that did not come from your own domain. Stops the attacks that skip your page entirely and hit the endpoint directly, which is how most volume spam actually arrives.
Together these four handle the crude end of the problem for nothing. What they will not touch is the polite, well-formed, entirely human SEO pitch, and that is the one that gets counted as a lead.
The comparison
| Tool | Layer | Cost | Stops | Does not stop |
|---|---|---|---|---|
| reCAPTCHA v2 / v3 | Challenge | Free to 10k/mo, paid above | Crude scripts | Solver farms, vision models, human spam |
| hCaptcha | Challenge | Free tier | Crude scripts | Farmed solves, junk data |
| Cloudflare Turnstile | Challenge | Free | Most automation, no user friction | Human spam, fake details |
| Friendly Captcha / Prosopo | Challenge | Free and paid tiers | Volume automation | Individual human submissions |
| Akismet | Reputation | Per site, scales up | Known spam content | New patterns, invalid contact details |
| CleanTalk | Reputation | Low hundreds per year | Known spam, bad IPs | Unseen patterns, adds latency |
| OOPSpam | Reputation | Paid tiers | Scored spam, wrong country or language | Well-formed local spam |
| Antispam Bee | Reputation | Free | Basic patterns, privately | Anything it has not seen itself |
| Cloudflare WAF | Reputation | Free and paid | Data centre and proxy traffic | Single clean submissions |
| NeverBounce / ZeroBounce / BriteVerify | Validation | Per verification | Undeliverable and disposable email | Phone, name, intent |
| Clearout Form Guard | Validation | Paid tiers | Bad email, phone and name together | Real details, fake intent |
| Double opt-in | Validation | Free | Unconfirmed addresses | Bots with real mailboxes |
| Basin | Backend | Paid tiers | Most junk, server side | Enquiries on forms built elsewhere |
| Formspree / Netlify Forms | Backend | Free and paid | Baseline junk | Determined or human spam |
| Lead Source | Backend | Free to start | Junk at the form, and in your numbers | Forms built in another tool |
What happens to spam after it is caught, and why it costs the most
Every tool above is sold on what it blocks. Almost none are sold on what happens next, and that is where form spam actually costs a business money.
A caught submission has three possible fates.
What happens to what you catch
Outcome 1
Deleted
You never see it. Fine until the day it was a customer with an unusual domain, and you never learn it happened.
Outcome 2
Let through
It reaches your inbox, and your reporting. It attaches to a source, inflates that total, and moves next month’s money.
Outcome 3
Held
Quarantined, excluded from the counts, reviewable, and one click from restored with its source intact.
Deleted. You never see it. That is fine until the day the thing deleted was a customer with an unusual email domain, and you never learn it happened.
Let through. Now it lands in your inbox, which you already knew, and it lands in your reporting, which you may not have thought about. It attaches to whatever source brought it. It raises that channel’s lead total. It pulls that channel’s cost per lead down. Next month you fund the channel that produced the most junk, because on the report it produced the most leads.
One month, one account
Counted as leads
After filtering
Held. Quarantined, excluded from the counts, reviewable, restorable. A mistake costs you a click instead of a job.
The second fate is the expensive one, and it gets worse if you run paid ads. When a spam enquiry fires a conversion event, you are not just misreading a report. You are teaching the ad platform what a good lead looks like, and it will go and find you more traffic that looks exactly like the traffic that produced the fake one. We have written up that loop separately in why spam leads make your Google Ads worse over time, and the reporting damage in what spam leads do to your marketing numbers.
This is the question to ask any vendor on this page. Not how much do you block. What happens to what you catch, and does it reach my numbers.
What to actually pick
You run WordPress and get a handful of junk enquiries a day. Turn on your form plugin’s honeypot, add Cloudflare Turnstile, and stop. That is free and it covers the crude end.
The junk is arriving in languages or countries you do not sell to. OOPSpam or CleanTalk, and use the geographic and language controls rather than the scoring. That is the fastest cut available.
Your sales team is burning time on dead numbers and bounced addresses. Add a validation layer. Clearout Form Guard if you want email, phone and name in one integration, NeverBounce or ZeroBounce if email is the only problem.
You are a developer and you want the filtering to run somewhere a browser cannot touch. Basin.
You are buying ads and you do not trust your lead numbers. That is a different problem from the one the other four solve, and adding another filter to the same form will not fix it. You need the junk stopped before it is counted, not flagged after.
What to actually pick
- WordPress, a handful of junk enquiries a dayPlugin honeypot plus Cloudflare Turnstile
- Junk arriving in languages you do not trade inOOPSpam or CleanTalk, geographic controls
- Dead numbers and bounced addressesClearout Form Guard, or NeverBounce
- Filtering a browser cannot switch offBasin, running server side
- You buy ads and do not trust your lead numbersFiltering inside the form. Never counted.
Where Lead Source fits
We are not a form builder, and we are not going to tell you we can filter a form we have no code inside. If your enquiries come through a Typeform or a Gravity Forms build, Lead Source will attach the real source, campaign and page journey to every one of them, and the spam filtering is not part of that.
What we do is different. On a Lead Source form, the filtering is part of the form. There is no widget, no checkbox, nothing for your customer to solve, and no per-form setup. Suspected spam is held rather than deleted, excluded from your lead counts and your source totals, and one click from being restored with everything intact. A pattern caught on one site running Lead Source is already known when it reaches yours.
The point is not that we block more. The point is that the junk never reaches the numbers you spend against, so the money moves on real enquiries only.
Stop counting junk as leads. Spam held at the form, never counted in your numbers, and nothing for your customer to solve.
Start freeFree to start · no card · 5-minute install