How to Set Up Job Costing in QuickBooks for Contractors

Why Most Contractors Don't Know Which Jobs Make Money
Here's a number that should worry you: 35% of contractors don't track job-level profitability at all. They know their total revenue and total expenses. They know if the year was "good" or "bad." But they can't tell you which jobs made money and which lost it.
The ones who do track it usually find something uncomfortable. A job they thought was profitable was actually underwater once you allocate overhead. A customer they love is actually their worst margin account. A service type they've been pushing is diluting their overall profitability.
Job costing fixes this. It's the practice of tracking every dollar of revenue and cost against a specific job, so you can see true profit per job, per customer, per service type.
And you can set it up in QuickBooks. Here's how.
QuickBooks Online vs. Desktop: Which Is Better for Job Costing?
QuickBooks Desktop (QBD) has historically been better for contractors because of its dedicated "Job Costing" reports and the ability to create sub-customers as jobs. Many established contractors still use QBD for this reason.
QuickBooks Online (QBO) has caught up significantly. It now supports Projects (essentially jobs), class tracking, and custom reports. For most contractors under $30M in revenue, QBO is sufficient.
| Feature | QBO | QBD |
|---|---|---|
| Sub-customers as jobs | Yes | Yes |
| Projects feature | Yes | No (uses jobs natively) |
| Class tracking | Yes (Plus and above) | Yes |
| Job costing reports | Limited — needs customization | Built-in |
| Time tracking | Yes | Yes |
| Multi-user access | Cloud-based | Server or hosted |
| Integrations | 750+ apps | Fewer, but TSheets, etc. |
Our recommendation: If you're starting fresh, use QBO Plus or Advanced. If you're already on Desktop and it's working, stay there.
Step 1: Set Up Your Chart of Accounts
Before you can track costs per job, your chart of accounts needs to separate costs into categories that matter for contractors.
Revenue accounts:
- Service Revenue
- Install/Project Revenue
- Maintenance Agreement Revenue
- T&M (Time & Materials) Revenue
Cost of Goods Sold (direct costs):
- Direct Labor (field technicians, installers)
- Materials & Parts
- Subcontractor Costs
- Equipment Rental
- Permits & Fees
Overhead (indirect costs):
- Office Salaries
- Rent & Utilities
- Vehicle Expenses (fleet)
- Insurance (GL, WC, auto)
- Marketing
- Software & Subscriptions
- Depreciation
The key distinction: direct costs are assignable to a specific job. Overhead is not. You'll allocate overhead later.
Step 2: Create Customers and Jobs
In QBO, every project is a "sub-customer" under the main customer:
ABC Property Management (Customer)
├── ABC - HVAC Install Building A (Job)
├── ABC - Service Call 4/1 (Job)
└── ABC - Maintenance Q2 (Job)
Naming convention matters. Use a consistent format:
[Customer Abbreviation] - [Job Type] [Description] [Date or #]
This makes it easy to search, sort, and report. When you have 500 jobs in a year, consistent naming is the difference between usable data and chaos.
Step 3: Assign Every Transaction to a Job
This is where discipline matters. Every invoice, every bill, every time entry must be tagged to a job.
Revenue: When you create an invoice, assign it to the sub-customer (job). Not just the parent customer.
Materials: When you enter a bill from your supply house, split it by job. If one PO covers parts for three jobs, create three line items on the bill, each assigned to the correct job.
Labor: Use QBO Time Tracking (or an integration like Buildertrend, ClockShark, or your field service software). Every hour logged by a field tech needs a job assignment.
Subcontractors: Bills from subs should be assigned to the job they worked on.
The #1 reason job costing fails is that someone gets lazy with tagging. One untagged bill throws off the whole report.
Step 4: Handle Overhead Allocation
Here's where it gets real. Your direct costs (labor, materials, subs) tell you the gross margin on each job. But they don't include the cost of running your business.
The overhead rate method:
- Calculate total annual overhead (all indirect costs)
- Calculate total annual direct labor hours
- Overhead rate = Total Overhead / Total Direct Labor Hours
Example:
- Annual overhead: $800,000
- Annual direct labor hours: 40,000
- Overhead rate: $20/hour
Now every job gets charged $20 per labor hour for overhead. A job with 200 labor hours gets $4,000 in overhead allocation.
Why this matters: A job might show 45% gross margin on direct costs, but after overhead allocation, it's actually 15%. That changes your pricing strategy.
Step 5: Run the Reports
In QBO, run these reports weekly or monthly:
Profit & Loss by Customer: Shows revenue and direct costs per customer. Filter by date range. This is your first view of who's profitable.
Job Profitability Detail: (QBD has this built in. In QBO, use the "Profit and Loss by Customer" report and drill into sub-customers.) Shows revenue minus direct costs per job.
Unbilled Charges by Customer: Critical for catching revenue leaks. If you've incurred costs on a job but haven't invoiced, this report shows the gap.
Common Mistakes
1. Not tracking labor by job. If your techs aren't logging hours against specific jobs, you're missing your biggest cost. Labor is typically 30-50% of a contractor's direct costs.
2. Dumping everything into one "Materials" account. Break it out. You need to know if a job's materials cost was $5K or $50K without digging through individual transactions.
3. Ignoring WIP (Work in Progress). If you bill monthly on a project that takes 6 months, your financials are misleading unless you track WIP. Revenue recognized doesn't equal cash collected doesn't equal work completed.
4. Not reviewing regularly. Job costing data is only useful if someone looks at it. Monthly at minimum. Weekly is better. The contractor who reviews job profitability every Friday makes better decisions than the one who looks at it in January.
What Job Costing Reveals
Once you have 3-6 months of clean job costing data, you'll see patterns:
- Which customers are actually profitable (your biggest customer might be your worst margin)
- Which service types earn the best margin (service calls vs. installs vs. T&M)
- Which techs are most productive (labor efficiency by employee)
- Where materials waste happens (comparison of estimated vs. actual materials)
- Whether your pricing is right (if half your jobs are under 20% margin, you're underpriced)
This is the data that turns a contractor from "we had a good year" to "we know exactly why."
The Bottom Line
Job costing in QuickBooks isn't hard to set up. It's hard to maintain. The setup takes a weekend. The discipline takes a culture shift — every person who touches a transaction needs to tag it correctly, every time.
If you're a $3-30M contractor and you're not tracking job-level profitability, you're flying blind. The data is in your system. You just need to structure it.
Q: Can Level help me set up job costing? A: Yes. We connect to your QuickBooks and field service software (BuildOps, ServiceTitan, Jobber, etc.) and build job-level profitability reporting automatically. Our AI cross-references your accounting data with your operational data to give you margin visibility you can't get from QuickBooks alone. The first audit is free — we'll show you which jobs and customers are making money before you pay anything.
Q: What if I'm already on QuickBooks but my data is messy? A: That's most contractors. We start by cleaning up your chart of accounts and transaction tagging, then layer in automated job costing going forward. You don't need to fix 5 years of history — we focus on making the next 12 months clean and actionable.
Ready to see where your money is going?
Get a free job profitability audit in 48 hours.
Get Your Free Audit