ServiceTitan + QuickBooks

Why Your ServiceTitan Job Costing Is Wrong

If your job margins look too good on some jobs and impossible on others, the software is not lying to you at random. It is failing in four specific, repeatable ways: labor burden that double counts, technicians whose labor cost calculates as $0.00, a job costing flyout that locks the moment an invoice is exported, and equipment and purchase order costs that are excluded by design. Every one of them is fixable once you know which one you have.

Start Here

The job costing flyout is an estimate, not a financial statement

ServiceTitan job costing takes the revenue on an invoice and subtracts what it believes the job cost you: technician labor, materials, and depending on your configuration, equipment and purchase orders. It presents the result in a flyout on the job, and it is genuinely useful for what it is. The trouble starts when an owner treats that number as accounting rather than as an operational estimate, because it was never built to be the former and it does not behave like it.

Here is the tell. Ask three people in your company what the gross margin was on a specific replacement job last month. You will get three answers. The service manager reads the flyout, the bookkeeper reads the P&L, and the owner reads a spreadsheet somebody built. All three are looking at real data and none of them agree, because each is measuring a different thing at a different moment with a different definition of cost.

That is not a training problem. It is structural, and the four causes below are the whole of it. Fix them and the three numbers converge. Ignore them and you will keep pricing your work off a margin that is wrong in a direction you cannot predict, which is worse than being wrong in a direction you can. If your revenue line is also off, the companion diagnosis is why ServiceTitan revenue does not match QuickBooks.

Why It Breaks

Six reasons your job cost number is not the truth

Most shops have three or four of these running at once, which is why the errors do not cancel out into something you could at least correct for.

01

Labor burden double counting

You set a burden rate to cover payroll taxes, workers comp, and benefits. But if the account ServiceTitan reads labor cost from already contains those payroll costs, applying a burden rate on top burdens the burden. Your labor cost inflates by the burden percentage on every hour, on every job, forever.

02

Labor cost calculates as $0.00

Labor cost comes from the technician's hourly rate. A technician with no hourly rate on file, which is common for performance-pay techs, costs $0.00 on every job they touch. The same report can therefore overstate one tech's cost by 22% and understate another's by 100%.

03

The flyout locks on export

Once an invoice is posted and exported to QuickBooks, the job costing flyout locks. Payroll corrections, added overtime, and commissions finalized after that moment never reach the job. The cost is frozen at whatever it was on export day.

04

Equipment cost is excluded by design

Equipment cost can be excluded from the job costing calculation deliberately, to avoid double costing the same item. Reasonable in principle. In practice it means your job is costed at your configured price book cost, not what the vendor actually charged you.

05

Purchase order cost is excluded too

The same exclusion applies to purchase orders. The vendor bill lands correctly in the general ledger while the job is costed off the item cost in the price book. The general ledger is right, the job is wrong, and the two will never reconcile on their own.

06

Gross profit percentage is not in the report

You get revenue and you get cost, but gross profit percentage and COGS as a percentage of revenue are not calculable inside the report. So everyone exports to Excel, and the number the owner steers the company by becomes one person's spreadsheet with no version control and no audit trail.

Trusted by 25+ Contracting Businesses
The Labor Errors

Two labor mistakes that point in opposite directions

Labor is the largest cost on most home services jobs and it is where both of the biggest errors live. What makes this so hard to catch is that the two errors push the number in opposite directions, so in aggregate they partially offset and the total looks plausible. Job by job, it is chaos.

Error one: you are burdening the burden

Take a technician paid $30 an hour. Employer payroll taxes, workers compensation, and benefits run about 22%, so the true loaded cost of that hour is $36.60. Now suppose the general ledger account ServiceTitan reads labor cost from already includes the employer payroll cost, because that is where payroll posts it. The account already says $36.60. Then you configure a 22% burden rate on top, because that is what your burden is.

ServiceTitan now costs that hour at $36.60 times 1.22, which is $44.65. You have invented $8.05 an hour of cost that does not exist. Run 1,500 technician hours in a month and you have manufactured roughly $12,000 of phantom cost. Your margins look thin, so you raise prices you did not need to raise, or you kill a service line that was actually making money. The rule is simple and almost nobody follows it: if the account already includes payroll costs, the burden rate must exclude them. Burden the gap, not the whole thing.

Error two: the technician who costs nothing

The reverse error is worse because it flatters you. Job costing pulls the technician's hourly rate to compute labor cost, and a performance-pay technician often has no hourly rate on their profile because they are compensated on commission. Labor cost calculates as $0.00. That tech's jobs show margins in the seventies and nobody questions a good number.

Then the commission that actually paid them never reaches the job either, which we cover in ServiceTitan technician commissions. So the job carries zero labor cost and zero selling cost, and it is one of the jobs your best closer is bringing in. Your most flattering jobs are your least accurate ones. Set an effective hourly rate on every technician, including commission-only staff, or the report is not measuring labor at all.

What Is Counted

What the job costing flyout includes, and what it quietly leaves out

Before you argue with the number, know what the number is made of. Several of these exclusions are deliberate design decisions, not defects, and they are still going to wreck your margin analysis if you do not account for them.

Cost elementIn job costing?The catch
Technician labor hoursYesOnly if the technician has an hourly rate. No rate means $0.00.
Labor burdenYesDouble counts if the source account already contains payroll costs.
Materials on the invoiceYesCosted at the configured item cost, not necessarily the vendor bill.
Equipment costOften noExcluded by design to avoid double costing the same item.
Purchase order costOften noSame exclusion. The bill hits the general ledger, not the job.
Commissions and spiffsUsually noPaid after the invoice exports, so the flyout is already locked.
Post-export payroll correctionsNoThe flyout is locked. The correction never arrives.
Gross profit percentageNoNot calculable in-report. Export to Excel, and inherit the risk.
The Timing Trap

The flyout locks, and payroll runs later

This is the one people find hardest to believe until they check it, so check it. The job costing flyout locks once the invoice is posted and exported. After that, adjustments to labor do not flow back into the job cost.

Now overlay your actual calendar. The job finishes Tuesday. You invoice immediately, because you want the cash and because collecting at the door is the whole point. Thursday the batch exports to QuickBooks and the flyout locks. The following Monday payroll runs, and that is when the timesheet corrections happen: the tech forgot to clock two and a half hours, the overtime got recalculated, the commission on the sale was finalized, the helper hours got moved to the right job.

None of that reaches the job. Ever. The cost on that job is permanently frozen at the Thursday snapshot, and it is missing exactly the labor that was added after the fact.

And the errors are not random

Here is the part that turns an annoyance into a real problem. Post-invoice labor adjustments are not evenly distributed. They cluster on the messy jobs: the callbacks, the ones that ran long, the ones where a second tech had to be dispatched, the ones where overtime got approved. Which means the jobs whose cost is most understated are the jobs that hurt you the most. Your job costing report is systematically kindest to your worst jobs. That is not noise you can average out. It is bias, pointed at exactly the decisions you most need to get right.

The judgment call nobody makes

There are only two honest ways out, and you have to pick one. Either you sequence the close so payroll is finalized before invoices export, which is clean but delays your cash and almost no shop will actually do it. Or you accept that the flyout is an operational estimate and you maintain true job cost in the books, where post-export adjustments still land, and you tell everyone which number is the real one.

Most shops between $5M and $30M land on the second, and that is a perfectly defensible answer. What is not defensible is believing you have one job cost number when you have two, and switching between them depending on which one supports the decision you already wanted to make. The export sequencing that governs all of this is part of the ServiceTitan and QuickBooks integration setup, and it is worth getting deliberate about.

Trusted by 25+ Contracting Businesses
The Honest Limits

What ServiceTitan job costing cannot do, no matter how you configure it

We would rather tell you where the ceiling is than sell you a configuration project that runs into it anyway. These are boundaries, not bugs.

It has no general ledger. In a QuickBooks-integrated setup QuickBooks is the book of record, so the flyout can never be the source of a financial statement.
It cannot see anything that happens after the invoice exports, which includes most payroll corrections and effectively all commission.
It costs materials off your configured item cost, so if the price book is stale, your job cost is a price list rather than a cost.
It does not calculate gross profit percentage or COGS percentage in-report, which forces the Excel export that then becomes a single point of failure.
It does not allocate overhead. A job showing 55% gross margin is not a job earning 55%, because your unapplied overhead is not in that number.
It cannot distinguish an intentional callback investment from a job that simply went wrong, because both look like unbilled labor that arrived too late to count.
It will never reconcile to QuickBooks job by job. Reconcile in total by month by business unit, which is achievable, and stop trying to force the job-level tie.
The Fix

How to get a job cost number you can defend

This is the order we work in. Doing it in a different order mostly wastes time, because the later steps depend on the earlier ones being true.

1 Give every technician an hourly rate, including the commission-only ones

Nobody costs $0.00. For performance-pay technicians, set an effective hourly rate based on their trailing loaded pay divided by their hours. It will not be exact and it does not need to be. It needs to not be zero. This one change usually moves reported margin on a meaningful share of jobs, and it moves it in the direction of reality.

2 Fix the burden rate against what the account actually contains

Open the general ledger account ServiceTitan reads labor from and look at what is genuinely in it. If employer payroll taxes and workers compensation are already posting there, the burden rate must exclude them and cover only what is missing, such as benefits and vehicle cost. Burden the gap, not the whole thing, or you inflate every hour you sell.

3 Decide which system is your job cost system of record

Say it out loud and write it down. If it is ServiceTitan, you must finalize payroll before exporting invoices, and you must accept the cash delay. If it is QuickBooks, the flyout becomes an operational estimate for the field and the books carry the real number. Either answer works. Not answering is what does not work.

4 Reconcile job cost to COGS monthly, in total

Stop trying to tie job by job, because the exclusions make that impossible by design. Instead reconcile total job cost from ServiceTitan against total COGS in QuickBooks each month, by business unit. The difference should be explainable in a handful of buckets: excluded equipment and purchase orders, post-export payroll, and commission. If it is not explainable, that is the finding.

5 Build the margin report from the books, not from Excel

Once cost and revenue reconcile by business unit, gross margin by business unit, job type, and technician can be built from reconciled general ledger data rather than a hand-maintained spreadsheet. Now the number survives the person who built it leaving, which is the actual test of whether you have a report or a habit. This is what ServiceTitan bookkeeping services is for.

Find out which of the six you have

Send us a month of job costing data and your labor and burden configuration and we will run a free Audit against your general ledger. We will tell you whether your burden is double counting, which technicians are costing $0.00, and how much cost the export lock is leaving off your jobs. You keep the findings whether you hire us or not.

FinTruction works remotely with HVAC, plumbing, electrical, and roofing contractors across the United States running ServiceTitan. If the job costing mess is part of a bigger one, start with ServiceTitan and QuickBooks cleanup, and see how the pieces connect on the ServiceTitan hub.

Get a Free Job Cost Audit
Answers

Frequently Asked Questions

Why is my labor cost $0.00 on a ServiceTitan job?

Job costing pulls labor cost from the technician's hourly rate. If the technician has no hourly rate on their profile, which is common for performance-pay technicians compensated on commission, labor cost calculates as $0.00 and every job they touch shows an inflated margin. The fix is to set an effective hourly rate on every technician, including commission-only staff, based on their trailing loaded pay divided by their hours. It will not be exact. It needs to not be zero.

What is labor burden double counting in ServiceTitan?

It happens when the general ledger account ServiceTitan reads labor cost from already contains employer payroll costs, and you then apply a burden rate on top of that. You are burdening the burden. A technician at $30 an hour with 22% of employer taxes and comp truly costs $36.60, but if the account already reflects that and you apply another 22%, ServiceTitan costs the hour at $44.65. The rule is that if the account already includes payroll costs, the burden rate must exclude them.

Why do payroll adjustments not show up in job costing?

Because the job costing flyout locks once the invoice is posted and exported to QuickBooks. Most shops invoice at the door and export within days, while payroll finalizes the following week. Every timesheet correction, approved overtime, reallocated helper hour, and commission finalized after that export never reaches the job. The cost is permanently frozen at whatever it was on export day, and those late adjustments cluster on the messy jobs, so your worst jobs are the ones most understated.

Why are equipment and purchase order costs missing from job costing?

They are frequently excluded by design, to avoid double costing the same item once as a material line and again as a purchase order. That logic is sound, but the practical consequence is that the job is costed at your configured item cost from the price book rather than at what the vendor actually billed you. The vendor bill hits the general ledger correctly, so the general ledger is right and the job cost is wrong, and the two will never reconcile on their own.

Why can I not see gross profit percentage in the job costing report?

The report gives you revenue and cost columns but does not calculate gross profit percentage or COGS as a percentage of revenue inside the report itself, so almost every shop exports to Excel and builds it by hand. That is fine until you notice that the number the owner runs the company on is now a spreadsheet maintained by one person, with no version control and no audit trail, that breaks the day they leave. Build the margin report from reconciled general ledger data instead.

Should ServiceTitan or QuickBooks be my job cost system of record?

Either can be, but you have to choose and say it out loud. If ServiceTitan is the system of record, you must finalize payroll before exporting invoices so the flyout captures true labor, which delays your cash. If QuickBooks is the system of record, the flyout becomes an operational estimate for the field and the books carry the real number. Most shops between $5M and $30M end up with the second, and that is defensible. What is not defensible is believing you have one number when you actually have two.

Can I make ServiceTitan job cost reconcile to QuickBooks job by job?

Realistically, no, and chasing it wastes months. The exclusions are structural: equipment and purchase order costs may be left out by design, the flyout locks on export, and commissions are usually paid afterward. What you can do is reconcile total job cost to total COGS every month by business unit, with the difference explained in a few known buckets. If that difference cannot be explained in a handful of buckets, that is your finding.

Does ServiceTitan job costing include overhead?

No. Job costing shows direct cost against invoice revenue, so a job displaying 55% gross margin is not a job earning 55%. Your unapplied overhead, including office staff, rent, software, marketing, and unbilled truck time, is not in that number. Owners routinely mistake gross margin on the flyout for profit, then wonder why a year of strong job margins produced a thin net income. Overhead allocation is an accounting exercise, and it belongs in the books.

How does FinTruction fix ServiceTitan job costing?

We audit the labor rates and the burden configuration against what the general ledger account actually contains, set effective rates on technicians who are costing $0.00, establish which system is the job cost system of record, and reconcile total job cost to COGS monthly by business unit. Then we rebuild gross margin reporting from reconciled books so it does not live in one person's spreadsheet. We work remotely with home services contractors across the United States.

Proof

What Contracting Owners Say

Real results from contractors we have helped untangle their books and systems.

Rated 5.0 on Google

Trusted by 25+ construction businesses nationwide

Procore Listed on theProcore Network

They didn’t just record transactions and call it a day. They built a custom chart of accounts around how a remodeling company actually runs, did a full catch-up on years of bookkeeping inside QuickBooks Online, and now stay on top of my monthly bookkeeping and payroll. Every step, they broke it down in simple terms instead of burying me in accountant talk.

Oniel Campbell, Founder of Moonz Contracting
Oniel Campbell
Moonz Contracting Founder

FinTruction rebuilt the whole thing from the ground up, with real job costing, work in progress, and retainage. They didn’t just hand me reports and disappear; they walked me through my numbers until I understood them.

Carl Moore, Owner of Hearth & Haus
Carl Moore
Hearth & Haus Owner
Dalton Mayberry, Owner of ProperCoat Painting
Sahil and his team handle the bookkeeping and job costing for my painting business. They cleaned up my books and set up integrations that give me accurate, timely job costing with solid weekly data. Reliable, detailed, and genuinely invested in getting the numbers right.
Dalton Mayberry
ProperCoat Painting
Owner

FinTruction is the only bookkeeping team we’ve found that truly understands construction accounting and WIP reporting. They aligned our income and costs across 21 jobs and gave us full, monthly transparency. Fast, accurate, and an indispensable partner.

John Wesley Sebastian, President of B&B Concrete
John Wesley Sebastian
B&B Concrete President

When I came to FinTruction I had no financial structure. No job costing, no WIP tracking, books behind. They did a full cleanup and rebuilt job costing and WIP tracking in QuickBooks. Now I know what’s billed, what’s owed, and where every job stands.

Clay Pearson, Owner of C. Pearson Contracting Corp
Clay Pearson
C. Pearson Contracting Corp Owner
Client testimonial

Hear it straight from a contractor we work with

A couple of minutes from a contractor we support, sharing what working with FinTruction has been like and what changed once their numbers finally made sense.

  • An owner sharing their honest experience
  • From guessing to numbers they actually trust
  • Why they recommend us to other contractors
Read more reviews

Get a job cost number your whole team agrees on

Tell us how your labor rates and burden are set up today and we will show you which of the six errors you are carrying and what they are doing to your margins. No obligation.

Trusted by 25+ contracting companies Response within 24 hours Free Audit, no obligation
Start here

Get your ServiceTitan books audited, free

Tell us what is broken between ServiceTitan and your books. We will look at your actual data and show you exactly where the numbers diverge, at no cost.

Add your name so we know who we are talking to.
Add your company name.
Add a valid email so we can send your report.
Add a number we can reach you on.
Pick the option that fits your business.
Tell us what is going wrong so we know where to look.

We read every submission and reach out if your books are a good fit for the Audit.