Research, 11 October 2026

I measured 1,137 agency websites. None of them scored 100.

Every agency says it builds fast websites. I wanted to know what their own sites score, so I measured 1,137 of them with the same free tool any of their clients could run.

0 scored 100 across all four
58 median performance score
96% fail Google's largest paint threshold
3.1 MB median homepage weight

The median scored 58 out of 100 on mobile. The median agency homepage weighs 3.1 megabytes and takes 8.8 seconds to render its largest element on a mid range phone.

Twenty eight sites got three of the four categories to 100. The closest anybody came was two sites scoring 99 on performance and 100 on the other three, one point short of a clean sweep. Exactly one site in the whole sample scored 100 on performance.

The method, before the numbers

How this was actually done

This goes first. A study that explains its method afterward is asking to be taken on trust, and this one should not need to be.

The sample. I queried Google Places for three terms, "web design agency", "seo agency" and "digital marketing agency", in each of the 100 largest US metro areas. That returned 7,296 unique businesses with a website, after dropping listings with no site and listings pointing at a directory or a social profile instead of the company's own page. From those, 1,200 were drawn at random using seed 42. Anyone can reproduce the identical 1,200.

The measurement. Each site was run once through the PageSpeed Insights API on the mobile setting, which emulates a mid range Android phone on a throttled connection. Every run used Lighthouse 13.5.0, and every run happened on 11 October 2026 inside a single 70 minute window. Nothing here compares a site measured in January against one measured in June.

What came out, and why. Of the 1,200, 41 could not be measured at all, which has its own section below. That left 1,159 results, and 22 of those came out:

  • Nine sites: no performance score recorded
  • Nine sites: under 20 KB, no website rendered
  • Two sites: reserved or link-shortener domain
  • One site: redirects to a bare IP address
  • One site: redirects to a domain-sale page

That leaves 1,137.

Worth saying out loud: of the thirteen removed pages that did have a score, twelve scored between 91 and 100. Taking them out pushes the median down, which happens to flatter whoever publishes this. So I measured the effect instead of assuming it was small. The median was 58 before the exclusions and 58 after.

One run is a sample, not a measurement. Lighthouse scores move between runs on identical files, sometimes by ten points or more. That is why everything here is a median across more than a thousand sites rather than a verdict on any one of them, and it is part of why no site is named. A median across 1,137 sites is steady in a way no individual score is.

The scores

Performance is the outlier, and it is not close

Median score in each of the four Lighthouse categories Performance median 58, with 5.5 percent of sites at 90 or above. Accessibility median 90, with 51.5 percent of sites at 90 or above. Best Practices median 96, with 78.7 percent of sites at 90 or above. SEO median 92, with 82 percent of sites at 90 or above. 90, where Google stops calling it green Performance Performance: median 58 58 5.5% reach 90 Accessibility Accessibility: median 90 90 51.5% reach 90 Best Practices Best Practices: median 96 96 78.7% reach 90 SEO SEO: median 92 92 82% reach 90
At or above 90 Below 90 Median of all four categories across the measured sample, mobile. Performance is the only one that misses 90, and it misses it by thirty two points. Scroll the chart sideways to see all of it.

The other three are mostly fine because they are largely deterministic checks that any competent build passes. Is there alt text. Is there a meta description. Is the page served over HTTPS. Performance is the one that takes actual decisions and actual restraint, and it is the one being skipped.

Sixty three sites out of 1,137 reached 90 on it, which is 5.5 percent. Three failed best practices badly enough to land under 50, and six did it on SEO. Nothing failed accessibility that hard: the lowest accessibility score in the sample was 52.

The spread is wide. The worst site scored 6. The best scored 100. A quarter sit at 47 or below.

How the 1137 performance scores are distributed Performance scores for 1137 sites, counted in bands of ten: 0 to 9, 2 sites; 10 to 19, 7 sites; 20 to 29, 34 sites; 30 to 39, 125 sites; 40 to 49, 152 sites; 50 to 59, 300 sites; 60 to 69, 234 sites; 70 to 79, 130 sites; 80 to 89, 90 sites; 90 to 100, 63 sites. The median is 58 and the middle half of the sample sits between 47 and 69. 0 50 100 150 200 250 300 0 to 9: 2 sites, 0.2 percent 2 10 to 19: 7 sites, 0.6 percent 7 20 to 29: 34 sites, 3 percent 34 30 to 39: 125 sites, 11 percent 125 40 to 49: 152 sites, 13.4 percent 152 50 to 59: 300 sites, 26.4 percent 300 60 to 69: 234 sites, 20.6 percent 234 70 to 79: 130 sites, 11.4 percent 130 80 to 89: 90 sites, 7.9 percent 90 90 to 100: 63 sites, 5.5 percent 63 0 10 20 30 40 50 60 70 80 90 100 Median, 58 Median 58 The middle half of the sample, 47 to 69 Half the sample, 47 to 69 Worse Better
Sites in that band 90 and above, the only band Google calls green The middle half, 47 to 69 Performance score, mobile, 1137 sites. The last band holds eleven points rather than ten, which is why it is wider. Scroll the chart sideways to see all of it.

That shape is the finding, more than the median is. This is not a healthy industry with a slow tail hanging off it. It is a mound sitting in the fifties, with the green band at the right hand edge almost empty.

Against Google's own thresholds

Core Web Vitals, band by band

Share of sites in each of Google's three bands, for four loading metrics Largest paint: 4 percent good, 10.5 percent needs work, 85.6 percent poor. First paint: 7.8 percent good, 20.1 percent needs work, 72 percent poor. Blocking time: 52.9 percent good, 28.7 percent needs work, 18.4 percent poor. Layout shift: 86.2 percent good, 8.9 percent needs work, 4.9 percent poor. 30 sites of 1137, 2.6 percent, sit in the good band on all three at once. 0% 100% Largest paint Largest paint, Good: 4 percent 4% Largest paint, Needs work: 10.5 percent 10.5% Largest paint, Poor: 85.6 percent 85.6% 8.8 s First paint First paint, Good: 7.8 percent 7.8% First paint, Needs work: 20.1 percent 20.1% First paint, Poor: 72 percent 72% 3.8 s Blocking time Blocking time, Good: 52.9 percent 52.9% Blocking time, Needs work: 28.7 percent 28.7% Blocking time, Poor: 18.4 percent 18.4% 176 ms Layout shift Layout shift, Good: 86.2 percent 86.2% Layout shift, Needs work: 8.9 percent 8.9% Layout shift, Poor: 4.9 percent 4.9% 0.001
Good Needs work Poor Google's own thresholds. The figure on the right of each bar is that metric's median across the sample. 30 of 1137 sites, 2.6 percent, are in the good band on largest paint, blocking time and layout shift at the same time. Scroll the chart sideways to see all of it.

Thirty sites out of 1,137 pass all three Core Web Vitals at once. That is 2.6 percent.

Layout shift is the one the industry has largely fixed, and it deserves saying. Eighty six percent sit in the good band. That is what happens to a metric when it is easy to understand and easy to correct.

Largest paint is the opposite story, and lands on almost exactly the same number going the other way: eighty six percent in the poor band, not the middle one. The two figures are 86.2 and 85.6 percent before rounding, which is close enough to be worth noticing and not close enough to mean anything.

The largest gap in the data

Page builders, and what they cost

Of the 1,137 sites, 553 were built with a page builder I could detect and 584 were not.

Page builder sites against sites with no builder detected, on four measures Medians for the 553 sites where a page builder was detected against the 584 where none was. Performance score: 55 with a page builder, 62 without one. Largest paint: 10.7 s with a page builder, 7.3 s without one. Page weight: 3.4 MB with a page builder, 2.5 MB without one. Third parties: 7 with a page builder, 5 without one. Performance score higher is better Page builder detected, Performance score: 55 No builder detected, Performance score: 62 55 62 Builder None Largest paint lower is better Page builder detected, Largest paint: 10.7 s No builder detected, Largest paint: 7.3 s 10.7 s 7.3 s Builder None Page weight lower is better Page builder detected, Page weight: 3.4 MB No builder detected, Page weight: 2.5 MB 3.4 MB 2.5 MB Builder None Third parties lower is better Page builder detected, Third parties: 7 No builder detected, Third parties: 5 7 5 Builder None
Page builder detected, 553 sites No builder detected, 584 sites Medians. Each panel is scaled to its own largest bar, so compare the two bars inside a panel and not the heights across panels. Scroll the chart sideways to see all of it.

What this does not prove. A page builder does not cause a slow website. Builders get chosen by people working fast on a tight budget, and the same pressure picks the heavy theme, the eleven plugins and the stock video header. The builder is a marker for how a site was built, not the whole cause of what it weighs. But 553 sites against 584 is a real comparison, and the direction is not ambiguous.

Median performance score by platform, worst to best Squarespace, 49 sites, median 46 and 3.9 megabytes. WPBakery, 54 sites, median 51.5 and 3.4 megabytes. Wix, 45 sites, median 52 and 4.6 megabytes. Beaver Builder, 20 sites, median 54.5 and 2.8 megabytes. Divi, 99 sites, median 56 and 3.4 megabytes. Elementor, 255 sites, median 57 and 3.3 megabytes. Duda, 20 sites, median 59.5 and 4.6 megabytes. No builder detected, 584 sites, median 62 and 2.5 megabytes. 0 25 50 75 100 Squarespace 49 sites Squarespace: median 46 across 49 sites 46 3.9 MB WPBakery 54 sites WPBakery: median 51.5 across 54 sites 51.5 3.4 MB Wix 45 sites Wix: median 52 across 45 sites 52 4.6 MB Beaver Builder 20 sites Beaver Builder: median 54.5 across 20 sites 54.5 2.8 MB Divi 99 sites Divi: median 56 across 99 sites 56 3.4 MB Elementor 255 sites Elementor: median 57 across 255 sites 57 3.3 MB Duda 20 sites Duda: median 59.5 across 20 sites 59.5 4.6 MB No builder detected 584 sites No builder detected: median 62 across 584 sites 62 2.5 MB
Median performance score No builder detected, the reference group The figure on the right of each bar is that group's median page weight. Not shown, because fewer than 12 sites is not enough to take a median from: Oxygen 9, Bricks 7, Webflow 3, Shopify 2. That is a sample size, not a verdict on the platform. Scroll the chart sideways to see all of it.

One more thing the data says, and it surprised me. Sixty three percent of the sample runs WordPress, and WordPress scored a median of 57 against 60 for everything else. That gap is nothing. The builder gap is large. WordPress is not the problem, which is worth hearing from someone whose own site runs on it.

What they actually ship

The median homepage, itemized

3.1 MB page weight
85 requests
6 third party entities
932 KB of third party code

Fifty one percent ship more than three megabytes. Twenty eight percent load ten or more separate third party services, which means ten different companies run code on the page before a visitor reads a sentence.

The median site carries 932 kilobytes of that third party code. Analytics, tag managers, chat widgets, fonts, tracking pixels, heat maps. None of it is the agency's own work and all of it sits on the agency's own critical path.

The ones that would not load

Forty one of them could not be measured at all

Lighthouse failed outright on forty one of the 1,200.

  • Thirty sites could not load the document reliably
  • Ten sites painted no content inside the timeout
  • One site returned something that was not HTML

That is 3.4 percent of a random sample of professional web agencies whose websites would not reliably load for Google's testing tool. It is not an error on my side, and none of those sites appear in any figure above, because a site with no score has nothing to average. It belongs here as a finding of its own.

The blank panel

Why most of these reports say "No Data"

Only seven percent of the sample had enough real Chrome traffic for Google to report field data on it.

If you run this test on your own site and the panel at the top says No Data, that is a traffic threshold and not a verdict. Google builds that panel from real Chrome users who opted into reporting, pooled over 28 days. A site under the threshold has no entry. There is no penalty, nothing to fail, and the blank tells you nothing about how fast your site is.

It does tell you something else. For ninety three percent of these agencies, Google holds no real user measurements of their own website at all.

The limits

What this study does not say

Stated here rather than left for somebody else to point out.

It ranks nobody, and no site is named

The published dataset has the identifying columns stripped. If you want to know where your own site sat, ask me and I will tell you.

One run per site

Enough for a median across 1,137. Not enough to judge any one of them. A site that scored 54 here might score 61 on a Tuesday.

It measures homepages

Not whole sites, and not the pages that actually convert.

It measures four things, and they are not the only things

Speed, accessibility, structure and technical SEO. It says nothing about whether an agency is any good at marketing, design, strategy or looking after clients, all of which matter more to most buyers than a Lighthouse score does.

The sample is whatever Google returns

A firm with no Google Business Profile is not in it, and some entries will be freelancers rather than agencies. That is a real limit of the method, and it is why the search terms, the metro list and the seed are all published.

It is one moment

Every measurement was taken inside one 70 minute window on 11 October 2026. A site that was mid deploy that morning is in here with whatever it was serving at the time.

Check it yourself

The whole thing is published

Everything needed to rebuild this is published: the collector, the runner, the analyzer, the three search terms, the 100 metros, the random seed and the fingerprint of the source list.

The row level data is published too, with the name and URL removed. Every row carries whether it is in the analyzed sample and, if not, the exact rule that removed it, so every median, every distribution and every table above can be re-derived with a filter rather than a rewrite.

The scripts bundle is the code that produced every figure above, not a description of it, along with a file stating the exact commands, the random seed and a fingerprint of the source list so you can tell whether your pool matches mine.

Then there is the test that costs nothing. Run the same tool on your own agency's website. Then run it on the site of whoever is pitching you. It takes about thirty seconds, and it is the same panel I used. There are free tools here that check a few of the same things without an API key.

Every figure above as a table
Performance score distribution, 1137 sites
Score band Sites Share
0 to 9 2 0.2%
10 to 19 7 0.6%
20 to 29 34 3%
30 to 39 125 11%
40 to 49 152 13.4%
50 to 59 300 26.4%
60 to 69 234 20.6%
70 to 79 130 11.4%
80 to 89 90 7.9%
90 to 100 63 5.5%
Median score by category
Category Median 90 or above Under 50
Performance 58 5.5% 28.1%
Accessibility 90 51.5% none
Best Practices 96 78.7% 0.3%
SEO 92 82% 0.5%
Loading metrics against Google's bands
Metric Good Needs work Poor
Largest paint 4% 10.5% 85.6%
First paint 7.8% 20.1% 72%
Blocking time 52.9% 28.7% 18.4%
Layout shift 86.2% 8.9% 4.9%
Platform medians, groups of 12 sites or more
Platform Sites Median score Median weight
Elementor 255 57 3.3 MB
Divi 99 56 3.4 MB
WPBakery 54 51.5 3.4 MB
Squarespace 49 46 3.9 MB
Wix 45 52 4.6 MB
Beaver Builder 20 54.5 2.8 MB
Duda 20 59.5 4.6 MB
No builder detected 584 62 2.5 MB

Using this

Take the numbers, quote them, chart them, argue with them, run the scripts and publish a different answer. No permission needed and nothing to fill in. The only ask is that you say where the figures came from and link to this page, so that whoever reads your version can check mine.

If you want the figure for one specific site, including your own, ask me. I have it, and I will tell you, and I will not publish it.

My own numbers

Where I sit in this

It would be dishonest to publish this without saying that my own site is inside it.

This site publishes its own numbers on the Under the Hood page, including a chart of every PageSpeed run it has recorded, bad runs left on. The lowest point on that chart is a 79. There is a Best Practices 96 from a build that shipped a bug I missed. There is a set of four runs taken five minutes apart on identical files that scored 100, 83, 96 and 99, which is the clearest illustration I have of why a single run is a sample and not a measurement.

I am not holding any of that up as a reason to hire me. I am holding it up because this study asks 1,137 companies to be measured against a standard, and the only fair version of that is standing inside the sample rather than beside it.

If the numbers above describe your site and you would rather they did not, the fix is usually not a plugin. It is how the site is built and what is loading on it.

Start here

Tell me what you are trying to fix

Send over the site you have now, or the one you wish you had. I will tell you honestly whether I am the right person for it.

info@palmprojects.com