A store owner connects Shopify to QuickBooks expecting the books to look after themselves. A month later the accountant calls: sales are overstated, the bank account does not reconcile, fees appear nowhere and a pile of refunds are booked as income. The integration is working exactly as designed. It is the design that does not match how Shopify actually moves money.
This guide explains why that happens and how to choose a connection that books cleanly. It compares the three main approaches, explains how sales, fees, refunds, tax and disputes should land in the accounts, lists the common ways a sync breaks and gives a testing method you can run before you commit. It is written for owners and bookkeepers rather than developers, and it complements our earlier article on why your Shopify payout never matches your sales, which explains the mismatch from the payout side. Nothing here is accounting or tax advice; ask your accountant to agree the structure.
Why Shopify and the bank never agree on the day
Shopify records an order the moment it is placed. The money arrives in your bank later, in a payout that groups many orders, subtracts processing fees, subtracts refunds and sometimes holds back funds for a dispute. A payout of one thousand dollars could contain twelve hundred dollars of sales, two hundred dollars of fees and refunds and a delay of two days. If your books record sales when orders are placed and the bank records money when payouts arrive, they will disagree every day, by amounts that depend on fees, refunds and timing.
| Event in Shopify | When it happens | When money moves | Where it shows in the bank |
|---|---|---|---|
| Order placed and paid | Day 0 | Held by the processor | Not yet |
| Processing fee deducted | Day 0 | Taken from the payout | As a lower deposit |
| Payout sent | Day 2 or so, depending on settings | Funds sent to the bank | One deposit covering many orders |
| Refund issued | Any day | Deducted from a later payout | As a lower deposit later |
| Chargeback opened | Weeks later | Amount and fee taken back | As a deduction |
Timing depends on your region, payment provider and account settings. Read your provider’s payout schedule.
Option 1: per-order sync
The simplest connection creates a sales receipt or invoice in QuickBooks for every Shopify order. Revenue appears in the books when the order is placed, line by line, which is convenient for sales reporting and for tax records by order. Some per-order tools also create customers and track inventory.
- Strengths: detailed sales records, simple to understand, good for order-level reporting.
- Weaknesses: does not include fees by default, so the bank deposit never matches; refunds and chargebacks need separate handling; a high order volume creates a large number of transactions.
- Best for: stores with low volume or an accountant who reconciles by order and books fees separately.
Option 2: payout-level summaries
The second approach posts one entry per payout. Each entry shows gross sales, discounts, shipping, tax, refunds, fees and any adjustments, and the net amount equals the bank deposit. Because the books match the bank, reconciliation takes minutes. Many specialist apps work this way, and the idea is the one the bookkeeping profession has long used for marketplaces.
- Strengths: reconciles with the bank, books fees and refunds correctly, produces few transactions.
- Weaknesses: less detail per order inside the accounting system, so sales by product may need a separate report; setup requires mapping accounts carefully.
- Best for: most stores that care about clean reconciliation, especially with several payment methods or channels.
Option 3: custom workflow
Some stores need something neither type does: several sales channels, multiple currencies, bundles, wholesale invoices, inventory valued by a separate system, or tax rules that vary by region. A custom workflow, built on a workflow engine or by a builder, can combine payout-level summaries with order detail, handle unusual cases and raise alerts when a total does not balance. It costs more and needs maintenance, which is why it is for stores whose complexity justifies it. Our payout reconciliation and bookkeeping service builds this, matching each payout to its orders, fees and refunds before it posts.
Comparison at a glance
| Per-order sync | Payout summary | Custom workflow | |
|---|---|---|---|
| Matches the bank deposit | No, by default | Yes | Yes, by design |
| Books fees and refunds | Needs extra work | Yes | Yes, with rules for your case |
| Order-level detail | Yes | Summary, with reports | Both |
| Multiple channels and currencies | Limited | Varies by app | Yes |
| Setup effort | Low | Moderate | Higher |
| Running cost | Subscription | Subscription | Build fee plus small upkeep |
How the pieces should land in the books
Whichever route you choose, agree with your accountant where each item goes before you switch on the sync. Mistakes in mapping are the biggest cause of books that look wrong.
| Item | Typical treatment | Common error |
|---|---|---|
| Product sales | Income, by product or category | Booking gross sales net of discounts in one line and hiding discounts |
| Shipping charged | Income or a shipping income account | Netting it against shipping costs |
| Sales tax collected | Liability, not income | Booking tax as revenue |
| Processing fees | Expense | Missing entirely, so the deposit never matches |
| Refunds | Reduction of income or a refunds account | Booking a refund as new income, or in the wrong period |
| Gift cards | Liability when sold; income when redeemed | Counting the sale as income immediately |
| Chargebacks and fees | Expense or loss, with the dispute fee separate | Not recorded until the bank shows it |
| Payouts | Transfer from a clearing account to the bank | Treating the payout as income, which counts sales twice |
Why syncs break
Most failures are not bugs but mismatches between how the store works and how the integration expects it to work.
- Unmapped items. A new shipping method, payment gateway or tax code has no account, so the sync stops or books it to a default.
- Discounts and rounding. Percentage discounts across several lines create cents that do not add up.
- Refunds in a later period. A refund in March on a February order can distort both months.
- Multiple payment methods. Card, buy now pay later and cash on delivery settle on different schedules and with different fees.
- Multiple currencies. Exchange rate differences between order date and payout date produce small differences.
- Edits after sync. Changing an order after it has posted can leave the books out of step.
- Disconnected tokens. A reconnect or permissions change silently stops the flow.
The remedy is the same for all of them: a monthly check that the synced totals equal the payout reports and the bank, with a short list of exceptions to investigate. A silent sync is the most dangerous, which is why an alert for a failed or missing sync is worth having. Our finance, risk and reporting automation service includes that check.
How to test before you trust it
- Pick a closed month and export the Shopify payout reports and the bank statement for it.
- Run the integration against that month in a test or a copy of the books if possible.
- Compare total sales, refunds, fees and net deposits to the payout reports.
- Reconcile the bank account in the test books and note every difference.
- Investigate each difference and classify it: mapping, timing, refund, fee or error.
- Fix the mapping and run again until the differences are explained.
- Agree the structure in writing with your accountant, then switch on the live sync.
A worked example
Suppose a store takes 1,000 orders in a month with gross sales of $62,000, shipping of $4,100, tax of $5,300, refunds of $3,400, processing fees of $2,050 and one chargeback of $120 with a $15 fee. A per-order sync books $62,000 of sales and the other items as separate transactions, if mapped at all. The payouts for the month total $62,000 + $4,100 + $5,300 minus $3,400 minus $2,050 minus $135, which is $65,815. A per-order sync that does not book fees and refunds would leave the bank $5,585 apart from the books, and the owner would spend an evening hunting for it. A payout-level sync books the same month in a few entries that equal the bank. The figures are illustrative; the lesson is that fees and refunds cause the gap.
Multiple channels, currencies and marketplaces
The picture gets more complicated when Shopify is only one of several places you sell. A marketplace pays you in its own cycle, deducts its own fees and often reports sales in a different structure. Selling in several currencies adds exchange differences. The accounting principle that keeps this manageable is a clearing account for each source of money. Each channel posts its sales, fees and refunds into its own clearing account, and each payout moves money from that clearing account to the bank. When a clearing account balances to zero after a payout, you know the channel is fully accounted for. When it does not, the remaining balance points exactly at what is missing.
| Source | Clearing account holds | Cleared by |
|---|---|---|
| Shopify Payments | Sales, tax and fees awaiting payout | Each payout deposit |
| PayPal | Sales and fees for PayPal orders | PayPal transfers to the bank |
| Marketplace such as Amazon or Etsy | Sales, marketplace fees and refunds | The marketplace settlement |
| Buy now pay later provider | Sales net of their fee | The provider’s remittance |
| Cash on delivery | Orders paid on arrival | The courier’s remittance |
If you sell on marketplaces as well, the same logic applies to our dropshipping and marketplace services; see the pages for Amazon ecommerce automation or Etsy API automation for how orders and settlements are collected.
What to ask a provider or bookkeeper
Whether you buy an app, hire a bookkeeper or commission a build, ask the same questions. The answers tell you whether the books will reconcile or merely look busy.
- Does the entry equal the bank deposit for each payout, and how is the difference shown if it does not?
- Where do processing fees, refunds, chargebacks and dispute fees post?
- How is sales tax recorded, and does it follow my regions?
- How are gift cards, store credit and discounts treated?
- What happens to a refund issued in a later period than the sale?
- How are multiple currencies and several channels handled?
- What alerts me when the sync fails or a total does not balance?
- Can I export the mapping so that I can move to another tool later?
A monthly close routine that takes thirty minutes
Once the sync is right, a short routine keeps it right. At month end, download the payout report, compare its totals with the books for sales, refunds, fees and net, and compare the net with the bank. Check the clearing accounts for any leftover balance and look at the list of unmapped items. Note anything that changed in the store during the month, such as a new shipping method or payment provider, and add its mapping. If everything agrees, record the date and move on. If it does not, the difference is small and recent, which is the cheapest time to find it.
Choosing for your store
If you reconcile to the bank and want little work each month, choose a payout-level approach and confirm that it handles your payment methods and channels. If you need order-level detail inside the accounting system and your accountant is happy to book fees separately, a per-order sync can work. If your setup is unusual, or you want checks and alerts, consider a custom workflow. Whichever you pick, document the account mapping, run the month-end check and keep a record of who owns the connection. For the wider process, our guide to automating a Shopify store places the money layer after messages, orders and stock.
Sources and further reading
Figures and rules in this guide come from the primary pages below. Platform limits and prices change, so open the page before you build on a number.
- Shopify Help Center: payouts, how payouts are formed and timed
- Investopedia: bank reconciliation, what reconciliation means and why it matters
- Stripe documentation: payouts, how processor payouts are calculated