What a free browser game really downloads: how to reproduce https://manxlab.com/research/free-game-trackers/ Data CC BY 4.0. Scripts free to reuse. 1. Measure (Node 18+, Playwright, Google Chrome): npm install playwright node measure.cjs sample-urls.txt raw/ 60 3 3 One JSON file per game per load. Loads 3 games at a time, 60 seconds each, 3 loads per game. sample-urls.txt holds the 70 portal games and our 8, in the order they were run. Respect each site's terms: this study excluded Poki and CrazyGames because theirs forbid automated access. 2. Summarise (Python 3, standard library only): mkdir ref && curl -L https://publicsuffix.org/list/public_suffix_list.dat -o ref/public_suffix_list.dat python3 aggregate.py raw/ entities.json results/ python3 facts.py raw/ entities.json results/ Writes runs.csv, games.csv and portals.csv, then facts.json and domains.csv. 3. Charts: python3 make_charts.py results/portals.csv charts/ entities.json maps each registrable domain to its owner and category. It is built from third-party-web 0.30.0 by Patrick Hulce (MIT licence, see THIRD-PARTY-WEB-LICENSE.txt) plus supplement.csv, our own additions, each with a source URL. Your numbers will differ: ad auctions change minute to minute, and results depend on your country and the date. Ours were measured from the US on 28 September 2026.