The $2M Plumbing Shop That Found 18% of Jobs Were Unprofitable
A Midwest plumbing owner ran a job-by-job profit audit over one quarter and found nearly 1 in 5 jobs lost money. The patterns were consistent: wrong techs on the wrong jobs, under-quoted water heater swaps, and unpaid warranty callbacks coded as new work. Here is what the audit showed and the Sully prompts that surface it.
Key takeaways
- ServiceTitan guidance puts healthy plumbing gross margin at 60 to 62 percent and net margin at 17 to 20 percent, with a 70 percent billable utilization floor.
- Drain cleaning runs 65 to 75 percent margin. Water heater replacement runs 25 to 35 percent. New construction runs 10 to 18 percent. Mixed-bag shops blend these and hide the loss-makers.
- Warranty and callback jobs are routinely coded as new work in Housecall Pro and Jobber, which inflates apparent revenue and hides the true callback cost.
- Emergency plumbing calls carry 50 to 70 percent gross margin when the after-hours rate is actually charged. Most shops under-charge overnight labor by 20 to 30 percent.
- Top-performing tech average ticket is commonly 2x the bottom tech in the same shop, not because of skill difference but because of coaching on options and add-ons.
Contents
- 01The water heater swaps that looked profitable until the clock stopped
- 02The drain cleaning jobs hiding the wrong tech assignment
- 03The warranty callbacks that got booked as new jobs
- 04The emergency calls priced like daytime work
- 05The new construction jobs that should not have been taken
- 06The repiping jobs quoted without a materials buffer
- 07What jumped out after 90 days of tracking
- 08What this means for your shop
- 09Sources
- 10Frequently Asked Questions
A $2M plumbing shop outside St. Louis pulled every closed job from the prior quarter and ran a single question across each one. Did we actually make money on this job after loaded labor, materials, truck, and warranty risk. The answer came back on 312 jobs. Fifty-six of them lost money. That is 18 percent, and the pattern was so consistent the owner described it in three bullets on the whiteboard the next morning.
ServiceTitan's 2025 plumbing profitability work puts the healthy benchmark at 60 to 62 percent gross margin and 17 to 20 percent net, with 70 percent billable utilization as the floor. ServiceTitan The shop's aggregate was inside the band. The per-job view was not.
Here is what the audit exposed.
The water heater swaps that looked profitable until the clock stopped
Water heater replacement is one of the easiest plumbing jobs to under-quote. The standard swap is scoped as 2 to 3 hours of labor, the tank, fittings, and disposal. Build-folio's 2025 margin work puts water heater replacement at 25 to 35 percent gross margin when priced correctly. Build-folio The St. Louis shop had 41 water heater jobs in the quarter. Fourteen of them lost money.
The pattern: the quote assumed 2.5 hours. The actual average was 4.1 hours. Old galvanized lines needing replacement, pan drain re-routing, or earthquake straps to current code added labor nobody priced in. The tech ate the overrun because he was on salary and the dispatcher had already booked the next call.
The fix was a two-tier quoting system. A base swap price for replacements where the existing install was 2020-or-newer and code-compliant. A "complexity" line item for anything older that triggered a $180 site-visit quote instead of a flat rate. Under-quotes on water heaters dropped from 34 percent to 9 percent in the following quarter.
Text Sully: "water heater jobs in the last 90 days where actual labor hours exceeded quoted hours by more than 25 percent"
The drain cleaning jobs hiding the wrong tech assignment
Drain cleaning margin should be 65 to 75 percent. The shop's aggregate came in at 58 percent, which looked fine until the audit split by technician. One senior plumber ran drain cleaning at 71 percent margin. A junior tech ran the same service type at 38 percent margin.
The gap was not skill. The junior tech was billing the same price and running 40 percent longer on each stoppage. That is dispatcher discretion, not price. The senior clearing a tough main in 45 minutes vs the junior taking 90 minutes on the same job meant one finished call and the other was a half-day.
Home Service Scorecard's 2025 KPI work makes the point: billable utilization is the metric that exposes who is generating revenue per clock-hour vs who is absorbing it. Home Service Scorecard The shop started routing tough mains (2-inch-plus, rooted) to the senior by default and moved the junior to simpler kitchen and lavatory stoppages. Margin on drain cleaning climbed from 58 percent to 66 percent in 60 days.
Text Sully: "drain cleaning jobs in the last quarter grouped by tech, with average hours and average ticket per job"
The warranty callbacks that got booked as new jobs
This was the biggest single source of hidden loss. When a tech rolled back to a job from last month to fix a re-leak or a bad coupling, the dispatcher was creating a new job ticket. That ticket had its own revenue ($0 on warranty) and its own cost (full loaded labor). Because it was a new ticket, it did not show up linked to the original job profit view.
The audit found 23 warranty rolls in the quarter, coded as new no-charge jobs. The total loaded labor on those rolls was $4,800 against zero revenue. None of it showed as a callback cost against the original job.
This is the exact blind spot called out in Housecall Pro reports that miss real job profit and it works the same way in Jobber. When warranty is a separate ticket, the original job looks profitable and the callback shows as an unfortunate but separate cost. The customer view is one job. The financial view is two, and nobody reconciles them.
The fix was a one-line change in dispatch SOP. Warranty rollbacks get the original job number in the ticket description and a callback tag, then a weekly report sums callback cost per original job and per tech.
Text Sully: "jobs completed in the last 6 months that generated a no-charge callback within 60 days, with total callback labor cost per tech"
The emergency calls priced like daytime work
Emergency plumbing should run 50 to 70 percent gross margin when after-hours pricing actually gets charged. Build-folio plumbing margins The St. Louis shop had 28 emergency calls in the quarter. Ten of them were billed at daytime rates because the customer booked through the website overnight and the CSR the next morning quoted the standard price.
The shop was eating 1.5x labor cost on a third of its emergency jobs. The dispatcher did not know the job started at 11 PM because the ticket created-at timestamp was the booking time, not the dispatch time.
The fix: any booking created between 9 PM and 6 AM, or on weekends, auto-tags as "after-hours" and the CSR's quote script triggers the emergency rate. Recovery on the category was roughly $3,100 the following quarter.
The new construction jobs that should not have been taken
Plumbing new construction runs 10 to 18 percent margin at best. Build-folio The shop had five new-construction jobs (a local contractor friend) and all five came in under 8 percent. One lost money outright.
John Wilson of Wilson Plumbing and Heating, now running $30M+ in Ohio, framed it on Owned and Operated:
You make money at each plateau because you cap out the infrastructure you have built. If you are taking work that does not match your cost structure you are just burning your infrastructure. Owned and Operated
The Midwest shop was not scaled for new construction. Its truck stock, parts inventory, and tech billing rate were all built for residential service and repair. Every new-construction job was running below cost because the shop was using service techs on framer schedules.
The owner killed new construction as a service offering. Five jobs a quarter at sub-10 percent margin were consuming 18 percent of the senior tech's time. Reallocating that time to service at 60 percent margin added roughly $22,000 in quarterly gross profit.
Text Sully: "gross margin per job by service category for the last 6 months, new construction vs service and repair side by side"
The repiping jobs quoted without a materials buffer
Repipes are the other easy-to-miss loss-maker. Three repipe jobs in the quarter lost money because the quoted materials cost was based on a per-fixture estimate and the actual footage came in 12 to 20 percent over. Copper pricing moved mid-quarter, which the shop's quote tool did not reflect.
The fix: a 15 percent materials buffer baked into every repipe quote, reset monthly against current supplier pricing. The buffer showed as the line item "Material contingency" on the invoice, and customers did not push back because the quote number was still competitive.
Steph's Books' 2025 plumbing margin benchmarks are clear: top shops net 15 to 20 percent, most sit at 5 to 12 percent, and the gap is almost always material-pricing discipline on longer jobs. Steph's Books
What jumped out after 90 days of tracking
Eighteen percent of jobs were unprofitable. Three root causes covered 90 percent of them:
- Under-quoted water heaters (14 jobs) because the base quote assumed a 2020-or-newer install.
- Warranty callbacks coded as new jobs (23 tickets) hiding $4,800 of free labor.
- New construction and low-margin new-contractor work (5 jobs) taken on infrastructure sized for service.
The remaining 14 jobs were scattered: emergency priced at daytime, a junior tech on a senior job, material overruns. Each category got a specific SOP fix, not a "train everyone harder" talk.
We had 312 jobs and 56 were losers. But we found them in a week because we asked the right question. That is the whole trick.
The owner ran the first audit in a spreadsheet. The second quarter he ran it through Sully in chat, one prompt per category, no export.
Text Sully: "show me the 20 most unprofitable jobs this quarter, ranked by loss, with the reason each one went negative if detectable"
What this means for your shop
Run it on your own quarter. The aggregate P&L will usually look fine. The 20-percent-loss jobs hide inside the 80 percent that pay for them.
Four quick filters catch most of it:
- Compare quoted hours to actual hours on every job, flag anything over 25 percent over.
- Tie every callback to the original job, so a seemingly profitable job that produces a free rollback nets to the real number.
- Split margin by tech for the same service type. A 20-point gap between techs is almost always a dispatch and coaching problem, not a price problem.
- Look at after-hours-tagged jobs and confirm the emergency rate was billed.
For the broader set of reports every shop should be running, see Jobber reports every home service business should run. For job-profit blind spots specific to HCP see Housecall Pro reports miss real job profit. For plumbing-specific AI coverage see AI agents for plumbers.
Sources
- ServiceTitan: Improving Plumbing Business Profitability
- Build-folio: Plumbing Business Profit Margins 2026 Benchmarks
- Steph's Books: Plumbing Profit Margins Industry Benchmarks
- Home Service Scorecard: Is Running a Plumbing Business Actually Profitable
- Owned and Operated: John Wilson Q&A Session
- BlueCollar.CEO: From 8 Trucks to 8 Figures in 8 Years with John Wilson
Frequently Asked Questions
5 questions home service owners actually ask about this.
01What percentage of plumbing jobs are typically unprofitable?
Across shops that audit at the job level, 10 to 20 percent is the common range. ServiceTitan benchmarks imply the gap is mostly in water heater swaps, new construction, and uncharged emergency work. A shop that has never audited will usually discover the number is in the upper half of that range.
02What is a healthy plumbing gross margin?
ServiceTitan guidance puts it at 60 to 62 percent gross margin and 17 to 20 percent net. Drain cleaning carries the highest at 65 to 75 percent. New construction is the lowest at 10 to 18 percent.
03How should warranty callbacks be tracked?
As a linked ticket against the original job, not as a new no-charge job. If your CRM creates a new ticket, force the dispatcher to add the original job number in the description and tag it "callback" so a monthly rollup can net the cost against the original job profit.
04Why do water heater replacements lose money?
Because the quote assumes a code-compliant 2020-or-newer install and the actual job is usually older, with galvanized lines, missing pan drains, or earthquake-strap requirements that add 1 to 2 hours of labor the quote did not price.
05What does Sully do for plumbing profitability?
Sully reads your CRM (Jobber, Housecall Pro, ServiceTitan, Workiz), QuickBooks, and job data, then answers per-job and per-service-line profit questions in chat. You ask in English, it returns the number. No new dashboard, no export to Excel.
See Sully in action
Sully 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.