51 US metros, 179 sites
How fast are the roofers Google shows first?
We took the top Google Maps results for roofing searches in each metro and measured each company's homepage on a phone: load time, speed score, tap-to-call, Maps schema and forms. Businesses are never named.
National results
7.1 s
Median mobile load (LCP), n=179
61/100
Median mobile speed score, n=179
90%
Load slower than 2.5 s on mobile (161 of 179)
| Businesses in the sample (unique) | 213 |
|---|---|
| No website on the Maps listing | 25 of 213 |
| Mobile LCP over 2.5 s | 161 of 179 (90%) |
| Mobile LCP over 4.0 s | 139 of 179 (78%) |
| Speed score under 50 | 58 of 179 |
| Speed score 90 or higher | 22 of 179 |
| No tap-to-call link on the homepage | 17 of 159 |
| No LocalBusiness-type schema | 67 of 159 |
| No RoofingContractor schema | 98 of 159 |
| No form in the homepage HTML | 73 of 159 |
Generated Oct 15, 2026. Lab data from the PageSpeed Insights API (mobile); real visitors on real phones will see different numbers.
By metro
Each metro has only 2 to 5 measured sites, so read these as a snapshot of the businesses Google showed that day, not a city average. Sorted slowest first.
| Metro | Sites measured (n) | Median LCP | Median score | LCP over 2.5 s |
|---|---|---|---|---|
| Providence, RI | 2 | 29.7 s | 55 | 2 of 2 |
| Jacksonville, FL | 3 | 18.3 s | 53 | 3 of 3 |
| Phoenix, AZ | 4 | 17.2 s | 53.5 | 4 of 4 |
| Fresno, CA | 5 | 16.2 s | 53 | 4 of 5 |
| Indianapolis, IN | 4 | 15.4 s | 37 | 4 of 4 |
| Memphis, TN | 2 | 15.1 s | 59 | 2 of 2 |
| Hartford, CT | 3 | 15.1 s | 48 | 3 of 3 |
| Charlotte, NC | 3 | 14.6 s | 51 | 3 of 3 |
| Kansas City, MO | 4 | 14.5 s | 40 | 4 of 4 |
| San Diego, CA | 2 | 13.9 s | 40 | 2 of 2 |
| Oklahoma City, OK | 4 | 13.3 s | 38.5 | 4 of 4 |
| Richmond, VA | 2 | 11.9 s | 65.5 | 2 of 2 |
| Columbus, OH | 4 | 11.3 s | 56 | 4 of 4 |
| New York, NY | 3 | 11.1 s | 58 | 3 of 3 |
| Denver, CO | 4 | 11.0 s | 63.5 | 4 of 4 |
| Atlanta, GA | 4 | 10.9 s | 39.5 | 4 of 4 |
| Grand Rapids, MI | 4 | 10.2 s | 63.5 | 3 of 4 |
| Riverside, CA | 4 | 9.8 s | 62 | 3 of 4 |
| San Jose, CA | 3 | 9.5 s | 67 | 2 of 3 |
| Chicago, IL | 4 | 9.3 s | 55 | 4 of 4 |
| Miami, FL | 3 | 9.3 s | 67 | 3 of 3 |
| Austin, TX | 4 | 9.0 s | 69.5 | 3 of 4 |
| Birmingham, AL | 5 | 8.7 s | 55 | 5 of 5 |
| Philadelphia, PA | 3 | 8.5 s | 67 | 3 of 3 |
| Orlando, FL | 5 | 8.4 s | 49 | 5 of 5 |
| Louisville, KY | 3 | 7.4 s | 50 | 3 of 3 |
| Dallas, TX | 4 | 7.0 s | 66.5 | 4 of 4 |
| Las Vegas, NV | 4 | 6.8 s | 62 | 3 of 4 |
| Sacramento, CA | 4 | 6.0 s | 60 | 4 of 4 |
| Pittsburgh, PA | 4 | 6.0 s | 65.5 | 3 of 4 |
| Minneapolis, MN | 3 | 5.9 s | 65 | 3 of 3 |
| Nashville, TN | 3 | 5.9 s | 56 | 3 of 3 |
| Cleveland, OH | 3 | 5.8 s | 70 | 2 of 3 |
| Salt Lake City, UT | 3 | 5.5 s | 64 | 3 of 3 |
| Baltimore, MD | 3 | 5.3 s | 38 | 3 of 3 |
| St. Louis, MO | 2 | 5.3 s | 74 | 2 of 2 |
| Raleigh, NC | 5 | 5.3 s | 76 | 5 of 5 |
| San Antonio, TX | 5 | 5.2 s | 70 | 5 of 5 |
| Portland, OR | 4 | 5.1 s | 47.5 | 4 of 4 |
| Virginia Beach, VA | 3 | 5.1 s | 77 | 3 of 3 |
| Washington, DC | 3 | 4.8 s | 47 | 3 of 3 |
| San Francisco, CA | 4 | 4.6 s | 80.5 | 3 of 4 |
| Boston, MA | 4 | 4.3 s | 54 | 4 of 4 |
| Los Angeles, CA | 3 | 4.2 s | 71 | 2 of 3 |
| Cincinnati, OH | 3 | 4.0 s | 87 | 2 of 3 |
| Houston, TX | 4 | 3.6 s | 69.5 | 3 of 4 |
| Detroit, MI | 3 | 3.6 s | 66 | 2 of 3 |
| Tampa, FL | 4 | 3.2 s | 76.5 | 2 of 4 |
| Tacoma, WA | 3 | 3.2 s | 85 | 2 of 3 |
| Seattle, WA | 5 | 2.9 s | 88 | 4 of 5 |
| Milwaukee, WI | 2 | 2.4 s | 94.5 | 1 of 2 |
Method
- Who. Top 3 organic Google Maps results per metro for 'roofing contractor' and 'roofer' (DataForSEO google/maps/live/advanced, mobile, en, city-level location). Deduplicated by Google CID.
- Where. Top 50 US MSAs by Census Bureau July 1, 2025 estimate, searched at the principal city, plus Tacoma WA.
- Speed. PageSpeed Insights API v5 (mobile), median of 3; the run with the median score is kept. Lab data; field data is CrUX p75 from the same response. The test emulates a mid-range phone on slow 4G with a 4x CPU slowdown.
- Page checks. One plain HTTP GET of the listing URL, no JavaScript. Forms injected by JavaScript or iframes are not counted.
- Thresholds. LCP good <= 2.5 s, poor > 4 s; CLS good <= 0.1 (web.dev Core Web Vitals).
- Coverage gaps. 25 of 213 listings had no website. 9 of 188 websites failed to load in PageSpeed Insights and 29 refused the plain page fetch (most look like bot blocking). They are recorded as gaps, not guessed.
- Low-review listings. 38 of the top-3 listings had fewer than 10 Google reviews (or no count). They are kept in the results because they are what Google showed; excluding them would move the numbers, so we don't.
- Privacy. Businesses are never named. The speed race on our homepage uses the site at the overall median speed score (61/100), recorded separately on a throttled phone connection and blurred.