The 44-second version: ServiceTitan's own docs say job costing locks at invoice, and burden rate has to be entered by hand.
Not from the number on your screen while the job is still open. ServiceTitan's own help documentation states its Job Costing tool locks once you post and export the invoice, and the report is built from the invoice, not from individual appointments as the work happens. Until that invoice posts, the margin you're looking at is an estimate, and one of its biggest inputs, labor burden, has to be calculated and typed in by hand per technician or ServiceTitan's own documentation says it shows as zero dollars.
You've probably felt the disconnect already. A job wraps, the crew moves on, and two months later your bookkeeper or your accountant tells you the margin on that "good" job was thinner than it looked, or worse. ServiceTitan's own marketing describes a live dashboard that updates as costs come in. ServiceTitan's own help docs, the pages that describe what the actual tool does, tell a different story. This post walks through exactly where that gap sits, using ServiceTitan's own documentation and the accounting literature on why job margin visibility lags in the trades generally, and what closes it.
Does ServiceTitan's job costing report update in real time?
ServiceTitan's own marketing blog says it does. Its post on real-time job costing describes a dashboard of "total budget, actual cost to date, estimated cost to complete, projected final cost, projected margin," updated "as of the last timesheet entry, material receipt, or invoice posting," and frames the problem it solves in one sharp line: "Month-end job cost reports tell you what went wrong. They don't help you fix it while you still can."
That's the pitch. Here's what ServiceTitan's own help article for the actual Job Costing tool says the tool does: it is "based on the job invoice, not individual appointments," and payroll adjustments made after an invoice is posted and exported do not show on the job costing flyout, because it locks once the invoice is posted and exported. Performance pay, bonus and commission, is explicitly stated to be "only available in job costing after invoices are posted." Two descriptions of the same feature, both from ServiceTitan, and the second one is what the tool does on a Tuesday afternoon while your crew is still on site.
| What ServiceTitan says | Source | What it actually describes |
|---|---|---|
| Live dashboard, updated as costs come in | ServiceTitan marketing blog | A promise, no lock behavior mentioned |
| Job costing flyout locks once invoice is posted and exported | ServiceTitan help docs | The real mechanic of the shipped tool |
| Performance pay only available after invoicing | ServiceTitan help docs | Another invoice-gated field |
Sources: servicetitan.com/blog/real-time-job-costing and help.servicetitan.com, "Run the Job Costing tool". One-line takeaway: the marketing description and the shipped tool's own documentation don't agree with each other.
What does the invoice lock actually mean while a job is still open?
It means the number on your screen is a snapshot, not a feed. A technician's hours get corrected after the fact, a late material bill comes in, a change order gets added once the invoice already posted, none of it moves the report you already looked at. The report locked the moment the invoice was posted and exported, and ServiceTitan's own documentation is explicit that later payroll adjustments simply do not show up there.
That matters most on the jobs that run longer than a day, the ones where you'd actually want a mid-project check. A quick same-day service call rarely has time to drift. A multi-day install with a change order or two is exactly where the invoice-lock gap does the most damage, because the report you'd want to check while there's still time to catch a problem is the one that hasn't been generated yet.
Does ServiceTitan calculate technician burden rate for you?
No, and this is the single biggest manual step in the whole picture. ServiceTitan's own help article on calculating technician burden rates defines burden as "payroll and overhead costs for technicians," including payroll taxes, insurance, benefits, fuel, and related costs like meals and training. Those are all real, named cost categories. None of them get pulled in automatically. The article's instruction is direct: once you've calculated a technician's burden rate yourself, you can go add it to their profile under Settings, People, Technicians.
Historic burden-rate tracking, keeping a past job's labor cost tied to the burden rate that applied at the time rather than whatever rate is entered today, is a separate, non-default configuration on top of that. A rate change six months ago can quietly rewrite the apparent margin on every older job unless that setting was turned on from the start.
What breaks when you connect ServiceTitan to QuickBooks for job costing?
ServiceTitan's own QuickBooks Online integration guide lists a real chain of setup a contractor has to do before job-cost data lands anywhere useful: create GL accounts in QuickBooks, add account numbers, create chargeable-materials and equipment records, map every pricebook item to a QuickBooks GL account, and, if you want cost broken out by crew or division, create QuickBooks classes and manually map each ServiceTitan business unit to one. The same documentation states plainly that return transactions, inventory adjustments, and batch numbers do not export to QuickBooks Online at all, full stop, not partially.
On the QuickBooks side, Intuit's own support content draws a distinction worth knowing: Projects is QuickBooks Online's real job-level profit-and-loss tool, while class tracking is a simple tag, not a cost ledger, and there is no built-in tool to convert class-tracked data into a Project after the fact. A lot of contractors "doing job costing in QuickBooks" are actually using classes, a workaround, not the tool built for the job.
None of this is unique to any one contractor's setup. Multiple dated Capterra reviewers of ServiceTitan describe the same friction in their own words: one 2022 reviewer wrote of "3 failed attempts at merging with my quickbooks data base," another described "the background coding job from ST was not done well," and a 2018 reviewer called the QuickBooks bridge "a little clunky" with "holes in the reporting, especially projects." Individual reviews aren't a formal study, and dates matter, but they corroborate the same pattern the official docs describe: the sync needs real setup, and gaps in that setup show up as job-cost gaps.
What is the difference between committed costs and actual costs in ServiceTitan?
ServiceTitan's own Job Costing tool separates committed costs, purchase orders that are approved but not yet received or billed, from actual costs, costs that have actually landed. A job can look healthy mid-project purely because a real, already-incurred expense is still sitting as committed rather than actual, and it only shows up as a margin hit once that PO finally gets billed, which by ServiceTitan's own workflow description can happen well after the crew has left the site.
That's not a flaw exactly, it's a real accounting distinction most systems make. But it means "committed" and "actual" both have to be checked together to get an honest read on where a job stands, and the invoice-locked report only ever shows you the picture as of the last invoice, not the committed costs still sitting in the pipeline.
Is job-cost lag a documented problem outside ServiceTitan, or just a ServiceTitan issue?
It's documented broadly in construction accounting under a specific name: profit fade. Kittell Branagan and Sargent, a Vermont construction-accounting CPA firm, puts it plainly: "Construction projects rarely become unprofitable overnight," and "waiting until year-end to review profitability often means valuable opportunities for corrective action have already passed," which is why they recommend monthly WIP reviews specifically because standard reporting cadence runs too slow to catch fade in time. Doeren Mayhew, a national CPA and advisory firm, names faulty job costing as one of five recognized causes of profit fade, alongside inaccurate estimating and poor project management.
That's the honest context: this isn't a ServiceTitan defect specifically, it's an accounting pattern across the trades that a ServiceTitan-plus-QuickBooks setup doesn't automatically fix, because both systems, by their own documentation, are still built around a report that closes after the fact rather than a number that's trustworthy while the job is still open.
Are there other tools built specifically to solve real-time job profitability?
Yes, and their existence is itself proof the gap is real enough to build a company around. Knowify and Werx both market themselves as QuickBooks Online companions purpose-built for construction job costing, with Werx's own site promising a margin figure that's "always current, per project and across the company," language aimed directly at the lag problem. Dapt, a QuickBooks add-on, states outright that standard QuickBooks "operates as a post-project analysis tool rather than a real-time management system." None of these plug natively into ServiceTitan, so adopting one means running a second system alongside your field platform, not inside it.
What does this look like on one real job?
The example below is illustrative, built to show the mechanism, not a client result.
| Contract price | $12,000 |
| Raw technician wages logged | $4,100 |
| Materials logged | $3,800 |
| Burden rate entered for this technician | Not entered |
| Labor cost as shown (no burden rate) | Undercounted |
| Change-order ductwork, approved PO | Committed, not yet actual |
| What both gaps close to once invoiced | Thinner margin than the screen shows today |
How does Top Builder AI close this gap?
The Pricebook and Financial agents pull ServiceTitan's committed costs, actual costs, and technician pay data alongside QuickBooks, recompute a job's real margin using an entered or a reasonable estimated burden rate rather than waiting for someone to finish typing every technician's rate in by hand, and flag when a job's projected margin has moved past a set tolerance while the job is still open, not after the invoice locks the report.
Does this replace ServiceTitan's job costing or QuickBooks?
No. ServiceTitan stays the system of record for the job, the invoice, and the pricebook. QuickBooks stays the system of record for the books. Nothing about either changes. The agent reads what both systems already have, recomputes the margin using the real cost categories ServiceTitan itself defines, burden, committed versus actual, and surfaces a projected number while the job is still open, closer to what ServiceTitan's own marketing promises than what its own help docs currently deliver on their own.
- No edited records. ServiceTitan's job cost data and QuickBooks entries stay exactly as your team enters them.
- No invented numbers. Committed costs, actual costs, and burden all come from your real data or a burden default you configure, never a guess presented as fact.
- No blind self-serve signup. Delivered as part of a Teardown and Install, configured against your actual ServiceTitan and QuickBooks data.
- Connects to the rest of the back office. Pricebook, the Financial agent, and Workforce's labor-hour reconciliation all draw from the same underlying job data, so a margin flag and a labor flag on the same job tell a consistent story.
Check your own burden-rate setup this week
Open Settings, People, Technicians and see how many of your techs actually have a burden rate entered. A fit call walks through what a full margin recompute finds against your real ServiceTitan and QuickBooks data.
Book a fit call →