Spam protection that tells you why.

Twelve checks run on your own server and add up to a score. Two thresholds decide: hold it for you, or refuse it. And the log names the check that fired — so when it gets one wrong, you can see it and put it back.

100% localNo accountEvery block explainedOne-click “Not spam”Comments, login & formsHeld messages never lostTurnstile, reCAPTCHA or hCaptcha

Free forever. No account, no card. Sends nothing anywhere unless you choose a challenge provider and enter your own keys.

12

independent checks, every one of them running on your own site.

🔍
Every block has a reason“Contains 5 links, more than the 2 allowed” — not just “spam”.
↩️
One click puts it backReleases the message and allow-lists the sender, so it cannot happen twice.
📥
A held message is never lostThe whole message stays in the log, and one click sends it to your inbox with the sender as reply-to.
🛒
Checkout is never guardedA false positive there costs a sale. We do not take that risk.

Why Lynbro Antispam Guard

No subscription

Akismet needs a paid plan the moment your site is commercial. Every check here runs on your own server, on every submission, forever.

Mistakes are visible

Every anti-spam tool guesses wrong sometimes. The ones that cost you customers are the ones that guess wrong invisibly — so ours shows you the message, the reason and a button to release it.

Nothing leaves your site

No submission is shipped off for a third party to judge. The throwaway-domain list ships inside the plugin and is read from disk.

Everything you need — included, free

No "Pro" tier, no nag screens. The features other plugins paywall are here from day one.

🪤
Hidden field

A field real visitors never see. Only a script fills it in.

🔑
Signed form token

Fetched when the page loads, so it survives a full-page cache — and a bot posting straight to your endpoint arrives without one.

⏱️
Honest time trap

The clock starts when your server issued the token, not when the browser claims it did.

🔗
Links, words and markup

Link stuffing, your own blocked-word list, and script tags in a plain message field.

📬
Throwaway addresses

A bundled list of disposable-mail domains, sub-domains included, checked locally.

🔃
Repeats and floods

The same text arriving over and over — counted from the third, so pressing send twice is never held against anyone — and too many submissions from one address.

🌐
Allow and deny lists

An address, a whole domain, an IP or a CIDR range. An allow-list hit ends the checks at once.

🧩
Works with your forms

Comments, login, registration, lost password, Contact Form 7, WPForms, Forminator, Fluent Forms, Formidable Forms, Ninja Forms, Elementor and WooCommerce accounts.

☁️
A challenge, if you want one

Cloudflare Turnstile, Google reCAPTCHA v3 or hCaptcha — optional, off by default, on your own keys, with a key test. If the provider is down, the submission is scored on the local checks alone.

📥
Held messages reach you

When a contact form message is held, the form sends you nothing. Here the whole message waits in the log, opened for you, with “Send to my inbox” and “Reply by e-mail” — and a small counter in the menu instead of nag banners.

👋
Regulars are not stopped

Someone who already has an approved comment starts the next one a few points in credit, so a blocked script does not send a regular reader to moderation.

📂
Privacy tools built in

Tools → Export and Erase Personal Data include the log, and the Policy Guide gets a paragraph describing what is stored. A switch in wp-config.php turns everything off if you ever need it.

Free here — paid almost everywhere else

The two tools most WordPress sites reach for — and what each of them asks of you in return.

FeatureLynbro Antispam GuardAkismet freeSimple Cloudflare Turnstile
Works with no third-party account at all✓——
Free to use on a commercial site✓—✓
Submissions are judged on your own server✓——
Local checks beyond a challenge widget✓——
Every block names the check that fired✓——
One click releases a mistake and allow-lists the sender✓——
Thresholds you set yourself (hold vs refuse)✓——
Comments, login and contact forms✓✓✓
A held contact-form message can still be read and answered✓——

Requirements

6.2+WordPresstested up to 7.1
7.4+PHP
GPLv2+License
7Languages

FAQ

Does it need an account or an API key?

No. Every check runs on your own server. A challenge provider — Cloudflare Turnstile, Google reCAPTCHA v3 or hCaptcha — is the one optional extra, and it uses your own keys.

Will it block real customers?

The defaults are deliberately forgiving. A visitor who types slowly, or whose browser blocks our script, is held rather than refused; someone who presses send twice because nothing confirmed the first attempt is not stopped at all; and signing in, registering or asking for a new password are only ever refused outright, never held. Whatever is held or refused shows up in the log with the reason, and one click puts it back.

Does it work behind a cache or a CDN?

Yes. The page markup carries no timestamp and no per-visitor value — the token is fetched separately when the page loads, so the same cached HTML works for everybody. That is usually the first thing a time trap breaks on.

What if a visitor has JavaScript switched off?

Their submission scores as “no token”, which by default holds it for review rather than refusing it, and never keeps them from signing in or registering. If your whole site’s REST API is unreachable, the overview screen says so in plain words — so you hear it from the plugin, not from a customer who never got an answer.

Why is WooCommerce checkout not protected?

Because a shopper who has filled a cart and reached for their card is not the risk worth taking. A false positive at checkout costs a sale, not a comment. Registration, log in and lost password are guarded.

Does it work with my form plugin?

Contact Form 7, WPForms, Forminator, Fluent Forms, Formidable Forms, Ninja Forms and Elementor forms work out of the box. For anything else — Gravity Forms included — there are two functions to call: one in the form, one on submit.

A contact form message was held. Where is it?

In the Anti-Spam log, opened in full. “Send to my inbox” e-mails it to you with the sender as reply-to, “Reply by e-mail” starts an answer, and “Not spam” allow-lists the sender. A counter next to Anti-Spam in the menu shows how many arrived since you last looked.