All posts

How to Price a Plumbing Job: Parts, Labor, and Margin

14 min read

Price a plumbing job from the bottom up: parts at what they really cost you, labor at a loaded rate times the hours the crew actually works, the cost of the truck roll, and a share of overhead. Then divide the total by one minus your target margin. The formula is Price = (parts + loaded labor + truck roll + overhead) ÷ (1 − target margin). The number most plumbers get wrong is hours, because the supply-house run, the seized valve, and the code upgrade nobody saw coming never make it into the estimate.

Plumbing is a trade of small tickets and big surprises. A fill valve is a fifteen-dollar part and a forty-minute visit. A repipe is a week of crew time and a truckload of PEX. Both have to carry the same fixed costs, the van, the insurance, the dispatcher, and both can go sideways the moment a wall is opened. This guide walks through the full build-up for service calls and installs, shows where plumbing margins leak, and gives you two worked examples you can adapt.


The five things every plumbing job costs

Whether it is a Saturday drain call or a whole-house water heater swap, the price rests on five layers:

  • Parts and materials, the fixture or water heater, plus the fittings, supply lines, valves, solder, primer, glue, pipe, and hangers that go around it.
  • Labor, the loaded hourly cost of every person on the job, for the hours they actually work.
  • The truck roll, the time and vehicle cost to get a stocked van to the door and back. Every call pays it, even a fifteen-minute one.
  • Pass-through costs, permits, inspection fees, disposal, and equipment rental, billed at cost or with a small handling charge.
  • Overhead, the slice of rent, insurance, software, office pay, tools, and advertising this job has to carry.

Then comes margin, which is profit and the cushion for the jobs that go wrong. Skip a layer and you are not discounting. You are doing that part of the job for free.

Step 1: cost parts at what they really cost you

Plumbing parts lists are long and cheap per line, which is exactly why they leak. A water heater swap can consume twenty small items between the fittings, connectors, and venting pieces. Cost each from memory as "a few bucks" and the materials line comes in light on every job.

Two habits fix it:

  1. Value parts at average cost. Copper, PVC, and PEX prices move. Average cost is the running average of what you actually paid across recent purchases, so a price spike smooths out instead of blindsiding one quote. The mechanics are in average-cost inventory for job materials.
  2. Cost parts to the job as they leave the truck. Reconstructing what went where on Friday afternoon misses the second box of fittings every time. See truck stock inventory for field techs for the par-level and transfer routine.

CRMb tracks inventory per warehouse and per truck at average cost. When a tech pulls a supply line or a pressure-reducing valve to a job, its real cost lands on that job, and barcode scanning keeps the counts honest without slowing anyone down.

Step 2: decide your plumbing material markup

Once parts are costed, you charge the customer more than you paid. That difference is your material markup, and it pays for the buying, stocking, driving, warranty, and the parts that come back broken.

Plumbing material markup is usually tiered rather than flat. Cheap fittings and small parts often carry a high percentage markup because the dollar amount is tiny and handling them costs real time. Big-ticket items like water heaters, tankless units, and fixtures usually carry a lower percentage because customers can look up the retail price and the dollar margin is already large. Many shops use a sliding scale by part cost for exactly this reason.

Two cautions. First, markup is not margin: a 50% markup on a part is a 33% margin, and confusing the two costs you points on every job. The difference is spelled out in markup vs margin. Second, parts markup is not a substitute for pricing labor correctly. A shop that makes its profit on parts is one lost supplier discount away from breaking even. For the ranges and the tiered method, see how much to mark up materials.

Step 3: build the loaded labor rate

Every plumber costs more than their paycheck. Payroll taxes, workers' comp, health benefits, paid time off, and the licensing and continuing-education costs of a licensed trade all sit on top of the wage. Together they commonly add 25% to 40%.

RoleWageBurdenLoaded rate
Journeyman plumber$32.00~31%$42.00
Apprentice$20.00~30%$26.00

Cost a job at $32 and you understate labor on every hour. The full build-up, including the burden items people forget, is in how to calculate labor burden rate.

Step 4: estimate the hours honestly, then measure them

The rate is half of labor. The other half is hours, and plumbing hours are uniquely hard to predict because the problem is often behind a wall, under a slab, or in a crawlspace.

The hours that get missed are predictable, though:

  • The supply-house run for the part that was not on the truck.
  • Diagnosis before repair, the half hour spent finding the leak before fixing it.
  • Code upgrades discovered mid-job: an expansion tank, a sediment trap, a new shutoff, a vent that no longer meets code.
  • Seized and corroded fittings on older homes that turn a thirty-minute swap into two hours.
  • Cleanup and testing, flushing lines, pressure-testing, and leaving the space the way you found it.

You cannot predict every surprise, but you can learn how often they happen. Have the crew punch in against the specific job, and after a few months you know that water heater swaps in pre-1980 homes run an hour and a half longer than newer ones. With Punch, each punch-in is tagged to the job and the hours flow into CRMb as labor cost with the loaded rate applied. For estimating technique, see how to estimate labor hours for a job.

Step 5: price the truck roll

Every plumbing call begins with a stocked van leaving the shop. That trip costs driver time, fuel, vehicle wear, and the inventory riding in the back, and it costs the same whether the job takes fifteen minutes or four hours.

There are two honest ways to recover it. Build it into every task price, or charge it as a visible trip or service-call fee that covers the drive and the first stretch of diagnosis. Either works. What does not work is ignoring it, because small service calls are exactly where the truck roll eats the whole margin. The options are laid out in how to charge for drive time.

Step 6: add overhead so every job carries its share

Overhead is the cost of keeping the doors open that does not belong to any one job: the shop, the office staff, dispatch, insurance, software, advertising, and tools. The common method is an overhead rate per labor hour: annual overhead divided by the billable hours you expect to sell.

If overhead runs $210,000 a year and your crews sell 6,000 billable hours, that is $35 of overhead per labor hour. The method is in how to calculate an overhead rate.

Step 7: set the price from the cost

With every layer totaled, the price is the cost divided by one minus your target margin:

Price = total cost ÷ (1 − target margin)

For a 40% margin, divide by 0.60. Service work usually carries a higher margin than large installs because the tickets are small and the fixed cost per call is large. Install and remodel work often runs lower, with the bigger dollar amount making up the difference.

Worked example 1: a gas water heater replacement

A 50-gallon gas tank swap in an existing home. Journeyman loaded at $42.00, apprentice at $26.00, overhead at $35.00 per labor hour, target margin 40%.

Cost layerDetailAmount
Water heater50-gal gas, landed at average cost$1,150
PartsFlex connectors, T&P line, venting, fittings, sediment trap$210
LaborJourneyman 4 hrs × $42 + apprentice 4 hrs × $26$272
Overhead8 labor hrs × $35$280
PermitPass-through at cost$85
DisposalOld tank haul-away$40
Total cost$2,037
Price at 40% margin$2,037 ÷ 0.60$3,395

Now the leak. The old gas valve is seized, the local code now requires a thermal expansion tank, and the tank is not on the truck. The crew makes a supply-house run and each person works six hours instead of four. Those four extra labor hours cost $136 in loaded labor and $140 in overhead: $276 the estimate never saw. The true cost is $2,313, and the margin on the same $3,395 price falls from 40% to about 32%.

That is why you cost every job from punched hours even when the price was fixed. The overrun does not change this invoice, but it tells you to add the expansion tank and an hour of contingency to every tank swap in homes of that age.

Worked example 2: a flat-rate toilet fill valve

The small ticket. A fill valve replacement, one journeyman, priced at 50% margin because it is a short service call.

Cost layerDetailAmount
PartFill valve at average cost$18.00
Labor0.75 hr × $42$31.50
Overhead0.75 hr × $35$26.25
Truck roll0.5 hr drive × ($42 + $35)$38.50
Total cost$114.25
Price at 50% margin$114.25 ÷ 0.50about $229

The part is under 10% of the price. The customer is paying for a licensed plumber to arrive, diagnose, fix it right, and stand behind the work. A shop that prices this call as "an $18 part plus half an hour" loses money on every one.

Flat rate or time and materials?

Most established plumbing shops quote common repairs at flat rate: a fixed task price the customer sees and approves before work starts. Customers like knowing the number, and an efficient tech earns more because the price does not drop when the work goes quickly. Flat rate only protects you, though, if each task price was built from real cost history, including the surprises.

Time and materials fits open-ended work: tracing an intermittent leak, a remodel rough-in where the walls are still closed, or anything where the scope cannot be known up front. Many shops mix the two, a flat diagnostic fee followed by a flat-rate repair or a T&M rate for the unknown. See flat-rate vs hourly pricing and time and materials vs fixed price contracts for how the models trade off. A written price list keeps flat rates consistent across techs; see how to build a price book.

Price emergencies and callbacks separately

Two kinds of work need their own pricing.

After-hours and emergency calls cost you overtime, a disrupted schedule, and a tech pulled from their evening. They should carry a premium built from the overtime rate you actually pay, not a round multiplier. The build-up is in how to price emergency after-hours service calls.

Callbacks and warranty visits are free to the customer and not free to you. A dripping fitting on a job you finished last week costs a truck roll and an hour. If you do not measure callback cost, it silently comes out of the original job's margin. See how to track callback and warranty costs.

Put it in a quote the customer can approve on the spot

Once the price is built, get it in writing before the work starts, with a clear scope and exclusions. "Replace 50-gallon gas water heater with like unit, including new flex connectors, expansion tank, and permit. Does not include drywall repair or relocating the unit." When the homeowner asks you to also move the hose bib, the scope is what makes that a change order instead of free work.

In CRMb, the costed job becomes a quote with a public share link: the customer opens it on their phone, reviews the scope and price, and signs to approve, no account needed. For larger installs, you can send a deposit invoice from the accepted quote. When the job is done, the quote converts to an invoice with the same parts and labor pulled through. For what that invoice should contain, see how to invoice for a plumbing job.

Close the loop: compare the price to what the job cost

Pricing gets better only when you look back. After each job, compare what you quoted to the parts pulled and the hours punched. Jobs that overran by the same amount for the same reason are telling you to change a task price.

CRMb's reports show margin on every job from real punched hours and average-cost parts, so the comparison is already done. The habit is covered in post-job profitability review.

Frequently Asked Questions

How do you price a plumbing job?

Cost it from the bottom up: parts at their real average cost, labor at a loaded rate times the hours the crew actually works, the truck roll, pass-through costs like permits and disposal, and a share of overhead. Total those, then divide by one minus your target margin. The formula is Price = (parts + loaded labor + truck roll + overhead) ÷ (1 − target margin).

What is a typical plumbing material markup?

Plumbing material markup is usually tiered by part cost. Small, inexpensive parts often carry a high percentage markup because handling them costs time and the dollar amount is small, while water heaters and fixtures usually carry a lower percentage because the dollar margin is already large and customers can compare retail prices. Whatever your scale, set it from your costs, and remember that markup is not margin: a 50% markup equals a 33% margin.

How much should a plumber charge per hour?

Build the hourly rate from cost rather than copying a competitor. Start with the loaded labor rate (wage plus 25% to 40% burden), add your overhead rate per labor hour, then divide by one minus your target margin. A journeyman loaded at $42 with $35 of overhead per hour costs $77 an hour before profit; at a 45% margin the billed rate is about $140. Your market sets the ceiling, but your costs set the floor.

Should plumbers use flat-rate pricing?

For common, repeatable repairs, most established shops do. Flat rate is easier for customers to approve and rewards an efficient tech. It works only if each task price comes from real cost history, including the time surprises add. Use time and materials for open-ended diagnostic and remodel work where the scope cannot be known in advance.

How do I charge for a plumbing service call?

Either build the truck roll into every task price or charge a visible service-call fee that covers the drive and initial diagnosis, then add the repair price. What matters is that the trip is recovered on every call. Small tickets are where an unpriced truck roll wipes out the entire margin.

Why do plumbing jobs lose money when the quote looked profitable?

Usually because the hours ran over and were never measured: the supply-house run, a seized fitting, a code upgrade found mid-job. Or because labor was costed at the bare wage instead of the loaded rate. When the crew punches in against each job, the overruns show up job by job, and you can build the contingency into the next quote.


Getting started with CRMb

Price your next plumbing job from measured numbers. Cost the parts at average cost, add loaded labor for the hours the crew actually works, recover the truck roll and overhead, then set the margin and send a quote the customer can approve from their phone.

CRMb brings the CRM, scheduling, per-truck average-cost inventory, quotes and invoices, and job costing on real punched hours into one app, on Mac, iPad, and the web. Start your 14-day free trial and price your next job on numbers you can trust.

More from the blog