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.
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.
| Check | Where it lives | Automatic or manual |
|---|---|---|
| 1. Burden rate field | Standard ServiceTitan Job Costing | Manual entry per technician |
| 2. Flyout lock at export | Standard ServiceTitan Job Costing | Automatic — and irreversible after |
| 3. Payroll-timing gap | Standard ServiceTitan Job Costing | Depends on payroll entry timing |
| 4. Job-level P&L in QuickBooks | QuickBooks Online Plus/Advanced (Projects) | Requires the right plan tier |
| 5. Committed vs actual cost | ServiceTitan Projects module only | Not in standard residential Jobs |
| 6. Retainage | ServiceTitan + QuickBooks GL, mapped | One-time manual setup |
| 7. List reconciliation | ServiceTitan ↔ QuickBooks sync | Automatic 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.
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.
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.
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 →