Why almost nobody calculates it
Because the two figures live apart. Billing is in the ERP. The cost of serving the customer is in technician hours, parts and travel. And that is usually in another system, on a paper work order or not recorded at all.
Without bringing them together, profitability by customer is a hunch. And hunches fail here: the customer who uses the most is often also the one who treats you best.
The formula
Margin = Billed
− Hours × cost per hour
− Parts
− Travel
− Admin hours you cannot bill
− Cost of reopened jobs and repeat visits
The last three lines are the ones almost nobody includes, and the ones that decide the result. The cost per hour has to be the real one, with overhead included: here is how to calculate it.
An example with numbers
Example
A customer with an $80,000-a-year maintenance contract that includes 600 hours. Last 12 months:
| Item | Amount |
|---|---|
| Billed (contract and extra work) | $99,000 |
| Hours logged: 780 h × $86 | −$67,080 |
| Parts | −$12,000 |
| Travel: 210 trips × $30 | −$6,300 |
| Admin and coordination (estimated at 6% of billing) | −$5,940 |
| Repeat visits not charged: 34 × $140 | −$4,760 |
| Margin | $2,920 (3%) |
A customer who looked excellent on revenue leaves a 3% margin. The 34 repeat visits are the clue: that is a specific problem you can fix.
What usually shows up the first time
That one of your big customers is losing you money, and has been for a while. The usual reasons are three:
- Usage well above what was contracted, tolerated for years because of a good relationship.
- A scope that kept growing without the price changing: “while you are here, could you look at this?”
- A contract signed years ago that was never reviewed while costs went up.
What to do with the result, and what not to do
What not to do: call the customer the next day to raise the price. It is the fastest way to lose them, and on bad terms.
What works:
- Understand why. A low margin caused by repeat visits is fixed on your side, without touching the price.
- Quantify the gap. “You have used 780 hours against 600 contracted” is a fact anyone can check, not an opinion.
- Take it to the renewal, with data and in good time. The conversation six months ahead is very different from the one with the contract about to expire.
- Offer options: a bigger hour bank, an adjusted scope or a higher price. Three options turn an ultimatum into a negotiation.
The prerequisite
All of this requires hours and parts to be recorded where the work is done. If work orders arrive on Friday, filled in from memory, the math will be wrong and you will decide on false data. That is worse than not deciding.
Run the numbers for your whole customer base, not only for the customers you have doubts about. The surprises are where nobody looks, and often among your top accounts by revenue.
Last updated: