Business finance
Job costing for contractors: how to know which jobs actually make money
By Daouda Traore, MBA · September 23, 2026
Most contractors can tell you their revenue for the month. Far fewer can tell you which of last month’s jobs made money and which ones quietly lost it. Job costing is how you close that gap. Done well, it changes how you bid.
What job costing actually is
Job costing means tracking income and every direct cost against a specific job, so you can see the profit on that job by itself — not just the profit for the whole business lumped together. The three cost buckets that matter:
- Labor — crew hours on that job, at their real loaded cost (wage plus payroll taxes and workers’ comp), not just their hourly rate.
- Materials — everything bought for or pulled for that job.
- Subcontractors — anything you paid a 1099 sub to do on that job.
Everything else — the truck payments, insurance, the office, your time running the business — is overhead. Overhead isn’t assigned to individual jobs; it’s covered by the gross profit that all your jobs produce together.
The number that tells the story
For each job:
Job income − direct labor − materials − subs = gross profit on the job.
Divide gross profit by job income and you get the job’s gross margin. Do this for a few months of jobs and patterns jump out fast:
- Service calls might run a high margin but low dollars.
- Big installs might be lower margin but where the real money is — or the opposite.
- One customer, one job type, or one crew might consistently come in under where you bid.
You can’t see any of that from a single company-wide Profit & Loss.
Setting it up in QuickBooks
The mechanics are not complicated:
- Turn on projects (or use customer:job). In QuickBooks Online, the Projects feature groups all the income and costs for one job in one place.
- Tag every transaction to a job. Each bill, expense, and material receipt gets assigned to the project it belongs to. This is the habit that makes or breaks job costing — if half the costs aren’t tagged, the report lies.
- Get labor in. If you run payroll, allocate crew hours to jobs so labor cost flows to the right project. Time-tracking that feeds payroll makes this close to automatic.
- Assign subs and materials at entry. When you enter the bill from your supplier or your sub, pick the job then, not later.
- Read the Project Profitability report every month, next to your regular financials.
Using it to bid better
Once you have a few months of real job margins, bidding stops being a guess:
- You know your true labor cost per hour, loaded — so your estimates use a real number.
- You know what gross margin you actually achieve on each job type, so you can set a target and price to hit it.
- You know how much gross profit per month it takes to cover overhead and pay yourself — which tells you how much work you need to book, not just how many jobs.
Where it goes wrong
The two failure modes: costs that never get tagged to a job, and labor that’s tracked at wage instead of loaded cost. Both make marginal jobs look profitable. If you fix nothing else, fix those two.
Job costing is one of the things Roots Tax Pro sets up as part of ongoing bookkeeping for contractors — the books are structured for it from the start, and the monthly report comes with the rest of your financials. Book a free consultation to talk through your setup.