River
Y CombinatorBacked by Y Combinator

Founders & Small BusinessFree

Job and Service Profitability Analysis

Every job carries the overhead it actually causes, and each line comes back under a second allocation basis so you can see which verdicts survive.

Start here

The bank balance says the business is fine, and it is: $1,840,000 of revenue and $111,440 of operating profit, which is 6.1%. That number is an average, and an average hides the line the other three are paying for. In the worked example below, emergency service calls are 60.2% of the jobs, 18.5% of the revenue, and the only service line losing money. River puts a figure on which line that is, and on what the figure depends on. Whether the balance is spendable is a separate question, which the owner financial dashboard answers.

Most job costing picks one allocation base, usually direct labour hours, and spreads every overhead dollar across it. That choice is not neutral. Run the same year on labour hours and emergency calls earn $12,170; run it on job count and the same calls lose $192,714. River splits overhead into pools, gives each pool the driver that actually causes it, and then reruns the year on a second basis alongside. A verdict that only holds under one arrangement arrives labelled as such.

Written for the owner whose accountant produces a perfectly correct P&L that answers a different question, and who needs to know which work to stop bidding. Overhead is not only money, and the administrative workload audit costs the hours behind these same pools. Where the answer is a price rather than a withdrawal, the price increase communication plan carries it, and the customer contract review finds the rate you already locked in. A supplier increase lands in these pools too, which is what the price increase response is for.

An owner working through job records and an overhead allocation by service line
For the owner whose P&L is correct and answers a different question.

The allocation basis is a decision, not a formality

Before overhead is allocated anywhere, the direct costs have to be right, and the usual error is labour. A tech at $32.50 an hour does not cost $32.50. Employer Social Security and Medicare alone run at 6.2% and 1.45% of wages, so 7.65% is owed before workers' compensation, paid time off or a single benefit. Norbeck Mechanical loads its techs at $46.00. Cost the same 9,360 hours at the bare wage and $126,360 of real cost vanishes, which flatters the labour-heavy work most of all.

Then the $598,000 of overhead has to land somewhere. The goal is an allocation base that drives overhead costs, and no single base drives all of it, which is why that same source suggests using several. Norbeck ends up with three pools: $300 per job for dispatch, trucks and phones, $20 per labour hour for supervision and tools, and 9.17% of revenue for rent, insurance and the owner. Emergency calls absorb $145,800 of the first pool, because they are 486 of the 807 jobs.

That is $300 sitting against a $700 average ticket, or 42.9% of the invoice before a wrench moves. The line's contribution margin is 49.2%, second best of the four; its fully absorbed margin is negative 17.1%, worst of the four. Dropping it would still be wrong, because $167,420 of contribution leaves with the work while the dispatcher and the trucks stay. The number to act on is the break-even ticket of $832, which is 18.8% above $700, and it is a pricing decision rather than a withdrawal.

How it works

  1. Send the job records

    Invoices or job exports, with the revenue and whatever tells you which service line each one was.

  2. Add labour and costs

    Hours per job if you have them, pay rates, and the operating costs that sit on no single job.

  3. Answer the capacity question

    Turning work away changes the decision rule, because a loss-making job then displaces a better one.

  4. Read both bases

    Margin per line under each allocation, the break-even ticket, and what to reprice.

What you get

  • Margin by job, service line and customer, with the allocation basis stated on every figure
  • Contribution margin and fully absorbed margin side by side, because they answer different questions
  • Overhead split into pools, each carrying the driver that actually causes the spend
  • The same year rerun on a second basis, so a verdict that depends on the arrangement is visible
  • A break-even ticket per service line, which is the number a price change is set from
  • The work to stop bidding, separated from the work that only needs repricing

Common questions

I do not track hours per job. Is this still worth running?

Yes, and the job-count pool is why. Dispatch, trucks and phone cost follow the number of jobs rather than the hours in them, and you already know your job count. You will get a defensible allocation for that pool and a stated assumption for the labour pool, with the assumption flagged as the weakest number in the model.

Which allocation basis is the correct one?

None of them is correct on its own, which is the point. A basis is a claim about what causes the spend, so the right move is one pool per driver rather than one rate for everything. Where two bases disagree about a line, that disagreement is the finding, and it tells you which cost you have not been measuring.

So do I stop taking the work that loses money?

Only if you are turning better work away. A line with positive contribution margin and negative absorbed margin is helping pay for overhead that does not leave when the work does. Booked out, it displaces something better and should go. With an idle crew, dropping it makes the loss larger, not smaller.

My accountant already gives me a profit and loss statement. What is different here?

A P&L is correct at the level of the whole business and silent below it. Norbeck's showed $111,440 of profit on $1,840,000, and that figure is identical under all three allocations in the example. Every question about which work to bid lives underneath that total, which is where a P&L stops.

Should I include my own time as the owner?

Yes, and split it. The hours you spend on jobs belong in direct labour at a real rate. The hours spent quoting, chasing invoices and answering the phone belong in the overhead pools, where they get allocated by driver. Leaving your time out entirely is the single most common reason a service line reads profitable.

What do I actually do with a break-even ticket?

You treat it as a floor, not a target. It says the minimum price at which a line stops being subsidised, so a minimum call-out charge, a trip fee or a bundled agreement can each close the gap. Once the number is set, the price increase communication plan is what takes it to existing customers.

Job and Service Profitability Analysis

Fill in the form and your workspace opens with the work already underway.