Every contractor eventually asks the same question: which jobs actually made money? If the books are not set up for it, that answer takes a week of reconstruction. Set up correctly, it is a report you run in ten seconds.
Start with the structure, not the transactions
Job costing in QuickBooks depends on three things being right before a single transaction is entered: your chart of accounts, your Products and Services list, and the way jobs are tracked.
In QuickBooks Online Plus or Advanced, jobs are tracked with Projects. In QuickBooks Desktop, they are Customers:Jobs. Either way the principle is the same, every cost that belongs to a job has to carry the job on it at the moment it is entered. Coding it later, from memory, is where accuracy dies.
Separate cost of goods sold from overhead
Most contractor files come out of the box with a single Job Materials account and nothing else. That tells you nothing. Break COGS into the categories you actually estimate against, because the point of job costing is comparing actual to estimate:
- Direct labor
- Labor burden, which means payroll taxes, workers comp, and benefits on direct labor
- Materials
- Subcontractors
- Equipment and rentals
- Other direct job costs, such as permits, dump fees, and mobilization
Overhead stays out of COGS. Your truck insurance, office rent, and software subscriptions are not job costs, and forcing them into jobs makes every job look unprofitable in a way that tells you nothing useful.
Use items, not accounts, on transactions
This is the piece contractors skip. Enter job costs against Products and Services items that map to your COGS accounts, rather than posting straight to the account. Items give you cost codes. Accounts give you a profit and loss statement. You want both, and the item layer is what lets you see that framing labor ran over on three jobs in a row.
Keep the item list short enough that your field staff and your data entry stay consistent. Twelve items used correctly beats sixty used at random.
Get labor onto jobs
Labor is the largest and most commonly missed job cost. Time has to be captured per employee, per day, per job, before payroll runs. That means time tracking your crew will actually use, whether that is QuickBooks Time, a field app, or a disciplined paper timesheet entered weekly.
Labor burden matters more than most owners expect. A $30 an hour employee costs $38 to $45 an hour once taxes, workers comp, and benefits are on top. Job costing only base wages understates every job by twenty percent or more.
Bring in estimates so the comparison exists
Enter the estimate into QuickBooks against the same items you cost to. Once that is in place, the Job Estimates vs. Actuals report becomes the single most useful report in the file. It shows which line items ran over, on which jobs, while there is still time to do something about it on the next bid.
What good looks like
You can answer these in under a minute: which jobs are open, what has been spent on each, how that compares to estimate by category, what is billed versus unbilled, and which completed jobs hit gross margin. If any of those take longer, the setup is the problem, not the effort.
The fix is almost never more bookkeeping. It is a structure that makes the right coding the easy coding.