All articles

BLOG / ONLINE BUYING BOT

Online Buying Bot Playbook: Defenses Without CAPTCHAs

See how buying bots target stock, tickets, and checkout. Compare purchase limits, browser proof, and safe retries without adding CAPTCHA puzzles.

The most popular advice about an online buying bot is simple: block bots. It's also the wrong place to start. Blocking by speed, IP reputation, or a CAPTCHA treats automation as proof of abuse, misses distributed attacks, and punishes legitimate buyers who move quickly.

A stronger approach protects specific browser-originated actions. Teams bind short-lived proof to the current browser and server state, verify that proof before accepting signup, sign-in, checkout, reservation, or promotion redemption, and keep authentication, authorization, rate limits, and idempotency in place. The goal isn't proving someone's human. It's stopping replay, token theft, and scripted abuse without adding friction for valid users.

What an Online Buying Bot Actually Does at Checkout

An online buying bot isn't just a script that clicks Buy faster than a person. That picture focuses on the final second and ignores the work done before checkout. By the time a legitimate customer reaches payment, automation may already have shaped queue position, held inventory, and consumed the available stock.

The documented pattern has four parts. Software polls product or ticket endpoints for new inventory, reserves items automatically, spreads activity across many identities, and completes purchases quickly for later resale. Defending only the checkout click addresses the last part, often after the damage is done.

A robotic hand clicking a checkout button on a digital tablet with a human hand nearby.

The Four Operational Phases

  • Persistent inventory polling: The bot repeatedly checks availability endpoints so it can act as soon as stock appears.
  • Automated reservation: It starts checkout or holds an item, removing inventory from the pool available to other buyers.
  • Identity multiplication: It rotates accounts, names, addresses, sessions, and payment details to avoid per-customer limits.
  • High-speed purchase and resale: It completes the order before slower manual buyers and lists scarce goods at a higher price.

Ticket scalping made this pattern visible to policymakers. The U.S. Better Online Ticket Sales Act of 2016 made circumvention of ticket-site controls an unfair or deceptive practice enforceable by the Federal Trade Commission, and contemporary evidence cited bots purchasing 60% of the most desirable tickets for some shows, one broker acquiring more than 1,000 U2 tickets within one minute, and resellers marking tickets up by an average of 49% above face value in coverage summarizing the BOTS Act record and early scalper bot evidence.

The enforcement record shows why identity multiplication matters. The Federal Trade Commission brought three cases in 2021 involving automated ticket-search and reservation software, concealed IP addresses, fictitious accounts, and payment cards, resulting in orders requiring $3.7 million in civil penalties according to the FTC BOTS Act compliance refresher.

Speed is a signal, not a diagnosis. A fast checkout can be abusive, but polling, reservation, identity rotation, and replay show where controls need to sit.

That distinction changes the engineering question. Instead of asking whether traffic looks automated, teams should ask which phase a control interrupts. Polling needs action-aware limits. Reservation needs current inventory checks. Identity multiplication needs account and transaction policy. Checkout needs fresh proof, purchase limits, and protection against duplicate submission.

Browser-Originated Proof and Why Server State Decides Everything

Browser-originated proof is evidence collected in the browser context where an action begins, then sent to the server for verification. It should be opaque to the application, meaning application code doesn't need to interpret raw detection details. It should also be short-lived, so captured proof loses value quickly.

Proof alone doesn't create trust. A client can send well-formed bytes that were copied, delayed, or detached from the original session. The control boundary appears when the server checks that proof against current server state immediately before accepting the protected action.

Freshness Is a Server Decision

A useful sequence looks like this. The browser collects proof for a named action, such as creating an account or submitting an order. The server verifies that the proof is current, unused, and bound to the expected action and session context. Only then does application logic check authorization, inventory, purchase limits, and payment requirements.

Freshness prevents an old message from gaining new effect. NIST defines replay resistance as making it impractical to succeed by recording and resending a previous authentication message, and NIST SP 800-63B-4 specifies that a challenge nonce must be at least 64 bits and unique over the authenticator lifetime or statistically unique when generated with an approved random-bit generator in NIST guidance on authenticators and replay resistance.

The same principle applies beyond authentication. A reservation proof from an abandoned cart shouldn't authorize a later checkout. A signup proof shouldn't be reusable across hundreds of scripted attempts. Session continuity, expiry, and one-time use all depend on server-side records, not browser claims.

Why Local Checks Fall Short

Local cryptographic verification can confirm that data was signed correctly. It can't, by itself, know whether the credential was already consumed, revoked, replayed from another context, or separated from the session that produced it. Hosted server-side verification closes that gap because it compares the credential with current state before the business operation runs.

That model also keeps responsibilities clear. Browser verification adds a signal about the originating browser context. It doesn't authenticate the account holder, approve payment, or decide whether inventory remains available. Those decisions stay with application and payment controls that already own them.

The practical unit of protection is therefore not "the site." It's one state-changing action, checked at the moment its effect would occur. That precision lets teams apply stricter handling to checkout or account recovery without challenging every page view.

Abusive Bots Versus Legitimate Automated Buyers

Not every automated buyer is a scalper. Customers use password managers, accessibility tools, autofill, shopping assistants, and AI agents that act through a browser. A policy that treats automation itself as fraud will eventually reject valid purchases and create support work that has little to do with abuse prevention.

That distinction is becoming harder to postpone. In survey data, 35% of respondents who use AI tools said they use them often or almost always for online shopping, while 61% said they would trust an AI agent to make purchases below $20, according to Wildfire Systems' 2025 AI shopping survey report.

A cartoon comparing a malicious scalper bot failing a captcha versus a legitimate shopper successfully completing one.

Human Is the Wrong Test

Proof of human identity sounds decisive, but it answers the wrong question. A person can manually coordinate abusive purchases across many accounts. An accessibility tool can submit a valid order without conventional mouse and keyboard patterns. An AI shopping agent can act with a customer's permission yet still need careful limits on amount, merchant, and repetition.

Authorization matters more than biology. The server needs to know whether the account may perform the action, whether the requested purchase stays within policy, and whether this exact attempt is fresh. Those questions remain relevant whether software or a person initiated the request.

A Better Decision Rule

Teams can evaluate automated actions with three practical questions.

  • Current: Was the proof created for this attempt, or is it expired or reused?
  • Bound: Does it remain connected to the originating browser, session, and named action?
  • Authorized: Do account status, inventory, transaction limits, and payment checks permit the effect?

A valid automated action can pass all three. A replayed checkout fails the first or second even if its payload looks perfect. A scripted signup campaign may produce fresh attempts, but rate limits and account policy can still constrain volume.

This framing preserves legitimate agentic commerce without opening checkout to detached scripts. It also avoids a brittle promise to identify every real-browser agent. The control objective is narrower and more defensible: accept a browser-originated action once, in its intended context, only when current server state supports it.

Mapping Defenses to the Browser Action They Protect

Retail automation is common enough that site-wide limits alone leave obvious gaps. Imperva reported that bad bots generated 33% of traffic to retail websites in 2024, up from 26% in 2023, and that retail represented 15% of all observed bad-bot attacks in Imperva's 2025 Bad Bot Report. Those figures support action-level controls, not a single threshold for every request.

Different actions fail in different ways. Signup abuse creates inventory for later attacks. Credential stuffing targets existing accounts. Checkout replay can duplicate an effect or bypass the browser flow. Promotion redemption turns one valid offer into repeated value when controls are weak.

Control Mapping for Common Online Buying Bot Actions

Protected action Primary control Complementary control What this does NOT do
Account creation Fresh browser-originated proof Per-action, account, and network rate limits Prove the identity behind the account
Sign-in Proof checked before credential acceptance CSRF token, breached-password screening, MFA where appropriate Replace password validation or MFA
Checkout Short-lived opaque proof bound to current state Idempotency key, inventory and purchase-limit checks Authorize payment or guarantee stock
Reservation Proof tied to the specific hold Expiry, one-time claim, current inventory validation Prevent all manual hoarding
Promotion redemption Proof tied to redemption attempt One-use records, account limits, idempotency Decide whether the promotion terms are fair

Account creation needs early restraint because fake accounts become the raw material for later scalping and promotion abuse. Proof makes detached scripts harder to use, while rate limits constrain repeated attempts. Email, phone, and identity checks may still be appropriate for higher-risk products, but they shouldn't be confused with browser verification.

Sign-in needs a wider stack. OWASP identifies multi-factor authentication as the strongest defense against most password-related attacks and cites Microsoft analysis estimating MFA could have stopped 99.9% of account compromises in OWASP guidance on preventing credential stuffing. Browser proof and throttling can raise attack cost, but they don't make a stolen password safe.

Checkout requires the tightest binding because money, inventory, and fulfillment move together. The server should verify proof, re-check cart contents and purchase limits, confirm inventory, and apply an idempotency key, a unique value that lets the server recognize a retry of the same operation. Reservation and promotion flows need similar one-time semantics so a captured request can't claim the same benefit repeatedly.

A Worked Example, Replay, and Idempotency at Checkout

The following scenario is synthetic. It uses invented labels to show control placement, not a customer result. A shopper adds a limited-release jacket to a cart identified in the example as Cart A. The browser begins checkout and collects proof for the order-submission action.

The application sends that proof with an idempotency key, shown here as Order Attempt A. Before creating the order, the server verifies the proof against current state. It confirms that the proof is fresh, unused, and tied to the expected browser session and checkout action.

A Safe Retry

The order succeeds, but the response is lost because the shopper's connection drops. The shopper retries from the same checkout flow. The browser produces fresh proof, while the retry retains Order Attempt A as its idempotency key.

The server now has two separate answers. Fresh proof shows that this is a current browser-originated attempt. The repeated idempotency key shows that it is the same business operation, so the server returns the existing order instead of charging or reserving stock again.

That separation matters. Idempotency alone would recognize a copied retry, but it wouldn't show whether the request still came from the expected browser context. Browser proof alone would establish freshness, but it wouldn't prove that two valid submissions represented one intended order. Used together, they handle different failure modes.

Further background on captured requests and reuse is available in an explanation of replay attacks and freshness checks.

A Rejected Replay

Next, the synthetic attacker copies the first checkout request and sends it from a script. The payload still contains the correct cart and idempotency values. The proof, however, has expired or already been consumed, and it no longer matches the current browser context.

Server-side verification rejects the attempt before order logic runs. There's no duplicate fulfillment decision to clean up. Rate limits can then slow repeated variants, while account policy handles attempts spread across identities.

A CAPTCHA wouldn't solve either part cleanly. It could interrupt the legitimate retry, yet it wouldn't tell the server that Order Attempt A had already produced an order. Friction isn't a substitute for one-time semantics and current-state verification.

Why Distributed Account Farms Beat Naive Signals

The obvious bot is no longer the hard case. Coordinated buyers can distribute activity across accounts, sessions, networks, and payment instruments so each account looks unremarkable. Looking for one fast client misses the structure of the operation.

A 2025 FTC case concerning Ticketmaster alleged that five brokers controlled 6,345 accounts and 246,407 tickets across 2,594 events, as described in TicketNews coverage of the FTC Ticketmaster lawsuit. The alleged scale came from coordination, not a single browser making an impossible number of requests.

Earlier enforcement showed the same ingredients. The Department of Justice and FTC described defendants using automated purchasing software, concealing purchasing-computer IP addresses, and using credit or debit accounts belonging to other people, with stipulated civil penalties of $11.2 million, $16 million, and $4.4 million in the joint announcement of the first BOTS Act enforcement actions.

Where Simple Signals Break

  • IP reputation: Requests can move across networks, while shared networks can make unrelated legitimate buyers look connected.
  • Latency thresholds: Fast customers, autofill, and returning buyers can resemble scripts on timing alone.
  • CAPTCHA completion: Passing a challenge doesn't prove that purchase limits, account ownership, or payment authorization are valid.
  • Site-wide rate limits: Broad thresholds either miss low-and-slow distribution or block normal demand during a release.

The response needs layers that meet at the transaction. Browser-originated proof constrains replay and token theft. Server-side inventory and purchase-limit checks evaluate the requested effect. Account policy looks for linked identities and repeated limit evasion. Payment-provider controls assess payment risk that browser signals can't see.

Promotion flows expose the same distribution problem because value can be spread across accounts rather than extracted in one large redemption. The related control patterns are covered in guidance on preventing promotion abuse across accounts.

None of this turns browser verification into an account-farm detector. It doesn't establish who controls an account, whether payment details were used with permission, or whether resale violates policy. Its narrower value is ensuring that a protected action arrives fresh from the expected browser context, giving the other controls a cleaner request to evaluate.

Rolling Out Defenses the Low-Friction Way

Start with one named action, not the whole store. Checkout, account creation, sign-in, reservation, and promotion redemption have different callers and costs of failure. A rollout that mixes them together makes evidence hard to interpret and rollback harder to justify.

Inventory the legitimate paths first. Mobile browsers, accessibility tools, customer support flows, embedded web views, and permitted shopping agents may all reach the same endpoint. Teams should know those paths before interpreting unusual evidence as abuse.

A team collaborating on a three-step business workflow including inventory analysis, observation, and enforcement of online buying bots.

Observe Before Enforcement

Observe mode collects and groups evidence without rejecting the action. Teams review which attempts would have been affected, whether legitimate routes appear in that group, and whether failures concentrate around a browser, integration, or release. Only after that review should a selected action move to enforcement.

The sequence and evidence model are described in research on observing before enforcing browser verification. MANDATE is one implementation of this approach, protecting important website actions from automated abuse without CAPTCHAs through browser proof and hosted server-side verification, with an Observe-to-enforce rollout.

A practical checklist keeps the rollout bounded:

  1. Name the action: Define the exact signup, sign-in, checkout, reservation, or redemption operation and its business effect.
  2. Run Observe: Group evidence by route, client path, and proposed decision without changing user outcomes.
  3. Review legitimate impact: Inspect affected accessibility, mobile, embedded, and agent-driven flows before enforcement.
  4. Enable narrowly: Apply the policy to the selected action and keep authentication, authorization, rate limits, idempotency, and payment checks active.
  5. Document rollback: Record the metric, owner, and condition that triggers a return to Observe.

Dashboards should separate three outcomes. A proposed rejection shows what Observe would have done. An applied intervention shows what enforcement blocked. A failed business operation shows that the application rejected the action for inventory, authorization, payment, or another business reason.

Rollback rule: If legitimate impact can't be explained from grouped evidence, enforcement isn't ready.

That discipline prevents a quiet conversion problem from being mislabeled as a security win. It also gives engineering and fraud teams a shared record when a release, marketing event, or new shopping agent changes traffic shape.

What Browser Verification Does Not Do and What to Do This Week

Browser verification doesn't prove human identity. It doesn't authorize a user, validate a payment method, confirm inventory, or stop every agent operating inside a real browser. Treating it as any of those controls creates dangerous gaps.

It also doesn't replace rate limits. A stream of fresh, valid-looking attempts can still exceed what an account or action should allow. Purchase limits, account policy, transaction validation, payment-provider checks, and monitoring remain necessary.

What it adds is narrower. It gives the server a low-friction way to check whether a protected action is fresh, unused, and bound to its originating browser context before accepting the effect. That helps address replay and token theft without presenting CAPTCHAs, checkboxes, puzzles, or interstitials to legitimate buyers.

One Action for This Week

Pick one high-value, state-changing browser action. Checkout is a reasonable candidate when duplicate orders, scripted reservations, or replayed submissions create operational cost. Signup may be better when fake accounts are feeding later abuse.

Run that single action in Observe mode and review grouped evidence alongside legitimate completion rates. Identify the browser paths that would be affected, confirm idempotency behavior, and write the rollback condition before enabling enforcement. A small, measurable rollout will teach more than a site-wide attempt to block every online buying bot.


Protect checkout, signup, sign-in, reservations, and promotion redemption from replay, token theft, and scripted browser abuse without CAPTCHAs by starting one action in Observe mode and reviewing the evidence before enforcement. Visit MANDATE to see how invisible browser verification fits alongside authentication, authorization, rate limits, and idempotency.

More from the blog

ANTI BOT VERIFICATION

Anti-Bot Verification Failed? Safe Fixes and How It Works

Stuck on anti-bot verification? Try safe browser fixes, understand why checks fail, and recognize suspicious requests to install apps or complete surveys.

FRAUD PREVENTION API

Fraud Prevention APIs: Where Browser Verification Fits

Compare fraud prevention API layers: identity, transaction risk, browser verification, replay protection, and safe retries for web applications.

CAPTCHA ALTERNATIVE

CAPTCHA Alternative: How to Choose Browser Verification

CAPTCHA alternative options compared on tradeoffs, attack surface and rollout, with a decision checklist for security and developer teams.