How to sync Shopify orders to QuickBooks automatically
9 min read Ecommerce finance The Adapters team
Last updated July 2026
To sync Shopify orders to QuickBooks, connect both accounts, map each Shopify order to a QuickBooks sales receipt or invoice, book Shopify Payments fees as a separate expense, and post refunds as refund receipts. Then reconcile against the net payout, not the gross order total, because the bank deposit arrives after fees are withheld.
Field mapping auto-plugged · tap a port to rewire
Plug a source port into
Transform on this cable
JSON in
JSON out
5 sample records ready
Key takeaways
- Orders are revenue, payouts are cash. Sync them as two separate things or your books will never tie out.
- Fees are an expense, not a discount. Shopify Payments nets fees out of the deposit, so record gross sales and book the fee separately.
- Use a clearing account. Orders land in a Shopify clearing account, the payout moves the net amount to checking, and the balance left over is money in transit.
- One stable match key. Match customers on a normalized email, not on name, or QuickBooks fills up with duplicates.
Does Shopify integrate with QuickBooks?
Yes. Shopify connects to QuickBooks Online through apps in the Shopify App Store, and through integration platforms that talk to both REST APIs directly. QuickBooks Desktop needs a different route (the Desktop SDK and Web Connector) because it has no cloud API. The connection is easy. Deciding what a Shopify order should become in QuickBooks is the actual work.
That decision is where most setups go wrong. A Shopify order is one object holding several accounting events at once: revenue, sales tax collected, shipping income, discounts, a processing fee, and later, maybe, a refund. QuickBooks wants those as distinct records posting to distinct accounts. A Shopify QuickBooks integration is really a mapping problem wearing a connector costume.
How do I sync Shopify orders to QuickBooks Online?
Connect Shopify and QuickBooks Online, then map each paid Shopify order to a QuickBooks sales receipt (for prepaid ecommerce orders) or an invoice (if you bill on terms). Post the sales receipt to a Shopify clearing account rather than to checking. Sync payouts, fees, and refunds separately, then run the sync on a schedule.
The clearing account is the piece people skip, and it is the piece that makes reconciliation possible. Every order posts its gross total into a current asset account called something like "Shopify Clearing." When Shopify Payments deposits money into your bank a couple of days later, that deposit clears the same account for the net amount and the fee posts as an expense. Anything left sitting in the clearing account is money that has been earned but not yet paid out, which is exactly what an ecommerce balance sheet should show.
Order-to-cash timing matters here. A Saturday order might not settle until Tuesday, and it will appear in a payout that also contains Sunday and Monday orders, plus a refund from last week. If you try to book each bank deposit as revenue, month end will never close cleanly, because deposits and orders do not respect the same calendar boundary. Revenue is recognized when the order is placed. Cash arrives whenever the processor feels like sending it.
What fields map from Shopify to QuickBooks?
Here is the core mapping most stores need. Field names are shown as they appear in the Shopify Admin API and the QuickBooks Online accounting API, so you can check your own setup line by line.
| Shopify object and field | QuickBooks object and field | Notes |
|---|---|---|
order.name |
SalesReceipt.DocNumber |
Keeps the store order number (#1042) visible in the books |
order.created_at |
SalesReceipt.TxnDate |
Convert to the books timezone before truncating to a date |
order.total_price |
SalesReceipt.TotalAmt |
Gross, before processing fees are withheld |
line_items[] |
SalesReceipt.Line[] |
One line per SKU, mapped to an income account or product |
order.total_tax |
SalesReceipt.TxnTaxDetail |
A liability, never income |
shipping_lines[] |
SalesReceipt.Line (shipping item) |
Shipping charged is income; shipping paid is a separate expense |
customer.email |
Customer.PrimaryEmailAddr |
The match key. Normalize case before comparing |
transaction.fee |
Expense.TotalAmt |
Merchant fees expense, posted from the clearing account |
refund.amount |
RefundReceipt.TotalAmt |
Dated to the refund, not to the original order |
payout.amount |
Deposit.TotalAmt |
Net figure that must equal the bank line |
Two mapping habits save hours later. First, store the Shopify order ID somewhere on the
QuickBooks record (a private note or a custom field) so a re-run can find the existing
record instead of creating a second one. Second, keep amounts in decimal strings the
whole way through, since Shopify returns "104.50" as a string and rounding
it through a float is how you end up a cent off on a hundred orders. Our
data mapping best practices
guide covers the rest of the rules.
How do I record Shopify payouts in QuickBooks?
Record the payout as a bank deposit for the net amount that actually hit checking, funded from the Shopify clearing account, with the processing fee as a negative line to a merchant fees expense account. Refunds and chargebacks included in that payout window get their own negative lines. The deposit total then matches the bank feed exactly.
In practice, a payout of $4,812.37 might be made up of $5,010.00 in gross sales, minus $152.63 in Shopify Payments fees, minus a $45.00 refund from three days earlier. Those three numbers are three different accounts: clearing, expense, and a contra revenue or refund line. Book them as one deposit with three components and the bank reconciliation is a single click. Book the $4,812.37 as revenue and you have understated sales, hidden your fee expense, and made your gross margin look better than it is.
Why doesn't my Shopify payout match my QuickBooks deposit?
Because Shopify Payments deposits money net of fees, refunds, and chargebacks, while your orders were recorded gross. The deposit will almost never equal any order total or any clean sum of order totals. It equals gross sales for the payout window, minus fees, minus refunds processed in that window, plus or minus adjustments and reserves.
This gross versus net gap is the single most common reason a Shopify to QuickBooks setup gets abandoned. The symptom is a bookkeeper staring at a $4,812.37 bank line with no matching invoice, guessing, and forcing it into sales. The fix is structural: never let a bank deposit be the thing that creates revenue. Revenue is created by the order sync. The deposit only moves cash out of clearing.
Cutoff timing adds the other half of the confusion. Shopify groups transactions into a payout by its own settlement window, which does not line up with your month. Orders on the 31st routinely settle on the 2nd. That is fine and expected: the clearing account balance on the 31st should equal the sum of orders not yet paid out, and if it does, your books are right. When you reconcile, pull the payout report from Shopify and the deposit lines from your bank, and if your bank only hands you a PDF, it is worth turning the statement into a spreadsheet first so you can match deposit amounts to payout IDs in one pass instead of scrolling two documents side by side.
How do I handle Shopify refunds and chargebacks in QuickBooks?
Post a refund as a QuickBooks refund receipt dated to the day the refund was issued, not the day of the original order. Chargebacks work the same way, plus the dispute fee, which is a separate expense line. Both reduce the next payout, so they should also appear as negative lines on the deposit that carries them.
The period question trips up accrual books. If a January order is refunded in March, the refund belongs in March. Restating January is almost always the wrong answer, and it breaks any month you have already closed and reported. Partial refunds need the same care: refund $20 of a $120 order and only $20 comes out, so the sync has to read the Shopify refund object rather than assume that a refund voids the whole order. Chargebacks can also be reversed if you win the dispute, which means the money comes back weeks later as another adjustment.
How does Shopify sales tax get recorded in QuickBooks?
Sales tax you collect is a liability, not income. Map order.total_tax to a
sales tax liability account in QuickBooks so the money sits there until you remit it.
If you sell into multiple states, break tax out by jurisdiction, because that is the
level at which you will eventually file.
Marketplace facilitator rules complicate this. On some channels the platform collects and remits tax on your behalf, so that tax should never enter your liability account at all. Your sync needs to know which orders were taxed by you and which were taxed by someone else, or you will end up paying tax that has already been paid. Shopify exposes this per tax line, so filter on it rather than assuming every order is yours to remit.
Can I sync Shopify inventory to QuickBooks?
You can, but decide first which system is the source of truth. Shopify should own available quantity, because that is what stops you overselling. QuickBooks should own cost of goods sold and inventory value. Syncing quantities both ways without a clear owner produces drift, phantom stock, and a race between two systems.
The common pattern for Shopify QuickBooks inventory is one directional and narrow: when an order ships, push a COGS entry to QuickBooks based on the item cost so gross margin is accurate, and let Shopify continue to manage on-hand counts. If you do need full quantity sync, run it on one schedule with one direction and one adjustment account, and reconcile monthly rather than trusting it blindly.
Does this work with QuickBooks Desktop?
It can, but not through the same API. QuickBooks Desktop has no cloud REST API. Data moves through the QuickBooks Web Connector using qbXML, which means a component runs on the machine hosting the company file, and syncs happen on a polling interval rather than instantly.
The mapping logic is the same (sales receipts, fee expenses, refund receipts, a clearing account), but the operational shape is different. The file has to be open or hosted, the Web Connector has to run, and you should expect batch behavior instead of near real time. For most Shopify sellers on Desktop, a daily summary sync is the sane target. If you are weighing a move to QuickBooks Online anyway, the API difference alone is usually the deciding factor.
Which method should you use to sync Shopify with QuickBooks?
There are three realistic paths, and they fit different stores.
| Dimension | Manual CSV export | Connector app | Mapped integration platform |
|---|---|---|---|
| Setup time | None to start, hours every month | 10 to 15 minutes | 20 to 40 minutes to map fields |
| Processing fees | You book them by hand | Usually automatic | Mapped to the expense account you choose |
| Refunds and chargebacks | Manual, often missed | Handled, with fixed logic | Handled, with your own period rules |
| Inventory and COGS | Not really | Varies by app | Optional, direction you define |
| Custom fields and accounts | Whatever you type | Limited to the app's schema | Any field to any field |
| Cost shape | Free, paid in bookkeeper hours | Per store subscription | Flat monthly, from $49 |
| Fits | Under roughly 50 orders a month | Single store, standard chart of accounts | Multi store, multi channel, custom books |
CSV export is fine at low volume and miserable at any real volume, mostly because fees and refunds have to be reconstructed by hand every month. A packaged connector app is a good fit if your chart of accounts looks like everyone else's. The moment you have two stores, a second sales channel, a custom income account per product line, or a bookkeeper with opinions, you want field level control. That is what a data integration platform gives you: you see both schemas, you draw the lines between them, and you can change a mapping without filing a support ticket. Our flat data integration pricing does not meter per order, which matters in Q4 when volume triples.
How do I avoid duplicate customers in QuickBooks?
Match on one stable key, and make it the normalized email address (lowercased, trimmed). Do not match on display name. "Sam Jones", "Sam Jones ", and "sam jones" are three customers to QuickBooks and one human to you. Guest checkouts with no email should roll up into a single generic customer instead of creating a new one per order.
Then make the sync idempotent. Before creating a customer, look one up by email. Before creating a sales receipt, look one up by the stored Shopify order ID. A sync that runs twice (because of a retry, a webhook redelivery, or someone clicking the button again) should produce the same books, not double revenue. This is worth testing on purpose: run the same order through twice in a sandbox and confirm you still have one sales receipt.
If you also take payments outside Shopify, the same shape applies to cards charged directly. A Stripe QuickBooks integration has the identical gross versus net problem, the identical clearing account solution, and the identical duplicate customer trap. Solve it once and you can reuse the pattern across every payment source you have. If you want to see the mapping before you commit to anything, the live demo lets you pick Shopify and QuickBooks and watch a real order get transformed field by field.
Sync Shopify orders to QuickBooks without breaking your books
Map orders, fees, refunds and payouts to the right accounts, then reconcile the deposit in one click. Flat price from $49 a month.