LCP monitoring

Scoped to all projects · lab runs from PageSpeed Insights, field data from the Coframe SDK

field updated 0s ago
SDK · field p75
2.14s
+180msvs 1.96s baseline
38.1M real sessions · 28d
PSI · desktop (lab)
2.08s
+290msvs 1.79s baseline
1 Lighthouse run/day · n=1
PSI · mobile (lab)
3.98s
+670msvs 3.31s baseline
Moto G Power · 4G throttled
Lab ↔ field gap
+1.84s mobile
desktop lab is −60ms from field
field p75 sits beside desktop lab,
not mid-way between the two

LCP over time · lab vs field

DayJul 23
SDK field p752.14s
PSI desktop2.08s
PSI mobile3.98s
All three sources rise from Jul 20 — the regression is real, not lab noise. Field p75 crosses 2.10s on Jul 22; mobile lab crossed the budget long before and has been crossing it every day for 28 days. INC-2284

Why the three numbers disagree

read this before alerting on any of them
Lab is n=1. Field is a distribution.

PageSpeed runs Lighthouse once per day, from one machine, on one network profile. There is no p75 in a single run — there is one number and its run-to-run variance. The SDK observes every real session and reports p75 over 38.1M samples.

PSI mobile is one emulated phone.

A Moto G Power on throttled 4G — deliberately near the low end. Your real mobile traffic is a different device population. That is the whole +1.84s gap. Desktop lab lands within 60ms of field p75, so the field number is not "between" the two labs.

Use each for what it is good at.

Field is what users experienced and what Core Web Vitals grades. Lab is reproducible and attributable — you can run it against a staging URL or with ?cf_disable=true to isolate Coframe's contribution. Alert on field. Debug with lab.

Current PSI collection reads lighthouseResult.audits only — it never touches PSI's loadingExperience block, so there is a fourth number (Google's own CrUX field data) not yet on this page.

SDK device split

unconfirmed

PSI splits desktop and mobile because strategy is a request parameter. The SDK has no equivalent — it observes whatever browser the real session runs in. A split exists only if the beacon carries a device dimension.

LCP value + URL + timestamp present
p75 rollup window present
Device class on the beacon unconfirmed

If the beacon already sends UA or viewport width, the split is a server-side GROUP BY with no SDK change. If not, it is one field: navigator.userAgentData.mobile with a viewport-width fallback. Either way the LCP measurement itself is untouched.

Preview the split view
shows what the chart gains once the field lands
Caveat: SDK "mobile" will not equal PSI "mobile". Different populations, not different measurements of one thing.

What alerts on this

LCP budget rule reads PSI mobile (lab)
fired 84× in 7d · 2% acted on · auto-muted
Recommended: read SDK field p75
would have fired 2× in 7d · both real

A rule pointed at mobile lab fires every single day, because mobile lab has been above 2.5s for all 28 days. That is not a regression signal — it is a constant.

By URL

6 URLs under test · today's run
URL / template SDK p75 PSI desktop PSI mobile Samples Field vs budget
/collections/* 2.48 2.31 4.18 984k −0.02 under
/products/* 2.21 2.08 3.84 2.31M 0.29 under
/ (home) 2.02 1.94 3.62 1.42M 0.48 under
/search 1.96 1.88 3.41 143k 0.54 under
/blogs/* 1.84 1.71 3.12 61k 0.66 under
/cart 1.78 1.62 2.94 218k 0.72 under
Budget is 2.5s on field p75. Every URL passes on field; every URL fails on mobile lab.

PageSpeed runs

Cadence
Daily · 03:00 UTC
Strategies
mobile + desktop
URLs per run
6 per project
Last run
03:04 UTC · 12 of 12 ok
Next run
in 15h 04m
API quota at full fleet coverage 15,408 / 25,000

1,284 projects × 6 URLs × 2 strategies. Adding a 7th URL crosses the daily ceiling.

Prototype · figures are sample data for layout review, not production telemetry.