(443) 600-8990Get a free consultation
  1. Home
  2. Blog
  3. Plumbing
Plumbing

Profit by job type: what's actually making you money in plumbing

A simple way to split income and costs by job type so you can see which work, drain calls, water heaters, repipes, or remodels, actually pays.

Profit by job type: what's actually making you money in plumbing

October 2, 2026 · Mitt Patel · 6 min read

You closed out last month at $68,000 in revenue and felt good about it, until you tried to answer one question: was it the drain calls or the repipes that actually made you money? You couldn't say. The number just sits there, one lump sum, telling you nothing about which trucks to send out more often.

Why this happens

Most plumbing businesses track income as one line: plumbing revenue. Maybe there's a second line for service calls versus larger jobs, if that. Every invoice, whether it's a $180 drain snake or a $14,000 repipe, lands in the same bucket.

The problem is these are not the same business. A drain call takes an hour, uses almost no material, and gets paid same day. A repipe ties up a crew for a week, requires permits and material orders, and might get paid in stages over a month. A water heater swap is fast with real material cost. A remodel rough-in competes with your service work for the same technicians but runs on a completely different rhythm.

When they all sit in one income line, and materials sit in one cost line, you can't see gross margin by job type. You see total revenue and total cost, and you guess. The cost of that guess shows up in decisions: you might quote repipes too cheap because you think the crew's "efficient" at them, when really the drain calls are what's carrying the month. You might keep a technician booked on remodel rough-ins because the calendar looks full, without noticing the margin on that work is thin after material and labor.

A worked example

Say your shop did $68,000 in revenue last month, split like this:

  • Drain calls: $14,000 in income, $2,000 in material and dispatch cost
  • Water heaters: $16,000 in income, $7,000 in material cost
  • Repipes: $24,000 in income, $15,000 in material and subcontracted labor
  • Remodel rough-ins: $14,000 in income, $6,000 in material cost

Total revenue is $68,000. Total direct cost is $30,000. On paper, that is a $38,000 gross margin, and it looks fine as one number. (These figures leave out your own technicians' wages to keep the example simple, which is why the margins look high. Once payroll is tagged by job type too, the percentages drop and the comparison gets sharper.)

But look at the margin by type:

  • Drain calls: $12,000 margin on $14,000 revenue, an 86% margin
  • Water heaters: $9,000 margin on $16,000 revenue, a 56% margin
  • Repipes: $9,000 margin on $24,000 revenue, a 38% margin
  • Remodel rough-ins: $8,000 margin on $14,000 revenue, a 57% margin

Repipes brought in the most revenue, $24,000, but drain calls brought in more margin, $12,000 against $9,000, on a little over half the revenue. If you didn't split this out, you'd never know that drain calls are your highest-margin work per dollar billed, and that repipes need either a price increase or tighter material control to be worth the crew time they eat up.

This is an example only. Your own margins depend on your labor cost, your material markup, and how you price each type of job. The point is not the specific percentages. The point is that you can't see any of this without splitting the numbers apart first.

How to set it up

  1. Pick your job types. Most plumbing shops need four to six categories: something like drain and rooter, water heater, repipe, remodel rough-in, and general service. Don't create more than you'll actually use consistently.
  1. Set up classes or locations in QuickBooks Online. QuickBooks Online lets you tag each transaction with a "class," which acts as a job type label without needing a whole second set of books. Turn on class tracking in settings, then create one class per job type.
  1. Tag every invoice with a class. When you invoice a customer, assign the job to its class before you save it. This takes a few seconds and is the step that makes the whole system work.
  1. Tag the matching costs. Material purchases, subcontracted labor, and any job-specific cost should get the same class as the job they belong to. If you buy a water heater for a specific job, tag that purchase as water heater, not as general supplies.
  1. Run a profit and loss by class report monthly. This report splits your income and direct costs into columns by job type, so you can see margin for each without doing the math by hand.
  1. Review it against last month, not just once. One month tells you something. Three or four months tells you whether a job type is consistently strong or weak.

Mistakes that undo it

  • Tagging income but not cost. If you label the invoice but not the material purchase or the labor tied to it, the report shows revenue by type but not real margin. You need both sides tagged for the report to mean anything.
  • Too many categories. If you create a class for every sub-type of job, technicians will tag things inconsistently or skip it, and the report becomes noise. Keep it to the handful of job types that actually run differently in your business.
  • Skipping the tag on quick jobs. It's tempting to skip tagging a $180 drain call because it feels too small to matter. But if drain calls are a big share of your volume, skipping the tag on all of them wrecks the report.
  • Not tagging technician labor if you track it. If you track labor hours or payroll by job, and only some job types get that labor cost applied, margins for the untagged types will look artificially high.
  • Letting overhead confuse the picture. Job-type margin should include direct costs, material, and job labor. It should not try to include rent, office staff, or your own salary. Trying to allocate every overhead dollar by job type usually creates more guesswork than it removes.

Monthly checklist

  • Confirm every invoice from the past month has a class or job type assigned
  • Confirm every material purchase and subcontracted cost has a matching class
  • Run the profit and loss by class report
  • Compare each job type's margin to the prior month
  • Flag any job type where margin dropped and ask why, price, material cost, or labor time
  • Note any job type with unusually high margin and consider whether you can do more of it

Common questions

Do I need separate bank accounts for this?

No. This is done inside your bookkeeping software using classes or a similar tagging feature, not separate accounts. One bank account is fine.

What if a job has more than one type of work in it?

Some jobs mix types, like a remodel that includes a water heater swap. In that case, split the invoice into line items and tag each line with its own class, if the amounts are large enough to matter. For small mixed items, most bookkeepers assign the whole line to the primary job type and note the exception.

How many months of data do I need before this is useful?

One month gives you a snapshot. Three months starts to show a pattern. Look for job types where the margin is consistently low or consistently high, rather than reacting to a single unusual month.

Can this help me decide what to advertise or staff for?

It can inform that decision, since it shows you which job types carry better margin per dollar of revenue. But staffing and marketing decisions also depend on demand, crew skill, and what work is available in your area, so treat the margin report as one input, not the whole answer.

North Hudson Bookkeeping can set up job-type tracking like this for plumbing clients and help keep it current every month, so the report is ready when you want to look at it. The first call is free.

Want this handled for you?

Monthly bookkeeping from $500 a month: every account reconciled, clear reports and a short summary each month. Book a free 20-minute call or call (443) 600-8990.

Get a free consultation

Talk to MittCall or text (443) 600-8990 · or book a free consultation
Free consultationFree callCallTextWritten quoteQuote