Revenue per customer does not tell you who pays. How to read profit per customer after spreading overhead by the hours each one consumes, with a worked table where the second-busiest account loses nearly half a million a year, and what to do about it.
This article covers management-accounting principles for decision support. It is not accounting or tax advice for your specific circumstances. The figures in the table are illustrative, to show how to read it. Use your own.
The question most often answered wrongly
Ask the owner of a contracting or made-to-order business "which customer matters most?" and almost every answer is the one with the highest revenue.
And almost none of them has ever checked whether that account actually pays.
The reason it goes unchecked is not laziness. It is that the report every accounting system provides sorts customers by revenue — a figure that says how much money came in, and nothing at all about how much of your fitters' time they consumed.
The limited resource is hours, not money
A business that sells work as jobs has a very hard ceiling — hours actually sold per month, 416 in our example, or 4,992 a year.
Every hour given to customer A is an hour customer B cannot have.
So the right question is not "who pays the most" but "how much profit is left from one fitter hour spent on this account?"
The table that changes the answer
The five largest customers of the example steel shop over one year (overhead ฿1,009.62/hr):
| Customer | Jobs | Revenue | Contribution | Hours | Overhead consumed | Profit after overhead | Per hour |
|---|---|---|---|---|---|---|---|
| A | 22 | ฿3,960,000 | ฿1,650,000 | 640 | ฿646,154 | ฿1,003,846 | ฿1,569 |
| B | 14 | ฿1,820,000 | ฿910,000 | 380 | ฿383,654 | ฿526,346 | ฿1,385 |
| C | 9 | ฿1,170,000 | ฿585,000 | 240 | ฿242,308 | ฿342,692 | ฿1,428 |
| D | 31 | ฿1,395,000 | ฿418,500 | 890 | ฿898,558 | −฿480,058 | −฿539 |
| E | 6 | ฿930,000 | ฿520,800 | 145 | ฿146,394 | ฿374,406 | ฿2,582 |
Three things to read carefully:
🔴 Customer D places the most orders of anyone — 31 jobs, nine more than the biggest account. They consumed 890 hours = 18% of the year's capacity in exchange for ฿418,500 of contribution. After the overhead they actually consumed, they lose ฿480,058 a year.
This is the account the sales team is proud of, because they call every week, and the one everyone thinks of as "our regular".
🟢 Customer E orders least — 6 jobs, lowest revenue in the table. But returns ฿2,582 per hour, the highest — nearly double the biggest account. Two more customers like E would earn more than customer D produces in a year, using less than half the hours.
🟡 Customer A really is the highest by revenue and the largest single block of profit — but sits mid-table on profit per hour. They are not a bad customer. They are the customer carrying a large block of fixed cost for you, which has value in itself.
Three layers, not one
| Layer | Calculation | Answers |
|---|---|---|
| 1. Contribution | Revenue − costs actually paid extra | Does taking this work leave anything to help carry fixed costs? |
| 2. Profit after overhead | Layer 1 − (hours × overhead per hour) | Does this account carry its own share? |
| 3. Profit per hour | Layer 2 ÷ hours | Compares customers fairly |
Layer 3 matters most when you have to choose, because it has removed the effect of size — large and small accounts become directly comparable.
🔴 Found a loss-making account? Find the cause before cutting
Almost every time, the cause can be fixed without losing the customer:
| Cause | What you can see | Remedy |
|---|---|---|
| Jobs too small | Many jobs, low value each | Minimum order value, or consolidate small items into one visit a month |
| Price never revised | Long-standing account, same unit rate for years | Raise at the next round, with the figures to support it |
| Scope creep | Actual hours exceed the estimate on nearly every job | Issue a variation when scope changes, rather than absorbing it |
| Repeated rework | Recurring hours returning to site | Collect complete information up front / confirm specifications in writing |
| Very slow payment | Profit looks fine, the cash never arrives | Read alongside the cost of waiting for payment |
Raising the price is one remedy out of five — and frequently not the most effective.
And if the account with the lowest profit per hour is your largest — all the more reason not to cut it. The fixed cost it carries does not leave with it; it simply lands on the customers who remain. The safe route is to win higher-margin work first, and let its share fall by itself.
What to do
- Stop sorting customers by revenue — sort by profit per hour
- Record actual hours per job — without this, none of the table above is possible, and it is the one piece of data to start collecting
- Read three layers — contribution · profit after overhead · profit per hour
- Review quarterly, not monthly — monthly data swings too much to read
- Find the cause before raising the price — small jobs · stale rates · scope creep · rework · slow payment
- Always read it alongside days-to-pay — a profitable customer on 120-day terms is consuming your working capital
- Win more of the high profit-per-hour work before cutting anyone
The tool for doing this today
Job Costing & Pricing Calculator accumulates this from the jobs you have already priced:
- A per-customer sheet totals revenue, profit and job count for each account automatically — no separate report to build
- The figures come from the same costs used to set the price, not a second set that disagrees with what you quoted
- Overhead is spread by actual hours, so large-job and small-job customers compare fairly
- The cost of waiting for payment is priced from the credit days ⇒ slow payers stop looking better than they are
- A five-step status light shows it at the moment you take the work, not when the year closes
- A self-test sheet of 24 cases you can run yourself before trusting it on live work
- No macros — Excel, LibreOffice and Google Sheets all open it
One-time payment of ฿999 — launch price until 31 Dec 2026 (regular price ฿1,490) · includes 7% Thai VAT · full Thai tax invoice available · instant download after payment
ℹ️ The workbook itself is in Thai — sheet names, labels and the in-file manual. The formulas and the logic are language-independent, and the product page shows renders of the real file so you can see exactly what you receive.
Read next
Get this guide as a reference brief (PDF)
Summary + full section list + standards cited, Saha-branded for your memo/RFQ — emailed to you too.
Questions after reading? Talk to our engineers
Tell us what you need — our engineers help you spec it right, with a real quote. No charge.
Need help with this in your facility?
Our team handles full procurement and installation for the topics covered in this article. Free quote within 2 hours.
Frequently Asked Questions
1Why does revenue per customer fail to show who makes you money?
+
2Which figure should measure profit per customer?
+
3If a customer is loss-making, should I stop taking their work?
+
4Does setting a minimum order value really help?
+
5How often should this be reviewed?
+
6What if the largest account turns out to have the lowest profit per hour?
+
Related content
Labour Counted Twice — Why Your Calculated Price Is Higher Than It Should Be
Fitters' salaries already sit in your fixed costs, yet the same people are charged again as an hourly rate inside the job. The most common error in job costing, how to check whether you are making it, and the correct fix.
Are 4 Fitters Really 640 Hours a Month? — The Cell That Makes Every Job Look Better Than It Is
One cell in a job-costing file that, when wrong, makes every job wrong for a year. How to find your real billable hours, where to start if you have never measured, and what the difference costs in money when you enter 640 instead of 416.
How Far Can You Discount? — The Four-Number Ladder to Know Before You Answer
Instead of guessing or giving way, use four figures worked out in advance: the price to quote, the lowest price clearing your minimum margin, break-even, and the cash floor. With the wording that works at each rung, and what to trade for every baht you concede.
Cash Locked Up in Finished Work — Pricing the Cost of Waiting for Payment
Ninety-day terms are not expensive because of interest. They are expensive because of the money you must keep standing by. How to size the cash locked up in a job business, net off what suppliers finance, and put it back into the price at quotation time.