Key takeaways

  • Bot signups come from spam scripts, form abuse and attacks using real people's addresses.
  • A honeypot field is invisible to humans and catches simple bots for free.
  • Invisible or low-friction CAPTCHA stops more advanced bots with little user impact.
  • Real-time verification blocks invalid and disposable addresses that bots often use.
  • Double opt-in is the final safety net: unconfirmed signups never receive marketing.
In this guide
  1. Why bots sign up to your forms
  2. Signs your forms are under attack
  3. The protection layers compared
  4. Layer 1: The honeypot field
  5. Layer 2: Time checks
  6. Layer 3: CAPTCHA, preferably invisible
  7. Layer 4: Rate limiting
  8. Layer 5: Real-time email verification
  9. Layer 6: Double opt-in
  10. Cleaning up after an attack
  11. Recommended setup by form type
  12. Signs that it is not bots, but something else
  13. Bot protection for popular platforms
  14. The cost of doing nothing
  15. Keeping protection accessible
  16. Reviewing protection over time
  17. In one minute
  18. Related guides
  19. Checklist
  20. Frequently asked questions

Why bots sign up to your forms

Fake signups are not random. They usually come from one of these sources:

  • Spam bots that fill every form they find, hoping to post links or test vulnerabilities.
  • Subscription bombing attacks that sign up a victim's real address on many sites at once to flood their inbox; see subscription bombing.
  • Fraud on free trials, coupons and referral programs.
  • Competitors or pranksters submitting junk, more rarely.

The result is the same: invalid and disposable addresses, real addresses of people who never asked for your emails, bounces, complaints and polluted data.

Signs your forms are under attack

  • A sudden spike in signups at unusual hours, without a matching traffic increase.
  • Names or fields filled with random characters, or the same text in every field.
  • Many signups from the same IP ranges, or from countries unrelated to your audience.
  • Very low confirmation rates if you use double opt-in.
  • Rising bounces on welcome emails and complaints from people who "never signed up".

The protection layers compared

LayerWhat it stopsFriction for real usersEffort
Honeypot fieldSimple botsNoneLow
Time check (minimum fill time)Bots that submit instantlyNoneLow
Invisible / score-based CAPTCHAMost automated botsVery lowLow to medium
Visible CAPTCHA challengeAdvanced botsNoticeableLow
Rate limitingBursts from the same sourceNoneMedium
Real-time email verificationInvalid and disposable addressesNone for valid addressesLow
Double opt-inMarketing to unconfirmed addressesOne extra clickLow

No single layer is enough. Combining several gives strong protection with almost no friction for real people.

Layer 1: The honeypot field

A honeypot is an extra field hidden from humans with CSS. Real visitors never see it, so they leave it empty. Simple bots fill every field, including the hidden one. Any submission with the honeypot filled is rejected silently.

<div style="position:absolute;left:-9999px" aria-hidden="true">
  <label for="website">Leave this field empty</label>
  <input type="text" id="website" name="website" tabindex="-1" autocomplete="off">
</div>

On the server, reject the submission if website is not empty. Use a field name that looks natural to bots, add tabindex="-1" so keyboard users do not land in it, and aria-hidden so screen readers skip it.

Layer 2: Time checks

Humans need a few seconds to type an email address. Many bots submit in under a second. Record the time the form was loaded (in a hidden field or server session) and reject submissions that arrive impossibly fast.

Layer 3: CAPTCHA, preferably invisible

Modern CAPTCHA services can run in the background and score how human a visitor looks, only showing a challenge when something is suspicious. Visible puzzles stop bots but also cost you real signups, especially on mobile. Start with an invisible or score-based option and add visible challenges only if attacks continue.

Layer 4: Rate limiting

Limit the number of signups accepted from the same IP address, or for the same email address, within a short period. This blocks bursts and makes subscription bombing through your form much harder. Many form tools and web application firewalls offer this as a setting.

Layer 5: Real-time email verification

Bots often use invalid, random or disposable addresses. Real-time verification refuses them before they are saved, and before you send any confirmation email that would bounce. Setup details are in real-time email verification for signup forms, and disposable domains are covered in disposable email addresses.

Layer 6: Double opt-in

With double opt-in, an address only joins your marketing list after its owner clicks a confirmation link. Bots and attacked addresses do not confirm, so they never receive your newsletters. It is the final safety net. The confirmation email itself still goes out, which is why the layers above matter: they reduce how many confirmation emails reach the wrong people.

Cleaning up after an attack

  1. Identify the attack window: the date and time range of the spike.
  2. Export signups from that window with IP, source and confirmation status if available.
  3. Remove unconfirmed signups from the window. Verify the rest.
  4. Suppress invalid, disposable and suspicious addresses so they cannot return.
  5. Add the missing protection layers to the form that was abused.
  6. Watch complaints over the next days; people who were signed up without consent may report your emails.
FormRecommended layers
Newsletter signupHoneypot, invisible CAPTCHA, real-time verification, double opt-in for risky traffic
Lead magnet downloadHoneypot, real-time verification (block disposable), rate limiting
Free trial / account creationCAPTCHA, verification, rate limiting, email confirmation
Giveaway entryAll layers, including double opt-in
Contact formHoneypot, invisible CAPTCHA, time check

Signs that it is not bots, but something else

Not every strange signup is a bot. Before adding friction, check these alternatives:

  • A viral post or partner mention can create a real spike from new countries.
  • Security scanners at companies sometimes follow links in emails, including confirmation links.
  • A broken form that submits twice or saves test values.
  • Internal testing by your team or agency on the live form.

Look at traffic sources and timing. Real spikes come with real visits; bot spikes often arrive without matching page views.

PlatformWhat to check
WordPress form pluginsBuilt-in honeypot and CAPTCHA options, plus email verification plugins
Email platform formsCAPTCHA setting and double opt-in option in the form builder
Shop checkoutsPlatform fraud settings and rate limits on account creation
Custom formsServer-side honeypot, time check, rate limiting and API verification

The cost of doing nothing

Bot signups seem harmless at first: a few junk rows in a database. The problems appear later: bounces on welcome emails, complaints from people who were signed up without consent, inflated contact counts that raise your email platform bill, and engagement rates that fall for no visible reason. Protecting forms early is much cheaper than cleaning and repairing reputation afterwards.

Keeping protection accessible

Bot protection must not lock out people with disabilities. Prefer invisible CAPTCHA over visual puzzles, make sure honeypot fields are hidden from screen readers with aria-hidden and excluded from keyboard navigation, and always provide clear error messages. Test your form with keyboard-only navigation after adding protection.

Reviewing protection over time

Attackers adapt. Every few months, check your signup data for signs of abuse: unusual spikes, low confirmation rates, odd names. If simple bots return, a honeypot may have been recognized; change its field name. If more advanced bots get through, raise your CAPTCHA sensitivity or add rate limits. Protection works best as a routine, not as a one-time setup.

In one minute

Combine invisible layers first (honeypot, time check, invisible CAPTCHA, rate limits), filter bad addresses with real-time verification, and use double opt-in as the final safety net for risky sources. This stops most bots while real visitors notice nothing, and it keeps your list, your costs and your reputation clean.

Bots often leave behind toxic addresses and inflate your bounce rate. Clean up regularly after strengthening your forms.

Checklist

  • Honeypot field and time check on every form
  • Invisible CAPTCHA enabled
  • Rate limiting by IP and by address
  • Real-time verification blocking invalid and disposable addresses
  • Double opt-in on high-risk sources
  • Signup spikes monitored, with a clean-up procedure ready

Bots are one source of toxic addresses; cleaning them out regularly is part of a healthy list.

Frequently asked questions

What is a honeypot field?

A form field hidden from humans with CSS. People do not fill it; simple bots do. Any submission with that field filled is rejected.

Do CAPTCHAs reduce signups?

Visible puzzles can. Invisible or score-based CAPTCHAs have little impact on real users and are usually a good compromise.

Why do bots sign up with real email addresses?

Sometimes to attack the owner of the address by flooding their inbox (subscription bombing), or to test forms before abuse.

How do I clean bot signups already in my list?

Filter by signup date and source around the spike, verify those addresses, and remove unconfirmed or suspicious entries.

Is double opt-in enough on its own?

It prevents bots from receiving your marketing, but confirmation emails to fake or attacked addresses still create bounces and complaints. Combine it with bot protection.

Written by Badr Zemrani

Badr is an email marketing and SEO consultant with more than 15 years in digital marketing. He runs BZCOM, a digital agency in Casablanca, Morocco, where he plans, sends and troubleshoots email campaigns for businesses every week. SendCleanly is where he shares what actually works.

More about Badr · LinkedIn