Primary research
How we inspected 380 contractor websites
Every number in this research namespace came out of the same procedure. Here is that procedure in full, including the parts that limit what the data can tell you.
What we did, in one paragraph
We opened every page we could find on each business's website, on a desktop screen and on a phone screen, and recorded what was there. How long each page took to open. How many boxes the quote form asked people to fill in. Whether the reviews had real customer names on them. Whether somebody using a screen reader could get through the page. Then we scored all of it against the same list, the same way, for every business.
The formal version of that procedure is below, in the words the scoring pipeline itself records, so it cannot drift from what was actually run. It is more technical than the rest of this page on purpose: it is there for anybody who wants to check or repeat the work.
Each brand went through a hands-on Site Inspection. We captured full-page screenshots at desktop and mobile width across every page our crawler could find. We read each page's underlying structure — forms, the structured markup Google uses to build rich results, phone and email links, social-media links, manufacturer badges, review widgets, chat widgets, common body-copy patterns. We ran axe-core 4.10.2 against WCAG 2.1 AA to check accessibility. And we measured Core Web Vitals using Google Lighthouse. Then we scored what we captured against the Fervor Grade™ rubric — 100 points across six categories — and produced three numbers for each brand: a Base Score (what the rubric returned), Grade Adjustments (small corrections we apply where context warrants), and the Adjusted Score, which is the final Fervor Score. That score maps to a Fervor Grade (A through F) on the same letter-grade scale schools use. The averages on this page — means, medians, distributions — are mechanical and reproducible. Per-brand callouts aren't included in this public report; they're still in the integrity-review queue and live on each brand's individual report page.
The reason it reads like a procedure rather than a pitch is that the whole value of this data depends on somebody else being able to run it again and get the same answer.
The rubric
Each brand was scored out of 100 points across six categories. The category weights are published rather than described, because a scored leaderboard without its rubric is just an opinion with numbers on it.
| Category | Weight | What it covers |
|---|---|---|
| Trust & Credibility | 22% | Named customer testimonials, review counts pulled from a real platform, licence and insurance proof, before-and-after work, and whether a stranger can tell who owns the company. |
| First Impression | 20% | What resolves above the fold, whether the trade and service area are stated in the first screen, and whether the primary action is obvious without scrolling. |
| Lead Capture | 20% | Phone visibility and tap-to-call, form field count and friction, response-time expectations, and whether the path to a quote survives a mobile thumb. |
| Mobile Experience | 15% | Whether the layout holds together on a small phone, whether buttons are big enough to hit with a thumb, and how long the page takes to open on a mobile connection. |
| Content & SEO | 15% | Whether headings describe what is under them, whether the page labels its own facts so search engines read them correctly, how much real detail the service pages carry, page speed, and whether the content answers the question the visitor arrived with. |
| Accessibility | 8% | Whether somebody with a vision, hearing or mobility impairment can use the site, which several US states and Ontario require by law. Scored by severity across every page we captured, not the homepage alone. |
Where the letters cut
American school thresholds. The A grade starts at 90, which matters because an 85 reads as an A under Canadian university scales and it is not one here.
| Score | Grade | Tier | Meaning |
|---|---|---|---|
| 90 to 100 | A | Honors | Site earns trust on its own. Conversion potential is strong. |
| 80 to 89 | B | Passing | Solid work. Leaving points on the table. |
| 70 to 79 | C | Conditional | Passed, barely. Major gaps costing jobs. |
| 60 to 69 | D | Probation | Site is on notice. Competitors eating your lunch. |
| Under 60 | F | Condemned | Structurally unsound. Cannot do its job until someone rebuilds it. |
Accessibility scanning, and why overlays get no credit
We score each brand's accessibility on what a visitor actually sees when they land on the page — the default state, no overlays activated. The third-party overlay widgets (AccessiBe, UserWay, EqualWeb, AudioEye, Recite Me, and similar) are NOT credited toward a brand's accessibility Fervor Score, even when they're installed. Three reasons. First, the WebAIM team and 700+ accessibility experts published the Overlay Fact Sheet making the same call. Second, U.S. Department of Justice guidance is that overlays don't satisfy the ADA. And third, U.S. case law (Robles v. Domino's and the cases that followed) has held that overlays aren't enough to defend against an accessibility lawsuit. Overlays are also opt-in — most visitors never click the widget, keyboard-only users often can't reach it before bouncing, and screen-reader users frequently get a worse experience with the overlay turned on.
We also ran a separate overlay census to ground-truth how common they are. On 2026-05-12 we fetched the homepage of every roofing brand in the trade (n=132 at that point) with a Chrome 120 user agent, then looked through the page source for the named overlay vendors (AccessiBe, UserWay, EqualWeb, AudioEye, Recite Me, MaxAccess, Allyable, UsableNet, Level Access). 115 sites returned HTML successfully (87.1%); 17 failed (15 on SSL or network errors, one on HTTP 403, one on HTTP 404). Of the 115 we did scan, 7 brands ran an overlay (5.3% of the trade) — 4 AudioEye, 2 UserWay, 1 AccessiBe. Worst case, if every single one of the 16 unscanned in-report brands also carried an overlay, the rate would top out at 17.6% — still a small minority, and still uncredited toward the score.
One footnote on the cohort. The overlay census above ran against the cohort as it stood on 2026-05-12. The cohort published in this report is n=130. The overlay percentages reflect the May 12 cohort and haven't been re-scanned for the current one.
Scanner and standard: axe-core 4.10.2 against WCAG 2.1 AA. Both accessibility measurements we publish are read across every captured page rather than the homepage alone, and that choice moves the numbers a lot. The homepage-only figures exist in the underlying data and we deliberately do not publish them as trade rates, because a homepage-only rate reads as a site-wide rate to anybody quoting it.
What is in the trade samples
| Trade | Brands |
|---|---|
| Roofing | 130 |
| Remodeling | 146 |
| HVAC | 104 |
| Total | 380 |
Brands were selected as the national and multi-market operators visible in each trade, not as a random sample of the trade population. So read every figure as a description of what the best-resourced end of the market ships, which makes the weaker numbers more uncomfortable rather than less.
Limitations, stated up front
A capture is a snapshot. Sites change, and a brand that fixed its forms the week after we looked will still show the old number until the next run. Every page carries its collection window for that reason.
The number we divide by is not always the whole trade. Form measurements only count businesses where we managed to capture a form at all, and speed measurements only count the ones where the timing run finished. So we print that number next to every figure instead of quietly dividing by the whole trade, because dividing by the wrong number is the single most common way a benchmark statistic ends up wrong.
Medians do not pool. Where a combined figure would require averaging three medians, we publish no combined figure. And detection is not the same as absence: a before and after gallery we could not detect in the markup might still be on a page our crawler never reached.
Finally, three trades is three trades. 10 measurements across roofing, remodeling and HVAC does not tell you what plumbing does. When we inspect plumbing, plumbing will get its own cells, and until then those cells stay empty.
- Recommended citation
- "Roofing Contractor Website Performance: State of the Industry 2026." The Contractor CRO Index, Fervor Studio. 2026-05-16. Sample size: 130. Methodology: Fervor Grade Framework v2.7.
- Short form
- (Contractor CRO Index, Fervor Studio, 2026)
- Collection window
- 2026-05-10 to 2026-05-16
- Publisher
- Fervor Studio · fervorstudio.ca
Back to every measurement we publish, or see the scored brands themselves in the Contractor CRO Index.