DEV Community

Hana
Hana

Posted on

248 SaaS homepages measured on mobile: the median takes 10 seconds to paint

Every SaaS homepage I opened on my phone felt slow. That is taste, and taste is arguable, so I measured instead.

252 SaaS homepages went into the sweep, Lighthouse 12, mobile preset, one run each. 248 of them returned a measurable LCP. Four (carrd.co, checkly.com, firebase.google.com, hellosign.com) never reached an idle moment Lighthouse could measure from, so they are excluded from every figure below rather than counted as zero. Here is what came back.

The numbers

median p90 worst
Page weight 4.0 MB 10.4 MB 23.1 MB
LCP 10.4 s 27.4 s 52.5 s
Performance score 55 0

236 of 248 sites, 95 percent, miss the 2.5 second LCP threshold. 89 of them score under 50.

The median is the part that stopped me. Not the tail, the median. Half of all the SaaS homepages I measured take longer than ten seconds to paint their largest element on a throttled phone.

The heaviest ten from that sweep, measured 2026-09-07:

23.1 MB  LCP 12.4s  appsmith.com
23.0 MB  LCP 33.0s  airtable.com
22.6 MB  LCP 13.6s  hightouch.com
22.1 MB  LCP 34.5s  clay.com
20.8 MB  LCP 18.3s  edisonmail.com
19.6 MB  LCP  9.5s  loom.com
15.1 MB  LCP 12.7s  clickup.com
13.8 MB  LCP 29.4s  leena.ai
13.4 MB  LCP 11.4s  coda.io
13.2 MB  LCP 27.1s  retellai.com
Enter fullscreen mode Exit fullscreen mode

Two caveats on that table. It is a single run per site, so treat any one row as indicative rather than definitive. And these pages move: when I re-measured Airtable this morning it had dropped to 13.8 MB, though its LCP had not improved.

These are not amateur sites. These are companies with performance budgets, design systems and platform teams.

So I rebuilt one

Numbers without a counterfactual are just complaining. I took the worst LCP in that list and rebuilt the first screen.

Re-measured this morning, Airtable's live homepage on the mobile preset: performance 56, LCP 30.7 s, 13.8 MB, 109 scripts.

Then the same first screen, rebuilt: the same headline, the same subhead, the same two buttons, the same four feature cards, their colours, their logo as inline SVG.

Performance 100, LCP 0.75 s, FCP 0.63 s, TBT 0 ms, 7 KB, 2 requests.

One file. No framework, no webfont, no image request, no analytics.

What the 7 KB version does differently

No webfont. Haas, -apple-system, system-ui, Segoe UI, Roboto renders instantly in the brand's own fallback chain. A webfont on the hero is a render-blocking round trip in front of your headline, and the headline is usually the LCP element.

No hero image. The product canvas is a CSS grid with an aspect-ratio box. It reserves its space, so CLS is zero, and it costs nothing to download.

No JavaScript. Not "deferred", not "bundled", none. The first screen of a marketing page is text, two buttons and a picture. None of that needs a runtime.

Fluid type instead of breakpoints. clamp(40px, 6.2vw, 66px) on the h1 removes three media queries and reads correctly at every width between 320 and 2560.

One layout token. --shell: min(1160px, 100% - 48px) gives every band the same rail and the same gutter, so the page is aligned by construction rather than by inspection.

The whole stylesheet is 4 KB and sits inline in <head>, which means zero render-blocking requests.

The honest caveats

This is the first screen only. It carries no analytics, no video, no personalisation, no CMS and no consent layer. It was served from localhost, so there is no origin latency in that 0.75 s. A real deployment on a real origin with a real cookie banner will not be 0.75 s.

That is not the point. The point is that the gap between 30.7 seconds and one second is not made of features. Airtable's first screen shows a headline, a paragraph, two buttons and a product shot, and it costs 13.8 MB and 109 scripts to do it. Mine shows the same four things for 7 KB.

Almost none of the weight on these pages is the content. It is the delivery of the content.

Try it on your own page

npx lighthouse@12 https://yoursite.com \
  --only-categories=performance --quiet \
  --chrome-flags="--headless=new"
Enter fullscreen mode Exit fullscreen mode

No preset flag means mobile, which is the one that matters and the one nobody runs.

If your LCP starts with a 1, you are in the top 5 percent of the set I measured. If it starts with a 2, you are at the median. If it starts with a 3, something on your first screen is downloading before your headline.

The full 248-site dataset, with every site's weight, LCP, TBT and score, is free here: https://hanaharness.gumroad.com/l/landing-page-weight-report

Top comments (0)