Skip to content
The Two-Day Guarantee

Guide

Job costing for contractors: how to know which jobs actually make money

A company total tells you the business made money. It does not tell you which work made it.

Reviewed by Darren Lim, US CPALicence CPA.74253602

7 min read

Almost every contractor we talk to can tell us what the business did last year. Almost none can tell us which jobs made that money.

That is not carelessness. It is what standard bookkeeping produces. A normal set of books tells you revenue, expenses and profit for the company as a whole. It does not tell you that your service department carried the business while your install work quietly broke even, or that one of your three trucks lost money for eight months.

Job costing is the practice of attaching revenue and cost to individual jobs so that question has an answer.

What job costing actually requires

It is less complicated than it sounds, but it does need four things to be true about your books.

Every job needs an identifier. A job number, a customer-address pairing, whatever you already use in the field. If the office and the books call the same job by different names, nothing downstream works.

Revenue has to be coded to the job. Not to a general sales account. When an invoice is entered, it carries the job identifier with it.

Direct costs have to be coded to the job too. Materials, subcontractors, permits, equipment rental, and labor hours. This is where most attempts fall apart — the supply house run gets coded to "materials" with no job attached, and it disappears into a monthly total.

Overhead has to stay out of it. Your insurance, your office rent, your truck payments: these are real costs but they are not job costs. Mixing them in produces a number that looks precise and means nothing.

The part everyone gets wrong: labor

Materials are easy because there is a receipt. Labor is where job costing usually dies.

If your techs are on salary, or you pay hourly but never tie hours to jobs, then your largest single cost is missing from every job-level number you produce. A job that looks profitable at 40% gross margin might be underwater once four days of a two-man crew is properly attributed to it.

You do not need a perfect time-tracking system to start. You need hours attributed to jobs at roughly the right level. Approximate labor allocation produces useful numbers. No labor allocation produces misleading ones.

What it changes

The reason to do this is not tidiness. It is that job-level numbers change decisions, usually within one reporting cycle.

The most common finding, across every trade we work in, is that the work owners assume is profitable is not the work carrying the business. Contractors chase large installs because the invoice is large, and discover that the smaller recurring work has better margin and far less risk.

The second most common finding is a category of work that should be repriced or dropped. Once a job type has a number attached, saying no to it stops feeling like turning down revenue.

How this splits by trade

The lines that matter are different depending on what you do:

  • HVAC — install versus service, and maintenance agreements tracked against what it costs to service them
  • Plumbing — profit per truck and per tech, with emergency call-outs separated from scheduled work
  • Electrical — fixed-bid work tracked against material cost movement, because that is where the margin leaks
  • Roofing — insurance restoration separated from retail, with subcontractor cost tied back to the individual job
  • Pest control — route-level economics, where fuel and drive time are the costs that decide whether a service area pays

A general bookkeeper will categorize everything correctly and still not build these splits, because they do not know they matter. That is the actual difference between bookkeeping and bookkeeping for your trade.

Where to start

You do not need to reconstruct the last three years. Start with the current month, get the job identifier flowing through revenue and direct costs, and get labor attributed even roughly. One clean month of job-level data is worth more than a year of company totals.

If you want to see what that looks like on your own numbers, that is exactly what our free first month produces.

How we do this

We build this into your books. Starting with a month that costs you nothing.

Job-level separation built in from the first month, in your trade's own terms — install versus service, insurance versus retail, per truck, per route — arriving every month rather than when you remember to ask.

  • Every transaction categorized, accounts reconciled, the month closed
  • Reviewed and signed by Darren Lim, US CPA — licence CPA.74253602
  • The Two-Day Guarantee: Your first month back in two days, or the next month is free.

You have run on company totals for years. One month of job-level numbers usually reorders what an owner chases next. It costs two minutes of questions and read-only access, a CPA signs it, and it is yours whether you continue or not.

Start my free monthNine questions, about two minutes. No card, nothing to cancel.

Two days, or the next month is free

Start my free month