{
  "schema_version": 1,
  "run_id": "2026-08",
  "slug": "detection-2026-08",
  "title": "Detection run, August 2026",
  "started_at": "2026-08-02T00:18:00Z",
  "finished_at": "2026-08-13",
  "kernel": "Chrome 150",
  "host": "macOS, headful",
  "proxy": {
    "type": "residential",
    "exit_ip": "149.52.102.108",
    "geo": "Houston, US"
  },
  "subjects": [
    {
      "id": "antibrow",
      "name": "AntiBrow",
      "version": null,
      "config": "freshly created profile, default settings, nothing tuned"
    },
    {
      "id": "playwright-stealth",
      "name": "Playwright + stealth plugin",
      "version": "playwright-extra with puppeteer-extra-plugin-stealth, versions current on 2026-08-13",
      "config": "default configuration, headful, no timezone or locale override"
    }
  ],
  "segments": [
    {
      "id": "primary",
      "label": "Primary run",
      "description": "One fresh profile through one residential exit against four checks.",
      "started_at": "2026-08-02T00:18:00Z",
      "finished_at": "2026-08-02T00:21:00Z",
      "presented": {
        "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) ... Chrome/150.0.0.0",
        "platform": "Win32",
        "languages": "en-US, en",
        "timezone": "America/Chicago",
        "webdriver": "false",
        "hardware": "8 cores, 16 GB, 1536x864",
        "webgl_vendor": "Google Inc. (Intel)",
        "webgl_renderer": "ANGLE (Intel, Intel(R) UHD Graphics 620 Direct3D11 vs_5_0 ps_5_0, D3D11-27.20.100.9316)"
      }
    },
    {
      "id": "repeat",
      "label": "Same-day repeat",
      "description": "The same profile and exit against the same targets a few hours later. The exact times were not recorded.",
      "started_at": "2026-08-02",
      "finished_at": "2026-08-02"
    },
    {
      "id": "baseline-pair",
      "label": "Baseline pair",
      "description": "Both subjects on the same host, minutes apart, through the same residential exit. Stateless checks only; DataDome is stateful per address and has its own segment.",
      "started_at": "2026-08-13",
      "finished_at": "2026-08-13"
    },
    {
      "id": "datadome-paired",
      "label": "DataDome, paired by address neighbourhood",
      "description": "Six rounds against leboncoin.fr. Every visit got its own never-reused exit address; the two subjects in a round drew different addresses from the same /16; the arm going first alternated by round; every AntiBrow visit used a fresh profile.",
      "started_at": "2026-08-13",
      "finished_at": "2026-08-13"
    }
  ],
  "checks": [
    {
      "detector": "whoer.net",
      "target": "whoer.net",
      "subject": "antibrow",
      "result": "pass",
      "detail": "Disguise 100%. Proxy: No. Anonymizer: No. Blacklist: No. OS read as Win10.0, browser as Chrome 150.0.",
      "metrics": {
        "disguise_percent": 100,
        "os_reported": "Win10.0",
        "browser_reported": "Chrome 150.0",
        "proxy_detected": false,
        "anonymizer_detected": false,
        "blacklisted": false
      },
      "segment": "primary",
      "evidence_url": null,
      "checked_at": "2026-08-02"
    },
    {
      "detector": "creepjs",
      "target": "abrahamjuliot.github.io/creepjs",
      "subject": "antibrow",
      "result": "inconclusive",
      "detail": "The page loaded and produced a fingerprint ID, but the harness failed to read its score fields. Our fault, not a result.",
      "metrics": {
        "http_status": 200
      },
      "segment": "primary",
      "evidence_url": null,
      "checked_at": "2026-08-02"
    },
    {
      "detector": "datadome",
      "target": "leboncoin.fr",
      "subject": "antibrow",
      "result": "blocked",
      "detail": "HTTP 403 with a CAPTCHA challenge, 1206-byte body. No listings reached.",
      "metrics": {
        "http_status": 403,
        "body_bytes": 1206
      },
      "segment": "primary",
      "evidence_url": null,
      "checked_at": "2026-08-02"
    },
    {
      "detector": "kasada",
      "target": "footlocker.com",
      "subject": "antibrow",
      "result": "pass",
      "detail": "HTTP 200, real storefront rendered, 1.59 MB body, no interstitial.",
      "metrics": {
        "http_status": 200,
        "body_mb": 1.59
      },
      "segment": "primary",
      "evidence_url": null,
      "checked_at": "2026-08-02"
    },
    {
      "detector": "whoer.net",
      "target": "whoer.net",
      "subject": "antibrow",
      "result": "pass",
      "detail": "Disguise 100% a second time on the same day.",
      "metrics": {
        "disguise_percent": 100
      },
      "segment": "repeat",
      "evidence_url": null,
      "checked_at": "2026-08-02"
    },
    {
      "detector": "datadome",
      "target": "leboncoin.fr",
      "subject": "antibrow",
      "result": "blocked",
      "detail": "HTTP 403 with a CAPTCHA a second time, same exit address, same day.",
      "metrics": {
        "http_status": 403
      },
      "segment": "repeat",
      "evidence_url": null,
      "checked_at": "2026-08-02"
    },
    {
      "detector": "kasada",
      "target": "footlocker.com",
      "subject": "antibrow",
      "result": "error",
      "detail": "The target took the harness process down, so the repeat run did not finish. The same target completed in the primary run.",
      "segment": "repeat",
      "evidence_url": null,
      "checked_at": "2026-08-02"
    },
    {
      "detector": "whoer.net",
      "target": "whoer.net",
      "subject": "antibrow",
      "result": "pass",
      "detail": "Disguise 90%, proxy undetected. A different exit address from the primary run, and we do not know which check whoer docked.",
      "metrics": {
        "disguise_percent": 90,
        "proxy_detected": false
      },
      "segment": "baseline-pair",
      "kernel": "Chrome 151",
      "evidence_url": null,
      "checked_at": "2026-08-13"
    },
    {
      "detector": "whoer.net",
      "target": "whoer.net",
      "subject": "playwright-stealth",
      "result": "pass",
      "detail": "Disguise 90%, proxy undetected, webdriver false, read as an ordinary Chrome. whoer served its Chinese page, because Accept-Language was the host's. The headline number did not separate the two subjects.",
      "metrics": {
        "disguise_percent": 90,
        "proxy_detected": false
      },
      "segment": "baseline-pair",
      "kernel": "Chrome 148 (Playwright's bundled Chromium)",
      "evidence_url": null,
      "checked_at": "2026-08-13"
    },
    {
      "detector": "os-vs-ua",
      "target": "whoer.net",
      "subject": "antibrow",
      "result": "pass",
      "detail": "whoer read the OS as Win10.0, matching the User-Agent.",
      "metrics": {
        "os_reported": "Win10.0"
      },
      "segment": "baseline-pair",
      "kernel": "Chrome 151",
      "evidence_url": null,
      "checked_at": "2026-08-13"
    },
    {
      "detector": "os-vs-ua",
      "target": "whoer.net",
      "subject": "playwright-stealth",
      "result": "fail",
      "detail": "whoer read the OS as Mac OS X, which is the host rather than the announced identity.",
      "metrics": {
        "os_reported": "Mac OS X"
      },
      "segment": "baseline-pair",
      "kernel": "Chrome 148 (Playwright's bundled Chromium)",
      "evidence_url": null,
      "checked_at": "2026-08-13"
    },
    {
      "detector": "kasada",
      "target": "footlocker.com",
      "subject": "antibrow",
      "result": "pass",
      "detail": "HTTP 200, storefront rendered.",
      "metrics": {
        "http_status": 200
      },
      "segment": "baseline-pair",
      "kernel": "Chrome 151",
      "evidence_url": null,
      "checked_at": "2026-08-13"
    },
    {
      "detector": "kasada",
      "target": "footlocker.com",
      "subject": "playwright-stealth",
      "result": "pass",
      "detail": "HTTP 200, storefront rendered. Kasada let both subjects through.",
      "metrics": {
        "http_status": 200
      },
      "segment": "baseline-pair",
      "kernel": "Chrome 148 (Playwright's bundled Chromium)",
      "evidence_url": null,
      "checked_at": "2026-08-13"
    },
    {
      "detector": "webrtc-srflx",
      "target": null,
      "subject": "antibrow",
      "result": "pass",
      "detail": "The server-reflexive candidate was the proxy exit address.",
      "segment": "baseline-pair",
      "kernel": "Chrome 151",
      "evidence_url": null,
      "checked_at": "2026-08-13"
    },
    {
      "detector": "webrtc-srflx",
      "target": null,
      "subject": "playwright-stealth",
      "result": "fail",
      "detail": "The server-reflexive candidate carried 202.66.x.x, the host's own address.",
      "segment": "baseline-pair",
      "kernel": "Chrome 148 (Playwright's bundled Chromium)",
      "evidence_url": null,
      "checked_at": "2026-08-13"
    },
    {
      "detector": "timezone-vs-exit",
      "target": null,
      "subject": "antibrow",
      "result": "pass",
      "detail": "America/Los_Angeles, matching the exit address.",
      "metrics": {
        "timezone": "America/Los_Angeles"
      },
      "segment": "baseline-pair",
      "kernel": "Chrome 151",
      "evidence_url": null,
      "checked_at": "2026-08-13"
    },
    {
      "detector": "timezone-vs-exit",
      "target": null,
      "subject": "playwright-stealth",
      "result": "fail",
      "detail": "Asia/Shanghai, the host's timezone, announced alongside a Las Vegas exit address.",
      "metrics": {
        "timezone": "Asia/Shanghai"
      },
      "segment": "baseline-pair",
      "kernel": "Chrome 148 (Playwright's bundled Chromium)",
      "evidence_url": null,
      "checked_at": "2026-08-13"
    },
    {
      "detector": "navigator-languages",
      "target": null,
      "subject": "antibrow",
      "result": "pass",
      "detail": "en-US, en.",
      "metrics": {
        "languages": "en-US, en"
      },
      "segment": "baseline-pair",
      "kernel": "Chrome 151",
      "evidence_url": null,
      "checked_at": "2026-08-13"
    },
    {
      "detector": "navigator-languages",
      "target": null,
      "subject": "playwright-stealth",
      "result": "fail",
      "detail": "zh-CN, zh, the host's languages.",
      "metrics": {
        "languages": "zh-CN, zh"
      },
      "segment": "baseline-pair",
      "kernel": "Chrome 148 (Playwright's bundled Chromium)",
      "evidence_url": null,
      "checked_at": "2026-08-13"
    },
    {
      "detector": "datadome",
      "target": "leboncoin.fr",
      "subject": "antibrow",
      "result": "pass",
      "detail": "Homepage reached.",
      "segment": "datadome-paired",
      "round": 1,
      "proxy": {
        "type": "residential",
        "exit_ip": null,
        "exit_block": "149.40.0.0/16",
        "geo": null
      },
      "evidence_url": null,
      "checked_at": "2026-08-13"
    },
    {
      "detector": "datadome",
      "target": "leboncoin.fr",
      "subject": "playwright-stealth",
      "result": "pass",
      "detail": "Homepage reached.",
      "segment": "datadome-paired",
      "round": 1,
      "proxy": {
        "type": "residential",
        "exit_ip": null,
        "exit_block": "149.40.0.0/16",
        "geo": null
      },
      "evidence_url": null,
      "checked_at": "2026-08-13"
    },
    {
      "detector": "datadome",
      "target": "leboncoin.fr",
      "subject": "antibrow",
      "result": "pass",
      "detail": "Homepage reached.",
      "segment": "datadome-paired",
      "round": 2,
      "proxy": {
        "type": "residential",
        "exit_ip": null,
        "exit_block": "149.87.0.0/16",
        "geo": null
      },
      "evidence_url": null,
      "checked_at": "2026-08-13"
    },
    {
      "detector": "datadome",
      "target": "leboncoin.fr",
      "subject": "playwright-stealth",
      "result": "pass",
      "detail": "Homepage reached.",
      "segment": "datadome-paired",
      "round": 2,
      "proxy": {
        "type": "residential",
        "exit_ip": null,
        "exit_block": "149.87.0.0/16",
        "geo": null
      },
      "evidence_url": null,
      "checked_at": "2026-08-13"
    },
    {
      "detector": "datadome",
      "target": "leboncoin.fr",
      "subject": "antibrow",
      "result": "pass",
      "detail": "Homepage reached. Same /16 as the primary run's exit, eleven days later.",
      "segment": "datadome-paired",
      "round": 3,
      "proxy": {
        "type": "residential",
        "exit_ip": null,
        "exit_block": "149.52.0.0/16",
        "geo": null
      },
      "evidence_url": null,
      "checked_at": "2026-08-13"
    },
    {
      "detector": "datadome",
      "target": "leboncoin.fr",
      "subject": "playwright-stealth",
      "result": "pass",
      "detail": "Homepage reached.",
      "segment": "datadome-paired",
      "round": 3,
      "proxy": {
        "type": "residential",
        "exit_ip": null,
        "exit_block": "149.52.0.0/16",
        "geo": null
      },
      "evidence_url": null,
      "checked_at": "2026-08-13"
    },
    {
      "detector": "datadome",
      "target": "leboncoin.fr",
      "subject": "antibrow",
      "result": "pass",
      "detail": "Homepage reached.",
      "segment": "datadome-paired",
      "round": 4,
      "proxy": {
        "type": "residential",
        "exit_ip": null,
        "exit_block": "149.88.0.0/16",
        "geo": null
      },
      "evidence_url": null,
      "checked_at": "2026-08-13"
    },
    {
      "detector": "datadome",
      "target": "leboncoin.fr",
      "subject": "playwright-stealth",
      "result": "pass",
      "detail": "Homepage reached.",
      "segment": "datadome-paired",
      "round": 4,
      "proxy": {
        "type": "residential",
        "exit_ip": null,
        "exit_block": "149.88.0.0/16",
        "geo": null
      },
      "evidence_url": null,
      "checked_at": "2026-08-13"
    },
    {
      "detector": "datadome",
      "target": "leboncoin.fr",
      "subject": "antibrow",
      "result": "blocked",
      "detail": "Blocked. Both subjects were blocked from this neighbourhood.",
      "segment": "datadome-paired",
      "round": 5,
      "proxy": {
        "type": "residential",
        "exit_ip": null,
        "exit_block": "148.135.0.0/16",
        "geo": null
      },
      "evidence_url": null,
      "checked_at": "2026-08-13"
    },
    {
      "detector": "datadome",
      "target": "leboncoin.fr",
      "subject": "playwright-stealth",
      "result": "blocked",
      "detail": "Blocked. Both subjects were blocked from this neighbourhood.",
      "segment": "datadome-paired",
      "round": 5,
      "proxy": {
        "type": "residential",
        "exit_ip": null,
        "exit_block": "148.135.0.0/16",
        "geo": null
      },
      "evidence_url": null,
      "checked_at": "2026-08-13"
    },
    {
      "detector": "datadome",
      "target": "leboncoin.fr",
      "subject": "antibrow",
      "result": "pass",
      "detail": "Homepage reached. The only round in which the two subjects disagreed.",
      "segment": "datadome-paired",
      "round": 6,
      "proxy": {
        "type": "residential",
        "exit_ip": null,
        "exit_block": "192.200.0.0/16",
        "geo": null
      },
      "evidence_url": null,
      "checked_at": "2026-08-13"
    },
    {
      "detector": "datadome",
      "target": "leboncoin.fr",
      "subject": "playwright-stealth",
      "result": "blocked",
      "detail": "Blocked. The only round in which the two subjects disagreed.",
      "segment": "datadome-paired",
      "round": 6,
      "proxy": {
        "type": "residential",
        "exit_ip": null,
        "exit_block": "192.200.0.0/16",
        "geo": null
      },
      "evidence_url": null,
      "checked_at": "2026-08-13"
    }
  ],
  "notes": [
    "The primary run is one profile through one exit address from one machine. A single run is a single data point.",
    "In the paired DataDome segment the exit address decided five rounds out of six and the browser decided at most one. One split out of six is not evidence that either subject is better on this check.",
    "The paired DataDome segment covers the leboncoin.fr homepage only. Login, search and checkout endpoints are scored far more harshly.",
    "The baseline was left unhelped on purpose: no timezone or locale override. Every gap it shows is fixable by hand; the question the row answers is who keeps that list current across Chromium releases, not whether it is possible.",
    "The two whoer scores in this report (100% on 2026-08-02, 90% on 2026-08-13) came from different exit addresses. We do not know which check whoer docked and are not guessing at it.",
    "The kernel differs between segments (Chrome 150 in the primary run, Chrome 151 in the baseline pair) because new profiles bind to the newest published build rather than a frozen one.",
    "Retracted 2026-08-13: the primary run's notes recorded that STUN did not resolve through this proxy and that WebRTC therefore gathered no server-reflexive candidate. Probing WebRTC deliberately instead of reading the kernel log showed a srflx candidate on every run since, carrying the proxy exit address. The resolver error still appears in the log; the missing candidate does not.",
    "Retracted 2026-08-13: the CreepJS row was first called a harness bug that would be fixed for September. The extraction was genuinely wrong - CreepJS renders its scores into shadow roots - but fixing it exposed that CreepJS reliably takes the renderer down on this host, which kills the debugging connection and the rest of the run. It now runs in its own invocation so that it only costs itself."
  ],
  "license": "CC-BY-4.0",
  "canonical": "https://antibrow.com/reports/detection-2026-08"
}
