ServiceTitan + QuickBooks

Why Your ServiceTitan Revenue Doesn't Match QuickBooks

Two systems, two revenue numbers, and nobody can say which one is right. The gap is not random and it is almost never a bug. It is a short list of mechanical causes, and most books have three or four of them running at once. This page names every one of them and gives you the order to work through to find yours.

Start Here

First, make sure you are comparing the same thing

Before you go hunting for a broken integration, rule out the false alarm that sends most owners down the wrong path. ServiceTitan reports revenue on an accrual basis, by invoice, on the invoice date, and its revenue reports generally exclude sales tax. If the QuickBooks Profit and Loss you are holding is set to cash basis, the two numbers cannot match and never will, no matter how clean your books are. A cash basis P&L only counts money collected. ServiceTitan is counting work invoiced.

So the first move is to set the QuickBooks P&L to accrual, set the date range to a single closed month, and pull the ServiceTitan invoice or revenue report for the exact same dates on invoice date, not completion date and not sold date. Now you have two numbers that are at least trying to measure the same thing. Write down the difference in dollars, and write down the sign. Whether QuickBooks is higher or lower than ServiceTitan cuts the suspect list roughly in half before you look at anything else.

The second thing worth knowing up front: some causes change your total revenue and some only move revenue between buckets. Sales tax leaking into an income account inflates the company total. Business unit mapping that sends HVAC revenue into the Plumbing department does not change the total at all, it just makes every departmental P&L wrong. Decide which problem you actually have, because they get fixed in different places. If the total is right and the split is wrong, stop looking at the integration and start looking at your mapping.

The Mechanisms

The six causes that create most of the gap

Each of these is a specific, mechanical reason two systems that should agree do not. They stack. It is normal to find three or four of them in the same file.

01

Merchant fees booked gross in one system, net in the other

ServiceTitan records the full invoice. The bank receives the amount net of processing fees. Sell a system for $12,400 on a card at 2.9% plus 30 cents and the bank deposits $12,040.10. That $359.90 has to be booked as a merchant fee expense. If it is not, the deposit will not tie to the batch, the bank account will not reconcile, and whoever is forcing the deposit to match is quietly changing your revenue to do it. Run $600,000 a year on cards and this is roughly $18,000 of expense that either exists in your books or is being silently netted out of your income.

02

Sales tax exporting as a line item instead of a tax rate

This one is the single fastest way to make QuickBooks read higher than ServiceTitan. Invoice a $10,000 job in a jurisdiction with 8.25% tax and the customer pays $10,825. If the tax exports as an invoice line item mapped to an income account rather than as a QuickBooks sales tax rate hitting Sales Tax Payable, QuickBooks reports $10,825 of income while ServiceTitan reports $10,000 of revenue. Your P&L is overstated by every dollar of tax you have ever collected, and your QuickBooks sales tax liability report is useless because it shows nothing owed.

03

Batch export timing across a period boundary

Invoices only reach QuickBooks when someone exports the batch. A batch of January 29 through 31 invoices that is still sitting open on February 5 means January revenue in QuickBooks is short by exactly that batch. Close the month before you export and the two systems disagree by definition. The related version is worse: if the batch posts under the export date rather than the invoice date, January revenue permanently lands in February and no amount of reconciling fixes it without a reclass.

04

Membership deferred revenue recognized wrong

A $240 annual maintenance plan with two visits should recognize $120 per visit. The documented failure is that the full $240 recognizes on each visit, so a $240 contract books $480 of revenue. A recurring service event that gets dismissed rather than completed permanently strands the deferred balance. And revenue can be credited to the business unit that sold the membership rather than the one that performed the work. If you sell memberships at any volume, this is often the largest single line in the gap. We break it down on our ServiceTitan membership deferred revenue page.

05

Third-party financing payouts

GreenSky, Wisetack, and Synchrony do not send you the invoice amount. They send the invoice amount minus a dealer fee. An $18,000 financed replacement at an 8% dealer fee pays out $16,560. ServiceTitan shows $18,000 collected. The bank shows $16,560. The $1,440 is a financing cost and it has to be booked, not absorbed into revenue. Financing payments also must not be batched with cash, check, and card payments, because the mixed batch will never equal a single bank deposit.

06

Adjustment invoices and post-export edits

ServiceTitan uses adjustment invoices to correct an invoice that has already posted. If the adjustment never gets exported, ServiceTitan shows the corrected figure and QuickBooks keeps the original. If someone also edits the original invoice by hand in QuickBooks, you now have the correction applied twice. The same trap applies to invoices voided or edited in ServiceTitan after the batch was exported: the change does not reliably chase the record already sitting in QuickBooks. Every one of these is a permanent, silent difference.

Trusted by 25+ Contracting Businesses
The Quiet Two

The causes that move revenue instead of changing it

The six above change your total. These next two usually leave the company-wide number intact and wreck everything underneath it, which is why owners often live with them for years without noticing. You only find them when you try to run a real departmental P&L or work out which trade is actually making money.

Business unit mapping

Every invoice item in ServiceTitan carries a business unit, and the export maps that business unit to a QuickBooks class or a separate income account. When the mapping is incomplete, revenue for a job falls back to a default and lands in the wrong department, or in no department at all. Your total income is still right. Your HVAC margin is not. The tell is a class report where a meaningful chunk of income sits in Unclassified, or a department whose revenue looks nothing like what the field actually did.

The membership version of this is nastier. Revenue can be attributed to the business unit that sold the plan rather than the one that performed the visit. If your plumbers sell memberships that your HVAC techs then service, HVAC does the work and Plumbing books the revenue, and both departmental P&Ls are wrong in opposite directions.

The sold versus performed split

ServiceTitan can report revenue on when the job was sold and on when it was performed. These are different numbers on any job with a lead time, and they diverge sharply on install work quoted in one month and installed in the next. If the person pulling the ServiceTitan report is using a sold-basis view and comparing it to a QuickBooks accrual P&L, they are not comparing revenue to revenue, they are comparing a sales report to a financial statement. Always compare on invoice date. Anything else guarantees a gap that no cleanup will close.

Find Your Gap

The diagnostic order of operations

Work these in order. Each step either explains part of the difference or eliminates a suspect, so by the end you have the gap broken into named pieces rather than one number you cannot explain.

1 Fix the comparison, then write down the gap

One closed month. QuickBooks P&L on accrual basis, total income. ServiceTitan revenue on invoice date, excluding sales tax. Write down the difference and the direction. If QuickBooks is higher, your prime suspects are sales tax leaking into income and duplicate exports. If QuickBooks is lower, your prime suspects are unexported batches, revenue netted down by merchant fees or financing fees, and membership revenue that ServiceTitan recognized and nobody booked.

2 Take sales tax out of the equation

In QuickBooks, run Sales by Product or Service for the month and look for any item that is sales tax, tax, or similar posting to an income account. Then open the Sales Tax Liability report. If the liability report shows nothing owed while you know you collected tax, you have found the leak. Any dollar of tax sitting in income has to come out of the revenue comparison before you go further, or it will contaminate every step that follows.

3 Confirm every batch for the period actually exported

Go to the ServiceTitan export log and list every batch that touches the month. You are looking for two things: batches still sitting open or unexported, and batches that failed with an error and were never retried. An export that errored out is not a partial export, it is often a stopped export, which means invoices after the failure point never arrived. This is also where you catch a batch that was exported twice, which doubles revenue for those invoices. If your exports are erroring rather than just sitting there, work through ServiceTitan QuickBooks sync errors first.

4 Check posting date against invoice date

Pull the QuickBooks invoice list for the month and compare the invoice date to the entered or created date. If invoices dated the 30th were created in QuickBooks a week later, that is fine as long as they carry the correct invoice date. If they carry the export date instead, revenue has crossed a period boundary and you have a cutoff problem, not a totals problem. That is a reclass, and it needs to be dealt with as its own item.

5 Reconcile the cash side separately, never mixed in

Do not try to solve revenue and cash in the same pass. Cash has its own set of causes: merchant fees, financing dealer fees, refunds, chargebacks, and a payment batch that mixes payment types and can therefore never equal a single bank deposit. Handle those on their own track using deposits that do not match the bank and Undeposited Funds that never clear. Mixing the two investigations is how people end up plugging revenue to force a bank reconciliation.

6 Reconcile memberships to the deferred revenue account

Pull the ServiceTitan deferred revenue report and compare it to the deferred revenue balance on the QuickBooks balance sheet. If you sell memberships and QuickBooks has no deferred revenue account at all, you have found a large piece of your gap in one look. If the account exists but the balances do not agree, walk the visits: count the plans, count the visits earned, and check whether any plan recognized its full annual value on a single visit.

7 Hunt the adjustments, voids, and post-export edits

List every adjustment invoice in ServiceTitan for the period and confirm each one landed in QuickBooks exactly once. Then list every invoice voided or edited in ServiceTitan after its batch exported and check what QuickBooks currently holds for it. These will not surface on any report. You have to go looking for them, and they are frequently the last unexplained few thousand dollars.

8 Only now, check the split

With the total explained, run the QuickBooks P&L by class or by business unit and compare it to the ServiceTitan revenue by business unit. Income sitting in Unclassified is unmapped items. A department whose revenue does not resemble what the field did is a mapping error or the membership sold-versus-performed attribution. Whatever difference is still standing after all eight steps should be a small, named, defensible list of reconciling items. If it is not, the problem is structural and no amount of reconciling will fix it.

Quick Reference

What you are seeing, and what is probably causing it

Match the symptom on the left to the likely cause. This is not a substitute for the diagnostic walk above, but it will usually tell you where to start.

What you are seeingMost likely causeWhere to look first
QuickBooks income is higher than ServiceTitan revenue by roughly your tax rateSales tax is exporting as a line item into an income account instead of as a QuickBooks tax rateSales by Product or Service report, then the Sales Tax Liability report
QuickBooks income is lower and the shortfall is a clean set of invoicesA batch never exported, or an export failed partway and was never retriedThe ServiceTitan export log for every batch touching the period
The bank never reconciles and revenue keeps getting adjusted to make itMerchant fees are being netted out of revenue instead of booked as an expenseThe merchant statement, then whether a merchant fee expense account exists at all
Undeposited Funds only ever growsPayments export to Undeposited Funds and the matching deposit is never made, or is made as a separate manual entryThe Undeposited Funds register, aged oldest first
Accounts receivable has negative balancesThe card processor auto-batched and exported the payment before its invoice reached QuickBooksThe A/R Aging Summary, sorted for negative balances
Revenue is too high in months you sold membershipsMembership revenue recognized in full at sale or in full on each visit instead of ratablyThe ServiceTitan deferred revenue report against the deferred revenue balance in QuickBooks
Financed jobs never tie to the bankThe lender pays out net of a dealer fee and the fee is not booked, or financing is mixed into a batch with other payment typesThe lender payout report against the batch and the bank deposit
The company total is right but every department P&L is wrongBusiness unit to class mapping is incomplete, or membership revenue is credited to the unit that sold rather than performedP&L by class, looking for income sitting in Unclassified
A month you already closed changed after the factAn invoice was voided or edited in ServiceTitan after its batch exported, or an adjustment invoice was applied twiceThe audit trail in QuickBooks for the period, filtered to invoices
Trusted by 25+ Contracting Businesses
Keep It Closed

The guardrails that stop the gap reopening

Every one of these is cheap to run once a week or once a month. Together they are the difference between a file that stays tied out and one that drifts back within a quarter.

Export every batch before you close the month, and never export a batch after the period is locked without deciding, deliberately, which period it belongs in.
Book merchant fees as a merchant fee expense in the period they were charged, gross revenue in, fee out, so revenue is never quietly netted down.
Configure sales tax as a QuickBooks tax rate hitting Sales Tax Payable, never as an invoice line item mapped to income.
Keep financing payments in their own batches, separate from cash, check, and card, so each batch can match one real bank deposit.
Reconcile the deferred revenue balance to the ServiceTitan membership report every single month, not once a year at tax time.
Review the export log weekly for failed and open batches, and treat a failed export as an incident, not a nuisance.
Run a P&L by class monthly and treat any income in Unclassified as an unmapped item to be fixed, not a rounding error.
Never adjust revenue to force a bank reconciliation. If the bank does not tie, the answer is on the cash side, not the income side.
Honest Scope

What can be fixed, and what has to be lived with

Not everything is recoverable. If sales tax has been posting into income for two years and those returns have been filed, you do not quietly rewrite them. The right move is to fix the configuration so it stops today, correct the current open period, and then take a considered position on the closed years with your tax preparer, which usually means a prospective correction rather than restating filed returns. Anyone who tells you they can just journal two years of history away without touching your filings is telling you what you want to hear.

The same honesty applies to deferred revenue. If memberships have been recognizing at full value on every visit, the accumulated overstatement is real and it has to be quantified before you can decide how to book the correction. That is bookkeeping work, not a settings change. It usually takes a plan-by-plan rebuild of the deferred schedule, and it is worth doing properly, because a buyer or a lender will look straight at that account.

What is genuinely quick: the configuration. Sales tax as a rate rather than an item, a merchant clearing account instead of pointing payments at the bank, batch discipline, and complete business unit mapping can all be set up in a few sessions, and they stop the bleeding immediately. The history is the expensive part, and it is what our ServiceTitan and QuickBooks cleanup exists to do. If the connection itself was never set up correctly, start with the ServiceTitan and QuickBooks integration, and see the ServiceTitan resource hub for the rest of the cluster.

FinTruction is a construction and home services bookkeeping firm based in Coppell, Texas, working remotely with HVAC, plumbing, electrical, and roofing companies running ServiceTitan across the United States. We are not a ServiceTitan reseller and we do not sell you software. We fix the books underneath it.

Not sure which of these is your gap? We will find it.

Send us one closed month. We will run the comparison properly, break your gap into named pieces, and tell you exactly which mechanisms are in play and what each one is costing you. You keep the findings whether or not you hire us.

A free Audit takes us a few days and it usually surprises people. The number is rarely one cause. It is three or four of them, stacked, and each one is fixable once it has a name.

Get a Free Revenue Tie-Out
Answers

Frequently Asked Questions

Why does my ServiceTitan revenue not match QuickBooks?

Almost always one of eight mechanical causes, and usually several at once: merchant fees booked gross in ServiceTitan but net in the bank, sales tax exporting as an income line item instead of a tax rate, a batch that crossed a period boundary or never exported, membership deferred revenue recognized incorrectly, third-party financing paid out net of a dealer fee, adjustment invoices applied twice or not at all, invoices voided or edited after export, and business unit mapping that misplaces revenue between departments. The first four explain most of the dollars in most files.

Should I compare ServiceTitan revenue to a cash basis or accrual basis P&L?

Accrual. ServiceTitan reports revenue on the invoice, on the invoice date, so a cash basis QuickBooks P&L is measuring something completely different and the two will never agree. Set the P&L to accrual and set both reports to the same date range on invoice date before you conclude anything is broken. This single mistake sends more owners hunting for a nonexistent integration bug than any other.

Why is QuickBooks income higher than ServiceTitan revenue?

The usual culprit is sales tax. If tax exports as an invoice line item mapped to an income account rather than as a QuickBooks sales tax rate posting to Sales Tax Payable, every dollar of tax you collect shows up as revenue. A $10,000 job with 8.25% tax reads as $10,825 of income in QuickBooks and $10,000 of revenue in ServiceTitan. The other cause is a batch that was exported twice, which duplicates those invoices outright.

Why is QuickBooks income lower than ServiceTitan revenue?

Look for revenue that never arrived or got netted down. A batch still sitting unexported, or an export that failed partway and was never retried, leaves QuickBooks short by exactly those invoices. Merchant fees and financing dealer fees netted out of revenue instead of booked as expense will also pull income down. And membership revenue that ServiceTitan recognized but nobody journaled into QuickBooks simply is not there.

How do merchant fees make my books not reconcile?

ServiceTitan records the gross invoice. The processor deposits the amount net of its fee. A $12,400 card sale at 2.9% plus 30 cents lands as $12,040.10 in the bank. If that $359.90 is never booked as a merchant fee expense, the deposit will not equal the batch, the bank account cannot be reconciled, and whoever forces it to reconcile is changing your revenue to do it. The fix is a merchant clearing account plus a fee expense line, not an adjustment to income.

Can membership deferred revenue really throw the numbers off that much?

Yes, and at volume it is often the single largest line in the gap. A $240 annual plan with two visits should recognize $120 per visit. A documented failure mode recognizes the full $240 on each visit, so a $240 contract books $480 of revenue. A dismissed recurring service event permanently mis-recognizes the deferred balance. If you sell memberships and your QuickBooks balance sheet has no deferred revenue account, you have found a real problem in one look.

What does it mean when my total revenue is right but each department is wrong?

That is a mapping problem, not an integration problem. Every ServiceTitan invoice item carries a business unit that maps to a QuickBooks class or income account. When that mapping is incomplete, revenue falls back to a default or lands unclassified, so the company total is intact while every departmental P&L is wrong. Membership revenue attributed to the business unit that sold the plan rather than the one that performed the visit does the same thing. Run a P&L by class and look for income sitting in Unclassified.

Do adjustment invoices in ServiceTitan cause revenue differences?

They can, in both directions. If an adjustment invoice never exports, ServiceTitan holds the corrected figure and QuickBooks keeps the original. If somebody also hand-edits the original invoice in QuickBooks, the correction lands twice. Invoices voided or edited in ServiceTitan after the batch exported are the same trap, because the change does not reliably chase the record already sitting in QuickBooks. None of these surface on a report. You have to go looking for them.

Can this be fixed retroactively, or only going forward?

Both, but they are different jobs. The configuration is quick: sales tax as a proper tax rate, a merchant clearing account, batch discipline, complete business unit mapping. That stops the problem today. Correcting history is real bookkeeping work, especially where sales tax returns have already been filed or membership deferred revenue has to be rebuilt plan by plan. We quantify the history first, then agree the correction approach with you and your tax preparer rather than quietly journaling away years of filings.

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 one number you can actually trust

Send us a month that will not tie out. We will break the gap into named causes, tell you what each one is worth, and show you what it takes to close it for good. 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.