Connect Shopify to QuickBooks
Why teams connect Shopify and QuickBooks
Sales run through Shopify. The books are in QuickBooks. Without an integration, someone exports the Shopify finance summary each month, hand-keys a few journal lines, guesses at the Shopify Payments fee, and the QuickBooks bank balance never matches the statement.
- Each paid order is booked as a sales receipt with product, shipping, discount, and tax on separate lines, so the revenue and liability accounts are right
- Shopify Payments payouts are reconciled to a bank deposit whose total matches the bank line, with processing fees on a negative line to a fees account
- Refunds and partial refunds post as refund receipts against the original order, categorized the same way
- Every entry is a run you can inspect, so a deposit or receipt that looks wrong traces back to the order and the transactions inside the payout
Worked example
The bookkeeping flow most stores turn on first.
Every paid Shopify order booked in QuickBooks as a sales receipt, payout reconciled
Two flows. One on the order, one on the payout, both safe to repeat.
- Trigger: a Webhook trigger with Auto Register With Shopify for
orders/paid, carryingid,name(the "#1001" order number),line_items,total_tax,shipping_lines,total_discounts, andcustomer. - Idempotency: query QuickBooks for a sales receipt whose
DocNumberequals the Shopify order name. If one exists, stop. - Customer: query QuickBooks for a customer with
customer.email, then Create Customer or Update Customer, so a repeat buyer is not duplicated. - Sales receipt: QuickBooks
Create Sales ReceipttoUndeposited Funds, one line perline_itemto a Sales Income account, plus a shipping line, a discount line, and a tax line mapped to the tax agency. - Payout flow: a daily scheduled flow lists new Shopify payouts and their transactions (
charge,refund,fee,adjustment), thenCreate Entitywith the Deposit type to the bank account clearing the matching receipts, with a negative line for total fees toMerchant Fees. - Exceptions: a payout transaction type the mapping does not cover, or an order whose tax lines do not sum, goes to a person as a Wait for form task with the Shopify link, rather than being guessed at.
Field mapping
The starting map for the Shopify order to QuickBooks SalesReceipt step.
| Shopify | QuickBooks Online | Notes |
|---|---|---|
order.name | SalesReceipt.DocNumber | Idempotency key. Queried before creating. Not order.id, which is not human-legible on the books. |
order.customer.email | SalesReceipt.CustomerRef | Upsert match key. A guest checkout with no email maps to a single "Shopify Guest" customer. |
line_item.price * quantity | SalesReceipt.Line.Amount | One sales line per item. Shopify prices are decimal strings; parse, do not divide. |
line_item.sku | SalesReceipt.Line.ItemRef | Mapped to a QuickBooks product or service. Unmapped SKUs fall back to a generic "Online Sales" item. |
total_shipping_price_set | SalesReceipt.Line (Shipping Income) | Its own line, not folded into product revenue. |
total_discounts | SalesReceipt.Line (negative, Discounts given) | Negative line so the receipt total matches Shopify's. |
tax_lines[].price | SalesReceipt.TxnTaxDetail | Currency gotcha: Shopify sends tax already computed. Map to the QuickBooks tax code, do not let QuickBooks recompute. |
order.currency | SalesReceipt.CurrencyRef | Override only on a multi-currency company. Must match the deposit bank account currency. |
order.processed_at | SalesReceipt.TxnDate | ISO 8601 in Shopify, date only in QuickBooks. Use the store time zone. |
What syncs, each direction
- Paid orders. Each paid order becomes a sales receipt with product, shipping, discount, and tax on separate lines. (Shopify to QuickBooks)
- Payout deposits. Each Shopify Payments payout is a bank deposit that clears the matching receipts, with fees on a negative line. (Shopify to QuickBooks)
- Refunds. Full and partial refunds, from Shopify's refund webhook, become refund receipts through Create Entity against the original customer and accounts. (Shopify to QuickBooks)
- Product cost (optional). A QuickBooks item cost change can update the Shopify variant cost so margin reports line up. Off by default. (QuickBooks to Shopify)
Governance and audit
The same controls apply to this sync as to every other Neblex workload.
- Run history. Every entry is a run with the Shopify order or payout, the transactions inside it, and the receipt or deposit it created. A failed run can be replayed from the step that failed, and the existence check stops a second posting.
- Review tasks. Unmapped SKUs, tax lines that do not sum, and unrecognized payout transaction types go to a person as a task rather than posting a wrong line.
- Scoped access. Shopify uses a custom app token scoped to
read_ordersandread_shopify_payments_payouts. QuickBooks uses an OAuth connection to one company file. - Environments. Build against a Shopify development store and a QuickBooks sandbox company, then promote the same flow to production.
Frequently asked questions
Do I get every order, or a daily summary?
Your choice. The flow above books a sales receipt per order for a full sub-ledger. If your accountant only wants a summary, build a daily flow that books one journal entry per payout instead.
Will the QuickBooks bank balance match my statement?
Yes. The deposit total equals the Shopify Payments payout that actually arrived, with fees and refunds as negative lines, so it reconciles to the bank line one to one.
How is sales tax handled?
Shopify computes tax at checkout and sends it on the order. The flow maps those amounts to your QuickBooks tax codes and agency without letting QuickBooks recompute, so the two always agree.
What about a redelivered Shopify webhook?
The flow queries QuickBooks for a receipt with the order number before creating one, so a redelivered orders/paid does not post twice.
Is this different from the QuickBooks Connector by Intuit or A2X?
A2X is strong for summarized ecommerce accounting and many teams are happy on it. Neblex fits when you want the per-order detail, the same run history and governance as your other integrations, and the freedom to branch the flow, for example holding high-risk orders for review before they post.
Can it sync inventory or fulfillment?
That is a separate flow and usually belongs between Shopify and an ERP or a 3PL, not the accounting system. See the Shopify to NetSuite page for that pattern.
Connectors used
Shopify
E-commerce
- Operations
- 367
- Operations with typed output
- 100%
- Change triggers
- Poll or inbound webhook
- Signs in with
- Connection fields
QuickBooks
Finance, Billing & Payments
- Operations
- 50
- Operations with typed output
- 100%
- Change triggers
- Poll or inbound webhook
- Signs in with
- OAuth 2.0 sign-in
Bring one real integration
We will build it with you against your own systems, with the run log open.