{
  "study": "Sledování před souhlasem na českých firemních webech",
  "publisher": "CIAD - Cesky institut pro AI a data",
  "url": "https://ciad.cz/studie/sledovani-pred-souhlasem/",
  "license": "CC BY 4.0",
  "generated": "2026-08-03",
  "scan_date": "2026-08-03",
  "note_on_data": "Agregatni data bez domenovych jmen a bez jmen firem. Vzorek je konvenicni (vyzkumny korpus CIAD pouzivany napric paralelnimi bezpecnostnimi studiemi), ne nahodny nebo reprezentativni vzorek ceske ekonomiky.",
  "sample": {
    "total_domains_targeted": 299,
    "n_failed_excluded": 35,
    "failure_breakdown": {
      "dns_failure": 29,
      "timeout": 6
    },
    "n_evaluable": 264,
    "sampling_method": "convenience sample: CIAD research corpus used across parallel security studies, not random or representative of the Czech economy"
  },
  "pre_consent_tracking": {
    "denominator": 264,
    "sites_with_any_pre_consent_tracker": 184,
    "sites_with_any_pre_consent_tracker_pct": 69.7,
    "sites_clean_no_tracker": 80,
    "sites_clean_no_tracker_pct": 30.3
  },
  "tracker_vendor_pre_consent": {
    "denominator": 264,
    "note": "one site can load more than one vendor's tracker, so the column sum exceeds 264",
    "counts": {
      "google": 177,
      "seznam": 46,
      "meta": 45,
      "ms_clarity": 27,
      "linkedin": 14,
      "other_combined_lt10_each": 28
    },
    "pct": {
      "google": 67.0,
      "seznam": 17.4,
      "meta": 17.0,
      "ms_clarity": 10.2,
      "linkedin": 5.3,
      "other_combined_lt10_each": 10.6
    }
  },
  "consent_platform_presence": {
    "denominator": 264,
    "cmp_detected": 138,
    "cmp_detected_pct": 52.3,
    "no_cmp_detected": 126,
    "no_cmp_detected_pct": 47.7
  },
  "consent_platform_vendor": {
    "denominator_cmp_detected": 138,
    "note": "categories with fewer than 10 sites each are combined into other_named_combined_lt10_each",
    "counts": {
      "generic_selfbuilt": 80,
      "cookiebot": 24,
      "cookieyes": 11,
      "other_named_combined_lt10_each": 23
    },
    "pct": {
      "generic_selfbuilt": 58.0,
      "cookiebot": 17.4,
      "cookieyes": 8.0,
      "other_named_combined_lt10_each": 16.7
    }
  },
  "cmp_vs_pre_consent_firing_crosstab": {
    "denominator": 264,
    "definition": "cross of whether a consent banner (CMP) was detected against whether at least one third-party tracker fired before any consent interaction",
    "counts": {
      "no_cmp_no_tracker": 63,
      "no_cmp_fires_pre_consent": 63,
      "has_cmp_no_tracker_pre_consent": 17,
      "has_cmp_fires_pre_consent_anyway": 121
    },
    "pct": {
      "no_cmp_no_tracker": 23.9,
      "no_cmp_fires_pre_consent": 23.9,
      "has_cmp_no_tracker_pre_consent": 6.4,
      "has_cmp_fires_pre_consent_anyway": 45.8
    },
    "pct_of_cmp_sites_that_still_fire": {
      "n": 121,
      "denominator": 138,
      "pct": 87.7,
      "definition": "of sites where a consent banner was detected at all, share that still let at least one tracker fire before any consent interaction"
    }
  },
  "cookies_pre_consent": {
    "denominator": 264,
    "mean_total_cookies": 4.26,
    "median_total_cookies": 3.0,
    "mean_non_essential_cookies": 1.17,
    "median_non_essential_cookies": 0.0,
    "sites_with_zero_pre_consent_cookies": 69,
    "sites_with_zero_pre_consent_cookies_pct": 26.1,
    "sites_with_nonessential_pre_consent_cookie": 95,
    "sites_with_nonessential_pre_consent_cookie_pct": 36.0
  },
  "methodology_comparison": {
    "description": "An earlier static-analysis pass estimated pre-consent tracking indirectly, by checking page source for the absence of a consent-platform (CMP) code signature, without rendering the page in a browser or observing actual network requests.",
    "earlier_static_estimate_pct_approx": 15,
    "this_live_measurement_pct": 69.7,
    "ratio_approx": "4.6x",
    "reason_for_gap": "the static method only estimated whether a CMP's code was detectable in page source, which says nothing about whether trackers actually fire before consent or whether a detected CMP correctly gates them; the live measurement loads each page in a fresh isolated browser context and records what fires before any interaction, accepting or rejecting nothing"
  },
  "scan_method": {
    "type": "passive",
    "description": "Fresh isolated browser (Chromium) context per site, page loaded to homepage, network allowed to settle, zero consent interaction (nothing accepted, nothing rejected). Header/scoring code shared with the earlier advokati-resken.py passive scan.",
    "script": "consent-scan.py"
  }
}
