Home  /  Blog  /  Job-Costing Checks
ServiceTitan · QuickBooks · Job Costing

7 Job-Costing Checks ServiceTitan Contractors Run Before Trusting a Margin Number

Top Builder AI Published August 14, 2026 Updated August 14, 2026 ~11 min read Crews Under 20 Techs Updated August 15, 2026
A contractor's desk with ServiceTitan and QuickBooks open side by side on a laptop, invoices stacked nearby

The 44-second version of the gap below, straight from ServiceTitan's own job-costing docs.

Because several of the numbers feeding that margin are manual, timing-dependent, or locked by ServiceTitan's own design. Its own help docs confirm technician burden rate is a field someone enters by hand, labor burden depends on the technician being in payroll the moment the job completed, and the job-costing flyout locks for good the moment an invoice posts and exports. Below are seven specific, separately documented checks — each sourced to ServiceTitan's or Intuit's own docs, or to a named tool's own pricing page — that a contractor running under 20 techs runs before trusting a job's margin number.

None of this is a knock on ServiceTitan's job-costing tool. It tracks labor, materials, and revenue against a job, and for a lot of shops that's genuinely enough. The point is narrower: which of the seven checks below are you currently skipping, and what does that cost when the margin number is wrong in the direction that feels fine.

1. Is Every Technician's Burden Rate Field Actually Filled In?

ServiceTitan's own Burden Rate documentation puts the field at Settings → People → Technicians → the tech's profile → Revenue & Cost — and directs the user to calculate the rate manually before typing it in. There is no auto-default. If that field is blank or three raises out of date for even one technician, every job that technician touches understates labor cost and overstates margin, with nothing on the job flagging it.

2. Do You Know the Exact Moment the Flyout Stops Listening?

ServiceTitan's own documentation for the Job Costing tool states plainly: "the job costing flyout locks once an invoice is posted and exported." That's a hard, binary event — not a fuzzy cutoff. A payroll correction, a late purchase order, or a burden-rate fix entered five minutes after export changes nothing about the number already sitting on that job.

Straight from ServiceTitan's own troubleshooting docs
"Labor burden relies on payroll data from when the job was completed"
If the technician wasn't in payroll yet at that moment, or payroll data needs refreshing, ServiceTitan's own documentation confirms their labor burden simply won't appear on the report — not a warning, just a missing line that reads as a cheaper job than it was.
Source: help.servicetitan.com, "Troubleshooting labor burden not reporting accurately in job costing."

3. Was Every Technician on the Job Actually in Payroll When It Completed?

This is the mechanism behind the stat above, and it's worth checking on its own: a new hire, a rehire, or a technician added to payroll a day late all produce the identical symptom — a job that looks unusually profitable because part of its real labor cost never posted. ServiceTitan's own documentation names this exact failure mode, which means it's a known, recurring gap, not an edge case.

4. Is Job-Level Profit and Loss Actually Reaching QuickBooks?

Intuit's own documentation for QuickBooks Online Projects is direct about a limitation of the more common alternative: "class tracking was unable to capture the cost of labor at the class level for employee payroll." Only the Projects feature ties time entries and payroll cost to a specific job — and Projects is a QuickBooks Online Plus or Advanced feature. A shop on Simple Start or Essentials, or leaning on Class tracking alone, is structurally missing job-level labor cost inside QuickBooks itself, independent of anything happening in ServiceTitan.

5. Do You See Committed Cost, or Only What's Already Been Billed?

ServiceTitan's own Budget vs Actuals documentation defines committed cost as money already tied up in a purchase order the vendor hasn't invoiced yet — distinct from actual cost, which is billed. That distinction matters because a job can look on-budget right up until three outstanding POs land at once. The catch: this Budget vs Actual view lives inside ServiceTitan's Projects module, its commercial/construction feature set. A crew running only standard residential Jobs doesn't get this view at all.

6. Is Retainage Actually Wired Into Your Chart of Accounts?

ServiceTitan's own documentation for retainage accounting instructs the user to add a new general-ledger account named "Retainage Receivable" in QuickBooks (or Intacct) and map it in the ServiceTitan pricebook before retainage tracks correctly. Skip that one-time setup and retainage on any job with a holdback silently misstates the job's real cost-to-revenue position — not because ServiceTitan can't handle it, but because nobody told it to.

7. Do the ServiceTitan and QuickBooks Lists Actually Match?

ServiceTitan's own reconciliation documentation states that "exact" and "strong" matches between ServiceTitan and QuickBooks records link up with no action required — but a mismatched GL account or a pricebook item name that doesn't read identically in both systems has to be corrected by hand before re-importing. The stronger the match, the more it's automatic; the weaker the match, the more it's someone's Tuesday afternoon.

CheckWhere it livesAutomatic or manual
1. Burden rate fieldStandard ServiceTitan Job CostingManual entry per technician
2. Flyout lock at exportStandard ServiceTitan Job CostingAutomatic — and irreversible after
3. Payroll-timing gapStandard ServiceTitan Job CostingDepends on payroll entry timing
4. Job-level P&L in QuickBooksQuickBooks Online Plus/Advanced (Projects)Requires the right plan tier
5. Committed vs actual costServiceTitan Projects module onlyNot in standard residential Jobs
6. RetainageServiceTitan + QuickBooks GL, mappedOne-time manual setup
7. List reconciliationServiceTitan ↔ QuickBooks syncAutomatic only for exact/strong matches

Every row here is either a manual field, a hard lock, or scoped to a module a residential-only crew may never see — none of it is a ServiceTitan defect, all of it is a place a margin number quietly goes wrong.

How we chose these seven

Each check above traces to ServiceTitan's or Intuit's own published documentation, opened directly, not a competitor's claim or an assumption about how the software "probably" works. We dropped anything we couldn't verify against a primary doc, and we kept each check to a distinct root cause — no repeating the same mechanism under a different heading. Published construction-accounting guidance puts the QuickBooks-alone threshold around $1M revenue and 10 techs, with gaps becoming expensive to ignore near $2-3M and 15-plus techs — most crews under 20 techs sit right at or just below that line, which is why this list is framed as checks to run, not a reason to replace either system.

What does one of these look like in practice?

The example below is illustrative, built to show the mechanism, not a client result.

Illustrative walkthrough — one job, two missing technicians
8% margin at export, closer to 2% once corrected
A $12,000 HVAC install shows an 8% margin in ServiceTitan's flyout at invoice export. Two of the technicians on that job were added to payroll a day after it completed, so their labor burden never posted before the lock. Corrected after the fact in QuickBooks, the real margin is closer to 2% — and nothing on the original flyout warned that burden was missing.
Illustrative example, not a client result.

What do named job-costing add-ons actually add?

A handful of tools exist specifically to close the burden-rate and payroll-timing gaps above, which is itself evidence the gap is real and common, not invented. Knowify's own pricing page lists a $329/month Advanced tier that "automatically assigns expenses to the correct project" with real-time WIP reporting; Werx's own feature page describes field hours flowing in "at your fully burdened rate — base pay plus taxes, benefits, insurance, and more" for $49/month flat; Dapt's own site describes connecting payroll providers like ADP, Paychex, Paycor, and Paycom directly to job cost, moving labor hours and rates in automatically. Each is solving a version of check #1 or #3 — none of them replace checks #4 through #7, which live on the QuickBooks and reconciliation side.

1
Audit burden rates on every active technician profile before the next payroll cycle, not after a job closes.
2
Confirm payroll entry timing for any new or rehired technician before their first job completes.
3
Check your QuickBooks plan tier if job-level P&L matters — Class tracking alone won't get you there.
4
Map any retainage GL accounts once, in both systems, before the next holdback job.
5
Review reconciliation exceptions — not just the exact/strong matches ServiceTitan already cleared for you.

Every stat above cites the 2025 Commercial Service Market Report ServiceTitan itself published: 45% of surveyed commercial contractors named rising labor and overhead costs a top headwind — a real reason margin visibility on a per-job basis matters more than a single trailing P&L, and part of why the checks above exist. Source: servicetitan.com/press/2025-commercial-service-market-report, Thrive Analytics survey of 1,000+ commercial owners/execs, May 2025.

How does this connect to the rest of the back office?

A margin number that's wrong in the flattering direction is a job-costing problem the moment it steers the next bid, not just an accounting footnote. The same discipline that catches a mispriced job also catches a drifted burden rate or an un-mapped retainage account. Financial reporting is one of eight agents in Top Builder AI's back-office stack; the companion piece on why the flyout number itself goes stale covers the invoice-lock mechanism in more depth, and the full back-office overview covers how the agents work together.

  • No shipped self-serve job-costing reconciliation agent today. This is a method, delivered as a configured install against a shop's real ServiceTitan and QuickBooks data, not existing software you sign up for.
  • No invented numbers. Every check traces to ServiceTitan's or Intuit's own documentation, or a named tool's own pricing/feature page.
  • Doesn't replace ServiceTitan's job costing or QuickBooks. Both keep running; these are the checks that make their numbers trustworthy.
  • A person still approves every correction. Nothing here auto-edits payroll, burden rates, or the chart of accounts.

See which of these seven your books are actually missing

Most shops have never run all seven checks against their real ServiceTitan and QuickBooks data at once. A fit call walks through what turns up in yours.

Book a fit call →

Frequently asked questions

Why can't I trust the margin ServiceTitan shows on a job?
Because several of the numbers feeding that margin are manual, timing-dependent, or locked by ServiceTitan's own design. ServiceTitan's own help docs confirm technician burden rate is a field someone enters by hand, labor burden depends on the technician being in payroll at the moment the job completed, and the job-costing flyout itself locks the moment an invoice is posted and exported -- after which nothing you fix updates the number you already looked at.
Is technician burden rate calculated automatically in ServiceTitan?
No. ServiceTitan's own how-to documentation for the Burden Rate field states it lives on each technician's profile under Revenue & Cost, and directs the user to calculate the rate manually before entering it. If a rate is blank or stale for any technician, every job that technician touches understates labor cost and overstates margin -- silently, with no warning on the job.
When does ServiceTitan's job-costing flyout stop updating?
At invoice export. ServiceTitan's own documentation for the Job Costing tool states directly that the flyout locks once the invoice has already been exported to accounting. Any payroll correction, missed purchase order, or late burden-rate entry made after that point never reaches the number the flyout already showed you.
Why does labor burden sometimes show as zero on a completed job?
ServiceTitan's own troubleshooting documentation names the cause directly: labor burden pulls from payroll data as of the moment the job was completed. If the technician wasn't yet added to payroll at that moment, or payroll data needs refreshing, the labor burden line simply doesn't appear on the report -- which reads as a cheap job, not a missing number.
Does QuickBooks Online track job-level profit and loss automatically?
Only with the right feature and the right plan. Intuit's own documentation states Class tracking cannot capture labor cost at the class level for payroll -- only the Projects feature ties time entries and payroll cost to a specific job, and Projects requires QuickBooks Online Plus or Advanced. A shop on Simple Start or Essentials, or using Class tracking alone, is structurally missing job-level labor cost inside QuickBooks itself.
Does ServiceTitan track committed cost versus actual cost on every job?
Only inside the Projects module -- ServiceTitan's commercial/construction feature set, not standard residential Job Costing. ServiceTitan's own how-to documentation defines committed cost as money on a purchase order the vendor hasn't invoiced yet, tracked against actual cost on a Budget vs Actual table, but that view is scoped to Projects. A crew running only residential Jobs never sees it.
Is retainage tracked automatically between ServiceTitan and QuickBooks?
No -- it requires a manual setup step in both systems. ServiceTitan's own documentation for project-tracking retainage instructs the user to add a new general-ledger account named 'Retainage Receivable' in both QuickBooks (or Intacct) and ServiceTitan's pricebook before retainage flows through to job costing correctly. Skip that setup and retainage silently misstates the job's real cost position.
Does ServiceTitan and QuickBooks reconciliation happen on its own?
Partially. ServiceTitan's own reconciliation documentation states exact and strong matches between ServiceTitan and QuickBooks records link up with no action required -- but anything weaker, like a mismatched GL account or a pricebook item name that doesn't match exactly between the two systems, requires a person to manually correct it before re-importing. The stronger the match, the more it's automatic; the weaker the match, the more it's a person's job.
At what point should a contractor add a dedicated job-costing tool instead of QuickBooks alone?
Published construction-accounting guidance puts the threshold around $1M in annual revenue and 10 technicians for staying on QuickBooks alone with disciplined cost codes, with the gaps becoming expensive to ignore somewhere between $2-3M in revenue and 15-plus techs. Most crews under 20 techs sit right at or just below that line, which is why these are checks to run and gaps to close, not a signal to rip out ServiceTitan or QuickBooks.
What do named job-costing add-on tools actually add on top of ServiceTitan?
Real-time, burden-inclusive job costing without waiting on ServiceTitan's manual burden-rate field or the invoice-export lock. Knowify's own pricing page lists a $329/month Advanced tier that auto-assigns expenses to a project and adds real-time WIP reporting; Werx's own feature page describes field hours flowing in at a fully burdened rate including taxes, benefits, and insurance for $49/month flat; Dapt's own site describes connecting payroll providers like ADP, Paychex, Paycor, and Paycom directly to job cost so labor hours and rates transfer automatically -- the exact payroll-to-job-cost gap ServiceTitan's manual burden rate leaves open.
What does one of these checks look like in practice?
This example is illustrative, not a client result. A $12,000 HVAC install job shows an 8% margin in ServiceTitan's flyout at invoice export. Two of the technicians on that job were added to payroll a day after the job completed, so their labor burden never posted -- the real margin, once burden is corrected after the fact in QuickBooks, is closer to 2%. Nothing about the flyout warned that burden was missing; the number just looked clean.
Does Top Builder AI have a shipped, self-serve job-costing reconciliation agent today?
Top Builder AI ships a real, deployed Financial agent connected to ServiceTitan and QuickBooks data, delivered through a Teardown and Install engagement against a shop's own numbers -- not a self-serve signup that reruns these seven checks unattended today. What's described in this post is the method: the specific, sourced places a margin number goes wrong before anyone downstream trusts it.