Plumbing Flat-Rate Pricing: A Worked 30-Task Price List Built With AI

Coding Liquids tutorial cover featuring Sagnik Bhattacharya for Plumbing Flat-Rate Pricing: A Worked 30-Task Price List Built With AI.
Coding Liquids tutorial cover featuring Sagnik Bhattacharya for Plumbing Flat-Rate Pricing: A Worked 30-Task Price List Built With AI.

Start from your real costs: divide a year of running costs plus a profit target by your billable hours to get an hourly rate, then price each task as minutes times that rate plus parts with a markup. AI can draft the task list and first-guess the times in minutes; your own timed jobs must confirm them.

Flat-rate pricing moves the risk of a slow job from the customer to you, so the list needs three things a downloadable template cannot supply: times taken from your own jobs, a minimum charge for short visits, and scope lines that say when you stop and re-quote. Skip the third and one seized trap turns a $120 sink job into 95 minutes of work at a 10% margin, against 54% had the same job been billed by the hour. Every figure here belongs to an illustrative three-technician firm, so copy the method and replace the numbers.

Follow me on Instagram@sagnikteaches

Work out the hourly rate every task price is built from

A flat-rate list is only as sound as the rate under it, and that rate is a sum rather than a market guess. Add up what the firm has to recover from labour revenue in a year: technician pay with payroll costs, the owner's and office time, vans, insurance, software, advertising and a profit target. Then divide by the hours technicians actually bill, which is never every paid hour. The tutorials on working out a tradesman's hourly rate and on labour burden go further into the same sums; this is the short version.

Connect on LinkedInSagnik Bhattacharya
Cost line (illustrative, per year)Amount
Technician pay including payroll costs (three technicians)$198,000
Owner and office time$84,000
Three vans: finance, fuel, insurance, repairs$40,500
Liability insurance, licences, tools, uniforms$26,500
Software, phones, advertising, accountancy$58,000
Profit target$55,000
Total to recover through labour$462,000

Three technicians at 1,880 paid hours each is 5,640 hours. Driving, parts runs, quoting and admin take a share; assuming 65% of paid time is billed gives 3,666 billable hours. Dividing $462,000 by 3,666 gives $126.02, which I would round up to $130 an hour. Rounding up leaves a small cushion, while rounding down quietly removes profit. The second number to keep is technician cost per billable hour: $198,000 divided by 3,666 is about $54. It drives the margin check later.

Subscribe on YouTube@sagnikteaches

Three more settings belong to the formula. Parts are charged at cost plus 50%, which pays for buying, carrying, returning and warranting them; the tutorial on a parts markup sheet shows how to set that from supplier lists. Every job carries $8 for consumables and waste disposal, so tape, sealant, fixings and disposal fees never appear as separate lines. And the list has a minimum price of $120. The 65% assumption spreads driving time evenly across all billed hours, but a 20-minute job costs a full van trip, so short tasks need a floor. The service call fee tutorial covers that floor in more detail.

The Complete Excel Course with AI Integration thumbnail

The Complete Excel Course with AI Integration

From formulas and pivot tables to Power Query, DAX, VBA and AI with Copilot, ChatGPT and Claude — hands-on from the first lesson.

By Sagnik Bhattacharya and Virginia Thorn, Primetime Emmy Award winner

Buy now

Draft the task list from your own invoices, not a blank page

Flat-rate pricing suits repeat work whose scope you can describe over the phone. The best source for that list is your own history. Export a year of invoice line descriptions from your invoicing or job software, delete customer names, addresses and phone numbers, and keep the description, date and amount. A few hundred lines is plenty. Then ask the AI to group before it prices anything, because grouping is where it saves hours.

I run a small residential plumbing company. Below are invoice line descriptions from the last 12 months, with customer details removed.

1. Group them into repeatable tasks a customer could understand before work starts.
2. Count the lines in each group and keep the 30 most frequent tasks that have a fixed, knowable scope.
3. List separately, under "Diagnose first", any jobs whose scope depends on what we find once we start (leak tracing, unknown blockages, anything behind a wall or under a floor).
4. For each of the 30 tasks give: a plain customer-facing name; what is included; what is not included; two questions we must ask before quoting; and low, typical and high on-site minutes.

Do not suggest prices and do not quote average prices from anywhere. If you are unsure of a time, say so instead of guessing. Use British English.

[paste the descriptions here]

Here is the kind of entry that comes back. It is illustrative, written the way a good first draft reads.

Task 5: Replace a toilet fill valve
Included: remove the old valve, fit a universal replacement, reconnect the supply, set the water level, test the flush, check for leaks.
Not included: replacing the cistern, the flush mechanism or the supply pipe; a toilet that is cracked or loose on the floor.
Ask before quoting: Does water keep running after a flush? Is there an isolation valve on the supply?
On-site minutes: low 15, typical 20, high 35.

Diagnose first: finding a leak under a floor; a drain that blocks again after clearing; low water pressure; damp patches on walls.

The draft is useful, and it needs a firm edit. These are the fixes I would make to almost any first pass:

  • Times run light. The 20 minutes above describes a good day with the valve at the front of the cistern. The next section tests every time against real jobs.
  • Licensing is yours to judge. An AI does not know what your licence covers. The water heater element and thermostat task is on the list below for illustration only; drop any task that needs a qualification you or your technicians do not hold, and anything involving gas appliances.
  • No market prices. If a draft quotes "typical" prices, delete them. The AI cannot see what your customers pay, and prices from an unnamed source are a made-up number.
  • Vocabulary. Check that task names match what your customers and suppliers say, and put the plain name a customer would search for first.
  • Hidden-scope jobs belong in "Diagnose first". Keep that list. Those jobs get a diagnostic visit and a quote afterwards, not a flat price.

Check the AI's minutes against your own timed jobs

The times are the weakest part of an AI draft and the most expensive to get wrong, since every minute is worth about $2.17 at a $130 rate. Collect real numbers before you price. Job software time stamps are a start, but they include the chat on the doorstep and the paperwork. A cleaner method is to ask each technician to text the task number and the on-site minutes after every job for two weeks. Count from opening the van to wiping down, and leave driving out.

Take the median of at least five timings per task, not the average, so one nightmare job does not distort the standard. Round to the nearest five minutes. Where you have fewer than five timings, mark the task provisional and price from the top of the AI's range until the data arrives. In the illustrative firm, the first batch of timings looked like this:

TaskAI typical minutesMedian of timed jobsGap
Fit a customer-supplied tap456025% lighter
Replace a toilet fill valve203033% lighter
Replace a sink trap and waste254038% lighter
Replace a toilet like-for-like7511032% lighter
Clear a blocked sink254544% lighter
Flush a storage water heater456025% lighter
Replace a shower cartridge405020% lighter

Across those seven tasks the AI was about 31% lighter than the technicians' own medians. That is one firm's illustration, not a rule about AI. It does show the direction to watch: a description of a job leaves out finding the shut-off, protecting the floor, the second trip to the van and the test. Had the firm priced from the AI's minutes, the toilet replacement would have been priced for 75 minutes of work that takes 110, a shortfall of 35 minutes, or about $76 of labour at the $130 rate on every one of those jobs.

The 30-task price list with minutes, parts, price and margin

Once the minutes and parts costs are settled, the price is a formula. In words: minutes divided by 60 times the hourly rate, plus parts cost times one plus the markup, plus the consumables allowance, rounded up to the next $5, and never below the minimum. Put the settings in cells so one change reprices the whole list.

B1 = 130   hourly rate
B2 = 0.5   parts markup (50%)
B3 = 8     consumables per job
B4 = 54    technician cost per billable hour
B5 = 120   minimum price

Price (E9):       =MAX($B$5, CEILING(C9/60*$B$1 + D9*(1+$B$2) + $B$3, 5))
Job margin (F9):  =(E9 - (C9/60*$B$4 + D9 + $B$3)) / E9

C = on-site minutes, D = parts cost

Ask the AI for the formulas if spreadsheets are not your strength, then paste them in and check five rows with a calculator. The tutorial on why AI is bad at maths explains why the sums should happen in the sheet and not in the chat window. Here is the finished list. The parts column is the materials allowance: what a standard version of the job uses, at cost. The customer sees one price, so the allowance only matters inside your sheet and in the scope line that says what happens when a job needs something non-standard. The figures are placeholders, so substitute your supplier's prices.

#TaskOn-site minutesParts costFlat priceJob margin
1Fit a customer-supplied kitchen or basin tap60$9$15554%
2Replace a tap cartridge or washer (one tap)35$16$120 (minimum)54%
3Replace an under-sink isolation valve30$8$120 (minimum)64%
4Replace an outside tap55$22$16552%
5Replace a toilet fill valve30$14$120 (minimum)59%
6Replace a toilet flush valve or flush mechanism45$26$14549% *
7Replace a toilet like-for-like (customer-supplied)110$18$27555%
8Clear a blocked toilet40$0$120 (minimum)63%
9Clear a blocked sink or basin45$4$120 (minimum)56%
10Replace a sink trap and waste40$15$12051%
11Fit a food waste disposer (customer-supplied)75$20$20553%
12Replace a kitchen sink like-for-like (customer-supplied)150$30$38054%
13Fit a basin (customer-supplied)100$24$26554%
14Replace a shower cartridge or valve50$40$18048% *
15Replace a shower head, hose and holder20$6$120 (minimum)73%
16Re-seal a bath or shower60$10$15554%
17Replace a bath or shower waste60$22$17552%
18Clear a blocked bath or shower drain45$3$120 (minimum)57%
19Flush and service a storage water heater60$12$16054%
20Replace a water heater element or thermostat65$45$22049% *
21Replace a temperature and pressure relief valve50$35$17048% *
22Replace an expansion vessel70$70$26547% *
23Connect a washing machine or dishwasher35$18$120 (minimum)52%
24Replace appliance hoses and valve30$22$120 (minimum)52%
25Repair an accessible leaking joint45$12$12552%
26Replace up to one metre of accessible pipe80$28$22552%
27Fit a pressure-reducing valve90$85$33548% *
28Unblock an external drain by rodding60$0$14056%
29Replace an exposed shower mixer (customer-supplied)120$30$31554%
30Diagnostic visit (first 45 minutes)45$0$120 (minimum)60%

The asterisk marks a job margin under 50%, and "minimum" marks the ten tasks lifted to the $120 floor. Ten of thirty landing on the floor shows how much of this list is short work where the van trip is bigger than the job. The margin column is job margin: price minus technician cost, parts and consumables, as a share of the price. The average across the list is 54%.

The margin check that flags tasks priced too low

A task with no parts and no minimum clears about 58%, because $54 of technician cost sits inside a $130 rate (1 minus 54 over 130). Parts at a 50% markup pull the blend down, so a parts-heavy job lands lower. I set the flag line at 50% for this firm. Derive yours from your own cost table: divide technician cost by the rate for the labour-only margin, then flag anything a few points under your list average.

Six tasks fall under the line: the toilet flush mechanism (49%), the shower cartridge (48%), the water heater element or thermostat (49%), the pressure relief valve (48%), the expansion vessel (47%) and the pressure-reducing valve (48%). All six are parts-heavy. Looking at dollars per on-site hour is a useful second test. The expansion vessel earns ($265 minus $70 parts minus $8 consumables) divided by 70/60 of an hour, which is about $160 for every on-site hour, comfortably above the $130 rate. So the low percentage is mostly the parts markup showing up in the denominator, not a pricing error.

That still leaves a decision for each flagged task. Three options are worth weighing:

  • Accept it when dollars per hour are healthy and the task is rare. The expansion vessel is bought a few times a year.
  • Nudge the price where a few dollars changes little for the customer. Adding $5 to the flush mechanism and the thermostat, $10 to the shower cartridge and the pressure relief valve, $15 to the pressure-reducing valve and $20 to the expansion vessel puts all six at 50% or just over.
  • Raise the markup on expensive parts if you carry them in stock, because stock ties up cash and a part that sits on the van for six months should earn more than one bought on the day.

Also look at the other end of the column. The shower head at 73% and the isolation valve at 64% look rich only because the minimum charge lifts them. A $120 price for a 20-minute shower head swap invites a comparison with a do-it-yourself fix. Waiving the minimum when the task is booked alongside another one keeps the floor fair without losing the sale.

Flat rate against time-and-materials on three jobs

To see what the list changes, bill three jobs both ways. Time-and-materials here means $130 an hour on actual minutes with a 30-minute minimum, parts at cost plus 50%, and the same $8 for consumables. Technician cost is $54 an hour on the minutes actually worked. Standard times come from the list above.

Job (task number)Standard / actual minutesFlat priceTime-and-materials billFirm's margin, flat / T&M
Toilet fill valve (5)30 / 20$120$9467% / 57%
Sink trap and waste, seized fittings (10)40 / 95$120$23610% / 54%
Customer-supplied tap (1)60 / 65$155$16251% / 53%

The quick job favours the firm under a flat price: the customer pays $26 more than the clock would charge, but knew the figure up front, and the firm is paid for the van trip. The tap job is a wash. The sink trap is the problem. Corroded fittings turned a 40-minute task into 95 minutes, and the flat price absorbed it: a margin of 10% against 54% on time-and-materials, and $116 less in the till. One bad job like that wipes out the extra earned on four or five quick ones.

A simple month shows the wider picture. Suppose 100 jobs: 25 finish 20 minutes faster than standard, 60 finish on time and 15 take 45 minutes longer. The fast jobs save 500 minutes and the slow ones cost 675, a net loss of 175 minutes, or 2.9 hours. Time-and-materials would have billed those hours at $130, so flat rate gives up about $379 on this mix. The 500 minutes saved on fast jobs, over eight hours, are also free to sell elsewhere, if the diary lets you. Those split percentages are assumptions to show the arithmetic. Replace them with your timesheets.

The lesson is not that flat rate loses. It is that the standard minutes must be medians, that the overrun share has to stay small, and that jobs with hidden scope should not be on the list at all. Where the list is honest, flat rate earns well. Where the scope is unknown, time-and-materials after a diagnostic visit is the safer way to bill.

Scope lines that stop one overrun wiping out four quick jobs

Every task on the list needs a short scope line in the quote, and the line has to state what the price assumes. Compare two versions of task 10.

Before:  Replace sink trap. $120.

After:   Replace the trap and waste under one kitchen or bathroom sink with a
         new standard trap, including a leak test and tidy-up. $120.
         The price assumes the existing pipework is accessible and the fittings
         come apart without being cut or forced, and that standard fittings
         are enough. If fittings are seized or corroded, if the pipe behind
         them is damaged, or if a non-standard part is needed, we will stop,
         explain the options and agree any extra cost with you before
         carrying on.

The second version still reads plainly, and it turns the 95-minute surprise into a conversation, with the customer choosing between a longer job at a stated extra price or stopping. Agree the extra by text or signature, the same way as a variation on a bigger job, as covered in the tutorial on plumbing change orders drafted with AI. Writing 30 of these lines by hand is tedious, which is where the AI earns its keep.

For each task below, write a scope line of no more than four sentences for a customer quote. Say what is included, state the assumption the price depends on (access, condition of existing fittings), and say what we do if the assumption is wrong: stop, explain the options and agree any extra cost first. Plain English, no jargon, no promises of how long it will take.

[paste the task names and the included / not included notes]

Check every line against two questions. Does it avoid promising a time? And would a customer reading it understand the point at which the price can change? Delete any line that sounds like a warranty you cannot honour. Leave the legal wording of your terms and conditions to whoever drafts your contracts, since scope lines are only the customer-facing part.

Keeping the list honest after it goes live

Most field-service apps store a price book. Housecall Pro, for example, lists a price book on all three of its plans and flat-rate pricing from the Essentials plan up, according to its pricing page as of November 2026. Other apps differ, so check the one you use. If you have no software yet, a spreadsheet printed as a one-page sheet for technicians works for the first 30 tasks.

The list decays quietly, mostly through parts. Say the expansion vessel's supplier price rises from $70 to $88 and nobody updates the sheet. The firm's cost on that task becomes $63 of labour (70 minutes at $54 an hour), $88 of parts and $8 of consumables, which is $159. Against the $265 price, the margin has slid from 47% to 40% without anyone deciding anything. Multiply that across a dozen parts and a year, and the profit target disappears.

Catch it with a quarterly routine. Paste the new supplier price list and the 30-task table into the AI, ask which tasks use a part whose cost has moved by more than 5%, then recalculate those rows in the sheet. Also check three other things each quarter: callbacks by task, jobs that ran 30 minutes or more over standard, and any task that has been quoted but rarely accepted. A task nobody accepts may be priced too high, or may be a job the customer would rather see diagnosed first.

Here is last quarter's supplier price list and my 30-task table (parts cost column). List every task whose parts cost has risen or fallen by more than 5%. Show the old cost, the new cost and the percentage change. Do not recalculate prices; I will do that in the spreadsheet.

One way to launch it is in two weeks. In week one, export the invoices, run the grouping prompt, cut the list to 30 and start the timing texts. In week two, set the medians, fill the sheet, run the margin check, write the scope lines and brief the technicians on what to say when a customer asks why a quick job costs the same as a slow one. The honest answer is that the price is for the task, and you agreed it before the work began.

Flat-rate plumbing questions owners ask

How many tasks should a flat-rate list start with?

Thirty is a practical size for a small residential firm: enough to cover the repeat work, few enough to time properly. Rank last year's repeatable jobs by how often you sold them and start with the top 20 to 30. Add a task only when you have quoted it at least three times and have timings for it. Anything whose scope depends on what you find stays as a diagnostic visit followed by a quote.

Will customers accept a fixed price before you have seen the problem?

It works when the price is tied to a clear scope. A customer who hears 'replace the trap under one sink, includes a leak test' knows what they are buying. Where you cannot describe the scope on the phone, ask for a photo first, and if that is still not enough, sell a diagnostic visit and quote afterwards.

Can AI work out the prices as well as the task list?

Use it for the formula and the spreadsheet syntax, but do the sums in the spreadsheet, because language models slip on long tables of arithmetic. Give the AI your rate and markup, ask for the formula, paste it into the sheet and check five rows by hand before trusting the rest.

How often should the price list be updated?

Review it every quarter against real job times and parts invoices, and reprice sooner when a supplier moves the price of a fast-moving part. Any task where more than one job in five overran its standard time by 30 minutes or more needs a longer time, a tighter scope line or a higher price.

Should technicians be paid commission on flat-rate jobs?

That is a pay-policy decision with its own risks. Commission on flat-rate sales can reward speed and upselling at the expense of quality, so an owner might keep hourly pay and add a bonus tied to callbacks and customer feedback. Test any scheme against a few months of past jobs before announcing it.

Further reads

Sources: Housecall Pro pricing page (price book and flat-rate pricing rows), checked November 2026. Every other figure is arithmetic from the illustrative firm described in the tutorial.

Want your price list checked against real jobs?

On a 1:1 call we can go through your invoices, pick the tasks worth pricing flat first, and decide where AI helps with the drafting and where your own timings must lead.

Book a 1:1 call with me