QuickBooks Job Costing for Contractors: Why It's Broken (And the Workarounds That Work)

We've audited the financials of 2,200+ contractors and the same finding shows up almost every time:
91% of active jobs have no cost data populated. The contractor literally cannot calculate job-level margin until after the project closes.
The QuickBooks files we look at often have the same pattern: revenue tied to jobs at the invoice level, but materials, labor, and subcontractor costs sitting in expense accounts with no job assignment. The Job Profitability report is technically there. It's just not telling the truth.
This post is the honest breakdown of why QuickBooks job costing fails most contractors, and the disciplines that actually fix it.
Why QuickBooks job costing is technically there but practically broken
QuickBooks (Desktop Premier Contractor, Premier, Enterprise, and QBO Plus/Advanced with Projects enabled) has the data structures for job costing. The mechanics work:
- Customers/Jobs hierarchy
- Items mapped to revenue and cost accounts
- Estimates with cost vs. price columns
- Job Profitability and Job Estimates vs. Actuals reports
- Time tracking that can be assigned to jobs
In practice, the data structures are empty for most contractors. The reasons are operational, not technical.
1. Bills don't get assigned to jobs. When the lumber yard or supply house bill arrives, it lists 47 items across 6 different jobs. Allocating each line to a job takes 15+ minutes. Most bookkeepers code it to "Materials" with no job assignment. The bill becomes overhead instead of a job cost.
2. Field labor doesn't flow into cost. Even with time tracking, getting actual labor cost (wages + payroll taxes + benefits + workers' comp) onto a job is several manual steps. Most contractors never build the bridge.
3. Subcontractor costs miss the job. Sub bills come in days or weeks after the work. By the time the bookkeeper enters them, the technician who could verify which job they belonged to is on a different crew.
4. Equipment and vehicle cost is uncostable. A truck that runs three jobs in a day generates fuel, depreciation, insurance, and maintenance. Allocating that to specific jobs is mostly impossible without a separate fleet system.
5. Rework and warranty work distorts everything. Labor hours spent fixing a problem on a 6-month-old job rarely get tagged correctly.
6. Office overhead is never allocated. Burdening jobs with proportionate office cost requires a methodology nobody builds.
Net result: the Job Profitability report shows revenue per job and a fraction of true cost. Margins look fantastic. Owners assume they're winning. Then the year ends, the P&L shows a smaller-than-expected profit, and nobody can reconcile.
The five levels of contractor job costing
Where you actually are vs. where you think you are.
Level 0: No job costing
Revenue and expenses both go to default accounts. No "jobs" in QuickBooks. You know total margin, nothing else. Most $500K-$2M contractors are here.
Level 1: Revenue-only job tracking
Invoices are tied to jobs (because invoicing forces it). Costs aren't. Job Profitability report is mathematically meaningless because the cost side is empty. Most $1M-$5M contractors are here.
Level 2: Materials cost on jobs (only)
Bills get coded to jobs by the bookkeeper, eventually. Labor and subs still don't. Margins look high because labor is the largest cost and it's missing. Many $3M-$10M contractors think they're at "Level 3" but are actually here.
Level 3: Materials + subs on jobs
Both materials and subcontractor bills tie to jobs. Labor still flows separately. Margins are closer to real but still flattering — typically overstated by 10-25 points.
Level 4: Materials + subs + labor on jobs
Everything tagged. Requires either ServiceTitan, Procore, JobTread, Sage 100 Contractor, or QuickBooks + a payroll integration that costs labor to jobs. Margins are real. ~5% of contractors get here.
Level 5: Burdened cost on jobs (with overhead)
Real labor cost (wages + tax + benefits + workers' comp + 25% office overhead allocation). Margins are economic truth. Fewer than 1% of contractors actually do this.
The cost flow that makes QuickBooks job costing work
If you're going to make QuickBooks Premier Contractor or QBO Plus actually work for job costing, this is the discipline. There are no shortcuts.
Materials:
- Every supply house bill entered with line-by-line job assignment
- Or: separate purchase orders per job, then receive against PO
- Discipline: bookkeeper has 5 business days to enter bills with job assignments
Subcontractor labor:
- Every sub bill entered with job assignment
- Pay subs through Bills (not direct write-checks) so the AP/job link is preserved
- 1099 vendor flag set on every sub
Internal labor:
- Time tracking is non-negotiable: every tech logs hours by job
- Payroll posted to QuickBooks pulls hours from time tracking
- Use a payroll integration (Gusto, ADP, QB Payroll) that supports job costing
- Burden labor: actual hourly rate × (1 + payroll tax % + benefits % + workers' comp %)
Equipment / fleet:
- Either: don't allocate (charge to overhead) and recognize margin overstatement
- Or: hourly equipment rate, billed internally to jobs based on usage
- Most contractors at Level 4 punt on this
Office overhead:
- Allocate as a flat percentage of direct cost (typical: 15-25%)
- Or per-job fixed overhead amount
- Apply consistently, document the methodology
Free profitability audit
Find out which jobs are actually making money.
We benchmark your books against 2,200+ service businesses and tell you exactly where the money is going.
What "good job costing" actually requires
Not a software change. Most contractors think the answer is moving from QuickBooks to ServiceTitan or Buildertrend. That's a $50-200K migration that fixes nothing if the operational discipline isn't built first.
What actually works:
1. A bookkeeper who codes bills to jobs. This is the single highest-ROI hire on a contractor's team.
2. Time tracking with field discipline. Techs log job time daily. Crew leads verify weekly. Owner reviews exceptions monthly.
3. A monthly close with job cost variance analysis. Compare estimate to actual cost-in-place. Investigate variances over 10%.
4. A WIP schedule. Real percent-complete accounting on open jobs. The WIP schedule explained post walks through this.
5. Job closeout discipline. When a job closes, every cost is in. Run final job profitability. Post-mortem the misses.
When QuickBooks isn't enough
Specific signals that you've outgrown QuickBooks for job costing:
- Multiple concurrent crews on multiple jobs requiring real-time labor allocation
- Per-phase cost tracking (foundation, framing, electrical, etc.) within jobs
- Change order management with true contract value tracking
- Multi-entity (separate LLCs per project) with consolidated reporting
- Construction-specific WIP and revenue recognition (percent-complete)
- Bonding requirements that demand audited financials
For commercial GCs and large mechanical/electrical contractors, the upgrade path is typically:
- Procore (project management) + Sage 100 Contractor or Sage Intacct (accounting)
- JobTread for residential remodel
- ServiceTitan for HVAC/plumbing/electrical service
- Foundation or Vista by Viewpoint for $20M+ commercial
For most $1-15M service contractors, QuickBooks Premier Contractor (or QBO Plus + Projects) is sufficient if the discipline is built. The discipline is the constraint, not the software.
The real cost of broken job costing
Three things happen when 91% of jobs have no cost data:
1. Margin overstatement on every job. Revenue ties to job, cost doesn't. Reported margin is artificially high. Some jobs that look profitable are losing money.
2. Quoting based on wrong assumptions. If your reported margin is 45% but real margin is 28%, every new quote is priced too low. The next 100 jobs will lose more money than the last 100.
3. Compensation built on bad numbers. Crew bonuses, sales commissions, partner profit shares — all calculated from numbers that don't reflect reality. Fixing this later means clawing back compensation, which never goes well.
The cost of fixing job costing is real (typically 3-6 months of bookkeeper effort + process change). The cost of not fixing it compounds every quarter.
When to call Level
We help contractors get from Level 1 (revenue-only) or Level 2 (materials only) to Level 3 or 4 in 90-120 days. The work involves:
- Chart of accounts redesign (separate cost lines that map to job profitability)
- Item list rebuild (every cost item points to the right COGS account)
- Bookkeeper workflow redesign (job assignment discipline)
- Time tracking integration (Gusto, ADP, or QB Time)
- Monthly close process with WIP and job profitability review
- Quoting feedback loop (real margin → real prices)
For most $2-15M contractors, this is one of the highest-ROI engagements we run.
FAQ
Should I switch to ServiceTitan or Procore for job costing? Only if the operational complexity demands it. Most $1-15M service contractors do not need to leave QuickBooks if they can build the discipline. Software change is a 12-24 month project; discipline change is 90 days.
Why not use QuickBooks Online's Projects feature? Projects in QBO Plus/Advanced is a viable Level 2-3 solution. It's worse than QuickBooks Premier Contractor on Desktop for nesting and reporting flexibility, but the bank feeds and integrations are better. Most contractors who try Projects abandon it because the discipline still isn't there.
How accurate does job costing need to be to be useful? Within 5% on direct cost (materials + subs + labor). Equipment and overhead allocation can be approximate as long as they're consistent. The goal is decision-quality data, not audit-quality data.
Can my bookkeeper do this? Maybe. Most bookkeepers don't have job-cost training. The right hire profile: 3+ years in construction or HVAC/plumbing/electrical, has used QuickBooks Premier Contractor or Sage, comfortable with WIP and percent-complete accounting.
What's the fastest path from Level 1 to Level 4? Realistic: 90-120 days with full owner buy-in. Days 1-30: chart of accounts and item list rebuild. Days 30-60: bookkeeper workflow change, time tracking deployment. Days 60-90: first month of clean data, variance review. Days 90-120: feedback into quoting and pricing.
Related reading:
About the author
Sam Young
Founder of Level. Former private equity investor and investment banker. Built AI-powered accounting products while building financial products for 1,000+ commercial contractors — benchmarking financial data across 2,200+ service businesses in contractors, healthcare, restaurants, cleaning, and staffing. Operations analytics work with PE-backed service business portfolios across multiple verticals. Co-founded a real estate tax optimization firm, where his team has analyzed over $1B in real estate assets. Stanford MBA.
LinkedIn