# Article figures against the pinned-list reproduction Reproduced on 7 October 2026 with `fetch_lists.py`, `crosscheck.py` and `count_ad_flags.py`, from the raw captures (not published) and again from `requests-noquery.csv.gz`, the published table (identical output). Lists: EasyList and EasyPrivacy by The EasyList authors, rebuilt at source commit `4300ac0`, which matches the rule counts recorded for version 202609281501. Definitions are in `README.md`. This is the check as it was written before the article was corrected. On 7 October 2026 the two sentences marked "Reword" below were replaced in the article with the suggested wording (sections 3 and 5). "Article says" and "Article:" below quote the wording before that change. ## Summary | # | Figure | Article says | Reproduction | Verdict | |---|---|---|---|---| | 1 | Domains we classify as advertising or tracking | 231 | 231 | Matches | | 2 | Domains the ad-blocker lists flag | 304 | 304 | Matches | | 3 | Agreement between our label and the lists | 78% | 190 / 244 = 77.9% by one formula; 216 / 270 = 80.0% by the other | The number stands under the first formula. The sentence does not say which formula, and its wording describes the second. **Reword.** | | 4 | ABCya ad requests asking for non-personalised ads (`npa=1`) | "on every ABCya load" | 33 of 33 requests, in 30 of 30 loads, on 10 of 10 pages | Matches | | 5 | ABCya ad requests flagged child-directed (`tfcd=1`) | "three flagged the page as directed to children" | 3 requests, in 3 loads, on 1 page (Break the Bank Counting, once per load) | The count is right. The sentence does not say all three were on one page. **Reword.** | No number in the article changes. Two sentences need rewording. For comparison, an earlier check that used lists downloaded on 7 October 2026 got 305 flagged, 191 / 244 = 78.3% and 217 / 270 = 80.4%. The later lists flag one more of the study's domains. ## 1. 231 advertising or tracking domains Article: "The lists ad blockers use flag more domains overall than we do: 304 against our 231." Reproduction: 231 of the 483 third-party domains seen in the first 60 seconds carry the category `ad`, `analytics`, `marketing` or `tag-manager`. The same count comes from the published `domains.csv` (distinct `domain` where `ad_tracking` is 1). No change needed. ## 2. 304 domains flagged by the lists Same sentence. Reproduction: 304 (184 by EasyList only, 109 by EasyPrivacy only, 11 by both). No change to the number. The two numbers are counted over different sets, and a reader cannot tell that from the sentence: the 304 includes 101 domains that we do not classify at all. Optional, more exact wording: > The lists ad blockers use flag more domains than we do: 304 of the 483 > outside domains, against our 231. Of their 304, 101 are domains our sources > have no category for, which we leave uncounted rather than guess. ## 3. "they agree 78% of the time" Article (How we measured): "On the domains both can judge they agree 78% of the time, and the disagreements run both ways; overall the lists flag more." The data, for the 270 third-party domains we have a category for: | | Lists flag | Lists do not | Total | |---|---:|---:|---:| | We say advertising or tracking | 190 | 41 | 231 | | We say something else | 13 | 26 | 39 | | Total | 203 | 67 | 270 | Two formulas fit the words "agree": - **Overlap of flagged:** both flag / either flags = 190 / 244 = **77.9%**. - **Same verdict:** (both flag + neither flags) / all = 216 / 270 = **80.0%**. The article's 78% is the first. But "on the domains both can judge" names the 270, and "agree" on those reads as the second, which is 80%. No script records which was computed; the number was typed into the page by hand. The sentence should carry its own arithmetic. Suggested replacement (keeps 78%, states the formula): > We cross-checked against EasyList and EasyPrivacy, the lists ad blockers > use, counting only their rules that block a whole domain. Of the 244 > classified domains that we or the lists flag as advertising or tracking, > both flag 190 (78%). We flag 41 that the lists do not, and the lists flag 13 > that we class as something else, so the disagreements run both ways. Alternative, if the same-verdict measure is preferred (number changes from 78% to 80%): > On the 270 domains our sources classify, we and the lists give the same > verdict on 216 (80%): both flag 190 as advertising or tracking and neither > flags 26. We flag 41 that the lists do not, and the lists flag 13 that we > class as something else. Either way, drop "the domains both can judge": the lists can be applied to any domain, so the limit is ours alone (domains we have a category for). ## 4. ABCya: non-personalised ads Article: "On every ABCya load, the requests to Google's ad server asked for non-personalised ads (npa=1), and three flagged the page as directed to children (tfcd=1)." Reproduction: ABCya, 10 pages, 30 loads. 33 requests to Google's ad server in the first 60 seconds, at least one in every load. All 33 carried `npa=1`. The first half of the sentence is correct. One point of scope: this is about the ad requests (`/gampad/ads`). ABCya's Google Analytics requests in the same loads carried `npa=0`, so the sentence should not be widened to "ABCya's requests to Google". ## 5. ABCya: "three flagged the page as directed to children" Same sentence. Reproduction: `tfcd=1` was on 3 of the 33 requests. The three are one request in each of the three loads of a single page, Break the Bank Counting (`abcya-break-the-bank-counting`), all to `pubads.g.doubleclick.net`. The other 30 requests, on all ten pages including that one, did not carry it. As written, "three" can be read as three pages or three loads of different pages. Suggested replacement for the whole sentence: > On every ABCya load, every request to Google's ad server asked for > non-personalised ads (npa=1): 33 requests across 30 loads of 10 pages. Three > of those requests also carried the child-directed flag (tfcd=1). All three > were on one page, Break the Bank Counting, one in each of its three loads. ## Other portals, for context (not in the article) | Portal | Pages | Loads | Requests to Google's ad server | `npa=1` | `tfcd=1` | |---|---:|---:|---:|---:|---:| | ABCya | 10 | 30 | 33 | 33 | 3 | | Armor Games | 10 | 30 | 188 | 0 | 0 | | Coolmath Games | 10 | 29 | 96 | 0 | 0 | | Y8 | 10 | 29 | 43 | 0 | 0 | | Friv, itch.io, Kizi, MANXLAB | 38 | 113 | 0 | 0 | 0 | ## What could not be established - Which list files produced the article's 304 and 78%. The only recorded version is the one in the study's notes (202609281501), which was written down for the pilot. The reproduction with that version returns 304 exactly. - The compiled list files of that version. They were rebuilt from the authors' source instead; see `README.md`, "How the lists are pinned".