Stop spam without frustrating your visitors

Create your CleanTalk account and start blocking spam — no CAPTCHA challenges and no impact on visitors.

Security Block Lists

CleanTalk Account

No credit card required • Setup takes less than a minute • Your temporary password will be sent by email.

Self-Hosted Anti-Spam in 2026: Why Proof-of-Work CAPTCHAs Are Not Enough and What On-Prem Protection Needs

·


TL;DR. Self-hosted protection is having its moment: Cap has 8,013 GitHub stars after 21 months, ALTCHA’s npm packages are downloaded 1.49 million times a month, Anubis collected 23,427 stars in a year and a half. Every one of these tools runs on your server and keeps your users’ data at home. Every one of them also shares the same limit: a proof-of-work CAPTCHA proves that a browser spent some CPU, and nothing else. It cannot tell a new spammer from a new customer, and it does nothing against a person who types the spam by hand. Self-hosted anti-spam needs the one thing a single server cannot produce – a reputation database fed by many sites – and a way to keep it updated without sending request data anywhere. That is what CleanTalk Self-Hosted is built for.

Why self-hosted is growing

Three things happened at once. GDPR made every cloud call a data-processing question, and in Germany the Munich court’s Google Fonts decision (LG Munchen I, 20.01.2022, 3 O 17493/20) turned “we send the visitor’s IP to a US service” into a compensation claim. Google made reCAPTCHA a paid product for larger sites. And the AI-crawler wave of 2025-2026 pushed site owners to block bots at their own edge instead of trusting a vendor.

The result is visible in the numbers:

ProjectWhat it isGitHub starsDownloads
Anubis (https://github.com/TecharoHQ/anubis)self-hosted proxy that stops AI crawlers with proof-of-work23,427 (created March 2025)–
Cap (https://github.com/tiagozip/cap)self-hosted CAPTCHA, proof-of-work8,013 (created January 2025)npm: 225,134 / month
ALTCHA (https://github.com/altcha-org/altcha)self-hosted CAPTCHA, proof-of-work2,828npm: 1,491,476 / month; Packagist: 335,847 / month
mCaptcha (https://github.com/mCaptcha/mCaptcha)self-hosted CAPTCHA, proof-of-work2,491Docker Hub: 217,209 pulls
mosparo (https://github.com/mosparo/mosparo)self-hosted form spam filter, rule-based309Docker Hub: 72,877 pulls

For comparison, awesome-selfhosted (https://github.com/awesome-selfhosted/awesome-selfhosted), the catalog of software you can run yourself, has 326,830 stars – and lists exactly one spam filter for web forms. The demand is real, and the shelf is almost empty.

What a proof-of-work CAPTCHA actually checks

Cap, ALTCHA, mCaptcha and Friendly Captcha share one mechanism. The page gives the browser a small cryptographic puzzle; the browser solves it in the background; the solution is sent with the form. A visitor sees nothing, a script that does not run JavaScript fails. That is the whole check.

It is a good check against the dumbest bots, and it has real advantages: no third-party scripts, no tracking, no cookies, full data sovereignty. Cap describes itself as “zero telemetry, no third-party network”; ALTCHA as “no data leaving your control”. That is exactly the point – and exactly the limit. A system that knows nothing about the sender cannot judge the sender.

What it does not check:

  • Who is sending. An email address that was used for spam on 400 other sites yesterday solves the puzzle just like a first-time customer.
  • Where the request comes from. An IP address that is a known spam source passes if the browser does the work.
  • What is being sent. The message text, the links in it, the pattern of the submission are not part of a proof-of-work check.
  • Human spam. A person with a browser solves the puzzle by doing nothing. SEO pitches, link drops, fake listings and fake reviews are typed by people, and a CAPTCHA was never designed to stop them.
  • Headless browsers. A bot that runs a real browser engine computes the proof-of-work like any visitor; the challenge costs it a few milliseconds of CPU.

mosparo takes a different route: it checks the submitted data, IP and User-Agent against rules on your server, without any cloud. It catches more than a puzzle does, but the rules are the ones you write or import, and nobody updates them for you.

What self-hosted anti-spam needs

Put the two halves together and the requirement is clear. On-prem spam protection needs:

  1. A reputation database. Email and IP reputation collected across many sites is the signal that separates a spammer from a stranger. No single site can build it, because a spammer’s second visit to your site is already too late – you needed to know about their first visit somewhere else.
  2. Updates that come in without data going out. The database ages by the hour. The instance has to receive signed, incremental updates on a schedule, through a proxy or an offline bundle – and never send request data back.
  3. Content and behavior analysis. Message text, links, timing, JavaScript signals, headers, submission rate – the layers that catch human spam and headless bots.
  4. A verdict with a reason. “Forbidden. Sender blacklisted” is actionable; “challenge failed” is not. Logs, allow and block lists and per-tenant keys belong on the same server.
  5. A familiar API. If the on-prem instance speaks the same protocol as the cloud, the existing SDKs and CMS plugins work by changing one URL.

This is the gap in the current market. Self-hosted CAPTCHAs have item 2 solved trivially – there is no data to update – and items 1, 3 and 4 missing by design. Enterprise bot-management services have items 1, 3 and 4 and are cloud-only: DataDome’s entry plan is $3,830 per month, and the deployment is SaaS. Friendly Captcha sells “dedicated data centers (e.g. EU only)” from 200 EUR per month and a “self-hosted endpoint option” only in its custom Enterprise plan. ALTCHA Sentinel, the self-hosted edition of ALTCHA, costs 99 to 799 EUR per month – for a proof-of-work server with a dashboard, not for data.

How CleanTalk Self-Hosted works

CleanTalk Self-Hosted is the CleanTalk cloud engine packaged to run inside your infrastructure.

!Self-hosted anti-spam: CleanTalk instance inside your infrastructure, signed updates come in, no user data goes out

  • One Docker image – API, dashboard, database. It runs on a VPS, in Kubernetes or in a private cloud. For teams that prefer not to run anything, the same engine is available as a dedicated instance in an EU data center, used only by you.
  • The reputation database inside the instance – 8,600,000+ spam IPs and emails, the same data that protects 200,000+ CleanTalk-powered websites, delivered in hashed form and licensed for use inside your instance.
  • Signed daily updates – the instance pulls incremental updates of the database and detection logic. That is the only outbound traffic, and it can go through your proxy or arrive as an offline bundle for air-gapped systems.
  • The same API as CleanTalk Cloud – the official SDKs for PHP, Python, Node.js, Go and .NET and the WordPress, Laravel, Drupal and Joomla integrations work with the on-prem endpoint by changing one URL.
  • Verdicts in milliseconds – a local lookup plus analysis, no round trip to a vendor, no per-request fees, unlimited sites and requests per instance.
  • Built for platforms – per-tenant keys and reporting, so one instance protects every site of a hosting provider, CDN or website builder.

!What a self-hosted CAPTCHA checks vs what CleanTalk Self-Hosted checks

Comparison: self-hosted options in 2026


Cap / ALTCHA / mCaptchamosparoCleanTalk Self-Hosted
Runs on your serversyesyesyes
Proof-of-work challengeyesnooptional
Rules on form data, IP, User-Agentnoyesyes
IP and email reputation databasenono8,600,000+ records
Updates of data and logicnomanual rule packsautomatic, signed, daily
Stops human (manual) spamnopartlyyes
Dashboard, logs, allow and block listspartlyyesyes
Multi-tenant keys for platformspartlynoyes
Pricefreefreefrom $99 / month

Based on public documentation of each project as of October 2026.

Who this is for

  • Public sector and regulated industries in the EU. No third-party processor, no data residency question, an audit trail on your own servers.
  • Hosting providers, CDNs and website builders. One instance for every tenant, with an internal API your customers never see. Cap’s production users – a CDN, a privacy product and a research institute – show where self-hosted protection lands first; the same teams are the ones that need the data layer.
  • Communities and marketplaces with user-generated content. Registrations, posts, listings and reviews at scale, including the human spam that passes every puzzle.

If your store or blog runs on WordPress and sending a spam check to the cloud is fine for you, nothing changes: the CleanTalk Anti-Spam plugin remains the simpler option at $12 per site per year. Self-Hosted is for the teams that cannot make that call.

Early access


The pilot is open: a dedicated EU instance from $99 per month or a self-hosted instance from $149 per month, the first three months free for teams that join the pilot and share feedback. Tell us which option you need on the Self-Hosted Anti-Spam page (https://cleantalk.org/self-hosted-anti-spam) – that is how we decide what to build first.

FAQ

Is a self-hosted CAPTCHA useless, then?

No. It stops scripts that do not run JavaScript, with no tracking and no third-party scripts, for free. It is a good first layer. It is not a spam filter, because it never looks at the sender or the message.

Why can’t I build the reputation database myself?

Because reputation is cross-site by definition. You learn that an address is a spammer when it spams other sites; by the time it reaches you, the only useful knowledge is what happened elsewhere. That takes a network – CleanTalk’s is 200,000+ sites.

What leaves my network with CleanTalk Self-Hosted?

Only the update download: signed database and logic updates from CleanTalk. No request data, no user data, no telemetry.

Does it work with my existing integrations?

Yes. The API is compatible with CleanTalk Cloud, so the official SDKs and CMS plugins work with the on-prem endpoint by changing the URL.

How is the database protected?

It is delivered in a hashed form, licensed for use inside your instance for the subscription term, and cannot be extracted as a plain list.

Can I test it?

The early access pilot is the test: three months free, full functionality, a direct line to the engineers.

Maria Krasnova Avatar

Maria Krasnova

Marketing Manager

I’m a strategic marketing leader with 10+ years of experience across Europe, MENA, and the CIS. I specialize in building brands, scaling growth through data-driven marketing, and crafting go-to-market strategies that connect innovation with real customer needs.

Areas of Expertise: Digital Marketing