A file that doesn't tie out wastes everyone's time. You build a model on it, someone finds a $40,000 gap three weeks later, and the conversation with the seller starts over. Most of those gaps are visible in the first ten minutes if you know where to look.
"Tie out" gets used loosely. In this post it means one specific thing: the numbers in the file agree with themselves and with the source they came from. Every subtotal equals the sum of the lines under it. The accounting identities hold. Nothing was dropped, duplicated or typed over on the way from QuickBooks to your desk.
It does not mean the books are right. We'll come back to that.
Why files stop tying out
Reports pulled straight out of QuickBooks Online usually tie internally, because QuickBooks computed every total itself. The problems start after that.
- Someone exports to Excel and edits a cell to "clean it up."
- A report is exported on cash basis when you asked for accrual, and the balance sheet is from a different date than the P&L.
- Columns get deleted to fit a page, so the monthly columns no longer add to the total column.
- A long general ledger is too big for one export and comes back cut off partway through.
- Two exports covering different date ranges get pasted together, with a month overlapping or missing.
None of these are exotic. They happen on most deals where the seller exports files by hand. The checks below catch nearly all of them.
The checks, report by report
| Report | Check | What a failure usually means |
|---|---|---|
| Balance Sheet | Total Assets = Total Liabilities and Equity | Edited cells, a deleted row, or a pasted-in section |
| Trial Balance | Total debits = total credits | A row removed, or a sign flipped |
| Profit and Loss | Gross Profit = Income − Cost of Goods Sold | Section subtotal edited or a line moved |
| Profit and Loss | Net Operating Income = Gross Profit − Expenses | Same |
| Profit and Loss | Net Other Income = Other Income − Other Expenses | Same |
| Profit and Loss | Net Income = Net Operating Income + Net Other Income | Same |
| A/R and A/P Aging Summary | Each row's buckets sum to that row's Total | Columns deleted or hand-adjusted |
| A/R and A/P Aging Summary | Customer or vendor rows sum to the grand total | Rows filtered out or hidden |
| Statement of Cash Flows | Operating + Investing + Financing = Net cash increase | A section edited or missing |
| Statement of Cash Flows | Beginning cash + net increase = Cash at end of period | Wrong period or a pasted balance |
| Any report by month | Monthly columns sum to the Total column | Missing or duplicated month |
| General Ledger | Each account's transactions sum to its account total | Truncated export or deleted lines |
Balance sheet
The first check is the one everybody knows. Total Assets must equal Total Liabilities and Equity, to the cent. If it doesn't, stop and ask for a new file. Don't try to find the plug.
The second check is less common and more useful. Take net income on the balance sheet (it sits in equity, for the current fiscal year) and compare it to net income on a Profit and Loss for the same fiscal-year-to-date period and the same basis. They should match. If they don't, one of the two files is on a different basis or a different date. This is a cross-check you do between files. No single report can do it for you.
Trial balance
Debits equal credits, always. The trial balance is also your bridge between the general ledger and the financial statements. Every account balance on the trial balance should match the ending balance for that account in the general ledger covering the same period.
Profit and loss
QuickBooks builds the P&L as nested sections, each with its own total. Re-add each section. Income lines should sum to Total Income. Expense lines should sum to Total Expenses. Then walk the roll-up from Gross Profit down to Net Income.
If the P&L is by month, sum the monthly columns across and compare to the Total column. A missing month or a month pulled twice shows up here immediately.
Aging reports
On an A/R Aging Summary, each customer row has buckets (Current, 1–30, 31–60, 61–90, 91 and over) and a Total. The buckets must sum to the Total for every row. Then the customer totals must sum to the grand total at the bottom. Then the grand total must match Accounts Receivable on a balance sheet as of the same date. The last one is a cross-file check, and it's the one that catches the most problems. A/P Aging works the same way against Accounts Payable.
Statement of cash flows
Net cash provided by operating, investing and financing activities should sum to the net cash increase for the period. Add that to cash at the beginning of the period and you should get cash at the end of the period. That ending cash should match the cash accounts on the balance sheet at period end.
General ledger
The general ledger is where truncation hides. Each account section has its transactions and a total. Sum the transactions and compare. Then compare each account's ending balance to the trial balance. If the GL is long and the last few accounts are missing, or the file just stops, it was cut off. QuickBooks Online's Reports API returns at most 400,000 cells in one response and returns a partial report beyond that, with the message "Unable to display more data. Please reduce the date range." Search the file for that text before you do anything else.
Interactive · Illustrative figures
What FinShare checks before a balance sheet is delivered
Three of the checks, run on a short balance sheet. Edit a cell to see one fail.
- Current asset lines add up to the subtotal QuickBooks reported…
412,880.14 = 412,880.14
- Total assets = current assets + fixed assets…
651,295.14 = 651,295.14
- Total assets = liabilities + equity…
651,295.14 = 651,295.14
Show the numbers
| Check | Computed | Reported | Result |
|---|---|---|---|
| Current asset lines add up to the subtotal QuickBooks reported | 412,880.14 | 412,880.14 | Pass |
| Total assets = current assets + fixed assets | 651,295.14 | 651,295.14 | Pass |
| Total assets = liabilities + equity | 651,295.14 | 651,295.14 | Pass |
Doing it fast in Excel
You don't need a model for this. Twenty minutes per deal covers it.
- Find the totals rows. In a QuickBooks export, totals are labeled "Total Income," "Total Expenses," "Total Assets" and so on. Filter column A on "Total" to see them all at once.
- Re-add sections with SUMIF or plain SUM. For a P&L section,
=SUM(B8:B31)next to the reported total, then a difference column. Anything other than zero gets a look. - Check columns across. For monthly reports,
=SUM(B8:M8)-N8on every row, then filter for non-zero. - Check the identities. One cell each:
=TotalAssets-TotalLiabilitiesAndEquity,=Debits-Credits. Name the cells so the formulas are readable. - Cross-check between files. Put AR from the balance sheet next to the AR aging grand total, and net income from the balance sheet next to the YTD P&L. Same for AP and cash.
- Search for truncation. Ctrl+F for "Unable to display more data" in every general ledger and detail report.
Write the results down. A one-page tie-out log with each check, the expected figure and the actual figure is worth keeping in the deal file. When someone asks in month three why you trusted the numbers, you can show them.
What tie-out does not tell you
A file can tie out perfectly and still be wrong. If the bookkeeper coded a $60,000 owner's truck to repairs and maintenance, the P&L will tie out to the penny. If revenue is booked when cash arrives on an "accrual" file, it will still tie out. If last year's books were never closed, the trial balance still balances.
Tie-out tells you the file is a faithful copy of what's in QuickBooks. Whether what's in QuickBooks is right is the job of the quality of earnings work, the bank reconciliations and the questions you ask the seller. Keep the two separate in your head and in your reports.
How FinShare handles tie-out
FinShare pulls reports straight from a business's QuickBooks Online after the owner approves the request, and it runs tie-out on every file before delivering it. The checks are:
- No truncation. No response from QuickBooks carries the "Unable to display more data" marker.
- QuickBooks' own arithmetic. In every raw response, each section's lines sum to that section's total, for every amount column.
- Accounting identities. Assets equal liabilities plus equity on the balance sheet. On the P&L, gross profit, net operating income, net other income and net income each roll up from their parts. Trial balance debits equal credits. Aging buckets sum to each row's total and the rows sum to the grand total. Cash flow activities sum to the net change in cash.
- General ledger stitching. Long general ledgers are pulled in pieces. FinShare checks that every transaction from the pieces appears exactly once in the combined file and that the combined totals equal the sum of the pieces' totals.
- The delivered file itself. The Excel file is read back after it's written and compared, row by row and amount by amount, with an independent walk of the raw QuickBooks response. CSV and JSON downloads are rendered from the stored response and checked the same way before they're served.
A report that fails any check is not delivered. It shows as "Didn't tie out; not delivered" on the request, and the usual fix is a shorter period.
The cross-file checks in this post, like balance sheet net income against the YTD P&L, or the AR aging total against AR on the balance sheet, are still yours to do. FinShare checks each file against itself and its source. It doesn't check one report against another, and like any tool that copies data, it can't tell you whether the books are right. FinShare's terms say the same thing: tie-out means each file matches the totals QuickBooks reports for the same period, and nothing more.