Mobile app vs web queues: why bots prefer one channel
Why bots pick a favorite channel
Automation tooling is not evenly distributed. The web has decades of mature tooling: headless browsers, proxy integrations, and CAPTCHA solvers that plug straight into a checkout script. A bot operator can stand up a web attack in an afternoon. Mobile app automation requires defeating attestation, certificate pinning, and device checks, which takes real engineering.
So bots go where the economics are best. If your web queue is soft and your app is hardened, the bots queue on the web. If you harden the web, they migrate to the app. The channel preference is not loyalty; it is arbitrage. Every defense you deploy on one channel raises the value of attacking the other.
The web queue's weak points
Web queues are attacked at the request layer. Bots skip the waiting room page entirely and hit the underlying endpoints: queue join, status poll, and the checkout handoff. If those endpoints accept requests without the proof that the caller actually waited, the waiting room is theater.
The tell is endpoint traffic that does not match page traffic. When the status endpoint gets ten times the requests the waiting room page serves, something is polling without browsing. Binding queue position to a token that can only be earned through the real page flow closes most of this down.
The mobile queue's weak points
App queues are attacked at the API layer. The waiting room in the app is just a UI over API calls, and if those calls lack strong device attestation, a script can join the queue, hold position, and check out without ever running your app. Emulators and rooted devices make this cheap.
App attestation, proving the request comes from an untampered app on a real device, is the core defense. But attestation has its own arms race, and older app versions without it remain in the wild. Forcing minimum app versions before high-demand sales is unpopular but effective: it shrinks the attack surface to the versions you can actually defend.
Hardening both without punishing fans
The principle is parity: a fan should face the same friction and the same fairness on both channels. If the web gets a waiting room and the app gets instant access, you have built a bot incentive, not a fan benefit. Match the flows, the checks, and the queue discipline across channels.
Watch the migration signal. After hardening one channel, monitor the other's bot indicators for the displaced traffic. A sudden improvement on web plus a sudden degradation on app is not two unrelated events; it is one adversary moving. Plan the second hardening before you deploy the first, so the migration lands on a prepared defense.
What to measure per channel
Track bot indicators separately for web and app: automation signatures, impossible timing, device anomalies. A single blended metric hides the migration that matters. Track fan outcomes separately too: queue-to-purchase conversion and complaint volume per channel.
The healthiest pattern is both channels showing low bot pressure and similar fan conversion. If one channel is clean and the other is not, the clean one is probably just the one the bots have not bothered with yet. Parity of defense is the goal; parity of measurement is how you know you have it.