Scraper bots revealed by scroll burstiness, 73% accuracy
Detecting scraper bots through scroll behaviour

A blog post by Niki.cat applies burstiness and memory coefficients to JavaScript scroll events, finding human scroll patterns are bursty with near-zero memory, unlike bots. A LightGBM model using only these two features classified single-page interactions with 73.4% accuracy, mainly confusing humans with ChatGPT Agent due to small dataset. The approach shows promise for content-heavy sites.
Scroll behaviour seems to be a relevant data point for distinguishing bots from humans, and Burstiness and Memory have proven to have predictive power in a controlled environment.
- xp84
I'm curious whether we'll hit a point where some sites will want to be as friendly to bots as possible (hopefully they'll just shift to having sane, rate-limited public APIs so everyone can save time and bandwidth), while the rest want the reverse.
If you're providing a service, and AI agents truly take off to where people say "Claude, go buy me a new shower hose about 5' long, brushed nickel. Use my usual evaluation criteria and don't spend over $20." then a lot of ecommerce stores are very very incentivized to be bot friendly.
And of course every "content" site is the reverse, wanting to not waste their bandwidth and hoping to score exclusive paid content deals with any entity that might want to scrape them.
- bryanrasmussen
well it's funny but when I was writing my bot targeting a particular platform I did a lot of this stuff, because I was paranoid and didn't want to get blocked, so things I did:
detect all element in currently loaded page I want to do things with. element I want to click. scroll to element I want to click. random viewport scrolling action, go slightly over viewport, scroll back up, determine mouth position where I will click - x, y center of clickable item, determined x,y of bounding box of clickable item, choose some point within bounding box where I can click with some randomness for getting to center because obviously humans don't get the exact center every time do they. set random mouse move speed. mouse choppiness function (determine a number of x.y coordinates on the way towards the x.y you will actually be clicking move towards those each in turn with randomness of mouse speed, so that nobody can say huh, this mouse is moving towards the place it will click with an unnaturally direct and unnaturally smooth movement.) Get to where I will click. wait random time to click. click.
If I do not continually get new elements I want to click based on my criteria just by this method now I need to scroll to see if I can detect new.
random number of times I will scroll. random scroll speed. random scroll distance.
start scroll. hit scroll distance stop. random up down scroll.
My automation goal was not to make my bot able to do the work of hundreds of people. It was to do the work […]
- ventana
That's great!
I was experimenting with Google Ads traffic to one of the websites I cared about, and even just looking at the existence of mouse move and scroll events, let alone the patterns, made me understand how many bots, or users who just (mis)clicked the ad and never did any action on my website, were counted as paid clicks in Google Ads. Analyzing for patterns like in this article would've made even more sense.