PageSpeed Insights gives you one score, from one simulated pageload, run from a Google data center on a throttled connection. It tells you nothing about the visitor on a three-year-old Android phone on hotel wifi who just bounced off your pricing page. If you only check PageSpeed before launch and never again, you are flying blind on the traffic that actually shows up.

OperatorStack's performance monitoring collects Core Web Vitals from every real visitor automatically, through the same script tag you already use for analytics or your waitlist. No PageSpeed runs, no Lighthouse CLI, no separate dashboard to remember to check.

OperatorStack tracks LCP, FCP, CLS, INP, and TTFB from real visitor sessions using the browser's PerformanceObserver API, no extra script tag required if you already run OperatorStack. Metrics roll up into a weighted 0-100 score you can view at P50, P75, or P95, broken down by page, device, and browser. This is field data (real user monitoring), which is what Google's search ranking actually uses, unlike the lab data PageSpeed Insights reports.

Lab Data vs. Field Data

PageSpeed Insights and Lighthouse measure lab data: a single simulated pageload under fixed, throttled conditions. It is useful for catching regressions before you ship, but it does not reflect what your actual visitors experience across different devices, browsers, and network conditions.

OperatorStack measures field data, also called real user monitoring (RUM): metrics collected from real visitors as they load your pages. Google's search ranking algorithm uses field data too, specifically the Chrome User Experience Report, so a green PageSpeed score does not guarantee good field performance if your real traffic skews toward older phones or slower connections.

A perfect PageSpeed Insights score does not mean your visitors have a fast experience. Lab tests run once, from one location, on a fixed device profile. If most of your traffic comes from mobile visitors on 4G, your real Largest Contentful Paint can be far worse than what PageSpeed reported.

What Gets Tracked Automatically

If you already have the OperatorStack script tag on your site, performance monitoring is already running. The embed script uses PerformanceObserver to collect five metrics per pageload and sends them as a single event when the tab is hidden or after 30 seconds, whichever comes first:

  • LCP (Largest Contentful Paint) -- how long until the biggest visible element renders
  • FCP (First Contentful Paint) -- how long until the first content paints
  • CLS (Cumulative Layout Shift) -- how much content jumps around while loading
  • INP (Interaction to Next Paint) -- how responsive the page is to clicks and taps
  • TTFB (Time to First Byte) -- how long your server takes to respond

No configuration, no sampling setup, no extra <script> tag. If you have not added OperatorStack yet:

1

Add the script tag. Paste this before </head> on any page you want tracked:

<script src="https://operatorstack.dev/os.js" data-project="pk_your_key"></script>
2

Wait for real traffic. Performance events start arriving as visitors load pages. There is no backfill; historical PageSpeed runs and OperatorStack's field data are two different data sources.

3

Open the Performance tab. Your dashboard shows a live 0-100 score, a Core Web Vitals trend chart, and breakdowns by page, device, and browser.

Reading Your Score

Each metric is scored against the same good / needs-improvement / poor thresholds Google uses for Core Web Vitals:

MetricGoodPoor
LCP<=2.5s>4s
INP<=200ms>500ms
CLS<=0.1>0.25
FCP<=1.8s>3s
TTFB<=200ms>600ms

Your overall score is a weighted composite: LCP and INP each count for 30 percent, CLS counts for 20 percent, and FCP and TTFB each count for 10 percent, the same weighting methodology Lighthouse uses. A score of 90+ is good, 50-89 needs work, and anything below 50 is poor.

You can view all of this at three percentiles: P50 (your median visitor's experience), P75 (what 75 percent of visitors experience or better, the default and the one Google's ranking signal uses), and P95 (your worst 5 percent, useful for catching device- or network-specific problems that a median hides).

Finding the Pages Actually Dragging You Down

An average score across your whole site hides the page that is actually a problem. OperatorStack's Performance tab ranks every page by score, worst first, so you can see exactly which URL needs attention instead of guessing from a site-wide number.

If your app has parameterized routes (/blog/1, /blog/2, /blog/3), OperatorStack can auto-group them into a single "Blog Posts" row using AI-generated grouping rules, so one slow template doesn't get buried under dozens of near-identical individual URLs.

Device and browser breakdowns work the same way. If your mobile score lags far behind desktop, that usually points to JavaScript bundle size or unoptimized images rather than server response time, since TTFB is typically similar across devices while LCP and INP diverge.

Frequently Asked Questions

Do I need to add a separate script for performance monitoring?

No. If you already have the OperatorStack script tag on your site for analytics, a waitlist, or AI chat, performance monitoring runs through the same tag. It uses the browser's built-in PerformanceObserver API, so there is nothing extra to install.

Is this the same data as PageSpeed Insights or Lighthouse?

No. PageSpeed Insights and Lighthouse run a single simulated pageload from a Google data center (lab data). OperatorStack records Core Web Vitals from your actual visitors on their actual devices and connections (field data, also called real user monitoring or RUM). The two often disagree, and field data is what Google actually uses for search ranking.

What percentile should I actually look at?

P75 by default -- it is what Google's own ranking signal uses. P50 shows your median visitor's experience, which looks better than reality if you have a slow tail. P95 shows your worst 5 percent, useful for catching device- or network-specific problems that P75 hides.

How is the 0-100 performance score calculated?

It is a weighted composite of your five Core Web Vitals at the selected percentile: LCP and INP each count 30 percent, CLS counts 20 percent, and FCP and TTFB each count 10 percent. A score of 90+ is good, 50-89 needs work, and below 50 is poor, using the same good/needs-improvement/poor thresholds as Google Lighthouse.

Why does my mobile score look worse than desktop?

Mobile devices typically have slower CPUs and network connections, so real-user LCP and INP values run higher (slower) than desktop. OperatorStack breaks scores out by device so you can see the gap directly instead of guessing from a single average.