Skip to main content

PageSpeed Insights vs Lighthouse: What's the difference?

Why your Lighthouse score differs from PageSpeed Insights. Understand lab vs field data, scoring differences, and when to use each tool.
Harlan WiltonHarlan Wilton6 min read Published Updated

PageSpeed Insights runs Lighthouse on Google's servers and shows CrUX field data beside the lab report. Lighthouse CLI runs locally and reports lab data only. The two Lighthouse scores can differ because PSI and your local run use different hardware, network paths, Chrome versions, and test settings. CrUX does not change the Lighthouse score. It is a separate view of what real Chrome users experienced.

Both tools come from Google. Both give you a 0-100 performance score. Both use the same Lighthouse engine. Here is why their numbers differ, and which one to trust.

The two tools

Lighthouse

Open-source auditing tool. Runs locally in Chrome DevTools, CLI, or CI. Lab data only: controlled, reproducible synthetic tests on your machine. You choose device emulation, throttling mode, and network conditions. No Google account needed.

npx lighthouse https://example.com --output=json

Currently on version 13, which removed the PWA category.

PageSpeed Insights

Google's web tool at pagespeed.web.dev. It runs a Lighthouse test on Google's infrastructure and, when the URL has enough traffic, shows real-user metrics from CrUX over a rolling 28-day window. Paste a URL and go.

Also runs Lighthouse 13. Provides an API with 25,000 free requests/day.

https://example.com
Elements
Console
Sources
Network
Performance
Lighthouse
Application
92
Performance
First Contentful Paint
1.2 s
Largest Contentful Paint
2.1 s
Total Blocking Time
120 ms
Cumulative Layout Shift
0.05
Speed Index
2.8 s

Key differences

Lighthouse (CLI/DevTools)PageSpeed InsightsEdge
Data typeLab onlyLab + field (CrUX) PSI
Where it runsYour machineGoogle servers Lighthouse
INPNot measured (TBT proxy)Real field data from CrUX PSI
ThrottlingSimulated or applied (your choice)Simulated only Lighthouse
CachingCold or warm (configurable)Always cold cache Lighthouse
NetworkYour connection (throttled)Google's network-
Score consistencyHigh (controlled)Varies (shared infra) Lighthouse
API accessLocal only25k free requests/day PSI
Site-wideOne URL at a timeOne URL at a time-

Why your scores differ

Expect some variance between PSI and local Lighthouse. Even repeated runs in the same environment can move because the page, network, CPU load, and third-party responses change. Compare medians from several runs made with the same settings before treating a score change as a regression. Here is what causes larger gaps:

Server location

PSI chooses its own test location and network path. Your local Lighthouse run starts from your machine. If your origin or CDN behaves differently for those paths, TTFB and LCP will differ too.

Local Lighthouse connects directly from your machine, which is often on the same network as your server or using a nearby CDN edge.

Throttling method

PSI uses simulated throttling exclusively - it runs the page at full speed then mathematically adjusts the metrics. Lighthouse CLI lets you choose between simulated and applied (real network) throttling. Applied throttling produces lower scores but more realistic results.

Hardware differences

Google's servers have different CPU/RAM profiles than your laptop. Simulated throttling tries to normalize this, but CPU-heavy pages (lots of JavaScript parsing) score differently depending on the hardware.

Caching state

PSI always runs a cold-cache test. Your local Lighthouse often inadvertently benefits from cached service worker responses or browser cache, especially if you've visited the page recently.

Extensions and background processes

Chrome extensions inject scripts and CSS. Local Lighthouse in DevTools runs in a separate profile, but other browser activity still affects CPU availability. PSI has none of these contamination issues.

Lab data vs field data

This is the most important distinction between the two tools.

Lab DataLighthouse
Your Machine
Lighthouse
Synthetic Score
1 page load
Field DataCrUX / PSI
Real Chrome Users
CrUX Dataset
PSI Field Metrics
1000+ visits

Lab data (Lighthouse) tests a single page load under controlled conditions. It's reproducible, fast, and catches regressions - but it represents one synthetic user, not your actual audience.

Field data (CrUX in PSI) aggregates real Chrome users visiting your site over a 28-day rolling window. It uses the 75th percentile (P75), catching the experience of users with slow devices and poor connections - not just the median.

Lab (Lighthouse)Field (CrUX/PSI)
SourceSimulated page loadReal Chrome users
Sample1 test runThousands of visits (P75)
Time windowPoint-in-time28-day rolling average
Traffic requirementNone~1,000 page loads in 28 days
INPNot availableYes
ConsistencyHighVaries with real conditions

A site can score 95 in Lighthouse but show "Poor" LCP in CrUX field data. This happens when real users are on slow mobile networks that lab throttling doesn't fully simulate.

How Lighthouse scores performance

Both tools use the same scoring weights. Understanding them explains why the same page gets different numbers:

TBTTotal Blocking Time
30% weight
Good ≤200msPoor >600ms
LCPLargest Contentful Paint CWV
25% weight
Good ≤2.5sPoor >4.0s
CLSCumulative Layout Shift CWV
25% weight
Good ≤0.10Poor >0.25
FCPFirst Contentful Paint
10% weight
Good ≤1.8sPoor >3.0s
SISpeed Index
10% weight
Good ≤3.4sPoor >5.8s

Total Blocking Time carries the largest weight at 30%, while Speed Index contributes 10%. Pages with heavy JavaScript often show the largest score differences because CPU speed changes TBT. Slow visual progress can move Speed Index even when the final LCP element is unchanged.

INP: the biggest gap between PSI and Lighthouse

Interaction to Next Paint (INP) replaced First Input Delay as a Core Web Vital in March 2024. It measures responsiveness across the entire page lifecycle: every tap, click, and keypress.

Lighthouse cannot measure INP. It uses Total Blocking Time (TBT) as a lab proxy, but TBT only measures main-thread blockage during initial load. A page can achieve 0ms TBT and still fail INP in the field because JavaScript freezes the page when users interact after load. Read more about the INP vs TBT relationship.

PSI shows real INP field data from CrUX. This is the single biggest reason to check PSI even if you primarily use Lighthouse CLI - it's the only place you'll see actual interaction responsiveness without adding your own Real User Monitoring.

When to use which

ScenarioUse
DevelopmentLighthouse CLI - fast feedback, consistent scores, CI integration
Production monitoringPSI / CrUX - real user data, INP, field metrics
CI/CD checksLighthouse CI - automated regression detection
Debugging score dropsLighthouse CLI - isolate variables, test specific throttling
Checking INPPSI - only source of real INP data without RUM
Site-wide auditsUnlighthouse - crawl every page, spot patterns across routes
Stakeholder reportsPSI - field data carries more weight, reflects real users

How Unlighthouse helps

Both Lighthouse and PSI test one URL at a time. Performance issues rarely affect one page - a slow font, a heavy third-party script, or a layout shift pattern can be site-wide.

Unlighthouse crawls your entire site and runs Lighthouse on every discovered page. Instead of spot-checking your homepage, you catch the /checkout page with a 3.2s LCP or the /blog layout causing CLS on 40 posts.

npx unlighthouse --site https://your-site.com

Combine with PSI for field data on your critical pages, and Lighthouse CI for automated regression checks in your pipeline. Each tool fills a different gap.

Try Unlighthouse

FAQ

Why is my PageSpeed Insights score different from Lighthouse?

PSI runs Lighthouse on Google's infrastructure with different hardware, network conditions, and settings from your local machine. CrUX appears separately and does not affect the lab score. Run each setup several times and compare medians under consistent settings.

Which score should I trust: PSI or Lighthouse?

For production sites with enough traffic: trust PSI's field data. It reflects what real users experience. For development and debugging: trust local Lighthouse, where you control variables and get consistent results.

Does PageSpeed Insights use Lighthouse?

Yes. PSI runs Lighthouse on Google's servers and adds CrUX field data on top. The lab scores in PSI come from the same Lighthouse engine you run locally.

Why does my score change every time I run PageSpeed Insights?

Network conditions, server load, page content, and third-party responses vary between runs. Run at least three tests and compare the median. Keep the test URL and device settings unchanged.

What is field data in PageSpeed Insights?

Field data comes from the Chrome User Experience Report (CrUX): real metrics from eligible Chrome users over the previous 28 days, reported at the 75th percentile. Google does not publish a fixed traffic threshold for URL-level data, so low-traffic URLs may show only origin data or no field data.

Should I optimize for Lighthouse or PageSpeed Insights?

Optimize for real users. Use Lighthouse to diagnose and fix lab issues during development. Use PSI field data to verify improvements reach your actual audience. Don't chase a perfect 100 - diminishing returns hit hard above 90.

Can I get a 100 on PageSpeed Insights?

In lab data, yes. But field data may show issues because real users have diverse devices, network conditions, and geographic locations that lab tests can't replicate. A 100 lab score with "Poor" field CWV means your real users are still suffering.