Systems & software
QuickBooks job costing for subcontractors: what it does well, where it stops, and what to put in front of it
For the office manager or controller who already runs QuickBooks and is being asked why job cost never looks right.
Almost every commercial specialty sub we talk to runs QuickBooks, and almost every one of them has the same complaint: job cost is always wrong, or always late, and nobody can say exactly why.
The answer is usually not that QuickBooks is bad at job costing. It is that a sub is asking it to be three systems at once, and it is only one of them. Here is where the line actually falls.
What QuickBooks genuinely does well
Credit where it is due. For a subcontractor, QuickBooks Online or Desktop is a perfectly good accounting system, and specifically:
- It is the book of record. Your P&L, your balance sheet, your tax return, your bank reconciliation. Nothing should replace it, and anyone who tells you to is wrong.
- It can attribute cost to a job. Customers and sub-customers, or Projects in QBO Plus and Advanced, let a bill, a check or a payroll line land against a job. That is real job costing and it works.
- Items and classes give you a cost breakdown. With discipline, you can get cost by phase, not just cost by job.
- It handles AP properly. Vendor bills, terms, aging. Your suppliers and your lower-tier subs live there and should.
- Payroll flows into cost if you run payroll inside it or sync it, which is how most subs get labor into the job at all.
If a bookkeeper has set up items and sub-customers carefully, QuickBooks will tell you what a job has cost. That part is not the problem.
Where it stops, and why it feels like a QuickBooks problem
The problem is that “what has this job cost” is only one of the four numbers a sub needs, and QuickBooks structurally cannot hold the other three.
1. It has no schedule of values
This is the big one. QuickBooks has an invoice. A commercial sub does not bill invoices — it bills lines against a contract value, cumulatively, with retainage held and a stored-materials line, month after month, and the whole exercise only makes sense in relation to what was billed before.
You can approximate it. People do, with estimates and progress invoicing, and it half works until the first change order. What you cannot get out of it is the thing you actually need: this line’s scheduled value, billed to date, this period, percent complete, retainage held — for every line, on demand, for every job. That is a schedule of values, it is the spine of commercial billing, and it is not an accounting object.
2. It knows nothing about a change until it is a signed number
QuickBooks sees a change order when you invoice it. It has no concept of:
- work directed but not priced;
- priced but not submitted;
- submitted but not approved;
- approved verbally and still unsigned.
For most subs that pipeline is where a serious amount of money sits, and it is invisible to the accounting system by design. A controller looking only at QuickBooks will report a job’s margin without, say, $200,000 of pending exposure that decides whether the margin is real.
3. Committed cost is invisible
Your job has cost what QuickBooks says it has cost. It has also committed a good deal more: the gear on order, the lower-tier sub under contract, the material released but not invoiced.
A bill that has not arrived is not a bill, so QuickBooks correctly does not show it — and that correctness is exactly the problem, because the money is already gone. It is one of the most common causes of a job that looks fine in September and is upside down in November. It is the whole subject of the purchase order process for subcontractors.
4. Labor hits late and arrives unburdened or wrongly burdened
Payroll lands in QuickBooks on a payroll cycle. On a two-week cycle, mid-month job cost is missing up to two weeks of labor, which on a labor-heavy trade is most of the cost. And the rate that lands is whatever your payroll setup attributes — frequently base wage plus some burden, rarely the fully burdened number you would actually use to price work. Getting that number right is its own exercise: how to calculate labor burden rate.
The four numbers, and who should hold each
| Number | Where it belongs |
|---|---|
| What the job has cost | QuickBooks (actuals), surfaced against the job |
| What the job has been billed and will bill | Your schedule of values and draw log |
| What is pending and unsigned | Your change order and T&M record |
| What is committed but not yet invoiced | Your purchase orders |
Three of those four are operational records, not accounting records. The reason job cost “never looks right” is almost always that three of them live in a workbook, and the workbook is reconciled to QuickBooks once a month by one person who understands both.
Four fixes inside QuickBooks that are worth doing anyway
Before changing anything structural, there is real money in tightening what you already have.
Use sub-customers or Projects consistently, with no exceptions. One job billed directly to the parent customer breaks every report you run for the rest of the year. This is the highest-value hour a bookkeeper can spend.
Keep the item list short and make it match how you actually bid. If you bid in four phases, cost in four phases. A fifty-item list nobody can remember gets used wrong, and cost by phase becomes cost by whoever coded the bill.
Never let a bill in without a job on it. An unassigned bill is cost that silently moves to overhead, which flatters the job and hurts the company. Make it a rule at entry, not a cleanup task.
Reconcile committed cost monthly, even on paper. If POs live in a spreadsheet, at least compare open POs against the job’s remaining budget once a month. It is crude and it still catches the November surprise in September.
What about the GC’s system?
Worth clearing up, because it confuses the question. Your GC’s platform — Procore, or whatever they use — is not an alternative to any of this. It holds the project’s record, shared with everyone on the job, and it is good at that. It does not hold your contract value across every GC, your cost, or your pending exposure, and it disappears when the job closes. We wrote about that split in Procore for subcontractors.
So the stack is not “QuickBooks or the GC portal.” It is: the GC’s system for the project, your accounting system for the books, and something in the middle that is yours — which most subs fill with a workbook.
How SubMark fits — and what it does not do
SubMark is built to be that middle layer for a commercial specialty sub, and it is deliberately not an accounting system.
What it holds:
- One schedule of values per job, which locks when the first draw is submitted, with approved change orders added to it automatically.
- Draws tracked through Draft, Drawn, Certified and Received, with retainage held per draw, across every GC in one table, plus a draw calendar carrying each job’s draw cutoff and due dates.
- Change orders with status and aging, so pending exposure is a screen rather than a guess, and T&M tags priced off your own rate lists and e-signed on site, with several tags converting into one change order.
- Purchase orders, so committed cost is visible against the job.
- Job costing with labor, material and subs against the job. Labor is costed at the wage rate on each time entry, not a burdened rate, and cost is not broken down by cost code — so tracking hours by job and cost code is still worth doing wherever your payroll lives.
How it works with QuickBooks Online, precisely:
- Bills and purchases pull in automatically — hourly, once you turn auto-pull on — so bill and purchase lines coded to a customer:job in QuickBooks sit against the linked job in job costing without anyone retyping them. Payroll and journal entries do not come across.
- Draws push to QuickBooks Online as invoices, and purchase orders push too — with a click, one at a time. Deliberately. Nothing leaves for your books until a person decides it should.
And the limits, because they are the reason to trust the rest:
- It is not your general ledger, your payroll or your tax return. QuickBooks stays.
- It does not produce the owner-standard payment application or continuation sheet as a PDF, and that is not on the roadmap. If your GCs require that format, here is the honest version of how SubMark fits alongside it.
- T&M hours do not feed job-costing actuals. The tag is a billing document; cost comes from your cost records.
- Your outgoing lien waivers are tracked, not generated — which are signed, which went to the GC, which the GC has received, and which draw each one belongs to.
- There is no Procore, Textura or GCPay integration. You submit where each GC requires and record what you submitted.
One company subscription covers your first few office users, then it is per office user. Field users and the subs you invite are free and unlimited. The pricing page carries the figures, which is the only place we quote them so they cannot drift out of date here.
The short answer
Keep QuickBooks. It is your book of record and it costs a job properly once it is set up properly.
Stop asking it to be your schedule of values, your change order pipeline and your committed-cost report, because it was never built to be any of the three. If those three currently live in a workbook, that workbook is your project management system — and it is worth knowing what it is costing you to maintain it.
QuickBooks is a registered trademark of Intuit Inc. SubMark is not affiliated with or endorsed by Intuit. Integration details describe SubMark’s QuickBooks Online connection as of October 2026.