Job costing is the single most valuable thing you can do for a construction contractor client. It tells them whether each job is actually profitable — and which jobs are bleeding money before it's too late to fix. Here's how to do it right in QBO.
Why most contractor QBO files have bad job costing
The #1 reason job costing fails in QBO is inconsistent cost coding. Bills get entered without a customer/job. Payroll isn't allocated to jobs. Material purchases sit in the wrong account. If you're inheriting a client's QBO file, cost coding cleanup is almost always the first step.
Job costing means tracking all costs — materials, labor, subcontractors, equipment, overhead — against a specific project, then comparing those costs to the budget and contract value. The output is a per-job profitability report that shows:
Without job costing, contractors often find out a job was unprofitable only after it's complete — when it's too late to do anything about it.
QuickBooks Online uses customers and sub-customers to represent jobs. The correct structure for a construction contractor is:
Every bill, expense, check, and payroll journal entry must be coded to the correct sub-customer to appear on job costing reports.
The standard construction cost categories to track separately in QBO:
Bills (subcontractors, suppliers)
Enter the bill, select the expense account (e.g. Subcontractor Costs), and in the Customer/Job column, select the sub-customer for that project. Make sure "Billable" is checked only if you plan to pass the cost through to the client.
Expenses / credit card charges
Same as bills — select the correct expense account and assign to the job in the Customer/Project field. Require your client to use separate cards per job or add job notes to every receipt.
Payroll
This is the hardest part. In QBO Payroll, you can assign hours to customers/jobs per employee per paycheck. Alternatively, book a weekly journal entry to distribute labor costs to jobs based on time records.
Material purchases (POs)
Create a Purchase Order in QBO and link it to the job. When the bill arrives, match it to the PO — it will automatically carry the job assignment.
Once costs are coded correctly, these are the reports that matter:
For budget vs. actual to work in QBO, you need to create a budget or estimate for each job before costs start coming in. Here's the standard approach:
If your contractor doesn't create estimates before work starts, you can still run budget vs. actual by creating estimates retroactively — but it's much better to do it before the job begins.
🚩 Jobs with no costs coded to them
Costs exist but aren't being assigned to jobs. This means your job costing reports are incomplete and the P&L is missing job-level detail.
🚩 Labor costs all in overhead, none in jobs
Payroll isn't being allocated to jobs. Labor is often the #1 cost for contractors — if it's not in job costing, the reports are meaningless.
🚩 Large variance with no explanation
A job that's 40% over budget with no change orders is either losing money or has a data entry problem. Either way it needs investigation.
🚩 Contract value lower than costs to date
The job is costing more than the entire contract value. The contractor is losing money on this job and may not know it.
ReconcileBook pulls your client's QBO data and builds the complete job costing report automatically — materials, labor, and subcontractors broken out per job, with budget vs. actual variance and over-budget alerts. Download as a PDF and send directly to your client.
Questions about job costing in QBO? Email us or browse more guides.