How to Set Up Job Costing in QuickBooks for Contractors
From Level's proprietary contractor research
QuickBooks job costing can work, but a report is only as complete as the job IDs on its invoices, bills, time entries, materials, and subcontractor costs. Here is the setup and the control process that keeps it trustworthy.
Pattern across 2,200+ contractors, $13.25B in job revenue analyzed
The short answer
To set up contractor job costing in QuickBooks, create a consistent customer and project structure, map revenue and direct-cost accounts, require a job on every invoice, bill, time entry, and subcontractor cost, reconcile the field system to QuickBooks, review unassigned transactions, and handle WIP separately on long-term projects. QuickBooks can report only the costs actually assigned to each job.
Key takeaways
- A job-profitability report is incomplete when revenue, labor, materials, or subcontractor costs are missing a project assignment.
- Overhead allocation is the step that bites. $800K of overhead over 40,000 labor hours is $20/hr, and a job showing 45% gross margin can drop to 15% after it.
- Labor is typically 30-50% of direct costs and carries 45-50% margins while materials run closer to 30%, so tag labor by job or you miss your biggest cost.
- Job costing earns its keep when jobs vary materially in labor, materials, scope, or billing method. Company size alone is not the deciding factor.
QuickBooks Online Projects can track income, expenses, and labor costs by project. The month-end control is equally important: review unassigned job costs before treating any project margin as complete.
Before You Trust a QuickBooks Job-Profitability Report
A populated report is not proof that the job data is complete. Before using it to price work or pay bonuses, confirm that:
- Every invoice and credit is assigned to the correct customer and project.
- Bills, card charges, purchase orders, time entries, and subcontractor costs carry the same job ID.
- Revenue and direct costs from the field system reconcile to QuickBooks for the same period.
- The unassigned-cost queue is reviewed before month-end close.
- Long-term projects use a separate WIP process so billing, revenue recognition, and work completed are not treated as the same event.
A software sync moves fields. It does not prove that the crew selected the right job, that every cost crossed the integration, or that the accounting period matches the operational report.
Why Most Contractors Don't Know Which Jobs Make Money
Level's proprietary contractor research shows why a populated job report still needs a completeness test. Across 1,747,089 completed jobs from 1,791 companies, the median recorded job gross margin was 44.3%. An implausibly high margin is often a data-quality warning, not a pricing victory: verify that labor, materials, and subcontractor costs are assigned to the same job as revenue.
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) supports project-oriented workflows and configurable reporting, subject to the subscription and connected apps in use. Intuit's current documentation says Projects is available in QuickBooks Online Plus and Advanced. Advanced adds estimate-versus-actual reporting, while more detailed construction budgeting requires Advanced with the Construction add-on or Intuit Enterprise Suite. Whether QBO is sufficient depends on transaction volume, WIP requirements, approval controls, and the reliability of the field-system integration, not a revenue cutoff.
| Feature | QBO | QBD |
|---|---|---|
| Customer-linked projects or jobs | Projects linked to customers | Customer:Job records |
| Projects feature | Plus and Advanced | Uses jobs natively |
| Class tracking | Plan-dependent | Yes |
| Job costing reports | Limited, needs customization | Built-in |
| Time tracking | Yes | Yes |
| Multi-user access | Cloud-based | Server or hosted |
| Integrations | Cloud app ecosystem | Desktop-compatible connectors |
Our recommendation: Choose the QuickBooks version that supports your current reporting and integration requirements, then test the complete transaction path before migrating. Product capabilities and plan availability change, so verify the current QuickBooks documentation before buying or switching.
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 Projects
In QBO, create a Project and link it to the customer. In QuickBooks Desktop, create a Customer:Job record for each job. A consistent hierarchy can look like this:
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.
Free benchmark review
See how your margins benchmark.
We compare your jobs, crews, and service lines against real margin data, then show which gaps deserve the free audit.
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 project or Customer:Job record, not only 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 QuickBooks Time, Workforce, or another connected time system. Every hour logged by a field technician needs a project assignment. Intuit documents two QBO labor-cost views: posted payroll expenses after payroll runs, and estimated hourly costs for a faster but less exact view between payroll runs.
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. In my experience, labor carries roughly 45-50% margins while materials run closer to 30%. If your revenue mix is materials-heavy, you need a higher overhead markup to compensate.
If you're not sure whether your cash position can absorb overhead correctly, read our guide on how retainage kills contractor cash flow. It's a related problem that compounds when overhead isn't allocated.
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.
Current QuickBooks product sources
QuickBooks features and navigation change. These official Intuit pages were checked in September 2026:
- Set up and use Projects in QuickBooks Online
- Track hourly labor costs and project profitability
- Track job costs in QuickBooks Desktop
Those sources verify product behavior. The contractor completeness and margin observations above come from Level's proprietary contractor research and use the stated metric cohorts.
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."
When Job Costing Isn't Worth the Effort
Not every contractor needs a complex job costing system. A single-service company with a small crew and consistent work may get enough decision value from a clean P&L by service line. Complexity, not revenue alone, should decide the reporting design.
Similarly, if 95% of your work is identical residential service calls at flat-rate pricing, your margins are embedded in the price book, not in job-level variance. Tracking every call as a separate "job" adds friction without much signal.
Job costing becomes essential when you have multiple service types (installs vs. service vs. T&M), multiple crews or divisions, or jobs that vary significantly in scope and margin. Those conditions can appear at any company size.
If you're at the stage where job costing matters but nobody reviews job margins weekly, the gap isn't data entry. It's a CFO function that turns job cost data into pricing and crew decisions.
When two systems report two different margins
If your field software and QuickBooks disagree about the same job, the cause is usually one of three structural differences rather than a data-entry error. They are separated out in Why Your Field Software Numbers Don't Match Your Accounting.
The Bottom Line
Job costing in QuickBooks is usually easier to configure than to maintain. Every person and integration that touches a transaction needs to preserve the correct job assignment, and the close process needs to reconcile missing or mismatched records every period.
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 (ServiceTitan, Jobber, Housecall Pro, 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.
Q: What should I be tracking beyond job-level P&L? A: Job costing is step one. The next layer is understanding why revenue-only job reports create phantom margin, because cost data is not being entered. Layer in WIP schedules for commercial work, and build a monthly P&L review process that connects your job-level numbers to your financial statements. That's the progression from bookkeeping to actual financial management.
Get the next one
Want next week's benchmark in your inbox?
One email a week. Real numbers from 2,200+ service businesses. No fluff. Unsubscribe anytime.
Related reads
Job Costing
Contractor Finance KPIs Ranked by Profit Impact (2026)
The 8 financial KPIs that actually move a contractor's bottom line, ranked by profit impact, each with its median and top-quartile benchmark.
Job Costing
Your 45% Job Was Really a 24% Job. Here's Where the Margin Went.
A contractor job bid at 45% gross margin usually earns closer to 24% once labor is fully burdened, callbacks counted, material drifts, and AR is financed.
Job Costing
Landscaping Route Margin: Rebuild Labor Cost Correctly
Rebuild landscaping route margin using loaded labor, drive time, equipment per crew-hour, and seasonal capacity. Includes Level job-data context.

About the author
Sam Yang
Founder & CEO
Founder of Level, the AI operating layer for contractors and skilled trades, and the other operating businesses where scarce labor is the constraint. Ex-CFO across trades, SaaS, and service businesses. 4 years as Director of Growth Product at BuildOps, building financial tooling used by 1,000+ commercial contractors. Four years in PE and investment banking rolling up and acquiring service businesses, $2.5B in total transactions including M&A and IPOs. Stanford MBA, Brown undergrad. The Level founding team's analysis of 2,200+ contractors ($13.25B in revenue) across operating, private-equity, and CFO roles anchors the Level Index benchmark research.
LinkedIn