![Kevin K. Lee](https://web.dev/images/authors/kevinkiklee.jpg) Kevin K. Lee [X](https://twitter.com/kevinkiklee) [GitHub](https://github.com/kevinkiklee)

<br />


Published: September 15, 2026

<br />

This document details the measurement methodology used to measure [CrUX ad metrics](https://developer.chrome.com/docs/ads/metrics) which consists of [Ad Count](https://developer.chrome.com/docs/ads/metrics/count), [Ad Density](https://developer.chrome.com/docs/ads/metrics/density), [Ad Weight: CPU](https://developer.chrome.com/docs/ads/metrics/weight-cpu), and [Ad Weight: Network](https://developer.chrome.com/docs/ads/metrics/weight-network).

## Measurement lifecycle

Chrome tracks ad experience metrics across a lifecycle from the start of the page load until the tab is unloaded.
![A three-stage infographic outlining the ad metrics measurement workflow of activation, collection, and termination](https://developer.chrome.com/static/docs/ads/methodology/image/ad-methodology-stages.png) The three stages of ad measurement

The measurement lifecycle consists of three phases:

1. **Activation:** Chrome begins measuring ad metrics when the browser receives the first response bytes ([time-to-first-byte or TTFB](https://web.dev/articles/ttfb)) for the main HTML document.
2. **Collection:** For average Ad Count and Ad Density, Chrome performs [viewport sampling](https://developer.chrome.com/docs/ads/methodology#viewport-sampling). For cumulative CPU and network resource usage, the browser aggregates the values throughout the duration of the user's session.
3. **Termination:** Telemetry collection ends when the page is unloaded (due to hard navigation, tab closure, or browser termination). On Android, collection also terminates if the browser app is backgrounded.

## Reporting scope

Chrome's ad detection is most reliable on sites with recognizable advertising partners. To support the quality of the metrics reported in CrUX, we include only those sites that list at least one authorized seller in their `ads.txt`. Origins with no `ads.txt`, or those containing only a placeholder record, are excluded from CrUX ad metrics reporting.

> [!IMPORTANT]
> **Key Term:** The *Authorized Digital Sellers (`ads.txt`) file* is a text file that publishers use to publicly declare the domains of sellers authorized to sell inventory on the site. A publisher can also use the placeholder record to indicate the intent of an empty `ads.txt` file. To learn more, see the [IAB Tech Lab's `ads.txt` documentation](https://iabtechlab.com/ads-txt/).

## Local ad metrics in DevTools

The `ads.txt` filtering occurs during [CrUX data aggregation](https://developer.chrome.com/docs/crux/methodology), not within the browser. As a result, the [Chrome DevTools Ads panel](https://developer.chrome.com/docs/ads/detection#devtools_support) attempts to display ad metrics locally for any page you inspect, even on sites without an `ads.txt` file or without authorized sellers declared. As explained before, these local measurements will only be included in CrUX aggregate reports if the site maintains an `ads.txt` file with authorized sellers.

## The 75th percentile (`p75`)

Chrome reports the 75th percentile (`p75`) of the ad metrics, which indicates that 75% of all user sessions on the page experienced that metric value or better.

For example, if the reported Ad Density of `p75` is 23% (or `"23"`), it means that 75% of all visits to that site had an Ad Density of 23% or less, while 25% of visits experienced a higher Ad Density. Similarly, if the reported Ad Count of `p75` is `"3.00"`, it means 75% of sessions had 3 or fewer ads in the viewport at any given sample point.

Chrome uses the 75th percentile rather than averages to prevent outliers from skewing the data. The skew can come from outliers, such as a user on a slow connection or a page layout with heavy scripts, whereas percentiles show the distribution of user experiences.

## Visual measurement

> [!IMPORTANT]
> **Key Term:** The *viewport* refers to the rectangular visible area of the web page displayed to the user in the browser window or device screen. It represents only the canvas containing the page content, excluding browser interface elements such as the address bar, tabs, bookmarks bar, and side panels.

- **Viewport sampling:** To calculate Ad Count and Ad Density, Chrome samples the viewport once per second, and takes a snapshot. An ad is considered visible if any of its pixels are inside the viewport at the exact moment of the 1-second sample point.
- **Overlapping ads:**
  - For **Ad Density**, if multiple ads overlap, the overlapping area is counted only once by calculating the union of the ad areas.
  - For **Ad Count**, each ad is counted individually if at least one of its pixels is in the viewport, even if it is partially or fully overlapped by another ad.
- **Partial visibility:**
  - For **Ad Density**, only the portion of the ad that is physically inside the viewport at the sample point is measured.
  - For **Ad Count**, an ad is included in the count if at least one pixel of the ad element is inside the viewport at the sample point.
- **Dynamic viewports on mobile:** On mobile, browser interface elements like the address bar may show or hide as the user scrolls, changing the height of the visible area. Chrome uses the actual viewport dimensions at the exact moment of each 1-second sample.
- **Non-rendering ads:** Ads that are not rendered (such as those with `display: none`) have no layout footprint, and are excluded from both count and density calculations. CPU and network ad weights are still measured.

## Scrolling and navigation behaviors

User interactions and site behaviors, such as infinite scrolling, [single-page application (SPA)](https://developer.mozilla.org/docs/Glossary/SPA) routing, and backgrounding, can affect the ad metric measurement lifecycle.

### Infinite scrolling

On a site with infinite scrolling, the sampling engine continues to collect viewport samples while the page is active. If a user idles at the bottom of a long page, the stream of identical samples will continue to be added to the session average. This may skew the overall session average depending on the duration of the idle state.

### Single-page applications

On single-page application (SPA) sites using client-side routing, soft navigations don't reset the collection window. Metrics accumulate continuously for the entire lifespan of the tab until a hard navigation or tab closure occurs.

All layout samples collected using viewport sampling across all soft-navigated views within the session are averaged together into a single, cumulative session score. This behavior is similar to how Core Web Vitals metrics are aggregated over the entire lifespan of a page view without resetting on client-side client-routed transitions.

This will likely change in the near future. For more details, see the documentation on [measuring soft navigations](https://developer.chrome.com/docs/web-platform/soft-navigations).

### Background activity

To maintain telemetry accuracy, the collection pauses if the browser tab moves to the background, such as when the user switches tabs or if the device screen locks. Sampling resumes automatically when the tab returns to the foreground or the device is unlocked.

Overlay videos ([Picture-in-Picture](https://developer.mozilla.org/docs/Web/API/Picture-in-Picture_API)) are ignored to prevent background runtime skewing.

## Feedback

If you have any questions or feedback regarding ad metrics, reach out to us at the [Chrome UX Report Google Group](https://groups.google.com/a/chromium.org/g/chrome-ux-report).