Stop form spam without a CAPTCHA.

Bot403 is an invisible bot shield for HTML forms: one script tag makes the browser solve a small proof of work, and your server checks it with one call.

A protected formorders.maisonlefevre.fr/contact
checked by Bot403, nothing to click
challenge
issued 09:41:06 UTC, difficulty medium
solved
in 312 ms, in a Web Worker, while Mira typed
verify
ok, 9 ms, counted 1 of 5,000 this month

5,000 checks a month, free. No card required.

Up and running in five minutes

Copy the snippets, or ask your AI assistant to do it with the MCP server.

The script adds a hidden field with the solved challenge to every form. Full guide

contact.html
<!-- 1. Load the script once, with your public key -->
<script src="https://bot403.com/v1/bot403.js" data-bot403-key="pk_live_YOUR_PUBLIC_KEY" async></script>

<!-- 2. Keep your form as it is. Every form on the page is protected -->
<form action="/contact" method="POST">
  <input type="email" name="email" required>
  <textarea name="message" required></textarea>
  <button type="submit">Send</button>
</form>

<!-- 3. On your server, post the _bot403 field to /api/v1/verify. See the server tabs. -->
server.mjs
// npm install @bot403/node express
import express from "express";
import { Bot403 } from "@bot403/node";

// Keep the secret key on the server: BOT403_SECRET_KEY=sk_live_YOUR_SECRET_KEY
const bot403 = new Bot403({ secretKey: process.env.BOT403_SECRET_KEY });
const app = express();
app.use(express.urlencoded({ extended: false }));

app.post("/contact", async (req, res) => {
  // 1. Post the whole form. Bot403 reads the _bot403 field and the honeypot field
  const result = await bot403.verifyForm(req.body);

  // 2. Refuse when ok is false, except for reason "quota"
  if (!result.ok && result.reason !== "quota") return res.status(400).send("Try again");
  res.send("Thanks.");
});

app.listen(3000);

Who it fits

Best for

  • Contact, sign-up and comment forms on small and medium sites.
  • Sites that must keep cookies and Google or Cloudflare scripts off their pages.
  • Developers who can add one server call in any language.

Not for

  • DDoS attacks, scrapers or traffic floods.
  • Forms with no server step to make the verify call.
  • Spam that a person types by hand.

Compared with reCAPTCHA and Turnstile

Your visitors' data stays with a small EU provider, not with Google or Cloudflare. Read more on the compare page.

TopicBot403Google reCAPTCHACloudflare Turnstile
Pricefree for 5,000 checks a month, then from €3 a monthfree for 10,000 a month, then from $8 a monthfree, larger plans on request
Cookiesnone, nothing to add to your cookie bannersets the _GRECAPTCHA cookiecan set a pre-clearance cookie
Who sees your visitorsonly Bot403, hosted in the EU; no IP addresses stored, no cookies, no trackingGoogleCloudflare
Setupone script tag and one server call; sign in with an emaila Google Cloud project with billinga Cloudflare account

Stop spam, not customers.

The CAPTCHA your visitors never see.

Get started free