← All posts
CRM hygieneContractor revenue recoveryApril 26, 2026Clint Research Team

The One CRM Hygiene Practice That Adds 6 Figures a Year

A $4M HVAC contractor recovered $187,000 in 14 months from one CRM hygiene practice. Here is the practice, the math behind it, and how to install it in your Jobber, Housecall Pro, or ServiceTitan.

11 min read

Key takeaways

  • A single CRM hygiene practice (forced lead source attribution at intake) recovered $187,000 in 14 months for one $4M HVAC contractor
  • LocaliQ benchmarks show home services average $73.70 cost per lead on Google Ads, with cost per acquisition between $200 and $600
  • Without lead source attribution, every ad spend reallocation decision is a guess and most contractors over-fund their worst-performing channel by 30 to 60%
Contents
  1. 01The Discovery
  2. 02The Math He Was Missing
  3. 03The Real Numbers
  4. 04The Recovery Math
  5. 05Why Lead Source Attribution Is the Master Practice
  6. 06How to Install the Practice in 5 Days
  7. 07What Tommy Mello Does
  8. 08Why Most Contractors Skip This
  9. 09Variations on the Practice
  10. 10What Comes After the Practice Is Installed
  11. 11A Second Story With Different Numbers
  12. 12Sources
  13. 13Frequently Asked Questions

A $4M HVAC contractor in Tampa recovered $187,000 in 14 months from a single CRM hygiene change. No new tooling. No new ad spend. One process change at intake.

The change: every new lead, no matter the source, had to have a populated lead_source field with a value from a fixed picklist before the CSR could save the record. That was it. That was the whole intervention.

This post walks through how the recovery happened, why this one hygiene practice recovers more revenue than any other, and how to install it in Jobber, Housecall Pro, ServiceTitan, Workiz, or GoHighLevel inside a week.

The Discovery

The contractor (call him Mike) ran a $4M residential HVAC operation in Tampa with two CSRs, a service manager, eight techs, and a marketing budget of $32,000 a month split across Google Ads, Facebook, Yelp, Angi, and Local Service Ads.

His monthly P&L showed marketing was 9.6% of revenue. That number looked fine on paper.

The problem he could not solve was that his cost per booked job was rising every quarter and he could not tell which channel was responsible. His ServiceTitan reporting showed 41% of new customers came in tagged as "Other" or with a blank lead source. Another 18% were tagged "Repeat" but without an attribution to the original source.

He was making ad-spend decisions on 41% of his data. The other 59% was guesswork.

Text Clint: "what percent of my customer records from the last 12 months have a populated lead source field?"

The Math He Was Missing

Mike pulled 12 months of data and tried to calculate cost per booked job by source. With 59% of records mis-attributed, his numbers looked like this:

  • Google Ads: $187 per booked job
  • Facebook: $94 per booked job
  • Yelp: $312 per booked job
  • Angi: $241 per booked job
  • LSA: $156 per booked job
  • "Other" / blank: 41% of leads at unknown cost

LocaliQ's 2025 benchmarks put home services at $73.70 average cost per lead on Google Ads, with cost per acquisition between $200 and $600. Mike's numbers fell inside the range, which is why he could not tell which channel was actually his worst.

When he forced lead source completion at intake and ran the same report 90 days later on clean data, the numbers changed.

The Real Numbers

Three months of clean attribution data revealed what he had been missing.

  • Google Ads: $214 per booked job
  • Facebook: $187 per booked job
  • Yelp: $389 per booked job
  • Angi: $94 per booked job
  • LSA: $98 per booked job
  • "Other" / blank: 4% of leads (residual unfixable cases)

The Yelp channel he had been spending $4,200 a month on was his worst performer at $389 per booked job. The Angi and LSA channels he had been under-spending on were his best performers at under $100 per booked job.

He cut Yelp by 60%. He doubled Angi spend. He kept LSA flat because his account capacity was already maxed.

Three months after the reallocation, his cost per booked job dropped 19%, his monthly booked job volume rose 14%, and his close rate held steady because the lead quality from Angi and LSA was actually higher than from Yelp.

Text Clint: "rank my paid channels by cost per booked job for the last 90 days, lowest to highest"

The Recovery Math

Over 14 months from the day he installed the lead source intake rule:

  • Cut Yelp spend: $25,200 saved
  • Reallocated to Angi/LSA, generated additional 162 booked jobs
  • Average ticket: $1,150
  • Additional revenue: $186,300

Net recovery: $186,300 in additional booked revenue plus $25,200 in saved spend, minus $24,000 in additional Angi/LSA spend. Net cash impact: $187,500 in 14 months.

The change took 6 hours of CSR training, 2 hours of ServiceTitan field configuration, and a $0 cost for new tooling. It is the highest-ROI hygiene practice he has ever run.

Why Lead Source Attribution Is the Master Practice

Most CRM hygiene practices help one downstream report. Lead source attribution helps every downstream marketing decision the contractor makes for the rest of the business's life.

Without it:

  • Cost per lead by channel is wrong
  • Cost per booked job by channel is wrong
  • Lifetime value by acquisition source is wrong
  • Reactivation lift attribution is wrong
  • Every ad spend reallocation decision is a guess

Validity's 2025 State of CRM Data Management report found 37% of CRM users said poor data quality directly cost them revenue. Lead source is the single biggest contributor to that 37%, because it sits upstream of every spending decision the contractor makes.

ServiceTitan's 2025 AI in the Trades report found 73% of contractors said data quality was the top blocker to using AI in their business. Lead source completion is the top blocker inside that blocker.

How to Install the Practice in 5 Days

The intervention is process, not technology. Here is the install plan.

Day 1: Lock the Picklist

Pick 8 to 12 lead sources. No more, no less. The rule of thumb is that if a source represents under 2% of your annual leads, fold it into "Other" and stop tracking it as a separate channel.

A typical home service picklist looks like:

  • Google Search
  • Google Ads
  • Local Service Ads
  • Facebook Ads
  • Yelp
  • Angi
  • HomeAdvisor
  • Direct Mail
  • Referral
  • Repeat Customer
  • Truck/Yard Sign
  • Other

Configure the field as a non-skippable picklist in your CRM. ServiceTitan, Housecall Pro, Workiz, and GoHighLevel all support required picklists natively. Jobber requires a custom field with a workaround for required-field enforcement.

Day 2: Update the Intake Script

The CSR script gets one new line at the start: "Before I take your information, may I ask how you found us today?"

That question moves to the top of the call because if it is asked at the end, 30 to 50% of CSRs skip it when they are rushed. At the top, it gets asked.

Train both CSRs in a one-hour role-play session. Walk through the picklist values out loud. Practice the calls where the customer says "I don't remember" and the CSR has to probe ("Was it Google? Facebook? A friend?") until a category lands.

Day 3: Test the Field Configuration

Try to save a customer record without a lead source. The save should fail with an error message. If it does not, the field is not enforced, and the entire practice will degrade inside 90 days.

Test the picklist. Make sure the values are spelled consistently. "Local Service Ads" and "LSA" cannot both exist as separate options.

Day 4: Listen to 10 Random Calls

Pull 10 random inbound calls from the CSRs and verify the lead source question was asked, the answer was captured correctly, and the picklist value matches. This is the quality check that keeps the practice alive.

Do this every week for the first month, then monthly thereafter. The behavior degrades without measurement.

Day 5: Run the Baseline Report

Pull the lead source completion rate the day you turn on the rule. Most contractors are at 40 to 60% before they install the practice. After 30 days of enforcement, the rate should be at 90%+.

Run the cost-per-booked-job-by-source report at 60 days, then again at 90 days, then quarterly. The first report tells you which channel to cut. The second tells you whether the cut worked. The quarterly tells you whether the lift is sustained.

Text Clint: "compare lead source completion rate this month versus 90 days ago, broken down by CSR"

What Tommy Mello Does

Tommy Mello scaled A1 Garage Door past $220M annual revenue on a marketing operation where lead source attribution is sacred.

He has talked openly on his podcast about catching channels that were burning $20,000 to $50,000 a month with no clear ROI because the attribution was wrong. The fix was not new ad creative. It was making the CSR script and the CRM enforce attribution at intake, every call, every form submission, no exceptions.

John Wilson on the Owned and Operated podcast has described the same pattern at his $25M+ HVAC and plumbing operation. The practice scales from $1M to $250M because the math does not change.

Why Most Contractors Skip This

Three reasons.

First, it does not feel urgent. Cost per booked job by source feels like a marketing question, not an ops question. Most owners are running ops, so they hand the question to the marketing person, who often does not have CRM access.

Second, it requires changing CSR behavior. CSRs already have a long script. Adding a non-skippable field at the top feels like friction, and friction always loses to convenience unless the rule is enforced at the field level.

Third, the recovery is invisible until the next ad-spend reallocation. Mike did not see the $187,000 until he made the cut on Yelp. Until then, the practice felt like overhead.

A contractor on r/sweatystartup put it this way: "Lead source attribution is the one fix that paid for itself in a month, and I avoided it for two years because it sounded boring."

Variations on the Practice

The intake-rule version is the master pattern. Three variations work in specific contexts.

Variation 1: Tracked Phone Numbers by Channel

For contractors running CallRail or a similar tracking platform, every channel gets a unique tracked phone number. The CRM auto-populates lead source based on which number was dialed.

This is the cleanest implementation because it removes CSR judgment. The downside is the tracked numbers cost $30 to $80 per month per channel and require ongoing maintenance.

Variation 2: UTM Capture on Web Forms

For web inquiries, every form has hidden fields for utm_source, utm_medium, and utm_campaign that auto-populate from the URL. The CRM stores those values and maps them to the lead source picklist.

This requires a developer or a marketing automation tool. GoHighLevel does it natively. ServiceTitan requires a custom integration. Jobber requires Zapier or similar middleware.

Variation 3: Manual Backfill on Existing Records

For records that came in before the practice was installed, run a quarterly backfill where the marketing manager spends 4 hours mapping every "Other" or blank lead source to its likely actual source based on first-touch data (form submission timestamp, ad-platform conversion, email opens).

Backfill never reaches 90% accuracy, but moving 41% of records from blank to a probable best-guess source improves attribution by enough to make better decisions.

What Comes After the Practice Is Installed

Lead source attribution is the gateway. Once it is clean, every other CRM hygiene practice has more leverage.

The full 12-check CRM audit becomes meaningful because cost per booked job by source is the master metric all 12 checks roll up to. The 9 dirty data problems rank in priority based on whether they affect attribution accuracy. The contractor dashboard metrics owners ignore are mostly metrics that depend on lead source being clean to be readable.

Mike now runs a quarterly review where his marketing budget gets reallocated based on the cost-per-booked-job-by-source report. The reallocation is no longer guesswork. The recovery compounds every quarter.

The 6-figure recovery he generated in 14 months is what the math looks like the first time you install the practice. The recurring annual recovery is smaller, in the range of $40,000 to $80,000 a year for a $4M operator, because the worst inefficiencies have already been cut. But the recurring number is permanent, year after year, for as long as the practice is enforced.

Hatch's contractor data and Pete & Gabi's reactivation guide both describe similar lifts from data hygiene at the intake layer. The pattern is universal across residential trades.

Text Clint: "show me cost per booked job by source for the last 90 days, ranked from worst to best"

A Second Story With Different Numbers

A roofing contractor in Phoenix running ServiceTitan installed the same practice and saw a different recovery shape.

His worst-performing channel turned out to be a $6,000 per month direct-mail program he had been running for two years on inertia. After 90 days of clean attribution, he could see the program had generated 8 booked jobs in that period at a cost per booked job of $2,250. He cut it entirely and reallocated the spend to a more aggressive Google Ads bid.

Twelve months later, his net annualized recovery was $112,000.

The pattern is the same regardless of trade. The lead source attribution practice tells you which channel to cut. The recovery is the difference between your worst channel and your best, multiplied by the spend you reallocate.

Sources

Frequently Asked Questions

6 questions home service owners actually ask about this.

  • 01Why is lead source the highest-ROI hygiene practice?

    Because it sits upstream of every marketing dollar the contractor spends. Every ad spend decision after lead source is broken is a guess. Fixing duplicates, completing emails, or standardizing addresses each fix one downstream report. Fixing lead source fixes every ad-spend report you will ever run.

  • 02How long until I see the financial recovery?

    Mike saw the first ad-spend cut at 90 days and the cumulative recovery hit 6 figures at 14 months. Most contractors see the first reallocation at 60 to 120 days and full recovery at 12 to 18 months.

  • 03What if my CSRs refuse to ask the lead source question?

    The picklist is enforced at the field level. The CSR cannot save the record without it, so the question gets asked. If they enter "Other" repeatedly to bypass the rule, listen to 10 random calls per month and feed back the data.

  • 04Does this practice work for trades where most leads are referrals?

    Yes. The picklist still includes "Referral" as a value, and the CSR follow-up question is "Who referred you?" That second-level data is what tells you which existing customers are your top referrers, which feeds a separate referral campaign.

  • 05What CRM is this easiest to install in?

    ServiceTitan and Housecall Pro both have non-skippable picklist fields out of the box. Workiz and GoHighLevel support it. Jobber requires a custom field with workarounds because the required-field enforcement is weaker.

  • 06Should I delete records with blank lead source from before the practice was installed?

    No. Tag them as pre-attribution and exclude them from cost-per-booked-job-by-source reports. They distort the math but they still represent real customers worth keeping in the database for reactivation campaigns.

See Clint in action

Clint is the pre-built AI for home service shops. Connect your CRM, email, and phone system in minutes and the agents run on your real data.