The LAB #114: Manus at Work - Kasada on Nike.com An autonomous agent from Manus AI collected a 412-entry fingerprint inventory from Kasada's anti-bot system on nike.com, revealing the browser signals the system reads to build user fingerprints. The analysis, published by The Web Scraping Club in THE LAB #114, used Node 22 to deobfuscate Kasada's custom virtual machine bytecode without executing any served code, and the full results are available on GitHub for paid readers. I’ve been looking at Kasada for a while now, and every time I tried to approach it in a simple way. If you send the right token, you get the page and move on. That’s exactly what I did in THE LAB 76, and also the first time I ran into it back in 2022 https://www.scraping.club/p/scraping-a-kasada-website , when getting a 429 on a parka page was the main issue. This method works, but it doesn’t really tell you anything about how the system decides if you’re a real user. That program has gotten harder to look at. Kasada doesn’t ship obfuscated JavaScript anymore, at least not in the sense that a beautifier helps you. It ships a custom virtual machine and a blob of bytecode for it. You can pretty-print the file all day, and you’ll still be reading an interpreter loop, not logic. So I stopped asking how to get past it. I wanted to know what it costs to open one of these things and what you’re allowed to claim once you have one. Give your AI a web data layer – turns any site into clean, structured data your models can actually use. Decodo’s Web Scraping API To find out, I pointed an autonomous agent at Kasada on nike.com. What I wanted out of it, mostly, was the list. Which values does this thing actually reach for when it builds your fingerprint? Not a bypass, not a token generator, just the inventory of what it reads off your browser and how solid the evidence is for each entry. That list came back at 412 entries, and it lives in the code rather than in this article. You’ll find it in fingerprint inventory.csv, with the category, the reference count, and the byte positions for every one. Pasting a 412-row CSV into a newsletter helps nobody, so what I’ll do here is walk the shape of it and spend most of the time on how you get to a list like that without fooling yourself. As always, all the code and the results will be available on our GitHub repository, available to paid readers under the folder 114.KASADA-NIKE https://github.com/TheWebScrapingClub/thelab . Everything below is the client side of j-1.2.726 as observed on August 26, 2026, plus the parts I re-ran myself, because I wasn’t going to publish somebody else’s numbers on trust. The tools Manus AI https://manus.im/invitation/BIAZJTF5YY3S?utm source=invitation&utm medium=social&utm campaign=copy link did the collection and the first pass of analysis. It’s an agent that pairs a language model with a sandboxed Linux VM and a Chromium browser, so it can fetch assets, run Node and Python, drive a page, and iterate on its own output inside the sandbox. We used it the same way in THE LAB 108 https://www.scraping.club/p/the-lab-108-how-llms-and-manus-ai against Akamai on Net-a-Porter. The reason it gets this class of work rather than a chat assistant is the guardrail gap. Ask a heavily guarded model to deobfuscate a production anti-bot sensor and enumerate the signals it scores, and you hit a wall. Node 22 performs deobfuscation, and the important point is that it never executes anything Kasada served. We reimplemented the decoders from the beautified source and ran them over the captured bytes, so nothing from nike.com was ever evaluated. The Chrome DevTools Protocol side is deliberately boring. It reads browser APIs, resource timing, and deterministic canvas, WebGL and audio probes, and that’s all it does. No hooks, no replaced natives, no Proxies over DOM APIs. Python 3.11 from our shared venv runs the comparison afterward. How Kasada is laid out on nike.com Everything comes off one UUID path: /149e9513-01fa-4fb0-aad4-566afd725d1b/2d206a39-8ed7-437e-a3be-862e0f06eea3/ The page loads p.js . That script fires an mfc request and creates two iframe navigations to an fp endpoint. The new anti-bot solution- Toughest walls, lowest price. Claim your free 10 000 requests with coupon codeWSCLUB That script fires an mfc request and creates two iframe navigations to an fp endpoint. The fp response is a tiny HTML document that bootstraps the real work, and here it is as captured, with session values stripped: < DOCTYPE html