Why Geneva plumbers find out in April which jobs lost money
2026-09-17 · 6 min read
It is Tuesday in Geneva. A two-truck shop off Randall Road has a sump pump replacement on the east side, a slow kitchen drain near Third Street, and a repipe estimate at four. In between, the owner opens the supply house statement that landed that morning: forty-three lines, and the PO field is blank on most of them because the techs pick up at the counter and give the shop name.
His lead tech's time app says nine and a half hours yesterday across three jobs, with no split. The water heater swap from last Thursday went out at the flat-rate book price, which was set in March. The heater cost more at the counter than it did in March. He knows it the way you know the truck needs brakes, as a feeling with no number attached.
The number arrives in April, when the accountant closes the year and says gross margin is down. Nobody can say which jobs did it.
What the late number costs
The price book is the biggest one. A flat-rate price gets set once, from what the parts cost on the day it was written. When the counter price moves, every job of that type sells at the old margin until somebody notices, and the noticing happens at tax time. A shop can be busy all winter and go backwards on water heaters the whole time.
The second cost is the Sunday nobody takes. Costing jobs by hand means matching supply receipts to jobs by date and memory, then splitting a tech's day across three addresses in a workbook. Busy weeks are the ones with overtime and second trips, so they are the weeks worth costing, and they are the weeks nobody sits down.
Then there are the quiet losers: the drain call with forty minutes of driving each way, or the callback that got fixed for free because arguing was harder. Each one looks fine on its own invoice, and nobody ever sees them as a category.
Techs are in the dark too. A tech who never sees the gap between the hours he logged and the hours the flat-rate job was priced at cannot close it. He finds out he is slow when the owner is short with him in March, which is late and unfair.
And revenue lies to you. A month can bill more than any month before it and make less, and without cost against each job there is no way to tell the two apart until the bank balance does.
What it looks like when the week costs itself
Deciding what a job carries is the hard part. The rest is wiring, and the wiring exists to put actual cost next to each invoice without anyone retyping it.
- Every job gets a number the day it is booked, and that number rides on the dispatch, the time entry, the supply house pickup, and the invoice. The techs give the job number at the counter instead of the shop name. That one habit is most of the build.
- Labor comes from the clock-in the techs already do in the field app. Drive time goes to the job or to overhead, decided once and written down.
- Parts come from the supply house statement. When it lands, the system reads it, matches lines to job numbers, and lists the unmatched lines for a person to place. That is ten minutes a week for whoever does it.
- The price book gets checked against reality. When the counter price of something in the book moves past a percentage you pick, you get a note naming the row.
- Each closed job gets a card: billed, hours at your loaded rate, parts at what they cost, and the margin that leaves.
- On Friday afternoon you get one page. Jobs closed this week, revenue billed, margin per job, the ones under your target flagged, closed jobs still unbilled, and any parts lines nobody placed.
- At month end the same numbers come by job type and by tech, so water heaters and drain calls stop hiding inside one total.
- If the books live in QuickBooks Online, the Plus and Advanced plans have a Projects feature that tracks income and costs per job so you can measure profitability. The system writes the job costs there, so the accountant sees the same picture you do.
| Moment | How it goes now | With the system |
|---|---|---|
| Supply house statement | Forty lines, no job numbers | Matched to jobs, leftovers listed for you |
| A tech's day | Nine hours, three jobs, no split | Hours on each job from the field app |
| Water heater price | Set in March, checked in April | Flagged the week the counter price moves |
| Margin on a job | A feeling in the truck | On the card the day it closes |
| Which job type is thin | A guess | Monthly, by type and by tech |
| Finding out | Tax time | Friday afternoon |
The pattern is one I have already built elsewhere. A pool service company I work with has every lead tracked from the first call through the finished job, and a mortgage professional gets scored leads delivered on a schedule instead of digging through sources himself. The mechanics do not change: the data comes out of wherever it already sits and lands with the person who has to decide something.
What stays with you
Reading the number stays with you. A thin margin on a January service call for a customer who has used you for fifteen years is a different thing from a thin margin on every water heater since March, and the page cannot tell them apart. Neither can the price book. Whether a heater goes up forty dollars, and whether drain calls stay cheap because they bring you the repipes, are your calls.
So is the conversation with the tech. The card can show that his repipes run long. It cannot know that he got the two worst houses in the county or that he is training the new guy on every one. That is a talk in the shop, with the numbers in your hand.
When not to build this
One truck, the owner on every job, and he bought the heater himself this morning, so he knows what it cost. That owner does not have this problem, and I will say so in the first ten minutes.
If the field software already does job costing and the only gap is that parts never get entered, the fix is the pipe from the supply house statement, and that is a smaller build. And if jobs do not have numbers yet and the price book lives in your head, those two things have to exist before any of this works. That part is your work. Once they exist, the rest is buildable. Builds start at $500 one time, then a flat monthly from $99 after an included run-in period, cancellable. More on the plumbing page and on what I build for businesses around Geneva.
Where to start
The first step is a free 20 minute process audit. We take your last ten closed jobs, put real hours and real parts against each invoice, and see which ones made money. If a system that does that every Friday pays for itself, I will tell you what it costs. If it does not, you keep the ten cards. Start here.