QuickBooks and Shopify: why the numbers still don't match after you sync
A sync app does what it promises: it posts your Shopify sales, refunds and fees into QuickBooks or Xero on a schedule, in summaries that tie to the money that actually landed. That settles the bookkeeping question, and if your ledger reconciles to your bank, it is working.
It does not make a margin number defensible. The ledger receives period totals; a margin number is built from per-order costs, fees and timing that the summary was never carrying. The gap is not a bug in the sync -- it is the part of the job the sync was never doing.
What syncing actually settles
The integration apps exist to solve a real and unglamorous problem: Shopify records thousands of individual events, your ledger wants entries that reconcile to a bank deposit, and doing that by hand every month is miserable. A sync app groups a payout period, splits it into sales, discounts, refunds, shipping, tax and fees, and posts an entry that ties to the deposit.
Set up correctly, that entry is right, and the reconciliation in QuickBooks is clean. Nothing on this page is an argument against doing it -- it is the precondition for everything below, not the alternative to it.
Three things a clean sync still does not prove
1. Cost coverage
A journal entry books revenue and fees. Gross margin needs a cost against every unit that sold, and the question that decides whether the margin is defensible is not what is the cost but how much of the period has one at all. A catalogue where most units carry a cost and some do not will still produce a margin figure, and that figure will be quietly wrong by the size of the gap. A summarised entry cannot answer the coverage question, because it never held per-item detail.
2. Fee attribution
Payment processing and fulfilment costs arrive as period totals, which is correct for the ledger and insufficient for a margin. Contribution margin needs those costs attached to the orders that incurred them -- an order shipped heavy and refunded is not the same as an order shipped light and kept, and the difference disappears the moment both are inside one monthly total.
3. Refund timing
An order and its refund can fall in different periods, and a sale and the payout that pays for it almost always do. Shopify documents this directly: its payout reconciliation report "isn’t a statement of revenue for accounting purposes". Which period a refund belongs to is a decision, and a margin number that does not state which decision it made cannot be checked by the person asking.
Shopify Help Center: Payout reconciliation report
Reconciled, or gated
The alternative to estimating around those gaps is naming them. Take the reader this page is written for: the orders data is sound and reconciling, and no cost or fee file has been supplied yet. Here is what can honestly be claimed, and what has to be held back with the source it waits on named:
Net Sales reconciled
Gross Margin (Net Sales - COGS) · needs Product Cost
Contribution Margin (before marketing) · needs Product Cost, 3PL / Carrier, Shopify Payments
CM after marketing · needs Ad Spend
Inventory visibility (scenario)
A gated layer is more useful than an estimated one, because it names the file that would close it. An estimate labelled as an estimate still gets quoted as a fact three slides later. See how to make a Shopify number defensible for the method this applies.
How to check it against your own file
- Take the orders file for the period the sync posted. Shopify Admin > Orders > Export, as a .csv, for the same date range.
- Group by order before anything else. Additional line items are separate rows with blank order-level fields, and a blank is not a zero. See what each column proves.
- Count the coverage, not the average. How many units in the period have a cost attached, and what did the ones without contribute.
- Name the timing rule you used for refunds, and apply it to both sides.
None of that requires touching your accounting stack, and none of it needs your ledger credentials. CSV files you upload are parsed in your browser.
Common questions
Why doesn't my QuickBooks revenue match my Shopify dashboard?
Usually because they are counting different things over different windows rather than because one is wrong. A sync posts against payout periods, and a payout covers orders from whenever they settled, not whenever they were placed. Shopify's dashboard also applies its own inclusion rules -- test orders and some refund types are treated differently there than in the orders export. Two surfaces disagreeing is normally correct behaviour for both.
Does A2X or Link My Books fix my margin number?
They fix a different number. Their job is to get Shopify activity into the ledger accurately and reconciled to the bank, and they do it well -- that is bookkeeping accuracy. A margin number needs per-order cost and fee attribution, which is not what a summarised journal entry carries. Getting the ledger right is the precondition for a defensible margin, not a substitute for one.
So what is actually missing after the sync is set up?
Three things, and none of them is revenue. Cost coverage: whether every unit sold in the period has a cost attached, and what share does not. Fee attribution: whether payment and logistics costs are attached to the orders that caused them, rather than only totalled for the period. Refund timing: whether a refund is counted against the period of the original order or the period it was issued in.
Do I have to change my sync setup to check this?
No, and you should not. This works from your own Shopify Orders export -- a file you already have -- and touches nothing in QuickBooks, Xero or your sync configuration. No signup, no account.
What this does not tell you
This does not audit your bookkeeping. Whether your revenue recognition, shipping treatment and tax handling are right for your books are accounting decisions your accountant owns, and a reconciliation of the orders file has nothing to say about them.
It also does not check your sync. If the journal entries posted to QuickBooks are wrong, tying an orders file to itself will not reveal that -- the two are checked against different sources, which is the entire reason both exist.
A reconciliation proves a figure ties to the file it came from. If the file itself is incomplete, a clean tie-out will not tell you so, and nothing here claims otherwise.
Upload your Shopify Orders export and see which figures reconcile to it, which are excluded and why, and which layers your data cannot prove yet. Your first report is free.
Reconcile my Orders exportCSV uploads are parsed in your browser. Shopify orders you sync are stored on our servers.
Sources last checked 2026-08-04.