QuickBooks Online does not have a job costing feature. There is no switch labelled job costing anywhere in the product. Job costing in QuickBooks Online is a thing you assemble out of five separate parts that live in different menus, and four of those parts cannot be applied backwards to work you have already done.
That matters more than the usual setup guide admits, because two of the pages currently ranking on page one for this topic send you looking for a switch that was never there. Miter's guide says: "QuickBooks Online: Head to the company settings or preferences page, and turn on the job costing feature." AccountingDepartment's guide says: "In QuickBooks Online, you first need to enable the job costing feature. This is typically found under the Company Settings or Preferences."
You will not find it, because it is not there. Here is the setup that actually exists, in the order that keeps your first month of numbers usable.
The short answer
Job costing in QuickBooks Online is Projects plus expense tracking by customer plus an item list plus an hourly cost rate plus discipline. Turn on Projects in Account and settings under Advanced. Turn on expense tracking by customer under Expenses. Build your items. Set cost rates before anyone logs an hour. Then create a project for every job before the first receipt hits it, and code every transaction to it as it happens.
The nine steps below are ordered deliberately. Steps 2 through 5 are the four that only work going forward. Do them late and you will be reassigning transactions by hand for a month.
First decide which tier you are on, because it changes the answer
Projects is available in QuickBooks Online Plus, Advanced and Intuit Enterprise Suite, per Intuit's own setup documentation. It is not in Simple Start or Essentials. On Intuit's pricing page as of September 2026, the list prices are $38 a month for Simple Start, $85 for Essentials, $140 for Plus and $340 for Advanced.
So the entry ticket to job costing is Plus at $140, and that jump is bigger than the community remembers. A contractor on r/QuickBooks called "$99+/month for Plus" steep for a three to ten person shop, and another on r/Contractor put the Simple Start to Plus gap at "about $50/mo." Both were right when written. The current list gap is $102 a month.
Then there is the split almost nobody mentions. Plus gives you what a job cost. Advanced gives you whether it beat your bid. Intuit's release notes are unambiguous: "Estimates vs. Actuals in Advanced allows you to create an estimate for a project that includes total cost to your business and markup for your customer." Intuit's Projects documentation repeats it, listing project estimates and estimate versus actual tracking as Advanced-only additions.
Watch out
Every guide that tells you to "compare estimates to actuals" while showing you QuickBooks Online Plus screenshots is glossing over a $200 a month difference. On Plus you get a project profitability report against zero budget. If budget versus actual is the reason you want job costing, Plus does not do it.
Step 1: Turn on Projects
Gear icon, then Account and settings, then the Advanced tab. Find the Projects section and switch on project financial tracking. New QuickBooks Online subscriptions ship with Projects already enabled; older files often do not, which is why it is worth checking rather than assuming.
Projects then appears under Business overview in the left navigation.
Step 2: Turn on the expense settings, all three
This is the step that the "just turn on job costing" guides collapse into nothing, and it is the one that actually decides whether costs can reach a job. Still in Account and settings, move to the Expenses tab:
| Setting | What breaks without it |
|---|---|
| Track expenses and items by customer | Projects do not appear in the customer dropdown on bills, expenses or checks. You physically cannot code a purchase to a job. |
| Show items table on expense and purchase forms | Purchases can only be coded to an account, never to a cost code item. Your item list becomes decorative. |
| Make expenses and items billable | Needed for time and materials or cost-plus work. Optional on fixed-price jobs. |
If you turn on billable expenses, QuickBooks asks a follow-up question that quietly changes your job P&L: "Track billable expenses and items as income," with a choice between "In a single account" and "In multiple accounts." Leave it off and a rebilled cost lands back against the original expense account, netting to zero. Your project shows less income and less cost than actually happened. On a cost-plus job that can hide the entire pass-through volume from your revenue.
Step 3: Decide Projects or sub-customers before you convert anything
Both work. The conversion between them does not go backwards.
Projects give you the Projects dashboard, income and cost graphs, time cost tracking by employee or vendor, and dedicated project reports. Sub-customers give you per-job billing and shipping addresses, and unlimited nesting depth.
The constraints on Projects, per Redmond Accounting's February 2025 walkthrough of the feature:
- Projects support only one hierarchical level. There are no sub-projects.
- Projects inherit the parent customer's address. They do not get their own.
- Converting a sub-customer to a project is a one-time action that cannot be reversed, and addresses, contacts and tax codes do not transfer. They revert to the parent customer's settings.
- Only sub-customers that are one level deep, active, and set to bill with parent are eligible to convert at all.
The one-level limit is the one that bites specialty contractors. A bookkeeper on r/QuickBooks described being asked to job cost two $600,000 hospital jobs "by phase/floor/ wing and stairwell." QuickBooks Online cannot hold that natively. You get one level, and phases have to live in your item list or in classes, which report separately from the project.
Step 4: Set hourly cost rates before anyone logs an hour
QuickBooks Online offers two ways to get labor onto a job, and the choice has a hard deadline attached.
Actual payroll expenses arrive after you run payroll and carry wages, employer taxes and workers' compensation. They are accurate and they are late.
Estimated hourly costs multiply tracked hours by a per-employee hourly cost rate that combines wage, employer taxes, workers' comp and optional overhead such as jobsite supplies. They appear immediately.
Here is the sentence in Intuit's documentation that most setup guides skip: "Hourly cost rates only apply to time that is tracked after the hourly cost rate is set." The rate is not retroactive. Set it in week three and weeks one and two carry no estimated labor cost, permanently, unless you rebuild those timesheets.
Tip
Set the rate to your burdened cost, not the wage. A contractor on r/Contractor put it plainly: "start tracking your real labor cost per hour with burden in it, not just the wage. On cost plus work that one number moves the needle more than any software does." Wage-only rates are the most common reason a job reads profitable in QuickBooks and unprofitable in the bank account.
Salaried staff need timesheets too. Intuit's guidance is explicit that salaried employees must track hours for their cost to reach a project at all. A working owner who never fills a timesheet contributes zero labor cost to every job they touch.
Step 5: Build the item list, with the checkbox that makes it real
Cost codes in QuickBooks Online are items in the Products and services list. Create one per code, mapped to the appropriate cost of goods sold account.
The step that gets missed: tick "I purchase this product/service from a vendor." Without it the item has no purchasing information and no expense account, so it can only ever appear on a sales form. It will never carry a cost. Intuit's own item documentation and Foundation Software's job costing guide both flag this checkbox as the thing that turns an item into something you can cost against.
Keep the list short. The advice that shows up repeatedly from operators is that oversized code lists collapse into catch-all buckets within a season. A framing crew will use six codes honestly and forty codes badly.
The cost code trap nobody warns you about
Now the part that will save you a weekend. Every guide tells you to build a hierarchical cost code structure in Products and services. Almost none of them tell you what QuickBooks Online will report from it.
Project reports break costs down by account, not by item. The Project Overview shows income and costs by account with drill-through to transaction detail. There is no native report that gives you cost by item, grouped by job.
A user on r/QuickBooks migrating from Desktop laid out exactly what they needed: date, item, vendor, memo and amount, grouped by customer. Their finding: "The Purchases by Product/Service Detail report is close but it doesn't give me the ability to group by customer." That was a blocker on the migration.
This is the structural difference between QuickBooks and construction software, and a competing analysis of the Procore connector states it cleanly: Procore organizes costs by cost code, QuickBooks organizes them by expense account and job.
So build cost codes for consistency on purchase orders and estimates, but design your chart of accounts to carry the cost breakdown you actually want to read. If you want labor, material, subcontractor and equipment split per job, those need to be four cost of goods sold accounts, not four items. Otherwise you build a 40-code taxonomy that reports as one line called Job Materials.
QuickBooks tells you what a job cost after the invoices land. It cannot tell you which quotes are still open, which follow-up was missed, or what your close rate is by lead source, because it only ever sees customers who already paid. We build custom CRM systems that hold the lead, the quote, the job and the change orders as one record, then hand QuickBooks the accounting at the point the job is won.
Step 6: Create the project before the first cost hits it
This is the highest-leverage habit in the whole setup, and it is free.
From r/Contractor, an operator who ran QuickBooks Plus job costing for two years: "the key is setting up each job as a Customer in QB before any expenses hit, otherwise you spend way too much time going back to reassign transactions after the fact."
Retrofitting is possible: you open each transaction and add the project. In practice, on a business taking twenty receipts a week, nobody does it, and the first month of the job reads as if it cost nothing.
Step 7: Code every transaction as it happens
Bills, expenses, checks and credit card charges all carry a Customer/Project column once step 2 is done. Every one of them needs the project selected. Vendor bills need the item line if you are using cost codes, which is what the items table toggle was for.
Bank feed transactions are the usual leak. Categorizing from the banking screen is fast and it is where the project field gets skipped most often.
Step 8: Get time into the system daily, not on Sunday night
Labor is the only major job cost that depends on a human remembering something. Materials arrive with invoices, equipment arrives with rental receipts, subs arrive with bills. Hours arrive from memory.
The pattern operators describe is consistent. From an AV integration owner on r/Contractor: "my labor data going into QB was garbage. Paper timesheets with rounded hours, guys forgetting to write down which job they were on, me spending Sunday night keying it all in. Plus gave me better reports, but better reports on bad data isn't that helpful."
The stakes are set by the margin. SmartBarrel's analysis, citing CFMA, puts average construction net profit margins in the 3 to 7 percent range. At that margin one job's hours quietly running over is the difference between profit and loss, and the reports keep looking healthy right up until final reconciliation.
Step 9: Run the reports weekly, not at year end
The whole point of job costing is catching a job while you can still do something about it. From r/Contractor, on an 18 month run with Plus: "Had a bathroom remodel where I budgeted 120 labor hours and my guys were at 155 before I noticed. Without job costing I wouldn't have caught it until final reconciliation. On a $45K job that's real money walking out the door."
Weekly, per active job:
- Costs to date against your budgeted cost, by account.
- Labor hours to date against budgeted hours.
- Unbilled billable expenses sitting in the project.
- Committed costs not yet invoiced, which QuickBooks does not track, so this one is a note in your own sheet.
For the monthly view, pair project totals with a work in progress schedule, which QuickBooks Online will not produce for you at any tier.
What this setup still will not do
Be honest with yourself about the ceiling before you invest a quarter in it.
- Retainage. No field. You hold it in a separate item or account and track the balance yourself.
- Committed costs. Issued purchase orders and signed subcontracts do not appear as cost until they are invoiced. A job can look 60 percent spent with 90 percent committed.
- WIP and percentage of completion. Not in Plus, not in Advanced. A controller on r/QuickBooks running QuickBooks Online Advanced put it bluntly: "Advanced has project reporting, but it is pretty basic and it does not have WIP options."
- Phases and sub-jobs. One level, as covered above.
- Labor burden beyond the rate you type. Whatever you did not put into the hourly cost rate is not in the job cost.
The sharpest version of this critique came from a business banker on r/QuickBooks with a decade of small business clients: "Projects module in QBO is fine on paper but nobody doing real project work uses it seriously. Cost codes, WIP, committed costs should be first class objects, not tags stuck on an invoice."
That is overstated for a two-crew shop and roughly correct above about $5 million in revenue. Which is the real decision: QuickBooks Online job costing is good enough to tell a small contractor which jobs are eating labor, and not good enough to run a construction ERP. If you need the second thing, a job costing add-on or replacement is a cheaper answer than fighting Projects.
The 30 day pilot
Do not convert your whole customer list in one weekend. The best implementation advice from the threads is also the cheapest.
From r/Contractor: "Cheap way to find out: turn it on and run one active job through it for a month. Track hours and receipts on just that job, then compare the job P&L to what you figured the old way at the end. If the numbers match, your shoebox method is fine. If they are off, you just found real money."
Week 1: turn on Projects and the expense settings, set hourly cost rates, build ten items maximum. Week 2: create one project for one live job. Code everything on it, nothing else. Week 3: run the project profitability report mid-job. Check whether labor looks plausible. Week 4: close the job, compare the QuickBooks number to your own calculation, and find out where they diverge.
Then decide. If maintenance is the thing that kills it, you will know within four weeks, because that is the actual failure mode. As one contractor summarized it on r/Contractor: "The setup is the easy bit. The maintenance is what gets people: every transaction needs tagging to a job and a cost code, and the moment you fall two weeks behind, the reports are fiction and you're back to the receipts folder anyway."
Should you bother at all
One honest counterweight. If you run pure cost-plus work with no employees, the answer may be no. From r/Contractor: "Since you're Cost Plus, unless you have those particular issues, I would not bother job costing. It can be labor intensive to set up; you're trading the simplicity of using any program to tally project cost for invoicing to committing to use QB to enter against jobs; otherwise you're just duplicating work."
Job costing earns its keep when you have employees whose hours vary, when you bid fixed price, or when you want historical cost data to price the next job. If none of those are true yet, a budget versus actual column in a spreadsheet does most of it. Our longer take on when QuickBooks job costing is worth the setup covers that threshold.
The setup above is two hours of clicking. The decision it forces, which cost breakdown you want to read every week, is worth more than the clicking, and it belongs before you touch the settings rather than after your item list has grown to forty codes that report as one line.
