Why doesn’t PageSpeed Insights have any history?
Every API call answers for right now; yesterday’s answer is gone unless someone stored it. So the question every performance incident begins with — when did the regression actually start? — is one the API cannot answer.
A trend line exists only because the pipeline snapshots on a schedule. With daily runs in your own database you can pin the day a metric moved, line it up against deploys and Lighthouse version changes, and answer with a date instead of a guess.
Why do lab and field Core Web Vitals disagree?
Because they answer different questions. Lab is one synthetic Lighthouse run on a throttled connection; field is CrUX’s 28-day distribution of your real visitors on their real devices. A page can pass in the lab and fail in the field — or the reverse.
It also means a fix shipped today takes weeks to fully register in field data, as old sessions age out of the window. Lab catches the change same-day; field confirms it over the following weeks. The data models store both, labelled, so nobody averages them together by accident.
Why does your page show origin data instead of URL data?
CrUX only reports URL-level data for pages with enough real traffic; below that threshold the API silently substitutes origin-level numbers. Treating those as page measurements is a category error.
The pipeline flags the fallback level on every row, so ‘this template has no field data’ becomes a finding, not a hidden footnote.
How many URLs can you track with the PageSpeed API?
The API allows 25,000 queries per day by default, with a short-window rate limit on top — so monitoring every URL of a large site daily isn’t realistic. It also isn’t useful: a template that’s fast for one product page is fast for the rest.
The honest model is a curated URL set that represents each page type, tracked at URL × device class × day grain. Which URLs make the set is a consulting decision, and it’s the first thing we settle.
Why is your PageSpeed score different every run?
Lab runs are simulations, and simulations vary — server response times, third-party scripts and throttling all wobble between runs, and Lighthouse versions change the scoring itself. Chasing a single score up and down is chasing noise.
Stored daily runs give you medians and trends — the level at which the score actually means something — with the Lighthouse version recorded, so a scoring change is visibly different from a regression you shipped.