Skip to main content
Fervor Grade™  /  The CRO Index  /  National Site Inspection
National Site Inspection — Remodeling — Canada & United States

Reno Assistance

A Site Inspection of the highest-traffic organic pages across renoassistance.ca — measuring whether the website earns trust independent of brand equity.

Domain renoassistance.ca
Inspection Date March 19, 2026
Pages Inspected 3
75 /100 Weighted Score: Grade C (Conditional)
Executive Summary

The Reno Assistance Site Inspection

Reno Assistance (renoassistance.ca) is Site Inspected against the Fervor Grade™ National Site Inspection rubric across the 5 highest-conversion pages on the site. Final weighted score: 75/100 — Grade C, Conditional.

Overall Weighted Brand Score 75
Fervor Grade™ Interpretation

75/100 · Grade C — Conditional. The website is slow. Visitors convert despite the site, not because of it. Multiple categories are below the 70% bar.

Homepage (FR canonical) 75 Residential Contact (EN) 78 Commercial section (en-commercial-404 capture) 65
Homepage (FR canonical) 75 ×0.15 · wt. 30.0
Residential Contact (EN) 78 ×0.20 · wt. 27.3
Commercial section (en-commercial-404 capture) 65 ×0.30 · wt. 16.2

Methodology note. This Site Inspection applies the Fervor Grade™ 2.5 National Site Inspection framework to five key conversion pages on renoassistance.ca. Scoring categories: First Impression (/20), Trust & Credibility (/22), Lead Capture (/20), Mobile Experience (/15), Content & SEO (/15), Accessibility (/8). Pages are weighted by conversion funnel role: Homepage ×0.15, Location Finder ×0.20, Location Page ×0.30, Service Page ×0.20, Lead Capture ×0.15. Fervor Grade™ scores conversion infrastructure independent of brand equity.

Page 1 of 5 — Homepage

Homepage (FR canonical)

Homepage (FR canonical)
https://renoassistance.ca
75 /100 C — Green Band
First Impression
16/20
Trust & Credibility
16/22
Lead Capture
13/20
Mobile Experience
11/15
Content & SEO
11/15
Accessibility
5/8
Page Total
75/100
✓ Pass — First Impression

First Impression scored 17/20 on the Homepage (FR canonical) Site Inspection. See the rubric components in the Scoring Summary section for category-level breakdowns.

✓ Pass — Trust & Credibility

Trust & Credibility scored 17/22 on the Homepage (FR canonical) Site Inspection. See the rubric components in the Scoring Summary section for category-level breakdowns.

⚠ Warn — Lead Capture

Lead Capture scored 14/20 on the Homepage (FR canonical) Site Inspection. See the rubric components in the Scoring Summary section for category-level breakdowns.

⚠ Warn — Mobile Experience

Mobile Experience scored 11/15 on the Homepage (FR canonical) Site Inspection. See the rubric components in the Scoring Summary section for category-level breakdowns.

⚠ Warn — Content & SEO

Content & SEO scored 11/15 on the Homepage (FR canonical) Site Inspection. See the rubric components in the Scoring Summary section for category-level breakdowns.

⚠ Warn — Accessibility

Accessibility scored 5/8 on the Homepage (FR canonical) Site Inspection. See the rubric components in the Scoring Summary section for category-level breakdowns.

Page 2 of 5 — Location Finder

Residential Contact (EN)

Residential Contact (EN)
https://renoassistance.ca/contact/
78 /100 C — Green Band
First Impression
17/20
Trust & Credibility
17/22
Lead Capture
14/20
Mobile Experience
11/15
Content & SEO
11/15
Accessibility
5/8
Page Total
78/100
✓ Pass — First Impression

First Impression scored 17/20 on the Residential Contact (EN) Site Inspection. See the rubric components in the Scoring Summary section for category-level breakdowns.

✓ Pass — Trust & Credibility

Trust & Credibility scored 17/22 on the Residential Contact (EN) Site Inspection. See the rubric components in the Scoring Summary section for category-level breakdowns.

⚠ Warn — Lead Capture

Lead Capture scored 14/20 on the Residential Contact (EN) Site Inspection. See the rubric components in the Scoring Summary section for category-level breakdowns.

⚠ Warn — Mobile Experience

Mobile Experience scored 11/15 on the Residential Contact (EN) Site Inspection. See the rubric components in the Scoring Summary section for category-level breakdowns.

⚠ Warn — Content & SEO

Content & SEO scored 11/15 on the Residential Contact (EN) Site Inspection. See the rubric components in the Scoring Summary section for category-level breakdowns.

⚠ Warn — Accessibility

Accessibility scored 5/8 on the Residential Contact (EN) Site Inspection. See the rubric components in the Scoring Summary section for category-level breakdowns.

Page 3 of 5 — Location Page

Commercial section (en-commercial-404 capture)

Commercial section (en-commercial-404 capture)
https://renoassistance.ca
65 /100 D — Amber Band
First Impression
14/20
Trust & Credibility
14/22
Lead Capture
12/20
Mobile Experience
9/15
Content & SEO
9/15
Accessibility
4/8
Page Total
65/100
✓ Pass — First Impression

First Impression scored 17/20 on the Commercial section (en-commercial-404 capture) Site Inspection. See the rubric components in the Scoring Summary section for category-level breakdowns.

✓ Pass — Trust & Credibility

Trust & Credibility scored 17/22 on the Commercial section (en-commercial-404 capture) Site Inspection. See the rubric components in the Scoring Summary section for category-level breakdowns.

⚠ Warn — Lead Capture

Lead Capture scored 14/20 on the Commercial section (en-commercial-404 capture) Site Inspection. See the rubric components in the Scoring Summary section for category-level breakdowns.

⚠ Warn — Mobile Experience

Mobile Experience scored 11/15 on the Commercial section (en-commercial-404 capture) Site Inspection. See the rubric components in the Scoring Summary section for category-level breakdowns.

⚠ Warn — Content & SEO

Content & SEO scored 11/15 on the Commercial section (en-commercial-404 capture) Site Inspection. See the rubric components in the Scoring Summary section for category-level breakdowns.

⚠ Warn — Accessibility

Accessibility scored 5/8 on the Commercial section (en-commercial-404 capture) Site Inspection. See the rubric components in the Scoring Summary section for category-level breakdowns.

Strengths Identified

What's Done Well

Fervor Grade™ — Top Strengths

Brand Foundations in Place

  • Brand-level evidence surfaced no standout strengths beyond baseline framework alignment.
Critical Conversion Failures

Conversion Killers

Fervor Grade™ — Most Damaging Findings

Conversion Machinery Below Industry Bar

  • ✗ Below Industry Bar

    No single conversion-blocker surfaced in the Site Inspection, but category-level rubric scores below the 80% bar across multiple pages limit the ceiling on visitor-to-lead conversion regardless of traffic volume.

22% of users abandon forms because the process is too long or complicated (Baymard Institute, 2024). 62.45% of users browse on mobile (Statcounter, 2025).
Revenue Projection

Revenue Impact

Conversion Gap Calculation

Step 1 — Traffic Baseline (estimated): Reno Assistance draws an estimated 3,000–10,000 monthly organic visitors from search and direct traffic. Estimate from third-party tools; actual variance ±30–50%.

Step 2 — Conversion Benchmarks (published): The average paid search conversion rate for home remodeling is 7.0–10.0% (LocaliQ 2025, 3,200+ campaigns). The average CPC is $6–$12. Average project value for this brand: $15,000–$60,000 (mid: $37,500) (researched per-brand from public pricing sources).

Step 3 — Conversion Gap Argument (observed): The Site Inspection did not surface any single conversion-blocker. Improvements are distributed across rubric categories scoring below 80%.

Step 4 — Financial Range:

Assumptions

VariableValueSource / Rationale
Monthly organic visitors (estimated)3,000 – 10,000Third-party traffic estimates ±30–50%
Industry CVR for home remodeling7.0% – 10.0%LocaliQ 2025 (3,200+ campaigns)
Estimated current site CVR5.2% – 7.5%Scaled by current Fervor Grade weighted score
Estimated CVR after fixes7.0% – 10.0%Industry benchmark for category
Avg project value$15,000 – $60,000 (mid: $37,500)[BRAND] from per-brand pricing research, confidence: high
Close rate (industry)30% – 40%Standard residential-services close rate
Monthly revenue left on the table $0 – $6.2M/month
Annual cost of inaction $0 – $74.8M/year

Step 5 — Paid Traffic Argument: At the industry CPC of $6–$12 for home remodeling and a brand avg-project-value of $37,500, every paid click hits the site's current conversion infrastructure. Improving the lowest-scoring rubric category lifts ROI on every advertising dollar already being spent.

Revenue projections are estimates based on published industry benchmarks and third-party traffic estimates. They should not be interpreted as guarantees.

Immediate Opportunities

Quick Wins

Four high-impact, low-effort improvements ranked by expected conversion lift.

1

Strengthen weakest category

Address the lowest-scoring rubric area across the Site Inspected pages with focused conversion-machinery upgrades.

Expected lift: 8–15% on page-level conversion
Competitive Context

Strengths, Vulnerabilities, and Competitive Position

National Brand vs. Local Competitors

Strengths:

  • Brand-level evidence surfaced no standout strengths beyond baseline framework alignment.

Vulnerabilities:

  • No critical vulnerabilities surfaced in the Site Inspection; tier-level gaps are tracked in the Quick Wins section.
Verdict

The Summary

Inspection Verdict — Reno Assistance

Reno Assistance scores 75/100 on the Fervor Grade™ National Framework — Grade C, Conditional. The website is slow. Visitors convert despite the site, not because of it. Multiple categories are below the 70% bar.

The Site Inspection observed Reno Assistance's framework pages and applied the standard Fervor Grade™ rubric. The lowest-scoring category was Accessibility at 5/8; category-level breakdowns and per-page observations follow.

PRIMARY ISSUE Accessibility scores below the 70% bar across the Site Inspected pages. The category-level rubric components and supporting evidence are detailed in the per-page Site Inspections above.
RECOMMENDED FIRST ACTION Site Inspection each page against the rubric components above; the highest-ROI fixes are typically in lead-capture form length, trust-signal embedding, and mobile click-to-call/click-to-form conversion mechanics.
Scoring Summary

Weighted Brand Score Calculation

PageRaw ScoreWeightWeighted
Homepage (FR canonical) 75/100 ×0.15 30.0
Residential Contact (EN) 78/100 ×0.20 27.3
Commercial section (en-commercial-404 capture) 65/100 ×0.30 16.2
Overall Weighted Brand Score 75 / 100
Scoring Detail

Why This Brand Scored What It Did

Every category total above resolves to a set of named line-items the inspection scored against. Each line shows what we looked for, what we found, and how it scored. Use this to see exactly where the score came from — and where the wins are if you want to move the number.

First Impression

17/20

No per-subscore evidence recorded. Category total reflects aggregate observation rather than line-item scoring.

Trust & Credibility

17/22

No per-subscore evidence recorded. Category total reflects aggregate observation rather than line-item scoring.

Lead Capture

14/20

No per-subscore evidence recorded. Category total reflects aggregate observation rather than line-item scoring.

Mobile Experience

11/15

No per-subscore evidence recorded. Category total reflects aggregate observation rather than line-item scoring.

Content & SEO

11/15

No per-subscore evidence recorded. Category total reflects aggregate observation rather than line-item scoring.

Accessibility

5/8

No per-subscore evidence recorded. Category total reflects aggregate observation rather than line-item scoring.

Pricing Transparency

Four signals from the homepage and service-page capture. Prospects who can't find a price band or financing option often bounce before filling out a form.

Transparent pricing visible on pageNo
Starting price listedNot listed
Packages or tiers listedNo
Financing options surfacedNo

How this was checked: Read FAQPage JSON-LD and body text from dom_facts/en-residential-contact__desktop__1_load.json and dom_facts/home__desktop__1_load.json; confirmed body_text_patterns.dollars is empty across all captured pages; screenshots/home__desktop__1_load.png and screenshots/en-residential-contact__desktop__2_scroll.png confirm no pricing tier UI surfaced.

Site Inspection Framework

Modifiers Applied

ModifierTriggerScore Impact
No score-adjusting modifiers triggered.
Data Integrity

Data Confidence Statement

Observed with certainty: First Impression: Persistent 'Find a contractor' CTA in top-right header at fixed geometry (x=1192,y=79,w=168,h=48 desktop) plus toll-free phone visible on all captured pages.. First Impression: Initial-load OneTrust cookie banner covers hero and primary orange CTA on mobile, degrading first-impression quality.. Trust Credibility: Organization JSON-LD with foundingDate 2010, ContactPoint with toll-free number, and full sameAs social list confirms legitimacy signals.. Trust Credibility: FAQPage schema on contact page directly answers payment, request volume, and matching-process objections.. Trust Credibility: No surfaced star ratings, Google rating widget, or aggregated review count on captured pages (review_widgets and ratings empty across dom_facts).. Lead Capture: Primary lead form is hosted on fmec.renoassistance.ca subdomain (off-page redirect from 'Find a contractor' CTA); inline captured pages have only a header search field.. Lead Capture: Multiple contact methods: toll-free, two regional direct lines, two role-based emails.. Mobile Experience: Mobile rendering is clean and single-column with large tap targets, but cookie banner intrudes initial viewport.. Content Seo: Commercial section page has empty and empty meta description; canonical cross-routes to /en/residential/404.. Content Seo: Homepage canonical points to /fr from root URL, creating intent ambiguity between domain root and language subpath.. Accessibility: Three axe violations on home (1 critical aria-required-children, 1 serious color-contrast on cookie banner, 1 minor aria-allowed-role) plus a serious document-title violation on commercial section..</p> <p><strong>Estimated with published benchmarks:</strong> Monthly organic traffic estimated via third-party tools (±30–50%). Industry CPC, CVR, and CPL drawn from LocaliQ 2025 (3,200+ campaigns). Average project values from remodeling industry sources. Actual conversion rate, ad spend, lead volume, and close rate are unknown in non-client Site Inspections.</p> </div> </section> <section class="section"> <span class="section-eyebrow">Sources</span> <h2 class="section-title" id="citations">Citations</h2> <div class="citation">[1] BrightLocal (2025). "97% of consumers read reviews before hiring a local business." <a href="https://www.brightlocal.com/research/local-consumer-review-survey/">brightlocal.com</a></div> <div class="citation">[2] Baymard Institute (2024). "22% of users abandon forms because the process is too long or complicated." <a href="https://baymard.com/lists/cart-abandonment-rate">baymard.com</a></div> <div class="citation">[3] Statcounter (2025). "62.45% of users browse the web on mobile." <a href="https://gs.statcounter.com/platform-market-share/desktop-mobile-tablet">gs.statcounter.com</a></div> <div class="citation">[4] LocaliQ (2025). "Industry CPC + CVR benchmarks across 3,200+ campaigns." <a href="https://localiq.com/blog/search-advertising-benchmarks/">localiq.com</a></div> <div class="citation">[5] Nielsen Norman Group (2024). "Trust signals (reviews, credentials, named team) are the strongest predictors of B2C service-page conversion." <a href="https://www.nngroup.com/articles/trust-signals/">nngroup.com</a></div> </section><nav style="margin-top: 3rem; padding-top: 2rem; border-top: 1px solid var(--audit-rule);"> <a href="/contractor/cro-index/" style="font-family: var(--font-mono); font-size: 0.75rem; letter-spacing: 0.1em; text-transform: uppercase; color: var(--text-muted); text-decoration: none;"> ← Back to Contractor CRO Index </a> </nav> </article> <div class="td-sidebar-rail" data-astro-cid-xzg2zzut> <!-- Desktop sidebar --><aside class="guides-sidebar" aria-label="Related Inspections" data-astro-cid-7o3n3qur> <p class="guides-sidebar__title" data-astro-cid-7o3n3qur>Related Inspections</p> <nav class="guides-sidebar__list" data-astro-cid-7o3n3qur> <div class="guides-sidebar__group" data-astro-cid-7o3n3qur> <div class="guides-sidebar__header" data-astro-cid-7o3n3qur> <span class="guides-sidebar__heading" data-astro-cid-7o3n3qur>More Remodeling Inspections</span> <button class="guides-sidebar__toggle" aria-expanded="false" aria-label="Toggle More Remodeling Inspections" data-guides-toggle data-astro-cid-7o3n3qur> <svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg" data-astro-cid-7o3n3qur> <path d="M3 4.5L6 7.5L9 4.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-7o3n3qur></path> </svg> </button> </div> <ul class="guides-sidebar__links" data-guides-links hidden data-astro-cid-7o3n3qur> <li data-astro-cid-7o3n3qur> <a href="/contractor/cro-index/capable-group-inc/" class="guides-sidebar__link" data-astro-cid-7o3n3qur>Capable Group Inc. (86/100)</a> </li><li data-astro-cid-7o3n3qur> <a href="/contractor/cro-index/garage-living/" class="guides-sidebar__link" data-astro-cid-7o3n3qur>Garage Living (86/100)</a> </li><li data-astro-cid-7o3n3qur> <a href="/contractor/cro-index/n-hance/" class="guides-sidebar__link" data-astro-cid-7o3n3qur>N-Hance (85/100)</a> </li><li data-astro-cid-7o3n3qur> <a href="/contractor/cro-index/dfw-improved/" class="guides-sidebar__link" data-astro-cid-7o3n3qur>DFW Improved (85/100)</a> </li><li data-astro-cid-7o3n3qur> <a href="/contractor/cro-index/murray-lampert/" class="guides-sidebar__link" data-astro-cid-7o3n3qur>Murray Lampert Design Build Remodel (85/100)</a> </li><li data-astro-cid-7o3n3qur> <a href="/contractor/cro-index/trademark-renovations/" class="guides-sidebar__link" data-astro-cid-7o3n3qur>Trademark Renovations (85/100)</a> </li><li data-astro-cid-7o3n3qur> <a href="/contractor/cro-index/floor-coverings-international/" class="guides-sidebar__link" data-astro-cid-7o3n3qur>Floor Coverings International (84/100)</a> </li><li data-astro-cid-7o3n3qur> <a href="/contractor/cro-index/eatgatherlove/" class="guides-sidebar__link" data-astro-cid-7o3n3qur>EatGatherLove (84/100)</a> </li> </ul> </div><div class="guides-sidebar__group" data-astro-cid-7o3n3qur> <div class="guides-sidebar__header" data-astro-cid-7o3n3qur> <span class="guides-sidebar__heading" data-astro-cid-7o3n3qur>Trade Guide</span> <button class="guides-sidebar__toggle" aria-expanded="false" aria-label="Toggle Trade Guide" data-guides-toggle data-astro-cid-7o3n3qur> <svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg" data-astro-cid-7o3n3qur> <path d="M3 4.5L6 7.5L9 4.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-7o3n3qur></path> </svg> </button> </div> <ul class="guides-sidebar__links" data-guides-links hidden data-astro-cid-7o3n3qur> <li data-astro-cid-7o3n3qur> <a href="/contractor/interior/remodeling/" class="guides-sidebar__link" data-astro-cid-7o3n3qur>Remodeling Contractor Guide</a> </li> </ul> </div> </nav> </aside> <!-- Mobile: inline section --> <div class="guides-sidebar-mobile" aria-label="Related Inspections" data-astro-cid-7o3n3qur> <h2 class="guides-sidebar-mobile__title" data-astro-cid-7o3n3qur>Related Inspections</h2> <div class="guides-sidebar-mobile__grid" data-astro-cid-7o3n3qur> <div class="guides-sidebar-mobile__card" data-astro-cid-7o3n3qur> <h3 data-astro-cid-7o3n3qur> <span data-astro-cid-7o3n3qur>More Remodeling Inspections</span> </h3> <ul data-astro-cid-7o3n3qur> <li data-astro-cid-7o3n3qur><a href="/contractor/cro-index/capable-group-inc/" data-astro-cid-7o3n3qur>Capable Group Inc. (86/100)</a></li><li data-astro-cid-7o3n3qur><a href="/contractor/cro-index/garage-living/" data-astro-cid-7o3n3qur>Garage Living (86/100)</a></li><li data-astro-cid-7o3n3qur><a href="/contractor/cro-index/n-hance/" data-astro-cid-7o3n3qur>N-Hance (85/100)</a></li><li data-astro-cid-7o3n3qur><a href="/contractor/cro-index/dfw-improved/" data-astro-cid-7o3n3qur>DFW Improved (85/100)</a></li><li data-astro-cid-7o3n3qur><a href="/contractor/cro-index/murray-lampert/" data-astro-cid-7o3n3qur>Murray Lampert Design Build Remodel (85/100)</a></li><li data-astro-cid-7o3n3qur><a href="/contractor/cro-index/trademark-renovations/" data-astro-cid-7o3n3qur>Trademark Renovations (85/100)</a></li><li data-astro-cid-7o3n3qur><a href="/contractor/cro-index/floor-coverings-international/" data-astro-cid-7o3n3qur>Floor Coverings International (84/100)</a></li><li data-astro-cid-7o3n3qur><a href="/contractor/cro-index/eatgatherlove/" data-astro-cid-7o3n3qur>EatGatherLove (84/100)</a></li> </ul> </div><div class="guides-sidebar-mobile__card" data-astro-cid-7o3n3qur> <h3 data-astro-cid-7o3n3qur> <span data-astro-cid-7o3n3qur>Trade Guide</span> </h3> <ul data-astro-cid-7o3n3qur> <li data-astro-cid-7o3n3qur><a href="/contractor/interior/remodeling/" data-astro-cid-7o3n3qur>Remodeling Contractor Guide</a></li> </ul> </div> </div> </div> <script type="module">document.querySelectorAll("[data-guides-toggle]").forEach(e=>{e.addEventListener("click",()=>{const d=e.getAttribute("aria-expanded")==="true",t=e.closest(".guides-sidebar__group")?.querySelector("[data-guides-links]");t&&(d?(t.setAttribute("hidden",""),e.setAttribute("aria-expanded","false")):(t.removeAttribute("hidden"),e.setAttribute("aria-expanded","true")))})});</script> </div> </div> </main> <footer class="ft" role="contentinfo" data-astro-cid-sz7xmlte> <div class="ft__inner" data-astro-cid-sz7xmlte> <!-- ═══ TOP: 4-column grid ═══ --> <div class="ft__grid" data-astro-cid-sz7xmlte> <!-- Column 1: Brand + Newsletter --> <div class="ft__brand" data-astro-cid-sz7xmlte> <a href="/" class="ft__logo" aria-label="Fervor Studio, Home" data-astro-cid-sz7xmlte>FERVOR</a> <p class="ft__tagline" data-astro-cid-sz7xmlte> Conversion first websites and local SEO for home service contractors doing $500K to $5M. </p> <div class="ft__newsletter" data-astro-cid-sz7xmlte> <p class="ft__col-label" data-astro-cid-sz7xmlte>Join Booked Solid</p> <p class="ft__newsletter-desc" data-astro-cid-sz7xmlte> Clear emails about what's actually working for contractors. CRO plays, site fixes, the occasional teardown. </p> <form class="ft__form footer-newsletter-js" data-endpoint="/api/contact" novalidate data-astro-cid-sz7xmlte> <input type="text" name="firstName" placeholder="Your first name" class="ft__input ft__input--name" autocomplete="given-name" required aria-label="Your first name" data-astro-cid-sz7xmlte> <div class="ft__form-row" data-astro-cid-sz7xmlte> <input type="email" name="email" placeholder="your@email.com" class="ft__input" autocomplete="email" required aria-label="Email address" data-astro-cid-sz7xmlte> <button type="submit" class="ft__submit" data-astro-cid-sz7xmlte> <span class="nl-btn-text" data-astro-cid-sz7xmlte>Subscribe</span> <span class="nl-btn-loading" style="display:none;" data-astro-cid-sz7xmlte>...</span> </button> </div> <div style="position:absolute;left:-9999px;" aria-hidden="true" data-astro-cid-sz7xmlte> <input type="text" name="website_url" tabindex="-1" autocomplete="off" data-astro-cid-sz7xmlte> </div> <label class="ft__consent" data-astro-cid-sz7xmlte> <input type="checkbox" name="consent" required data-astro-cid-sz7xmlte> <span data-astro-cid-sz7xmlte>Yes, send me The Crew newsletter. I can unsubscribe at any time.</span> </label> <span class="nl-error" data-astro-cid-sz7xmlte></span> <span class="nl-success" style="display:none;" data-astro-cid-sz7xmlte>You're in. Welcome to The Crew.</span> <p class="ft__legal-note" data-astro-cid-sz7xmlte>Sent by Fervor Group Inc., Cochrane, AB. <a href="/privacy/" data-astro-cid-sz7xmlte>Privacy Policy</a></p> </form> </div> </div> <!-- Column 2: Services --> <nav class="ft__col" aria-label="Services" data-astro-cid-sz7xmlte> <p class="ft__col-label" data-astro-cid-sz7xmlte>Services</p> <ul class="ft__links" data-astro-cid-sz7xmlte> <li data-astro-cid-sz7xmlte> <a href="/services/booked-by-design/" class data-astro-cid-sz7xmlte> Booked by Design™ </a> </li><li data-astro-cid-sz7xmlte> <a href="/services/leak-plug-sprint/" class data-astro-cid-sz7xmlte> Leak Plug Sprint </a> </li><li data-astro-cid-sz7xmlte> <a href="/services/local-dominance-setup/" class data-astro-cid-sz7xmlte> Local Dominance Setup </a> </li><li data-astro-cid-sz7xmlte> <a href="/services/performance-partner/" class data-astro-cid-sz7xmlte> Performance Partner™ </a> </li><li data-astro-cid-sz7xmlte> <a href="/services/contractor-growth-engine/" class data-astro-cid-sz7xmlte> Growth Engine </a> </li><li data-astro-cid-sz7xmlte> <a href="/services/content-starter-pack/" class data-astro-cid-sz7xmlte> Content Starter Pack </a> </li><li data-astro-cid-sz7xmlte> <a href="/services/review-velocity-boost/" class data-astro-cid-sz7xmlte> Review Velocity Boost </a> </li><li data-astro-cid-sz7xmlte> <a href="/services/priority-build/" class data-astro-cid-sz7xmlte> Priority Build </a> </li><li data-astro-cid-sz7xmlte> <a href="/site-inspection/" class="ft__link--highlight" data-astro-cid-sz7xmlte> The Site Inspection </a> </li> </ul> </nav> <!-- Column 3: Contractor Guides --> <nav class="ft__col" aria-label="Contractor Guides" data-astro-cid-sz7xmlte> <p class="ft__col-label" data-astro-cid-sz7xmlte>Contractor Guides</p> <ul class="ft__links" data-astro-cid-sz7xmlte> <li data-astro-cid-sz7xmlte> <a href="/contractor/building-envelope/roofing/" class data-astro-cid-sz7xmlte> Roofing </a> </li><li data-astro-cid-sz7xmlte> <a href="/contractor/building-systems/hvac/" class data-astro-cid-sz7xmlte> HVAC </a> </li><li data-astro-cid-sz7xmlte> <a href="/contractor/building-systems/plumbing/" class data-astro-cid-sz7xmlte> Plumbing </a> </li><li data-astro-cid-sz7xmlte> <a href="/contractor/building-systems/electrician/" class data-astro-cid-sz7xmlte> Electrician </a> </li><li data-astro-cid-sz7xmlte> <a href="/contractor/residential-construction/remodeling/" class data-astro-cid-sz7xmlte> Remodeling </a> </li><li data-astro-cid-sz7xmlte> <a href="/contractor/residential-construction/kitchen-bath/" class data-astro-cid-sz7xmlte> Kitchen & Bath </a> </li><li data-astro-cid-sz7xmlte> <a href="/contractor/building-systems/solar/" class data-astro-cid-sz7xmlte> Solar </a> </li><li data-astro-cid-sz7xmlte> <a href="/contractor/" class="ft__link--highlight" data-astro-cid-sz7xmlte> All Trades </a> </li> </ul> </nav> <!-- Column 4: Company --> <nav class="ft__col" aria-label="Company" data-astro-cid-sz7xmlte> <p class="ft__col-label" data-astro-cid-sz7xmlte>Company</p> <ul class="ft__links" data-astro-cid-sz7xmlte> <li data-astro-cid-sz7xmlte><a href="/about/" data-astro-cid-sz7xmlte>About</a></li><li data-astro-cid-sz7xmlte><a href="/contractor/cro-index/" data-astro-cid-sz7xmlte>The CRO Index</a></li><li data-astro-cid-sz7xmlte><a href="/contractor/cro-index/page-breakdowns/" data-astro-cid-sz7xmlte>Page Breakdowns</a></li><li data-astro-cid-sz7xmlte><a href="/compare/" data-astro-cid-sz7xmlte>Agency Comparison</a></li> </ul> </nav> <!-- Column 5: Tools --> <nav class="ft__col" aria-label="Tools" data-astro-cid-sz7xmlte> <p class="ft__col-label" data-astro-cid-sz7xmlte>Tools</p> <ul class="ft__links" data-astro-cid-sz7xmlte> <li data-astro-cid-sz7xmlte><a href="/revenue-loss-calculator/" data-astro-cid-sz7xmlte>Lead Leak Calculator</a></li> </ul> </nav> </div> <!-- ═══ BOTTOM BAR ═══ --> <div class="ft__bottom" data-astro-cid-sz7xmlte> <div class="ft__bottom-left" data-astro-cid-sz7xmlte> <span class="ft__copyright" data-astro-cid-sz7xmlte>© 2026 Fervor Studio</span> <span class="ft__dot" aria-hidden="true" data-astro-cid-sz7xmlte>·</span> <a href="/privacy/" class="ft__bottom-link" data-astro-cid-sz7xmlte>Privacy Policy</a> <span class="ft__dot" aria-hidden="true" data-astro-cid-sz7xmlte>·</span> <a href="/terms/" class="ft__bottom-link" data-astro-cid-sz7xmlte>Terms of Service</a> <span class="ft__dot" aria-hidden="true" data-astro-cid-sz7xmlte>·</span> <a href="/cookies/" class="ft__bottom-link" data-astro-cid-sz7xmlte>Cookie Policy</a> <span class="ft__dot" aria-hidden="true" data-astro-cid-sz7xmlte>·</span> <a href="/accessibility/" class="ft__bottom-link" data-astro-cid-sz7xmlte>Accessibility</a> <span class="ft__dot" aria-hidden="true" data-astro-cid-sz7xmlte>·</span> <a href="/affiliate-disclosure/" class="ft__bottom-link" data-astro-cid-sz7xmlte>Affiliate Disclosure</a> </div> <a href="https://fervorstudio.ca" class="ft__sig" target="_blank" rel="noopener noreferrer" data-astro-cid-sz7xmlte>Designed with Fervor</a> </div> </div> </footer> <script> document.addEventListener('DOMContentLoaded', () => { document.querySelectorAll('.footer-newsletter-js').forEach(form => { form.addEventListener('submit', async (e) => { e.preventDefault(); const f = e.target; const endpoint = f.dataset.endpoint; const errorEl = f.querySelector('.nl-error'); const successEl = f.querySelector('.nl-success'); const btnText = f.querySelector('.nl-btn-text'); const btnLoading = f.querySelector('.nl-btn-loading'); const submitBtn = f.querySelector('button[type="submit"]'); if (errorEl) errorEl.textContent = ''; const fd = new FormData(f); const data = { email: fd.get('email')?.toString().trim() || '', firstName: fd.get('firstName')?.toString().trim() || '', service: 'newsletter', sourcePage: window.location.pathname, website_url: fd.get('website_url')?.toString() || '', }; if (!data.firstName) { if (errorEl) errorEl.textContent = 'Please enter your name.'; return; } if (!data.email) { if (errorEl) errorEl.textContent = 'Please enter your email.'; return; } if (!/^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/.test(data.email)) { if (errorEl) errorEl.textContent = 'Please enter a valid email address.'; return; } var consentBox = f.querySelector('input[name="consent"]'); if (consentBox && !consentBox.checked) { if (errorEl) errorEl.textContent = 'Please confirm you want to receive our newsletter.'; return; } submitBtn.disabled = true; if (btnText) btnText.style.display = 'none'; if (btnLoading) btnLoading.style.display = 'inline'; try { const res = await fetch(endpoint, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data), }); const result = await res.json(); if (res.ok && result.success) { window.dataLayer = window.dataLayer || []; window.dataLayer.push({ event: 'newsletter_signup', newsletter_name: 'the_crew', signup_location: 'footer', page_path: window.location.pathname }); Array.from(f.querySelectorAll('input, button, label')).forEach(el => el.style.display = 'none'); const legal = f.querySelector('.ft__legal-note'); if (legal) legal.style.display = 'none'; if (successEl) successEl.style.display = 'block'; } else { if (errorEl) errorEl.textContent = result.errors?.email || result.message || 'Something went wrong.'; } } catch { if (errorEl) errorEl.textContent = 'Network error. Please try again.'; } finally { submitBtn.disabled = false; if (btnText) btnText.style.display = 'inline'; if (btnLoading) btnLoading.style.display = 'none'; } }); }); }); </script> <!-- ── Sticky Mobile CTA ── --> <a href="/site-inspection/" class="sticky-mobile-cta" aria-label="Get My Site Inspection"> Get My Site Inspection </a> <!-- Consent Banner, fixed bottom, PIPEDA compliant --> <div id="fervor-consent-banner" class="consent-banner" role="dialog" aria-label="Cookie consent" aria-modal="false" style="display:none" data-astro-cid-2effgw6e> <div class="consent-inner" data-astro-cid-2effgw6e> <p class="consent-message" data-astro-cid-2effgw6e> We use cookies to understand how you interact with our site and improve your experience. You can accept or reject non-essential cookies. <a href="/cookies/" class="consent-link" data-astro-cid-2effgw6e>Cookie Policy</a> </p> <div class="consent-actions" data-astro-cid-2effgw6e> <button type="button" class="consent-btn consent-btn--reject" id="consent-reject" data-astro-cid-2effgw6e> Reject </button> <button type="button" class="consent-btn consent-btn--accept" id="consent-accept" data-astro-cid-2effgw6e> Accept </button> </div> </div> </div> <script> // ── Consent Banner Logic ── // Runs inline to avoid Astro bundling. Must execute before GTM. (function() { var COOKIE_NAME = 'fervor_consent'; var COOKIE_MAX_AGE = 31536000; // 12 months function getCookie(name) { var match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)')); return match ? decodeURIComponent(match[2]) : null; } function setCookie(name, value, maxAge) { document.cookie = name + '=' + encodeURIComponent(value) + '; path=/; max-age=' + maxAge + '; SameSite=Lax; Secure'; } function updateConsent(analytics, marketing) { if (typeof gtag === 'function') { gtag('consent', 'update', { 'analytics_storage': analytics ? 'granted' : 'denied', 'ad_storage': marketing ? 'granted' : 'denied', 'ad_user_data': marketing ? 'granted' : 'denied', 'ad_personalization': marketing ? 'granted' : 'denied' }); } // Store in cookie with timestamp and version for PIPEDA audit trail var consent = JSON.stringify({ analytics: analytics, marketing: marketing, timestamp: new Date().toISOString(), version: '1' }); setCookie(COOKIE_NAME, consent, COOKIE_MAX_AGE); // Push consent event for GTM window.dataLayer = window.dataLayer || []; window.dataLayer.push({ 'event': 'consent_update', 'consent_analytics': analytics, 'consent_marketing': marketing }); // Notify other scripts (e.g. Clarity gating) of consent change window.dispatchEvent(new CustomEvent('fervor:consent-updated', { detail: { analytics: analytics, marketing: marketing } })); } // Check for existing consent var existing = getCookie(COOKIE_NAME); if (existing) { try { var parsed = JSON.parse(existing); // Restore consent state from cookie if (typeof gtag === 'function') { gtag('consent', 'update', { 'analytics_storage': parsed.analytics ? 'granted' : 'denied', 'ad_storage': parsed.marketing ? 'granted' : 'denied', 'ad_user_data': parsed.marketing ? 'granted' : 'denied', 'ad_personalization': parsed.marketing ? 'granted' : 'denied' }); } } catch(e) {} // Don't show banner, user already chose return; } // Show banner (no existing consent) var banner = document.getElementById('fervor-consent-banner'); if (banner) { banner.style.display = ''; requestAnimationFrame(function() { requestAnimationFrame(function() { banner.setAttribute('data-visible', ''); }); }); } // Accept: grant analytics, deny marketing (no ads yet) var acceptBtn = document.getElementById('consent-accept'); if (acceptBtn) { acceptBtn.addEventListener('click', function() { updateConsent(true, false); if (banner) { banner.removeAttribute('data-visible'); setTimeout(function() { banner.style.display = 'none'; }, 350); } }); } // Reject: deny everything var rejectBtn = document.getElementById('consent-reject'); if (rejectBtn) { rejectBtn.addEventListener('click', function() { updateConsent(false, false); if (banner) { banner.removeAttribute('data-visible'); setTimeout(function() { banner.style.display = 'none'; }, 350); } }); } })(); </script> <!-- Scroll Progress Bar --> <div id="scroll-progress" aria-hidden="true"></div> <!-- Site entrance + page transition doors --> <!-- Runs once per hard page load. SPA navigation handled by the persistent listeners. --> <script> (function() { // Guard: only run this initialization ONCE per browser session (not per SPA nav) if (window.__fervorEntranceInit) return; window.__fervorEntranceInit = true; var el = document.querySelector('.site-entrance'); if (!el) return; // ── Initial page load (hard load, not SPA) ── var isHomepage = location.pathname === '/' || location.pathname === '/index.html'; var hasSeenLogo = sessionStorage.getItem('entrance-logo-shown'); if (isHomepage && !hasSeenLogo) { sessionStorage.setItem('entrance-logo-shown', '1'); el.classList.add('entrance--show-logo'); setTimeout(function() { el.classList.remove('entrance--show-logo'); }, 600); setTimeout(function() { el.classList.add('entrance--open'); }, 800); setTimeout(function() { el.classList.add('entrance-done'); }, 1200); } else { setTimeout(function() { el.classList.add('entrance--open'); }, 50); setTimeout(function() { el.classList.add('entrance-done'); }, 180); } // ── Page transition handlers, registered ONCE, persist across SPA nav ── document.addEventListener('astro:before-preparation', function(e) { if (!e.loader) return; var originalLoader = e.loader; var fetchPromise = originalLoader(); e.loader = function() { return new Promise(function(resolve) { var persistedEl = document.querySelector('.site-entrance'); if (!persistedEl) { fetchPromise.then(resolve); return; } // Start in OPEN state (doors off-screen, element visible) persistedEl.classList.add('entrance--no-transition'); persistedEl.classList.add('entrance--open'); persistedEl.classList.remove('entrance-done'); // Wait TWO frames: one for display change to commit, one for transform snap requestAnimationFrame(function() { requestAnimationFrame(function() { // Re-enable transitions and trigger close persistedEl.classList.remove('entrance--no-transition'); persistedEl.classList.remove('entrance--open'); // Wait for close animation (180ms) AND fetch to resolve var closeDone = new Promise(function(r) { setTimeout(r, 190); }); Promise.all([fetchPromise, closeDone]).then(resolve); }); }); }); }; }); document.addEventListener('astro:before-swap', function() { window.scrollTo(0, 0); }); document.addEventListener('astro:after-swap', function() { var persistedEl = document.querySelector('.site-entrance'); if (!persistedEl) return; // Ensure classes are reset to "closed" state (strip any stale classes) persistedEl.classList.remove('entrance--open', 'entrance-done', 'entrance--show-logo'); // Force reflow so the browser commits the "closed" state before we transition to open void persistedEl.offsetHeight; // Now open persistedEl.classList.add('entrance--open'); setTimeout(function() { persistedEl.classList.add('entrance-done'); }, 130); }); })(); </script> <!-- Animation Engine, scroll-triggered WAAPI reveals --> <script type="module" src="/_astro/BaseLayout.astro_astro_type_script_index_0_lang.DSEUMZ1R.js"></script> <!-- Header shrink on scroll --> <script type="module">(function(){function t(){var e=document.querySelector(".site-header");if(!e)return;e.classList.remove("header--hidden");var n=!1,a=!1;function s(){var r=window.scrollY;r>80&&!n?(e.classList.add("header--shrunk"),n=!0):r<=40&&n&&(e.classList.remove("header--shrunk"),n=!1),a=!1}window.addEventListener("scroll",function(){a||(requestAnimationFrame(s),a=!0)},{passive:!0})}document.addEventListener("astro:page-load",t),document.readyState==="loading"?document.addEventListener("DOMContentLoaded",t):t()})();</script> <!-- Number counter animation for CRO index stats, teardown scores --> <script type="module">(function(){if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;function o(){var r=[];if(document.querySelectorAll(".td-cover__score-num").forEach(function(e){r.push(e)}),document.querySelectorAll("[data-counter]").forEach(function(e){r.push(e)}),document.querySelectorAll(".counter-number").forEach(function(e){r.push(e)}),!r.length)return;var u=new Set;function g(e){var t=e.textContent||"",n=t.match(/^([^0-9.-]*)(-?[\d,.]+)(.*)$/);if(!n)return{value:0,prefix:"",suffix:"",decimals:0};var s=n[1]||"",a=n[2].replace(/,/g,""),f=n[3]||"",d=parseFloat(a),i=a.includes(".")?a.split(".")[1].length:0;return{value:d,prefix:s,suffix:f,decimals:i}}function l(e,t){var n=e.toFixed(t).split(".");return n[0]=n[0].replace(/\B(?=(\d{3})+(?!\d))/g,","),n.join(".")}function w(e){return 1-Math.pow(1-e,3)}function x(e){if(u.has(e))return;u.add(e);var t=g(e);if(t.value===0)return;var n=800,s=performance.now();function a(f){var d=f-s,i=Math.min(d/n,1),q=w(i),A=t.value*q;e.textContent=t.prefix+l(A,t.decimals)+t.suffix,i<1?requestAnimationFrame(a):e.textContent=t.prefix+l(t.value,t.decimals)+t.suffix}requestAnimationFrame(a)}var m=window.innerHeight,c=!1,v=r.length;function p(){m=window.innerHeight;for(var e=0;e<r.length;e++){var t=r[e];if(!u.has(t)){var n=t.getBoundingClientRect();n.top<m*.85&&n.bottom>0&&(x(t),v--)}}v<=0&&window.removeEventListener("scroll",h),c=!1}function h(){c||(requestAnimationFrame(p),c=!0)}window.addEventListener("scroll",h,{passive:!0}),requestAnimationFrame(function(){requestAnimationFrame(p)})}document.addEventListener("astro:page-load",o),document.readyState==="loading"?document.addEventListener("DOMContentLoaded",o):o()})();</script> <!-- Ripple Effect, subtle click feedback on [data-ripple] elements --> <script type="module">function c(t,e,n){const i=t.getBoundingClientRect(),d=e-i.left,s=n-i.top,o=Math.max(i.width,i.height)*2,r=document.createElement("span");r.style.cssText=` position: absolute; border-radius: 50%; background: currentColor; opacity: 0.1; width: ${o}px; height: ${o}px; left: ${d-o/2}px; top: ${s-o/2}px; transform: scale(0); pointer-events: none; z-index: 10; `,t.appendChild(r);const p=r.animate([{transform:"scale(0)",opacity:"0.1"},{transform:"scale(1)",opacity:"0"}],{duration:400,easing:"cubic-bezier(0.16, 1, 0.3, 1)",fill:"forwards"});p.onfinish=()=>r.remove()}function a(){document.addEventListener("click",t=>{const e=t.target.closest("[data-ripple]");e&&(window.matchMedia("(prefers-reduced-motion: reduce)").matches||c(e,t.clientX,t.clientY))}),document.addEventListener("touchstart",t=>{const e=t.touches[0];if(!e)return;const n=e.target.closest("[data-ripple]");n&&(window.matchMedia("(prefers-reduced-motion: reduce)").matches||c(n,e.clientX,e.clientY))},{passive:!0})}typeof document<"u"&&(document.addEventListener("astro:page-load",a),document.readyState==="complete"||document.readyState==="interactive"?a():document.addEventListener("DOMContentLoaded",a));</script> <!-- Scroll Progress Bar, shows reading position on long pages --> <script type="module">function n(){const e=document.getElementById("scroll-progress");if(!e)return;if(window.matchMedia("(prefers-reduced-motion: reduce)").matches){e.style.display="none";return}const s=document.documentElement.scrollHeight,d=window.innerHeight;if(s<d*1.5){e.style.display="none";return}e.style.display="block";let t=!1;function o(){const i=window.scrollY||document.documentElement.scrollTop,r=document.documentElement.scrollHeight-window.innerHeight,c=r>0?i/r*100:0;e.style.width=`${c}%`,e.style.opacity=i>50?"1":"0",t=!1}window.addEventListener("scroll",()=>{t||(requestAnimationFrame(o),t=!0)},{passive:!0}),o()}typeof document<"u"&&(document.addEventListener("astro:page-load",n),document.readyState==="complete"||document.readyState==="interactive"?n():document.addEventListener("DOMContentLoaded",n));</script> <!-- ── Custom Scroll Depth Tracking ── Replaces GA4 Enhanced Measurement scroll (which only fires at 90%). Fires at 25%, 50%, 75%, 100% with time-on-page context. --> <script> (function() { var milestones = [25, 50, 75, 100]; var fired = {}; var pageLoadTime = Date.now(); function getScrollPercent() { var h = document.documentElement; var b = document.body; var st = h.scrollTop || b.scrollTop; var sh = h.scrollHeight || b.scrollHeight; var ch = h.clientHeight; if (sh <= ch) return 100; return Math.round((st / (sh - ch)) * 100); } function checkScroll() { var pct = getScrollPercent(); for (var i = 0; i < milestones.length; i++) { var m = milestones[i]; if (pct >= m && !fired[m]) { fired[m] = true; window.dataLayer = window.dataLayer || []; window.dataLayer.push({ 'event': 'scroll_milestone', 'percent_scrolled': m, 'time_on_page_seconds': Math.round((Date.now() - pageLoadTime) / 1000) }); } } } // Throttled scroll listener var ticking = false; window.addEventListener('scroll', function() { if (!ticking) { window.requestAnimationFrame(function() { checkScroll(); ticking = false; }); ticking = true; } }, { passive: true }); // Handle View Transitions, reset scroll tracking on client-side nav document.addEventListener('astro:page-load', function() { fired = {}; pageLoadTime = Date.now(); }); })(); </script> <!-- ── View Transitions: Virtual Pageview ── Astro ClientRouter makes navigation SPA-like. Push a virtual pageview event on each client-side navigation so GA4 captures all page views, not just the initial load. --> <script> document.addEventListener('astro:page-load', function() { window.dataLayer = window.dataLayer || []; // Don't fire on initial page load (GTM handles that via page_view) if (window.__fervor_initial_load) { window.dataLayer.push({ 'event': 'virtual_pageview', 'page_path': window.location.pathname, 'page_title': document.title }); } window.__fervor_initial_load = true; }); </script> <script> if (window.innerWidth <= 768) { document.addEventListener('DOMContentLoaded', function() { // Tier: citations/sources get 16px floor var citeEls = document.querySelectorAll('[class*="source"],[class*="cite"],[class*="citation"],[class*="context"]'); for (var c = 0; c < citeEls.length; c++) { var cfs = parseFloat(getComputedStyle(citeEls[c]).fontSize); if (cfs < 16) citeEls[c].style.setProperty('font-size', '16px', 'important'); } // Floor: everything else gets 14px minimum var els = document.querySelectorAll('p,span,a,li,td,th,label,input,select,textarea,button,figcaption,cite,blockquote,dt,dd,summary,small'); for (var i = 0; i < els.length; i++) { var fs = parseFloat(getComputedStyle(els[i]).fontSize); if (fs < 14) els[i].style.setProperty('font-size', '14px', 'important'); } }); } </script> </body> </html>