ServiceTitan + QuickBooks

Why Your ServiceTitan Inventory Value Stopped Matching QuickBooks

Your inventory asset account climbs every month while the warehouse shelves look emptier than they did last year. That is not a paradox and it is not theft. It is a wrong unit price on one vendor bill that permanently shifted the weighted average cost of a part, technicians marking materials used without ever allocating them out of stock, and a batch export running in the wrong order. All three are mechanical, and all three are findable.

Start Here

You are running perpetual inventory in two systems at once

Before any of the specific failures, understand the design problem underneath all of them. ServiceTitan maintains a perpetual inventory: it tracks quantities by location, it holds a weighted average cost per SKU, and it recalculates that average every time a part comes in. If QuickBooks is also carrying inventory items with their own quantities and their own cost basis, then you have two perpetual inventory systems, fed by different transactions arriving at different times, each maintaining its own moving average.

Two independent moving averages will diverge. It is not a question of whether, only of how fast and by how much. Most shops respond to the divergence by reconciling harder, which is like bailing faster. The divergence is not a discipline problem. It is baked into the architecture the moment you decided both systems would carry inventory.

So there are really two conversations on this page. The first is about the four specific mechanical errors that make your numbers wrong, and those are worth fixing regardless. The second is about the structural decision underneath them, which is choosing a single inventory system of record. Skip the second conversation and you will be having the first one forever. If your books are broadly out of shape and inventory is just one symptom, the wider fix is a ServiceTitan and QuickBooks cleanup.

Where It Drifts

Four ways parts, trucks, and purchase orders break your books

Each of these is small on any given day. That is precisely why they are still running. Nothing here is dramatic enough to trigger an investigation until the year-end count comes in.

01

One wrong price permanently shifts the average

A single vendor bill with the wrong unit price permanently shifts the weighted average cost for that SKU. The average is a running calculation over your receipt history, not a stored price you can retype. Correcting the bill afterward does not un-ring the bell for every unit already consumed at the poisoned cost.

02

Materials used but never allocated

A technician can mark materials as used on a job without allocating them from a truck or the warehouse. The cost hits the job, but no quantity ever leaves inventory. So you have expensed the part and you are still carrying it as an asset. That is the single most common reason your inventory value climbs while the shelves empty.

03

The batch exported in the wrong order

Bills must export before invoices. Bills carry the cost that brought the part in. Invoices carry the consumption of it. Reverse the order and the part is consumed at the average from before the receipt, so the cost of goods sold on that job is wrong and the correction lands in the wrong month.

04

Truck stock is invisible

For most shops there is more inventory value rolling around on trucks than sitting in the warehouse, and it is still your asset. If replenishment is not recorded as a location transfer, parts get expensed twice or never. And a physical count that excludes the trucks, which is most of them, is not really a count.

Trusted by 25+ Contracting Businesses
The Poisoned SKU

How one bad vendor bill contaminates a part forever

Weighted average cost is the standard method for valuing parts in this kind of business and it is a sensible one. The danger is that people think of it as a price sitting in a field. It is not. It is the output of a calculation over everything you have ever received, and that changes what happens when you make a mistake.

The version that gets caught

You have 10 condensers on hand at $1,800 each, so $18,000 of value. A bill arrives for 5 more, and someone keys the extended total into the unit price field: $18,000 each instead of $1,800. ServiceTitan now holds 15 units valued at $18,000 plus $90,000, so $108,000, and the weighted average becomes $7,200 a unit. The next job that installs one of these gets costed at $7,200 and shows a catastrophic loss.

This version gets caught, because a job with a negative margin of several thousand dollars gets somebody's attention. Someone voids or corrects the bill. But notice what does not fix itself: the units already consumed at $7,200 were costed at $7,200, and those jobs stay wrong unless you go back and re-cost them. Meanwhile the correction may or may not restore the average to $1,800, depending on how it is booked, because you are adjusting a running calculation and not overwriting a field.

The version that does not get caught, and this is the real problem

Now the same mistake, smaller. The condenser actually cost $2,340 and it was keyed as $2,034. A transposition. The average moves by a few dollars a unit. Nobody notices, because nothing looks wrong. There is no negative margin, no alarm, no investigation. The average simply sits a little bit low, and it stays low, and every job that consumes that part from now until you fix it is costed slightly under.

Then it happens again on a different SKU, and again, over two years, across a few hundred parts. What you end up with is an inventory valuation that is a slow accumulation of small typos, with no practical way to identify which SKUs are contaminated, because none of them look wrong individually. The big error is a bad day. The small errors are the ones that quietly move your gross margin and end up in every job costing report you have. That is the same reason your ServiceTitan job costing does not agree with your general ledger.

The control that catches this is unglamorous and it works: on every receipt, compare the unit cost being keyed against the trailing average for that SKU, and flag anything that would move the average by more than a set percentage. It takes seconds, and it stops the contamination at the door instead of hunting it down two years later.

Diagnose It

What you are seeing, and what is actually causing it

Inventory problems present as accounting symptoms long before anyone connects them to a parts process. Find your symptom, then go look where the right column says to look.

What you are seeingWhat is actually happeningWhere to look
Inventory asset climbs every month while the shelves emptyMaterials marked used on jobs but never allocated out of stock. The cost hits the job and the part stays on the balance sheet.Jobs with material cost but no inventory allocation
One job shows an absurd lossA wrong unit price on a vendor bill shifted the weighted average for that SKURecent vendor bills for the parts on that job
Gross margin swings for no operational reasonBills exporting after invoices, so consumption is costed at the pre-receipt average and the correction lands in the next periodThe batch export order for the month
The physical count is always shortTruck stock never counted, or replenishment never recorded as a location transferOn-hand quantity by location, warehouse versus trucks
QuickBooks inventory value does not equal ServiceTitanTwo perpetual inventory systems running two independent moving averagesWhether QuickBooks is carrying inventory items at all
Year-end adjustment is a large unexplained plugAll of the above, accumulated, resolved once a year with a journal entry nobody can supportLast year's inventory adjusting entry, and the reason written on it
Timing And Location

Export order and truck stock, the two things nobody documents

Bills before invoices, every time

The batch export sends bills, invoices, payments, and adjustments to QuickBooks, and the order is not cosmetic. A bill is what brings a part into inventory at a cost. An invoice is what consumes it. If an invoice for a job exports before the bill for the parts that job used, the consumption is valued at whatever the average was before the receipt landed, which is the wrong cost.

The result is a cost of goods sold figure that is wrong in the current period and a compensating correction that shows up in a later one. Do that once at a month end and your gross margin for the month moves for reasons that have nothing to do with how you actually performed. Then you spend a management meeting explaining a margin swing that is a pure artifact of export sequencing. The correct order is bills and inventory receipts first, then invoices, then payments, and it should be written down rather than living in the head of whoever runs the export. The full sequence is part of getting the ServiceTitan and QuickBooks integration right.

Trucks are where inventory goes to die

Most shops carry more value on their trucks than in their warehouse, and every part on every truck is still an asset on your balance sheet. Two things go wrong. First, if warehouse-to-truck replenishment is not recorded as a location transfer, the accounting is guesswork: the part is either expensed when it leaves the shelf and expensed again when it is used, or it is never expensed at all.

Second, and more damaging, is the count. Nobody can count a truck that is on a call, so trucks get skipped, and a physical count that excludes the largest pool of inventory you own is not a count. It is a partial count that you then use to justify a full adjustment. The workable answer is not a heroic company-wide count on December 31. It is a rotating cycle count that brings a handful of trucks in every week, on a schedule, so that over a quarter every truck has been counted and the count actually means something.

Trusted by 25+ Contracting Businesses
The Control

The monthly inventory control that keeps the two systems tied

None of this is heavy. It is roughly an hour a month once it exists, and it replaces the year-end adjusting entry that nobody can explain.

Run the ServiceTitan inventory valuation report as of the last day of the month and compare that single total to the inventory asset account in QuickBooks. One number against one number.
Pull every job with material cost but no inventory allocation. This one list usually explains most of the gap between your books and your shelves.
Review vendor receipts for unit price outliers: any cost that would move a SKU's trailing average by more than a set percentage gets a second set of eyes before it posts.
Confirm the batch exported in the correct order for the period. Bills and receipts first, then invoices, then payments.
Look at on-hand quantity by location, warehouse versus trucks, and confirm that replenishment posted as a transfer rather than as an expense.
Watch the trend line on the inventory asset account. If it climbs month after month while revenue is flat, that is not growth. That is unallocated material.
Book any adjustment to inventory with a written reason. A plug with no explanation is the entry a buyer will ask about first.
Cycle count a few trucks every week rather than attempting one heroic count a year that everybody dreads and nobody trusts.
The Fix

How to get the two systems telling the same story

The order matters. Fixing the poisoned SKUs before you have decided which system owns inventory just means fixing them twice.

1 Pick one inventory system of record, and it is probably ServiceTitan

Receipts, transfers, truck stock, and consumption all happen in ServiceTitan. That is where inventory actually lives, so that is where it should be tracked. Trying to mirror an item list in QuickBooks and keep a second moving average in sync with the first is a permanent tax you will pay every month with nothing to show for it.

2 Simplify the QuickBooks side to a single asset account

Stop carrying inventory items in QuickBooks. Carry one inventory asset account instead, and adjust it monthly to the ServiceTitan valuation report with the offset going to cost of goods sold. QuickBooks now holds a value it can support rather than a quantity it cannot. This is one of the highest-leverage structural changes we make in a ServiceTitan file, and it removes an entire category of reconciliation work permanently.

3 Fix the export order and write it down

Bills and inventory receipts first, then invoices, then payments. Put it in the close checklist so it survives the person who currently runs the export leaving. This is a five minute change that eliminates margin swings nobody could previously explain.

4 Find and reset the contaminated SKUs

Identify the parts whose weighted average is out of line with what you are actually paying, correct the cost deliberately with a documented adjustment, and decide honestly whether to re-cost the affected historical jobs or to accept the error and document it. Both answers are legitimate. Pretending it did not happen is not, and it is the one a buyer will find.

5 Get trucks into the count and into the transfers

Set up truck replenishment as a location transfer, then start a rotating cycle count that gets through every truck over a quarter. Once truck stock is real, your on-hand quantities are real, and the annual count stops being a negotiation and starts being a verification.

6 Reconcile it every month, not every year

One report, one account, one comparison, one explained adjustment. Doing this monthly means a discrepancy is thirty days old and traceable. Doing it annually means it is twelve months old and it becomes a plug. That monthly rhythm is the core of ServiceTitan bookkeeping services and it is what makes the month-end close take days instead of weeks.

Find out what your inventory is actually worth

Send us your ServiceTitan inventory valuation report and your QuickBooks inventory asset account and we will run a free Audit of the two against each other. We will tell you how much of the gap is unallocated material, how much is contaminated weighted average cost, and how much is a structural problem with running perpetual inventory in two systems. You keep the findings either way.

FinTruction works remotely with HVAC, plumbing, electrical, and roofing contractors across the United States running ServiceTitan on QuickBooks and Intacct. To see how inventory connects to the rest of the numbers, start at the ServiceTitan resource hub.

Get a Free Inventory Audit
Answers

Frequently Asked Questions

Why does my ServiceTitan inventory value not match QuickBooks?

Usually because both systems are carrying inventory. ServiceTitan maintains a perpetual inventory with its own weighted average cost per SKU, and if QuickBooks is also holding inventory items with their own quantities and cost basis, you have two independent moving averages fed by different transactions at different times. They will diverge, and no amount of reconciliation effort fixes a design that guarantees divergence. The structural answer is to pick one inventory system of record and simplify the other side to a single asset account.

Why is my inventory asset account growing while the shelves are empty?

Because technicians are marking materials as used on jobs without allocating them out of a truck or the warehouse. The cost hits the job, but no quantity ever leaves inventory, so you have expensed the part and you are still carrying it as an asset at the same time. The on-hand quantity stays high forever and the physical count comes up short by exactly what was never allocated. Pull a list of jobs with material cost but no inventory allocation and you will usually explain most of the gap in one report.

What is weighted average cost and why does one wrong bill break it?

Weighted average cost values a part at the average of everything you have received, recalculated on each receipt. It is a running calculation over your receipt history rather than a price stored in a field, so a wrong unit price on a single vendor bill permanently shifts the average for that SKU. Correcting the bill afterward does not automatically un-ring the bell: units already consumed were costed at the wrong average, and those jobs stay wrong unless you deliberately re-cost them.

How do I catch a bad vendor bill before it poisons a SKU?

Compare the unit cost being entered on each receipt against the trailing average for that SKU, and flag anything that would move the average by more than a set percentage. The catastrophic errors, like keying an extended total into the unit price field, get caught anyway because a job shows an enormous loss. The dangerous ones are small: a $2,340 part keyed as $2,034 nudges the average, nobody notices, and after two years your valuation is an accumulation of small typos you can no longer identify.

Do bills really have to export before invoices?

Yes, and this is not cosmetic. A bill brings a part into inventory at a cost. An invoice consumes it. If the invoice exports first, the consumption is valued at whatever the average was before the receipt landed, so cost of goods sold on that job is wrong and the correction shows up in a later period. Do that once at a month end and your gross margin for the month moves for reasons that have nothing to do with performance. The correct order is bills and inventory receipts, then invoices, then payments.

How should I handle truck stock in ServiceTitan and QuickBooks?

Treat trucks as inventory locations, because parts on a truck are still your asset and most shops carry more value on trucks than in the warehouse. Record warehouse-to-truck replenishment as a location transfer rather than as an expense, or parts end up either expensed twice or never expensed at all. And count them: a physical count that excludes trucks is not a count. A rotating cycle count that brings a few trucks in each week works far better than one heroic annual count.

Should QuickBooks track inventory items if I use ServiceTitan?

In most cases, no. Receipts, transfers, truck stock, and consumption all happen in ServiceTitan, so that is where inventory should be tracked. Carrying a mirrored item list in QuickBooks means maintaining a second moving average that will never stay in sync with the first. The cleaner design is a single inventory asset account in QuickBooks, adjusted monthly to the ServiceTitan valuation report with the offset to cost of goods sold. That removes an entire category of reconciliation work permanently.

Why is my year-end inventory adjustment always a big unexplained number?

Because a year of unallocated materials, contaminated weighted average costs, out-of-order exports, and uncounted truck stock all accumulate quietly and then get resolved with one journal entry in December that nobody can support. Reconciling monthly means any discrepancy is thirty days old and traceable to a specific job or receipt. Reconciling annually means it is twelve months old and becomes a plug, and a large unexplained inventory plug is exactly the entry a buyer or a lender will ask about first.

Can FinTruction clean up ServiceTitan inventory that has been wrong for years?

Yes. We identify the SKUs whose weighted average cost is out of line with what you are actually paying, quantify the unallocated material sitting in your asset account, fix the export order, restructure the QuickBooks side to a single inventory asset account tied to the ServiceTitan valuation, and put a monthly reconciliation in place. We will also be straight with you about whether the historical jobs are worth re-costing or whether the honest move is to correct going forward and document what happened.

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

Stop reconciling inventory and start trusting it

Tell us how you handle parts, trucks, and purchase orders today and we will show you exactly where your inventory value went wrong and what it takes to tie it out monthly. 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.