Hamilton Roofer Case Study: 0 to 22 Roofing Jobs from Web Leads
Case Study — Roofing · Hamilton · 120 days

Hamilton Roofer: 0 to 22 Jobs Closed

In 120 Days.

A Hamilton roofing contractor with zero web-generated leads built a Google Ads + landing page + AI chatbot system that closed 22 roofing jobs in 120 days — averaging $11,400 per ticket. Full breakdown of the playbook.

🏠 22 jobs closed 💰 ~$250K revenue 📞 0 → 38 leads/mo ⚡ 120 days
🏠 22 roofing jobs in 120 days 💰 ~$250K revenue from web 📞 0 → 38 inbound / mo 🇨🇦 Hamilton + Burlington geo 🌧️ Storm-damage seasonal ramps 🤖 24/7 AI quote bot 🏠 22 roofing jobs in 120 days 💰 ~$250K revenue from web 📞 0 → 38 inbound / mo 🇨🇦 Hamilton + Burlington geo 🌧️ Storm-damage seasonal ramps 🤖 24/7 AI quote bot
Google Ads Landing Page AI Chatbot Storm Tracking Financing Widget Drone Photos Reviews Schema Call Tracking Google Ads Landing Page AI Chatbot Storm Tracking Financing Widget Drone Photos Reviews Schema Call Tracking
Home / Case Studies / Roofing — Hamilton, ON
TL;DR — Real Numbers Inside

Industry: Roofing  |  Location: Hamilton, ON  |  Services used: Google Ads · Landing Page · AI Chatbot · Reviews

0Before
22After
0 → 22 jobsGrowth
120 daysTimeline

About the Client

A second-generation roofing contractor based in Hamilton, Ontario, serving Hamilton, Burlington, Stoney Creek, and Ancaster. Four crews, two estimators, family-run, and the owner had taken over from his father two years before the engagement. Everything the business won was through door-knocking after storms, lumber-yard referrals, and a Google Business Profile that ranked locally for "roofing Hamilton" but converted poorly because it pointed at a 2016-era WordPress site that the owner described as "embarrassing".

Web-generated leads: zero. Not low — zero. Every quote request was a phone call from a referral. The owner had specifically resisted Google Ads because he had watched competitors waste money on it, and he had no marketing manager on staff to evaluate vendors.

The Challenge

  • Brand-new digital footprint. No analytics history, no conversion tracking, no email list, no review acquisition system. We were not optimizing — we were building from zero.
  • High-ticket, low-volume. Average roofing ticket in Hamilton is $9K–$15K. The cost-per-lead tolerance is high (up to $250 acceptable), but the conversion rate from lead to closed job has to be ≥15% or unit economics break.
  • Seasonal demand. March–May (spring inspections) and Sept–Nov (storm damage / pre-winter) are the windows. Aug heatwave + Jan deep freeze are dead. We had 120 days that bridged spring-shoulder into peak storm season — pacing had to be precise.
  • Trust deficit. Roofing is one of the most-scammed verticals on Google. Homeowners need overwhelming trust signals (warranty info, license number, BBB, before/after photos, financing terms) before they will request a quote.
$11,400
Average closed-job ticket from web-sourced leads — squarely in the healthy range for Hamilton residential roofing.

Our Approach

1. Trust-Heavy Landing Page

The landing page leads with the license number, $2M liability insurance proof, WSIB clearance certificate, and an embedded Google review widget showing 187 verified 5-star reviews. Drone before/after photos of three recent local jobs. A financing pre-qualification widget (0% for 12 months via Financeit) sits next to the quote-request CTA. Every trust signal a homeowner could ask for is visible above the second scroll.

2. Storm-Damage Focused Ad Strategy

Hamilton gets predictable summer storms. We built a "storm damage emergency" campaign with weather-triggered bid boosts: when Environment Canada issues a thunderstorm watch within 50km, the ad group budget cap lifts 40% for the next 48 hours. Two storms in July alone produced 11 of the 22 closed jobs.

3. Three Service Verticals

Separate ad groups and landing-page sections for: full re-roofs (highest value), repairs (volume driver), and flat roof / commercial (highest margin). Each with its own ad copy and message-match. Re-roof CPL ended at $112, repair CPL at $48, commercial at $190 — all profitable.

4. AI Quote Chatbot With Photo Upload

An AI chatbot on the landing page asks the homeowner three questions (address, roof age, problem) and prompts them to upload a photo of the damage from their phone. The photo + answers route to the estimator's email instantly. Estimators come into the morning with 5–8 pre-qualified visual quote requests in their inbox — they spent zero time on phone tag.

5. Review Acquisition Loop

Every completed job triggers an automated SMS at 24 hours post-completion asking for a Google review with a direct link. Review acquisition rate hit 41% (vs. industry avg of 8%). The Google Business Profile climbed from 4.7★ (61 reviews) to 4.9★ (187 reviews) during the engagement, which independently lifted the organic phone-call volume.

Implementation Timeline

Weeks 1–2New site + tracking + trust signals

WordPress 2016 site retired. New Lead4Pro landing page with license, insurance, reviews, drone photos, financing widget. Full GA4 + CallRail + GTM rebuild.

Weeks 3–4Google Ads campaigns launched

Three campaigns: Re-roof, Repair, Storm-Damage. Aggressive negative KW list. tCPA at $130 manual for first 30 days.

Weeks 5–8AI quote chatbot + photo upload

Chatbot live, photo flow tested. Estimator workflow rebuilt around morning inbox of pre-qualified quote requests. First 9 jobs close in Month 2.

Weeks 9–12Weather-triggered bid lifts + review loop

Environment Canada API wired into ad-group budgets. SMS review-ask deployed on every job completion. GBP review velocity triples.

Weeks 13–16Storm season — scale day

Two July storms hit. 11 of 22 total closed jobs originate from storm-week ads. Engagement closes with 38 inbound leads / mo and pipeline filled into October.

Results

Web-Sourced Jobs Closed 0 jobs Before 22 jobs After
Before vs After — web-sourced jobs closed.
MetricBeforeAfter (Day 120)Change
Web-sourced jobs closed022+22
Monthly inbound leads038new channel
Avg ticket$11,400healthy
Lead → closed-job rate~18%above target
Google Business reviews61 (4.7★)187 (4.9★)+207%
Estimated revenue from web$0~$250Knew revenue
Monthly Inbound Leads Over 120 Days 3627188 09213138 M0M1M2M3M4
Trend over the engagement period.

Key Tactics Roofers Can Copy

🛡️

Trust signals above the fold

License #, insurance proof, WSIB, reviews, drone photos. Roofing is a scam-heavy vertical — overwhelm hesitation in the first scroll.

⛈️

Weather-triggered bid lifts

Wire Environment Canada thunderstorm alerts into your ad-group budget caps. Storm-damage demand is a 48-hour window — be there.

📸

Photo upload in the chatbot

Estimators love pre-qualified visual leads. The homeowner stays engaged because they get a real preview quote faster.

💳

Financing widget on the page

0% for 12 months via Financeit raises close rates by 20–30% on re-roofs. Toronto/Hamilton homeowners are credit-sensitive on $10K+ projects.

SMS review ask 24h post-job

41% acquisition rate vs. 8% industry avg. The reviews compound your GBP rank for free.

🎯

Three verticals, three CPAs

Re-roof, repair, commercial — separate ad groups, separate landing sections, separate tCPAs. Don't average across them.

Tools & Tech Stack

  • Ads: Google Ads Search ($2,400/mo) + LSA pending verification
  • Tracking: GA4, GTM, CallRail, Financeit conversion events
  • Landing page: Lead4Pro template with drone-photo gallery, financing widget, GBP review embed
  • Chatbot: Lead4Pro AI assistant with photo upload + estimator inbox routing
  • Reviews: Twilio SMS review-ask flow at job-completion trigger
  • Weather: Environment Canada thunderstorm API → Google Ads budget cap script

Lessons Learned

  1. Trust beats price in roofing. Lower-price competitors lost to this client whenever the trust stack was visible. The financing widget converted price objections without dropping margin.
  2. Storm windows compress an entire month into 48 hours. If you are not bidding hard during a thunderstorm warning, your competitors are eating it.
  3. Reviews are an ad asset. 187 reviews at 4.9★ delivered organic phone calls that we never paid for — a permanent compounding return on the SMS review loop.
  4. Photo upload eliminates phone tag. The single biggest estimator productivity gain of the engagement.

What's Next

Local Services Ads (Google Guaranteed) verification is in progress — once live, that will sit above Search results. We are also planning a programmatic SEO push for "[service] [town]" pages similar to the IT Cares model: re-roof Stoney Creek, flat roof Burlington, eavestrough Ancaster, etc. Pipeline currently filled into March 2027.

Roofing Marketing Hamilton ON Storm Damage Ads Google Ads AI Chatbot Reviews

How a Roofer Survived Their First-Ever Google Ads Campaign

Most roofers who try Google Ads have one disastrous experience and never come back. The Hamilton client was specifically nervous because two of his competitors had stopped advertising after losing $4K+ in three months with little to show. Lead4Pro's onboarding spent the first conversation explicitly on what failure modes look like and how we structure against them. The four most common reasons roofing Google Ads fail are: (1) no conversion tracking, so Smart Bidding can't learn, (2) generic landing pages that bury trust signals, (3) bidding on competitors' brand names instead of intent terms, (4) ignoring the storm-damage demand window. The engagement was structured to avoid each one explicitly.

The result is that the owner went from skeptic to advocate by month 3. He has since referred two other Hamilton contractors to Lead4Pro — neither of them a roofer, both of them watching his trucks and asking what he changed.

"My brother-in-law runs the windows shop two units down. He saw my schedule and asked me who I was using. I told him. He signed up the next week."— Owner, Hamilton roofing contractor

Why Drone Photography Was a 3x Conversion Lift

The landing page features four drone-photographed before/after sequences of actual jobs the team completed in Hamilton, Stoney Creek, and Burlington. The photos are not stock; they include addresses, dates, and the type of materials used. A/B testing during week 6 of the engagement showed that the page with drone photos converted 3.1× higher than the same page with stock photos. The drone investment ($1,200 one-time hardware + license) paid back within two closed jobs.

The Environment Canada Weather API Hack

One of the most novel pieces of the engagement was wiring an Environment Canada thunderstorm-watch API into the Google Ads daily budget cap script. When a thunderstorm watch is issued within 50km of Hamilton, the storm-damage ad group's budget cap automatically lifts 40% for 48 hours and the bid-floor tightens to capture more impressions. After the storm passes, the cap reverts. Most agencies do not even know Environment Canada offers a free machine-readable feed for severe-weather alerts. The build took one engineer a weekend.

Eleven of the 22 closed jobs in the engagement window originated from two specific storm events in July. Without the budget-cap automation, those leads would have hit the cap by 11am on storm day and the account would have stopped serving impressions exactly when Hamilton homeowners were Googling "roof leak emergency".

The Review Acquisition Loop in Detail

The SMS-at-completion review flow is the single highest-ROI durable asset built during the engagement. Every job-completion ticket in the CRM triggers an automated SMS 24 hours later: "Hi [name], we hope your roof is set. If we did right by you, would you mind leaving us a Google review? Here is the direct link: [link]". The acquisition rate is 41% — five times the industry average. The reason it works: 24 hours is long enough for the customer to be back to their routine but recent enough that the experience is still emotionally salient. The link drops them directly into the Google review form, bypassing the search step where most review acquisition flows lose people.

The downstream effect of climbing from 61 reviews at 4.7★ to 187 reviews at 4.9★ is enormous. Google Business Profile rank in Hamilton's local pack for "roofer Hamilton" climbed from position 4 to position 1. Organic phone calls from the GBP listing went from ~12/mo to 41/mo — an entire second lead channel that costs zero per acquisition, generated as a free byproduct of the review automation.

What 22 Closed Roofing Jobs Actually Look Like in Practice

The headline "22 jobs closed" is easy to skim past, so let us unpack what the pipeline looked like in practice. Of the 22 closed jobs across the 120-day window: 13 were full re-roofs (asphalt shingle, two-storey single-family homes, average ticket $13,200), 6 were repairs (storm-damage shingle replacement, average ticket $2,800), 2 were flat-roof commercial jobs (small office plazas, average ticket $18,500), and 1 was a metal-roof premium re-roof at $34,000 — that single job alone covered the entire engagement's Lead4Pro fees plus the 120-day ad spend with margin to spare.

The mix is intentionally diverse because the Hamilton roofing market is structurally diverse. The owner did not want to be locked into only the cheapest residential re-roofs; the engagement was deliberately designed to capture the high-margin verticals (flat roof, metal, commercial) alongside the volume-driving residential work. Each vertical had its own ad-group and its own landing-page section. Without that structural separation, the high-margin work would have been buried under cheaper-click residential shingle traffic.

The Pipeline Effect After Engagement Ends

One of the under-discussed benefits of a 120-day engagement is the long tail. As of the post-engagement audit, the owner was still working through 14 unfilled quote requests from leads that came in during weeks 14–17 of the engagement. Storm-damage prospects in particular do not always close inside the same month — homeowners often wait for insurance adjusters to visit, file paperwork, and only then schedule work. A storm in late September generates jobs that close in late October and even November. The 22 closed jobs counted in the official engagement results are conservative; the realistic 6-month total is closer to 30 once the late-closers come through.

The Google Business Profile gain is also a long-tail effect. Climbing from 61 to 187 reviews compounds because Google rewards review velocity. Every month going forward, the GBP will rank higher locally and pull more zero-cost calls. The SMS review-ask loop continues running on autopilot post-engagement, adding ~20 reviews per month indefinitely.

Frequently Asked Questions

Is roofing a profitable Google Ads vertical?
Yes, if you set up properly. Roofing has high CPC ($28–$45 typical) but also high ticket size ($9K–$15K average). The economics work as long as you keep conversion tracking clean and your trust signals strong on the landing page. The Hamilton engagement closed at roughly 8% click-to-quote-request conversion rate, well above the 3% national benchmark.
Do I need a drone to do this?
Drone photos help, but the same effect can be achieved with high-quality ground-level before/after photography. The non-negotiable is real photos of real jobs — not stock photography. Roofing prospects can spot a stock photo immediately and it kills trust.
How quickly can I get Local Services Ads (Google Guaranteed)?
LSA verification for roofing takes 4–8 weeks because Google requires license verification, insurance verification, and a background check on the owner. We start LSA paperwork during onboarding so it can layer in by month 2–3 of the engagement.
How do you handle the 'door-knocking after storms' culture in roofing?
We do not replace it — we complement it. The Google Ads + LSA + GBP funnel captures the homeowners who never let strangers knock on their door. Door-knocking handles the rest. Two channels, two sales cycles.
What if I cannot afford drone photography or a financing widget?
Start with the basics: license number, insurance certificate, 3 high-quality phone photos of recent jobs, and a 4.5+ Google review average. That alone outperforms 70% of competing roofer landing pages in any given market.

Want similar results for your roofing business?

Book a free 30-minute strategy call. We will map your funnel, identify the biggest leak, and show you exactly how Lead4Pro AI can scale your leads — no fluff, no pressure.

⚡ Reply < 2h 🔒 Zero obligation 📈 ROI roadmap included