Do visitors see a CAPTCHA?
Do visitors see a CAPTCHA?
Never. Karma reads the session invisibly and issues a verdict; humans are forwarded without friction.
Karma reads behavioural and transport signals from each web session, scores the address against your own reputation base and an optional shared bot blocklist, and redirects bots to your mirror while humans stay on the site - no CAPTCHAs, and no hit to your site's engagement signals.
14 days of Protect+ free · no card, no CAPTCHAs
No CAPTCHAs, no agents. One async snippet, everything runs over TLS.
Karma installs as a single script tag, and it is the same tag everywhere - what changes is the file it goes into. Put it first in <head>, above analytics and tag managers, so it starts reading the session before anything else can delay it.
<script async src="https://cdn.karma-verdict.com/karma-loader.js"
data-endpoint="https://collect.karma-verdict.com/t"
data-src="https://cdn.karma-verdict.com/karma.js"></script>
Nothing else to install: no agent on your server, no DNS change, no proxy in front of your site. Your gateway asks Karma for the verdict and goes on serving the page itself. Read the install guides
Behavioural and transport signals, per-tenant reputation, and an optional shared blocklist, no visitor ever sees a challenge.
Sites already running their traffic through Karma. Once bots stop reaching the pages, the analytics and the behavioural signals, search engines start to see the site the way real visitors do.
Adding bot protection stopped the traffic decline and lifted search rankings within three weeks.
The bounce rate improved by 3% right after Karma was switched on.
Simply cleaning bots out of the traffic let it start growing again after a year of standing still.
Fifteen situations in which automated traffic stops being a statistic in an analytics report and starts costing money, customers or credibility. If you recognise your own site in any of them, the requests are already arriving.
The first group is about what automated traffic actually does once it finds a site. None of it requires a targeted attack or a determined adversary: these are the things that happen to any address that answers on port 443 for long enough.
Credential stuffing is the most common attack on the internet and the least dramatic to watch. Lists of email-and-password pairs from other companies' breaches are replayed against your login form, a few requests per second, from thousands of different addresses, day after day.
The economics only need a tiny success rate. A list of a million pairs and a one-in-a-thousand reuse rate is a thousand working accounts - accounts with saved cards, loyalty balances, order histories and an address book, all belonging to customers who will blame the site rather than their own password habits.
Sign-up forms, contact forms, quote requests, reviews and comment fields all attract automated submissions. Some of it is ordinary spam; more of it is quieter - accounts created in bulk to farm promotional credit, to seed reviews, or simply to sit there until they are worth something.
The cost lands on people, not servers. Someone in sales calls a list of leads that do not exist, moderators clear a queue that refills overnight, and the database of customers slowly stops being a database of customers.
If a site publishes prices, stock levels, listings or a directory, that data is worth taking. Competitors track it to undercut, aggregators republish it, and a scraper reads the entire catalogue every night - far faster and far more completely than any customer ever browses.
Blocking it by user agent or address range does not last: a scraper that is worth running is worth running from residential proxies with a real browser fingerprint. What separates it from a customer is not what it claims to be, but how it behaves.
Card testing does not target the shop; it uses it. A stolen card list is validated by pushing small authorisations through any checkout that will accept them, and a payment form with no friction in front of it is an ideal instrument for that.
The site pays for it twice. First in fees and chargebacks on transactions that were never orders, and then in the payment provider's risk rating: an authorisation-failure rate that climbs high enough gets a merchant account reviewed, throttled, and in the worst case closed.
Once a meaningful share of sessions is automated, every number derived from traffic drifts. Conversion rate falls because the denominator is inflated, bounce rate and session length stop meaning anything, and A/B tests need far more traffic to reach significance - or quietly reach the wrong conclusion.
Decisions are still made on those numbers. A campaign is judged, a page is redesigned, a budget is moved, all on a measurement that includes a large population which was never going to buy anything.
The second group is about the usual response and what it costs. A challenge is easy to add and hard to remove, and it charges the price to precisely the people you wanted to keep while barely inconveniencing the traffic it was meant to stop.
Challenges are placed where the risk is: sign-in, sign-up, checkout. Those are also the points where a customer's patience is thinnest and the alternative is one tab away. Every puzzle is a decision point that did not exist before, presented to someone who has already decided to buy.
The loss is invisible in the way that matters most: nobody files a complaint about abandoning a cart. The traffic still arrives, the orders quietly do not, and the cause looks like a conversion problem rather than a security setting.
Image grids and distorted text are barriers for anyone using a screen reader, anyone with a motor impairment, anyone with low vision, and a large number of older customers who simply find them impossible. Audio alternatives are worse, not better, and are frequently broken.
Beyond the lost sale, this is increasingly a legal question. Accessibility rules covering public-facing services do not carve out an exception for a security control, and 'prove you are human' is a poor thing to fail a customer on.
Solving challenges is a service with a published price list. Human-powered farms and automated solvers clear image and text puzzles for a fraction of a cent each - a rounding error against the value of a taken-over account or a validated card.
So the challenge ends up filtering by patience rather than by intent. The determined attacker pays and continues; the customer in a hurry does not, and leaves. That is precisely the wrong way round.
A mobile app talking to an API, a partner integration, a checkout inside a webview, a feed consumed by a client application - none of these have a place to render a puzzle, and none of them have a human sitting there to solve it.
These endpoints are usually the most valuable and the least defended, because the standard answer simply does not apply to them. Whatever protects them has to make its decision from the request itself.
A third-party challenge loads code into the browser of every visitor and reports back to a service outside your control, usually in another jurisdiction. That makes it a processor in the privacy sense, on the most sensitive pages you have.
Under GDPR-style regimes that means a lawful basis, a record of processing, a data-processing agreement and an answer to where the data goes - for a component whose entire job is to interrupt customers.
The third group is about the consequences that arrive before any account is taken over. Traffic that never converts still costs advertising budget, server capacity, stock and attention - and sooner or later somebody outside the technical team asks a question that has to be answered with evidence.
Paid campaigns are charged by the click, and a meaningful share of clicks on some networks are automated. The money is spent, the visit is recorded, the analytics report shows growth, and none of it was a person.
Worse, that traffic trains the optimiser. Automated bid strategies learn from the sessions they are given, so a channel full of bot traffic teaches the platform to buy more of it - the budget compounds in the wrong direction.
Aggressive crawling is expensive in the most literal sense. Every request costs a database query, a rendered page, bandwidth and, on a metered platform, a line on an invoice. A single scraper walking a large catalogue can outweigh the entire human traffic of a small shop.
The failure mode is not always a bill. It is a site that is slow at exactly the wrong moment - the campaign launch, the sale, the morning after a mention - because capacity provisioned for customers went to something else.
Where supply is scarce and demand is timed, speed decides the outcome, and software is faster than people. Release drops, ticket sales, discounted stock, delivery slots, appointment calendars and registration windows all attract automation built for exactly that moment.
Customers see the result and draw a conclusion about the business: that it was never really available, or that it went to resellers. That impression is far more expensive than the stock itself.
Security questionnaires from corporate customers, cyber-insurance applications and payment-industry rules all ask a version of the same question: what stops automated credential and payment abuse against your public endpoints, and how do you know it works.
'We have a CAPTCHA' does not survive follow-up, because the follow-up is about the traffic that passes it. What is wanted is a control that exists independently of any one challenge, and a record showing what it decided over the period under review.
Agencies, marketplaces and multi-brand businesses run dozens of sites on different stacks, different hosting and different domains. Each has its own traffic pattern, its own tolerance for false positives and its own idea of what a normal visitor looks like.
Configuring each one by hand does not scale, and neither does discovering a problem only when a client telephones. What such an estate needs is one baseline applied everywhere, per-site exceptions where a site genuinely differs, and a single place where all of them can be seen at once.
Never. Karma reads the session invisibly and issues a verdict; humans are forwarded without friction.
No. The snippet loads asynchronously above analytics and buffers early events; it never blocks rendering.
Karma fails open: on any failure the visitor simply stays on your site. Availability beats strictness.
Addresses flagged across contributing customers. Reading it is optional, off by default, and enabled from the pre-top plan.
Yes. Your allow and deny lists always win over the platform, so you never lose a partner or a good crawler.
Any site: a plain HTML snippet plus wrappers for React/Next, PHP, Vue/Nuxt, WordPress and GTM.
Traditional bot protection software answers a suspicious request with a challenge - a CAPTCHA, an interstitial, a block page - and usually wants your traffic routed through its proxy. Karma answers with a verdict instead: it reads behavioural and transport signals, scores the session against your own reputation base, and your gateway is what acts. No puzzle, no DNS change, no proxy in front of your site.
Both, split where you want the control. Karma detects and scores; enforcement stays in your gateway, so you decide whether a bot is blocked, throttled or sent to a mirror. The free Detect plan is verdict-only, for watching before you act.
About five minutes. One async script tag at the top of <head>, then a verdict call from your gateway. It is the same tag on every stack - HTML, React/Next, Vue/Nuxt, PHP, WordPress or GTM - and nothing gets installed on your server.
Yes. Detect costs nothing, needs no card and gives 25,000 real-time verdicts a month with your own reputation base and your allow and deny lists. Mirrors and the shared bot blocklist start on the paid plans.
Using Karma, I install an asynchronous snippet before analytics, collect session behavioral and transport signals, including HTTP/2 and JA3/JA3N fingerprints, and pass the verdict to the gateway. I'm not blocking one IP, but a session with machine behavior; I leave my white lists above my reputation, so the office, partner API and useful robots are not prohibited.
As a free alternative to Karma, I disable logins using compromised passwords, enable MFA, add the same response for an existing and non-existent account, and count attempts by IP, login and subnet simultaneously as a sliding window. I create a log of successful logins from the new device, notify the owner, and temporarily require reauthentication; I use nginx limit_req only as the first layer, and not as the only protection against bots.
With Karma I associate form submission with the verdict of the same browser session and only allow processing after evaluating the actual behavior and transport fingerprint. I leave CAPTCHA disabled, apply a deny list to approved automations and an allow list to trusted integrations; if the reputation service is temporarily unavailable, fail-open does not stop the site itself.
For free I add a honeypot field, minimum fill time, one-time CSRF token, email confirmation and limits by IP, subnet, address and device. I delay issuing the bonus until the action is confirmed, block disposable domains on my own list and compare the share of confirmations daily; This set reduces spam, but I maintain its rules and false positives manually.
With Karma I evaluate the entire session, not the User-Agent string: sequence of actions, click rate and client transport fingerprint. I send bots to a limited route or block with a gateway, set an explicit allow list for trusted search robots and maintain my own address reputation so that repeated crawls are cut off faster.
For free, I close unused APIs, introduce pagination with signed cursors, limit the depth and frequency of requests to nginx, cache expensive responses, and set separate quotas for search and upload. I check official crawlers for reverse and forward DNS, analyze access.log for crawl rates, and manually block ASNs or subnets, accepting that residential proxies will require constant rule adjustments.
With Karma I get a verdict before sending a request to the payment provider and link it to the behavior of the entire session, not just the last POST checkout. I block machine sessions at the gateway, allow retries for normal customers, and transfer only the cleared stream to the payment system, reducing the number of paid authorizations and false refusals.
For free, I tokenize the card from the payment provider, prohibit an arbitrary amount, limit the number of attempts by account, token card, BIN, IP and subnet, and after several refusals, I introduce a delay and email confirmation. I enable 3-D Secure according to risk rules, do not save CVV and build an alert on the ratio of refusals to successful payments; the rules have to be manually calibrated against real orders.
With Karma, I start collecting signals before the counter, receive the session verdict and separate people from bots before generating an analytical event. I wrap the found counter so that the mirror does not create a duplicate, and if Karma is unavailable, the analytics is launched with a timeout; then I compare the conversion across cleared human sessions.
For free, I create a server session ID, flag known data centers and unnatural sequences, exclude internal traffic and filter reports by confirmed events - login, cart or purchase. I save the raw stream separately so I don't lose data if a filter fails, and I review my regular expressions and robot lists weekly.
With Karma I replace the explicit challenge with a background session evaluation: the snippet is loaded asynchronously, does not block rendering and passes the verdict to the gateway before the critical action. I skip human sessions without an additional step, and stop automatic ones based on a combination of behavior, reputation and transport characteristics.
For free, I remove CAPTCHA for everyone and apply step-by-step verification only after a risk signal: too fast checkout, too many cards, addresses or baskets for one session. I add confirmation email, idempotency key per order and server quotas, then measure the conversion of the control group; I support my own risk engine and its exceptions.
With Karma, I don’t ask the visitor to prove that he is a human at all: the solution is based on the background signals of the session and applied by the gateway. I keep the usual semantic form, keyboard navigation, and error messages, and pin trusted helper scripts to the allow list when needed.
For free I remove the inaccessible CAPTCHA, add a hidden honeypot field, server-side time check, email confirmation and action limits. If additional verification is still needed, I suggest several equivalent methods - email, TOTP or contacting support - and test them with the keyboard and Narrator, without making vision a condition of access.
With Karma, I don't consider the solved picture as proof: the verdict is based on the behavior of the full session, the transport fingerprint and my reputation base. I block machine traffic even with a seemingly correct browser, and use my own lists for confirmed partners and sources of attacks.
For free, I consider CAPTCHA as only one signal and after it I check the speed, repeatability of fields, number of accounts, cards and actions per device. I associate the token with a specific session and one-time action, limit the lifetime, prohibit reuse and set server quotas; I send suspicious results for delayed moderation.
With Karma I collect browser signals where there is a webview or web client, associate them with a server session and apply the verdict on the gateway before calling the valuable API. For real partner clients, I set a separate trusted route or allow list, and evaluate and limit the anonymous flow regardless of the User-Agent.
For free, I separate the human and machine APIs, issue short-lived OAuth tokens with audience and scope to partners, sign requests and introduce quotas for the key and operation. For anonymous methods I use nonce, idempotency key, account/IP/subnet limits and server-side consistency checking; I consider mobile certification to be an additional signal, not the only one.
With Karma, I use my own account reputation contour, explicitly choose to participate in the general blacklist, and do not show the user a third-party puzzle. I document what behavioral and transport signals are collected over TLS, limit field capture to the bare minimum, and apply the verdict without a blocking external widget.
I implement honeypot, temporary tokens, rate limit and risk logs on my side for free, without sending data to an external CAPTCHA provider. I truncate the IP and User-Agent in the logs to the required length, exclude the contents of the forms, describe the processing in the policy and conduct a legal basis assessment; the trade-off of the free approach is maintaining the implementation and reviewing its rules regularly.
With Karma, I tag each advertising session with a behavioral and traffic verdict, separate out automated traffic before sending key conversions, and store the source, campaign, and click id for evidence. I pass only confirmed human events to the advertising system and add duplicate sources to my own deny list.
For free, I match access.log, click id, cost and server conversions, eliminate duplicate clicks without a normal session and upload verified offline conversions back to the advertising platform. I block known data centers, set limits on the form and regularly send a report to the site on abnormal clicks; distributed proxies require manual analysis.
With Karma I make a decision before expensive processing: the gateway receives the verdict of the session and does not allow the confirmed automation to access the application and database. I cache solutions locally, leave fail-open for availability, and allow useful indexers through a priority allow list.
For free, I install a CDN cache on public pages, limit the frequency and simultaneous requests of nginx, close heavy searches with a minimum request length and cache, and API with quotas and signed cursors. I build a report from access.log by URI, response time and bytes transferred, then manually block the most expensive patterns and sources.
With Karma I evaluate the session before reserving the remainder and only allow the thread with a human verdict to operate; The gateway stops machine sessions even before the warehouse transaction. I add my own lists for checkouts and partners and analyze related verdicts without forcing every customer to solve a CAPTCHA.
I issue a signed one-time queue token for free, limit the reserve to one account and payment instrument, set a short TTL for the basket and write off the balance atomically in the database. I add email/phone confirmation, quantity limit and post-check for related orders; I process distributed automation and return of erroneous locks manually.
With Karma I upload the history of sessions and verdicts, record the applied allow/deny rules and show the share of stopped automation at the required points. I document the snippet's location, TLS signaling, fail-open mode, and policy owner, and to test it, I replay a test machine session and save the result.
For free, I approve written rate limit, MFA and abuse response policies, centralize access/auth/payment logs and store configuration changes in Git. I conduct a controlled test every month, count attempts, blocks and false positives, sign the report with the person responsible; it is the regular procedure that creates evidence, not the name of the instrument.
With Karma I connect each domain with a suitable snippet, but manage reputation, lists and verdicts from one account panel. I use a single common signal layer, set explicit site-specific exceptions, and distribute verified sources through my own database without manually copying configuration between stacks.
For free, I put the nginx/WAF rules into one Git repository, describe the base template and domain overrides, check the configuration in CI and deploy it with Ansible. I maintain a central CIDR list with reason, owner and expiration date, collect logs into one system and delete expired exceptions on a schedule; I maintain the detectors and deliver every change myself.
Three questions worth answering before you put anything in front of your own traffic.
Bot protection is not a subject of its own - it is where automated clients, the challenges built to stop them, the signals that give them away and a set of published standards meet. These are the sources that define each of them.
Links open on the sources themselves - Wikidata where the entity has an ID, the primary source where it does not.