You pull Shopify's "Total Sales" report for the month: $18,432. You check the bank account QuickBooks is connected to: three Shopify deposits totaling $17,096.50. The gap is $1,335.50, and nothing on either report tells you what it is.
If this happens every month, you're not doing anything wrong. It's the normal, expected result of how Shopify pays out and how QuickBooks records what it receives — and once you know the three things actually causing it, reconciling the gap by hand takes twenty minutes instead of an afternoon.
The three reasons the numbers never match
1. Shopify's processing fee comes out before you ever see the money
Shopify (or Shopify Payments) takes its transaction fee — typically in the 2.4%–2.9% + 30¢ range depending on your plan and card type — directly out of each payout before it's deposited. Your Total Sales report shows the full sale price. Your bank deposit shows the sale price minus the fee. On $18,432 of sales, a blended ~2.7% fee alone accounts for roughly $500 of the gap before anything else is considered.
2. Refunds, chargebacks, and disputes are netted into the payout, not shown separately
When you refund a customer, Shopify doesn't send you a separate withdrawal request — it just deducts the refunded amount from your next payout. Same with chargebacks and dispute holds. So a payout can be smaller than expected not because fees were higher that period, but because several orders from *weeks earlier* got refunded and are being deducted now. This is the part that makes the gap look inconsistent month to month: it's not a fixed percentage, it moves with your refund rate.
3. Payout timing almost never lines up with your accounting period
Shopify payouts run on a rolling schedule (commonly every 1–3 business days, depending on your account history and country), not a calendar-month cutoff. An order placed on June 29th might not get paid out until July 2nd. QuickBooks records the deposit on the date it hits the bank — July 2nd — while your Shopify sales report still counts that order in June. Multiply this across every payout at the end of a month and you get a permanent, recurring timing offset between "sales this month" and "cash deposited this month" that never fully resolves itself, because there's always a payout in transit.
None of these three are bugs. They're just three different things that happen to be summarized into one number — Total Sales — and one different number — the bank deposit — with nothing connecting them by default.
How QuickBooks records the deposit (and why that's the actual gap)
QuickBooks Online's native Shopify integration typically posts each payout as a single summary transaction tied to the deposit amount, not as individual entries for each order it contains. That's fine for getting the cash into the bank feed correctly, but it means the connection between "this deposit" and "these specific orders, minus these specific fees and refunds" isn't made automatically — you have to make it yourself, order by order, or bring in a separate reconciliation tool to do it. This is exactly the gap third-party "Shopify to QuickBooks" reconciliation apps exist to close.
Reconciling it by hand — the actual walkthrough
The detail that makes this click: stop trying to reconcile at the order level. An order can be captured in one payout while its refund or a chargeback fee lands in a later one, so order-by-order matching never quite ties out — orders and payouts run on different clocks. The unit that actually reconciles cleanly is the individual balance transaction, not the order.
- Pull the transaction-level detail, not just the payout total. In Shopify admin, go to Finances → Payouts, open the specific payout that matches your bank deposit date and amount, and export the Transactions CSV. Every row is typed —
charge,refund,dispute,adjustment,reserved_funds,fee— with its own gross, fee, and net amount, so you get every component that makes up the payout, not just the total. - Group the rows by type. Sum the
chargerows (gross sales in this payout), thefeerows, and therefund/disputerows separately. - Check the math. Gross sales minus fees minus refunds/disputes should equal the payout's net amount, give or take rounding — by definition, a payout is the sum of its own transaction rows.
- Reconcile that net amount against the bank deposit. If it matches, you've explained the gap for that payout — it was fees and refunds, not an error. If it doesn't match, the residual is a real discrepancy worth investigating (a missing payout, a currency conversion, or a Shopify-side adjustment you haven't accounted for).
- Repeat per payout, then compare the sum to your monthly Total Sales figure. Because orders and payouts run on different clocks, a clean tie-out for the *month* requires including any payout that straddles the month boundary in whichever period you're reconciling — pick one convention (cash-received date or order-date) and apply it consistently.
Doing this for one payout takes a few minutes. Doing it for every payout, every month, for as long as you're on Shopify, is the actual "afternoon a month" merchants describe losing to this.
The automated version
This is exactly the mechanism ClairFlo automates: every Shopify payout is matched back to its underlying orders automatically, fees and refunds are broken out and posted to the correct accounts on their own, and only a genuine unexplained residual — not the whole gap — gets flagged for you to look at. See Shopify payout reconciliation and Total Sales vs. Payout mismatch in the glossary, or the full feature reference at /features.
If you run more than one Shopify store, the same reconciliation problem compounds per store — that's covered in Running Multiple Shopify Stores Into One Set of Books.