Can you defend paying around $118 for a single click on a broad roofing repair query when your crews only make real money on full asphalt replacements and higher-end slate work? A lot of owners still treat Google Ads like a volume dial, assuming high-intent search traffic will eventually land a $45,000 contract. That story misses the quieter problem: you can win the auction and still lose the month if the office is not built to filter job types. In Northeast markets, where seasonality and material mix swing gross margin, buying clicks without a hard operational filter can leave you with roughly a 13.6% net loss on every lead you accept.
Northern New Jersey shop after agency reporting showed a strong click-through rate and an $84 cost per lead. On paper the account looked healthy. In production the mix was mostly gutter tweaks and handyman-scale fixes the crews could not price profitably.
The math behind chasing page-one clicks
Green dashboards do not pay diesel or estimator payroll.
I sat with Adrian, who runs a mid-sized roofing company in northern New Jersey. His agency deck was full of wins: strong CTR, low cost per lead, lots of calls. His cash position told a different story. When we opened the raw call tags, about sixty-two percent of the contacts were minor gutter work or quick patch asks his $3,500-a-day crews could not serve without eating margin.
The issue is rarely the platform alone. It is the missing filter. Agencies lean on lead volume because it is easy to screenshot. I care about effective customer acquisition cost against net margin per crew hour. If Google Ads keeps sending Bergen County homeowners who want a fast patch on an ice-dam leak, you are not scaling. You are funding estimator time that never reaches a full system sale.
The hidden bill includes fuel, estimator salary, and the opportunity cost of skipping a $32,000 reroof consult. Technical and market context matters, and the Western States Roofing Contractors Association publishes resources operators should read. The gap I still see is tying that market awareness to the overhead your marketing spend creates inside the office.
Signals that your ads are buying the wrong conversations
Estimator calendars fill while average job value and gross margin per booked week stay flat or fall.
Search terms and call reasons drift toward small repairs even though your production plan favors replacements.
Sales hears the same objection: the homeowner wanted a price for a quick fix, not a full system.
Bid on job parameters, not generic roofing noise
Intent shifts by city and by month. Your keywords should too.
Profitable Northeast shops need parameters in the account: materials you stock, certifications your crews hold, pitch bands you will actually walk, and ZIPs where your warranty approach matches local expectations. In places like Worcester or Albany, the meaning of a plain roofing search swings between early spring and late fall. If your copy and negatives do not mirror that reality, you are funding clicks that never align with production.
Blind volume vs. parameter-led bidding (illustrative shop profile)
| Metric | Broad roofing search | Parameter-led bids |
|---|---|---|
| Average CPC | $18 - $25 | $38 - $52 |
| Lead quality (job fit) | 18.4% | 64.8% |
| Sales rep close rate | 7.2% | 21.5% |
| Effective customer acquisition cost | $1,142 | $614 |
Average CPC
Lead quality (job fit)
Sales rep close rate
Effective customer acquisition cost
Higher CPC on tight terms can still cut effective CAC when your reps stop burning cycles on work types you were never going to install.
Yes, the click costs more on the tighter terms. The acquisition math improves because your team is not spending three quarters of the week explaining why a low-ticket repair does not match how you deploy crews.
A Northeast storm week without a seasonal filter
Busy phones are not the same as booked replacements.
In Providence I watched a shop get hammered after a late-season storm. Google Ads was wide open, but without strong negatives on repair language and patch-style asks, the office took 142 calls in forty-eight hours. Nine were real replacement opportunities. The rest were noise that still carried labor cost in the building.
Action Plan
Operational reset after the storm spike
This is the same type of cleanup I run when a Northeast shop confuses call volume with contract-ready demand.
Tighten negatives around repair-only intent that does not match your replacement-heavy production plan.
Shift bid weight toward ZIP codes with older housing stock where full systems are more common.
Temporarily pull bid emphasis from pockets heavy on new construction still under builder warranties.
Re-check ad schedules and copy monthly so March language is not still running like November language.
Efficiency is not only what happens on the roof. It is what earns a truck day in the first place. If your intake team keeps defending why certain calls were never a fit, it is worth reading how refunds, exclusivity, and lead quality standards work on verified demand so you are not guessing after the click.
Safety and compliance belong in the CAC model
A win on paper can still lose once labor burden is real.
Every accepted lead should pass a simple test: does this job match our safety profile and crew expertise? If you are attracting complex Victorian steep-slope work in the Hudson Valley, insurance and harness time are not rounding errors.
Do not ignore compliance overhead in the bid
Federal guidance on roofing fall protection is strict, and complex pitches add real hours. OSHA outlines baseline expectations for roofing work, and crews need training and gear that show up on the job cost sheet, not only in a safety manual.
OSHA roofing safety guidance is a useful anchor when you sanity-check whether a campaign is attracting work you can execute profitably once harnessing, extra labor, and slower production days are included. If the answer is no, that click was a gift to the platform, not a pipeline event.
Modeled ROI on $10,000 monthly spend (Boston-style competition)
Same budget, different intent, different production dollars.
Traditional mix
- Spend: $10,000
- Clicks: 526 ($19.01 CPC)
- Leads: 42 (8% conversion)
- Estimated closes: 4 (10% sales conversion)
- Revenue: $88,000 (avg. $22k job)
- CAC: $2,500
Operations-led mix
- Spend: $10,000
- Clicks: 212 ($47.16 CPC, higher intent)
- Leads: 38 (18% conversion)
- Estimated closes: 8 (21% sales conversion)
- Revenue: $192,000 (avg. $24k job)
- CAC: $1,250
When CPC roughly doubles but intent tightens, the same media budget can stack roughly $104,000 more revenue in this modeled example because each dollar chases work your crews can finish in about a day and a half. Rolling Adrian's intake cleanup together with the Providence routing discipline, modeled across a year on a comparable spend plan, landed about $142,800 more production margin than the old mix once estimator time and misfit repairs were priced honestly.
Inventory-aware negatives
"Every two weeks, reconcile stock and crew certifications with your negative keyword list. If EPDM is tight but architectural laminate is plentiful, exclude flat-roof language until you can install without a long delay. Stop paying for conversations you cannot book inside a reasonable window."
Stop letting lead count proxy for production health
Marketing should read like an extension of the schedule board.
The recurring mistake is handing growth to someone who has never priced a steep-slope replacement or managed a tear-off crew through a humid July week. If metal crews are booked eight weeks deep, the account should not still be chasing broad metal queries that do not match capacity. You want demand you can verify against the work you actually want to put in the hopper.
When spend aligns with crew capability, the P&L stops arguing with the dashboard. For more field and growth context, browse LeadZik's articles on home service operations and marketing.
