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

needBoiler replacement
sourceGoogle Ads
statuscounted as a lead
Real, sourced, counted. The other four never reach the number.

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.

The short answer

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
A captcha is a toll, not a wall. Solver pricing as published by commercial solving services in 2026.

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?
Most stacks buy three tools from layer 1 and none from layers 2 to 4.

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

ToolLayerCostStopsDoes not stop
reCAPTCHA v2 / v3ChallengeFree to 10k/mo, paid aboveCrude scriptsSolver farms, vision models, human spam
hCaptchaChallengeFree tierCrude scriptsFarmed solves, junk data
Cloudflare TurnstileChallengeFreeMost automation, no user frictionHuman spam, fake details
Friendly Captcha / ProsopoChallengeFree and paid tiersVolume automationIndividual human submissions
AkismetReputationPer site, scales upKnown spam contentNew patterns, invalid contact details
CleanTalkReputationLow hundreds per yearKnown spam, bad IPsUnseen patterns, adds latency
OOPSpamReputationPaid tiersScored spam, wrong country or languageWell-formed local spam
Antispam BeeReputationFreeBasic patterns, privatelyAnything it has not seen itself
Cloudflare WAFReputationFree and paidData centre and proxy trafficSingle clean submissions
NeverBounce / ZeroBounce / BriteVerifyValidationPer verificationUndeliverable and disposable emailPhone, name, intent
Clearout Form GuardValidationPaid tiersBad email, phone and name togetherReal details, fake intent
Double opt-inValidationFreeUnconfirmed addressesBots with real mailboxes
BasinBackendPaid tiersMost junk, server sideEnquiries on forms built elsewhere
Formspree / Netlify FormsBackendFree and paidBaseline junkDetermined or human spam
Lead SourceBackendFree to startJunk at the form, and in your numbersForms 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.

A mistake costs you a click instead of a job.

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

Google Ads
Meta
Organic

After filtering

Google Ads
Meta
Organic
Same month. One channel was mostly junk.

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.
The last row is a different problem. Another filter on the same form will not fix it.

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 free

Free to start · no card · 5-minute install