Contractor Job Costing: Why the Job That Made Money Lost It
Contractor job costing exists to answer one question the P&L can’t: which job made money? Without it, deposits from three new jobs cover the overrun on an older one, the bank balance looks healthy, the P&L looks fine, and nobody finds out the kitchen remodel lost $11,000 until the final draw comes up short. Job costing kept weekly, with deposits booked as liabilities, shows the overrun in week three instead of at the end.
We run an accounting firm, and contractors are the clients most likely to tell us “we had our best year ever” in a meeting where the numbers say otherwise. Here’s how the trap works and what fixes it.
The deposit trap
A customer signs a $60,000 contract and hands you a $20,000 deposit. It goes in the bank. If the books call that revenue, the month looks spectacular. It isn’t revenue. You haven’t done the work yet. It’s a liability: money you’re holding that you owe back in the form of a finished job.
Now run three jobs at once. Three deposits come in, $60,000 total. Meanwhile job one, which started two months ago, has run over on materials and labor by $11,000. The bank balance doesn’t flinch, because the new deposits cover it. The P&L doesn’t flinch, because the deposits got booked as income. Everything looks fine until job one’s final draw is smaller than the cost of finishing it, and by then jobs two and three have their own overruns being covered by jobs four and five.
That’s not a cash flow problem. It’s a bookkeeping problem that becomes a cash flow problem. Book the deposit as a customer deposit liability, recognize revenue as the work progresses or at milestones, and job one’s overrun shows up as a loss on job one, in the month it happened.
How do I do job costing for a small construction business?
Three things, done weekly, not at year end.
Tag every cost to a job the week it happens. Materials receipts, sub invoices, equipment rentals, permit fees, dump fees. Each one gets a job when it’s entered, not reconstructed from memory in December. The lumber yard receipt from Tuesday is job 14. The plumber’s invoice is job 12. If your bookkeeper enters the bill, they need the job on the receipt, which means your crew leads write it on the receipt.
Tag labor to a job from timesheets. This is the one that gets skipped, and it’s the one that matters most, because in most trades labor is the biggest cost on the job. Hours by employee by job, weekly, from whatever time system you use. Payroll then gets allocated to jobs at each person’s loaded rate, wages plus payroll taxes plus workers’ comp, not just the hourly wage.
Recognize revenue against the job. Deposits go to the liability. Progress billings and the final draw move revenue onto the job as it’s earned. At the end, the job has its own revenue, its own costs, and its own margin.
None of this requires special software. It requires a job field on every transaction and the discipline to fill it in the same week.
The job margin report
Once every cost and every dollar of revenue carries a job, the report is automatic: for each open and closed job, the contract price, costs to date by category, revenue recognized, and margin. Run it monthly inside the close.
Its value is timing. A job that was estimated at 30% margin and is showing 12% after three weeks, with half the work left, is telling you something now, while you can still tighten the crew, push back on a sub, or write a change order. The same number discovered at closeout is a story you tell at the bar.
The report also answers the question underneath the deposit trap: how much of the cash in the bank is actually yours? The customer deposit liability, less costs already incurred on those jobs, is the part that isn’t.
Change orders
Every contractor has the conversation: the customer asked for the extra outlet, the second coat, the bigger window, and it “wasn’t a big deal” until the job lost money. With job costing, a change order stops being an argument and becomes a number. The extra window is $1,400 of materials and $900 of labor tagged to job 14, and the change order is $2,800. Without job costing, it’s a feeling, and feelings don’t get invoiced.
Rule of thumb: if a change isn’t written, priced, and signed before the work is done, its cost lands on your margin, not the customer’s.
Why does my construction company show a profit but have no cash?
Beyond the deposit trap, contractors get hit by everything that separates profit from cash: retainage held by the customer for months after the work is done, materials bought weeks before the draw that pays for them, equipment financed with payments that are mostly principal, and the truck you bought in March that the P&L is depreciating over years. Job costing doesn’t fix those, but it separates them from the real question. If every job is showing a healthy margin and cash is still tight, the problem is timing and financing. If the jobs are showing thin margins, the problem is pricing, and no line of credit fixes pricing.
What a CFO does with this number
A fractional CFO takes the job margin report and sorts it by job type. Kitchens, baths, additions, service calls, commercial fit-outs. For each type: estimated margin versus actual margin, over the last twelve months of closed jobs.
What comes out, almost every time, is that one job type is consistently estimated at 30% and delivered at 15%, and it’s usually the one the owner enjoys most or has done longest. The CFO’s job is to put a number on it: this type of work is costing you roughly this much a year against what you thought it earned, and here are the three choices. Reprice it. Change who runs it. Or stop selling it and put the crew on the type that actually delivers.
Then the same report feeds the estimate for the next bid, so the labor rate and the materials allowance come from what jobs really cost, not what they cost two years ago.
Where we come in
We keep contractor books with job costing inside the monthly close. Deposits are booked as liabilities and recognized as the work is done. Every bill and every payroll allocation carries a job. The job margin report comes out with the monthly package, and once a quarter we sit down and go through it by job type. Payroll runs in-house, so labor allocation comes straight from the time records without a third party in the middle.
If your P&L says you’re profitable and your final draws keep coming up short, reach out. We’ll start with a two-hour diagnostic and tell you which jobs made money, and which ones only looked like they did.
Frequently asked questions
How does job costing work for a contractor?
Every material receipt, sub invoice, and labor hour is tagged to a job the week it happens, and a job margin report runs monthly.
Are customer deposits revenue?
No; a deposit is a liability until the work it pays for is done, then it becomes revenue as the job progresses.
Why does the P&L look fine when a job is losing money?
Because deposits from newer jobs cover the overrun on an older one until its final draw is short or disputed.