Anti-Spam

Spam stops here.

Every sign-up, comment and form entry gets checked before it reaches you. No CAPTCHAs. Nothing for real people to notice.

Great post! Visit tiny…Does this work with Po… Sign-ups Comments Contact forms Reviews Community posts Your API Anti-Spam 0.94 Spam Delivered12Arrived fast, fits perfect…0.04Quote for 40 oak shelves?0.08jane.cooper@acme.co0.03 Spam caught7k8q2zt91@inbox.example0.89Rank #1 on Google, guarant…0.88CLICK HERE FREE PRIZE WAIT…0.97

How it works

  1. 01

    Send

    Your form or plugin sends each entry to us.

  2. 02

    Check

    We give it a spam score from 0 to 1.

  3. 03

    Decide

    Real people go through. Spam is kept out of sight.

Quiet for visitors. Clear for you.

A clear score for every entry

Every entry gets a spam score from 0 to 1, and shows up in your logs.

  • SpamEarn 400% with our bitcoin planContact form0.94
  • CleanQuote for 40 oak shelves?Contact form0.08

No CAPTCHA, ever

Checks happen on your server. Visitors have nothing to click or solve.

I am not a robotNot needed

WordPress in two minutes

Install the plugin, paste your key. Comments and Forminator forms are covered.

Your forms never break

If we are slow or down, entries go through as normal.

Forms keep working

One request. One clear answer.

Send the entry from your server. Get back a verdict and a spam score.

curl
curl -X POST https://api.anti-spam.store/v1/check \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 3f1c8a2e-5b8d-4c1e-9a7b-3d2e1f0a9b8c" \
  -d '{"source":"form","fields":[{"type":"textarea","value":"Earn 400% with our bitcoin plan"}]}'
Node.js
const result = await fetch("https://api.anti-spam.store/v1/check", {
  method: "POST",
  headers: {
    Authorization: "Bearer " + process.env.ANTI_SPAM_KEY,
    "Content-Type": "application/json",
    "Idempotency-Key": crypto.randomUUID(),
  },
  body: JSON.stringify({ source: "form", fields }),
  signal: AbortSignal.timeout(5000), // also covers reading the answer
})
  .then((res) => (res.ok ? res.json() : null))
  .catch(() => null); // if we do not answer in time or the answer cannot be read, let the entry through
if (result && result.status === "checked" && result.is_spam === true) {
  // mark the entry as spam
}
200 OK
{
  "detection_id": "6f1c2a9e-5b8d-4c1e-9a7b-3d2e1f0a9b8c",
  "status": "checked",
  "spam_probability": 0.94,
  "is_spam": true
}

Simple pricing

Start free. Upgrade when you need more checks.

Free

For a small site

$0/ month
  • 1,000 checks a month
  • 1 site
  • WordPress plugin and API
  • Logs kept 7 days

Business

For agencies and bigger sites

$49/ month
  • 100,000 checks a month
  • Unlimited sites
  • WordPress plugin and API
  • Logs kept 1 year
  • Weekly summary email

Questions

Something else on your mind?

Do my visitors see anything?

No. The check runs between your server and ours after the form is sent.

What data do you receive?

Only what you send: the text of the entry and the details sent with it, such as name and email, plus your site and page title. Read the privacy page for details.

What happens if you are down?

Your forms keep working. Entries go through unchecked until we are back.

What if I go over my plan?

Nothing breaks. Extra entries go through unchecked until your plan resets or you upgrade.

Protect your first site today

Free plan. No card needed.

Start free