ManagedCRM.org

roofing

How Roofers Stop Losing Estimates With a Pipeline That Follows Up for Them

By ManagedCRM.org Team · September 19, 2026

Roofers stop losing estimates by putting every estimate request into a GoHighLevel pipeline owned by a sales rep, with 12 weekly touches across email, SMS, and call tasks until the order is booked. In our experience setting this up for roofing shops, that kind of consistent follow-up has produced around a 20% lift in jobs — not a guarantee, but the pattern we've seen when no estimate is left to memory.

The estimate went out Tuesday. The homeowner said they’d talk it over. The rep meant to call back Thursday, then a storm hit two towns over, the phones lit up, and that estimate quietly died in a text thread somewhere. Nobody lost it on purpose. It just never had a system behind it.

We’ve seen this trip up more than one roofing shop. The crew does good work. The rep runs a solid appointment. But after the proposal leaves the driveway, follow-up depends on memory — and memory loses to whatever is urgent that day. The shop then buys more leads to fill a hole that follow-up would have filled for free.

The fix isn’t working harder. It’s a pipeline where every estimate request lands, a rep owns it, and 12 weekly touches run until the order books or the homeowner opts out.

One rep owns every estimate, and the first reply takes minutes

Every estimate has an owner: the sales rep. Not the crew, not whoever answers the phones between other jobs.

That distinction matters because job assignment and estimate ownership live in different systems. Crews get dispatched from the booking software — business development is not the tech’s job. But inquiries, leads, and opportunities live in the GoHighLevel pipeline, where they can be owned by whoever handles sales: the owner, office staff, or a dedicated rep. Nothing sits unowned in a shared inbox.

The second half of ownership is speed. Our goal for the first response is minutes. Industry research consistently backs that up — the shop that responds first usually wins the homeowner’s attention, and every hour of silence is an opening for the next bidder. So the moment an estimate request comes in, the rep gets notified and the pipeline automations take over behind them: confirmation text, call task, next steps queued. The rep doesn’t have to remember anything. The system tells them who to contact today.

Missed calls get the same treatment. If a homeowner calls while the rep is on a roof, missed-call text-back fires automatically — “sorry we missed you, when works to talk through your estimate?” — so a missed call becomes a conversation instead of a lost job. We’ve seen that single automation save estimates that would otherwise have gone to whoever texted back first.

The estimate syncs on request and exits on booked

The estimate syncs into GoHighLevel on the new estimate request, and the contact comes out of estimate follow-up when the order is booked.

Roofing estimators reading closely will notice this breaks our usual rule. Elsewhere we default to syncing on a final event — a paid invoice, a published report — because syncing early means cancellations and reschedules have to be reflected back in the CRM later, and that’s where syncs go stale. Our real-time data sync pillar walks through that reasoning.

Estimates are the deliberate exception. You can’t follow up on an estimate that hasn’t synced yet, and waiting until the job is final would mean waiting until there’s nothing left to win. So this is a pre-job sync by design: sync on the request, run the whole follow-up cadence against it, and remove the contact the moment the order books. If the homeowner re-engages later, they re-enter from the new state — a returning customer never keeps receiving “just checking on your estimate” messages after they’ve already signed.

One thing we keep vendor-neutral on purpose: the exact mechanism that carries the estimate request into the CRM depends on which booking or estimating tool the shop runs, and trigger names differ by platform. What matters is the shape — in on request, out on booked — not the brand on either end. And like every sync we build, it runs one way. The booking software stays the source of truth for job data; the CRM never writes back into it or changes job records.

12 touches, once a week, across three channels

The cadence we’ve set up for roofing shops is 12 touches, once per week, across email, SMS, and call tasks for the rep.

Twelve sounds like a lot until you compare it against how homeowners actually buy a roof. For example, a typical homeowner weighing a full replacement might sit on three quotes for weeks — talking to a spouse, waiting on an insurance answer, watching the forecast, second-guessing the price. A repair prospect might move faster but still needs two or three nudges before picking up the phone. One or two calls covers neither buyer. Twelve weekly touches covers both, because the cadence outlasts the decision instead of expiring before it.

The channel mix is deliberate. Email carries the longer messages — the education pieces, the proposal recap with photos, the warranty explainer. SMS carries the short nudges — the check-in, the schedule opening, the question that takes ten seconds to answer. Call tasks put the rep’s voice where it matters most: objection handling and the direct ask. Different homeowners respond on different channels, so running all three maximizes the odds of a real conversation. The pipeline creates the rep’s call tasks automatically, so nothing depends on the rep remembering who to phone.

The content arc across those 12 touches runs in order: special offer, education, objection handling, pain-point triggers, down-sell. Early touches lead with value and reasons to act. Middle touches answer the questions homeowners are actually stuck on. Late touches name the cost of waiting — the leak that spreads, the storm season that doesn’t — and the final touches step down to a smaller ask rather than going silent. For example, a down-sell touch might offer a repair or a phased scope for a homeowner who clearly can’t approve the full replacement right now. A smaller booked job beats a dead estimate, and it keeps the relationship alive for the replacement later.

And the cadence never “closes the loop.” There’s no “we’ll assume you’re all set” message that retires the lead. The touches keep coming weekly until the homeowner books or opts out. Silence isn’t a no — it’s a not yet.

Stages that match how roofing actually sells

The pipeline’s opportunity stages are customized into roofing steps: estimate requested, inspection done, proposal sent, insurance pending, and the booked or lost outcomes past them.

Generic CRM stages — lead, opportunity, done — tell a roofing rep nothing. Roofing-specific stages tell them everything: has someone been on the roof yet? Is the proposal in the homeowner’s hands? Are we waiting on an adjuster? Each stage triggers the right follow-up for where the deal actually sits. An “insurance pending” estimate gets check-ins about the adjuster visit and supplement expectations, not another copy of the proposal. A “proposal sent” estimate with no inspection scheduled yet gets a different conversation entirely.

The stages also produce the metrics that make coaching possible: response time per rep, conversion rate by source, win rate, and lost reasons. That last one is gold. When lost reasons accumulate — price, timing, went with another bidder, insurance denied — the owner can see the actual pattern instead of guessing. For example, if a run of lost estimates all tag the same objection, that’s a proposal-template or financing-conversation problem, not a lead problem. Without stages, every lost estimate is just a shrug.

Reps can also add custom tags for intent the system can’t see — a homeowner who says “call me back in spring” gets tagged, and the tag schedules that follow-up instead of letting it dissolve into a notebook.

Compliance is built in, not bolted on

Twelve touches only work if every one of them is compliant — and compliant from day one, not fixed after a carrier flag.

The mechanics: campaigns are registered under the client’s own brand, never ours, with proper A2P 10DLC registration for texting (that’s the carrier system that approves businesses to send texts). Every SMS carries its own opt-out line; email gets the same. Volume ramps in small drip batches rather than blasting the whole list on day one, with a secondary sending domain for marketing email and a secondary number for marketing texts keeping the shop’s main business identity clean.

Two GoHighLevel specifics roofers need to understand. First, the default do-not-contact is global — one unsubscribe can silence a contact across every campaign, including appointment reminders and review requests. So we build per-campaign unsubscribe workflows for email and SMS, letting a homeowner opt out of estimate follow-up without going dark on everything else. Second, an SMS “STOP” reply is a permanent opt-out that can’t be manually overridden in the CRM — the homeowner opts back in only by replying “START” or with other explicit opt-in language. The rep needs to know that before they try to “fix” an opt-out by hand.

This matters most in the first few months of a new setup. Accounts with high SMS opt-out or error rates, or high email bounce rates, get suspended — that’s documented carrier and mailbox-provider behavior, not a scare story. Roughly 10% of a re-engagement list opting out is normal and not a sign the campaign is failing. Blasting past that with sloppy opt-out handling is how shops get their number flagged.

What a managed estimate pipeline looks like running

When we build this for a roofing shop, the foundation is the estimate sync — request in, booked out, contacts de-duplicated by matching email and phone so one homeowner gets one record and one coherent sequence. On top sit the standard workflows: review requests, missed-call text-back, lead follow-up, appointment reminders, acquisition, retention, and reactivation, plus the 12-touch estimate cadence and anything custom the shop needs.

Then the ongoing part: webhooks, the API connection, sync integrity, workflow performance, and email, text, and call performance all get monitored, with field mapping re-checked whenever the source software ships an update. Integrations tend to break at update time, not at initial setup — that’s when a field moves or a trigger changes shape and follow-up starts firing wrong. Real-time reporting lives on the dashboard, and change requests and optimizations are handled on priority.

The pattern we’ve seen across these setups is around a 20% lift in jobs through follow-up. That’s our observed pattern, not a promise — lead quality, market, pricing, and how consistently the rep works those call tasks all move the number. But the mechanism behind it isn’t mysterious: most shops stop after one or two calls, while most roofing decisions take far longer than that. A pipeline that follows up 12 times simply outlasts the competition’s memory.

If your estimates are sitting in text threads and spreadsheets instead of a pipeline that chases them for you, book a call and we’ll show you what the managed setup does.

Frequently asked questions

How many times should a roofer follow up on an estimate?

Our roofing setup runs 12 touches, once per week, across email, SMS, and call tasks for the rep. The arc moves from special offer to education to objection handling to pain-point triggers to a down-sell. Most shops we see stop after one or two calls, which is exactly where the jobs leak out.

Who should own estimate follow-up in a roofing company?

The sales rep owns every estimate, not the crew and not the office in between other jobs. Inquiries, leads, and opportunities live in the GoHighLevel pipeline where the rep works them, and the goal for the first response is minutes, not hours.

How does the estimate get into GoHighLevel in the first place?

The estimate syncs into the CRM on the new estimate request, which is a deliberate pre-job sync, and the contact is removed from estimate follow-up once the order is booked. That is different from post-job sync, where we default to a final event so the CRM never goes stale.

What pipeline stages work for roofing estimates?

We customize the opportunity into roofing steps such as estimate requested, inspection done, proposal sent, and insurance pending. Each stage tells the rep exactly where the deal sits and which follow-up fires next, and the pipeline reports response time, conversion by source, win rate, and lost reasons per rep.

Do I need to worry about texting compliance for estimate follow-up?

Yes. Register campaigns under your own brand with proper A2P 10DLC registration, put your own opt-out line on every SMS and email, and remember a STOP reply is a permanent opt-out that only a START reply reverses. GoHighLevel's default do-not-contact is global, so per-campaign unsubscribe workflows keep one opt-out from silencing appointment reminders and review requests too.

What results can estimate follow-up actually produce?

We've seen around a 20% lift in jobs through consistent estimate follow-up across roofing setups. Treat that as a pattern we've observed, not a promise — your lift depends on lead quality, market, pricing, and how consistently the rep works the call tasks.

Suggested Reads

← Back to all posts