Core Web Vitals p75 Sample Size Confidence
Your field data says you pass. Is that a real signal or a coin flip? A p75 passes exactly when at least 75 percent of samples land under the threshold, so the verdict is a Binomial event. This page computes the exact binomial pass probability, a Wilson interval on the true rate, the rank window your p75 value really sits in, the month-to-month flip risk, and the sample size that would settle it. Everything runs in your browser.
1. Metric and threshold
2. Your measurement window
A p75 is at or under the threshold precisely when ceil(0.75 × n) samples or more are at or under it, so the whole pass or fail decision is one count. The design effect divides n before any statistics are computed: real RUM samples are not independent because a handful of returning users, one slow region, or a bot fleet can supply many correlated page views. Leave it at 1.0 for a clean independent sample; 1.5 to 2.5 is a realistic penalty when a small share of visitors dominates the window.
3. Verdict
4. The binomial that decides it — distribution of the under-threshold count, with the 75 percent line
5. Wilson score interval on the under-threshold rate
6. Where the p75 value itself really sits — distribution-free order-statistic rank window
7. Sample size you would need
| Question | Effective n | Raw samples | Formula |
|---|
The method, exactly
Core Web Vitals is not scored on an average. It is scored on the 75th percentile of real page loads, and a percentile has a property that makes the whole thing tractable: the sample p75 is at or below a threshold T if and only if at least 75 percent of the samples are at or below T. Using the nearest-rank definition, the sample p75 is the value at rank ceil(0.75n) in the sorted sample, so the pass condition collapses to a single count.
Step 1 — the pass event is Binomial
Let q be the true probability that a random page load comes in at or under the threshold, and let X be the number of the n samples in the window that do. If samples are independent draws, X follows a Binomial distribution, and the window passes when X reaches the pass rank.
This page evaluates that tail exactly for windows up to 120,000 samples. The binomial coefficient overflows a double long before that, so each term is computed in log space with a Lanczos log-gamma:
The summation starts at the mode side of the cut and walks outward using the exact term ratio pmf(i+1)/pmf(i) = ((n−i)/(i+1)) · q/(1−q), so terms shrink monotonically and there is no catastrophic cancellation. Above 120,000 samples the tool switches to the normal approximation with a continuity correction, which by then agrees with the exact value to far more digits than anyone needs:
Step 2 — Wilson score interval on q
You never know q. You know the observed fraction q̂. The Wilson score interval inverts the score test, which keeps its bounds inside 0 and 1 and holds coverage far better than the naive Wald interval when the proportion is close to 1 — which is exactly where a healthy Core Web Vitals rate lives.
The single question that matters: does that interval straddle 0.75? If it does, the true p75 could genuinely be on the other side of the threshold and your green or red badge is not evidence of anything. If the whole interval sits above 0.75, you pass for real.
Step 3 — an interval on the p75 value, not just the rate
Step 2 bounds the rate. To bound the value of the 75th percentile you need a distribution-free order-statistic interval, because web latency distributions are heavily right skewed and nothing about them is normal. The count below the quantile is again Binomial with p = 0.75, so its standard deviation is √(np(1−p)), and the ranks that bracket the true quantile are:
Sort your raw samples ascending, read off the j-th and k-th values, and that pair brackets the population p75 at your confidence level. The width of that rank window as a share of n is the honest answer to "how sharply is my p75 pinned down". At n = 1,000 and 95 percent confidence the window runs from rank 723 to rank 778 — your "75th percentile" is really somewhere between the 72.3rd and the 77.8th percentile. On a steep part of a latency curve that can be hundreds of milliseconds.
Step 4 — flip risk
Flip risk answers the question engineering leads actually get asked: will this badge still be green next month if we change nothing? Hold q fixed at the estimate, draw a fresh window of the same size, and ask for the probability of the opposite verdict.
The pathological case is a true rate sitting exactly at 0.75. Then the pass probability converges to one half no matter how much traffic you collect, and the badge is a coin toss forever. That is not a measurement bug; it is what happens when a continuous quantity is reported through a hard cut-off.
Step 5 — the sample sizes
Three different questions, three different formulas. To resolve q to a margin m:
To stop the verdict flipping more than a fraction α of the time, invert the normal approximation of the pass probability around the 0.75 cut, using the one-sided z:
And to call a before-and-after or A/B change in the good-rate significant, the standard two-proportion z-test size per arm, with p̄ the pooled rate:
Note the shape of the flip-risk formula: the required n grows with the inverse square of how far your true rate sits from 75 percent. At a true rate of 78 percent you need about 520 samples for a flip rate under 5 percent. At 76 percent you need about 4,900 — roughly a tenfold jump for a two-point move in the rate.
The thresholds this tool loads
| Metric | Good (p75 at or under) | Poor (p75 above) |
|---|---|---|
| LCP — Largest Contentful Paint | 2500 ms | 4000 ms |
| INP — Interaction to Next Paint | 200 ms | 500 ms |
| CLS — Cumulative Layout Shift | 0.10 | 0.25 |
| FCP — First Contentful Paint | 1800 ms | 3000 ms |
| TTFB — Time to First Byte | 800 ms | 1800 ms |
LCP, INP and CLS are the three Core Web Vitals. FCP and TTFB are diagnostic metrics reported alongside them, not part of the Core Web Vitals assessment. Every one of them is assessed at the 75th percentile, segmented separately for mobile and desktop.
Assumptions this model makes, stated plainly
- Independence. The binomial assumes each sample is an independent draw. Field data is clustered by user, session, device, network and geography, which inflates the true variance. The design effect input is the standard correction: divide n by it and everything downstream widens honestly.
- A stable underlying rate. Flip risk holds q constant between windows. If your traffic mix shifts — a campaign brings in a slower country, a new device tier arrives — the real month-to-month variation is larger than the number shown here, not smaller.
- Nearest-rank percentile. The pass rank is
ceil(0.75n). Tools that interpolate between order statistics differ by at most one rank, which is immaterial except at very small n, where nothing is trustworthy anyway. - CrUX bucketing. The Chrome UX Report publishes histogram buckets rather than raw values and derives percentiles from them, and it does not publish its minimum-sample threshold for a URL or origin to appear. Treat CrUX percentile figures as slightly coarser than the model here assumes; the rate-based conclusions still hold.
- Not a field-versus-lab bridge. Lighthouse runs a single synthetic load. It cannot produce a p75 at all, so none of this applies to a lab score.
How to get the numbers to type in
If you run your own RUM, the count you need is one query: how many beacons in the window had the metric at or under the threshold, and how many beacons there were in total. If you only have the CrUX API, the histogram gives you the cumulative density under each bucket boundary directly, and the bucket edges for LCP, INP and CLS are exactly the good and poor thresholds above — so the density of the first bucket is your under-threshold proportion. What CrUX will not give you is n, which is why the design effect and the "samples for a stable verdict" figure matter most for low-traffic origins.
Frequently asked questions
Last updated 29 July 2026