Shopify logo
QuickBooks logo

Shopify + QuickBooks Integration

Orders, refunds, payouts, and fees land in QuickBooks Online in a form your accountant can close the month on. QuickBooks is an accounting system, not an ERP, so the right scope is narrower than most vendors imply, and for many stores a nightly summary journal beats per-order sync.

mode:
Shopify → QuickBooks
latency:
Near real-time or daily summary
maturity:
Production-tested

what syncs

What syncs, which way, and how fast

Every row is a real data flow with a real trigger. The frequency column is what you should expect in production, not a best case.

Orders

dir:
Shopify → QuickBooks
frequency:
Near real-time (webhook)

Paid checkout orders become sales receipts. B2B orders on terms become invoices against real customer records. On busy stores this row is replaced entirely by the daily summary below.

Daily summary

dir:
Shopify → QuickBooks
frequency:
Nightly

One journal entry per day: gross sales, discounts, refunds, shipping, taxes, and gift cards as account-level lines. The volume-proof alternative to per-order documents.

Payouts and fees

dir:
Shopify → QuickBooks
frequency:
Per payout

Each Shopify Payments payout posts as an entry moving the net amount from the clearing account to the bank, with fees booked to expense. The bank feed then matches one to one.

Refunds

dir:
Shopify → QuickBooks
frequency:
Near real-time

Refund receipts against sales receipts, credit memos against invoices. Partial refunds keep line-level detail so margin reporting stays truthful.

Customers

dir:
Shopify → QuickBooks
frequency:
Near real-time

B2C checkouts consolidate behind a single web customer. B2B accounts map one to one with their terms. QuickBooks requires unique display names, so collisions are resolved deterministically.

Products

dir:
Shopify → QuickBooks
frequency:
On change

Shopify products map to QuickBooks service or non-inventory items so each line posts to the right income account. Inventory items only when QuickBooks genuinely tracks stock, which is rare.

architecture

How it actually works

QuickBooks Online is cloud software with a real REST API behind OAuth, so connectivity is not the problem. The decisions that matter are granularity, meaning whether each order becomes its own document or each day becomes one journal entry, and how payouts reconcile against the bank feed. QuickBooks Desktop is a different project and is scoped as one.

  1. Shopify webhooks + queue

    Order, refund, and customer events are HMAC-verified and queued with idempotency keys. Shopify redelivers webhooks, and a duplicate document in an accounting system is worse than in a CRM: someone has to find it and reverse it.

  2. Payout fetcher

    Reads payout and balance transaction data from the Shopify Admin API so gross sales, fees, and refunds are known per payout before anything posts. This data only exists for Shopify Payments; other gateways settle separately with their own fee model.

  3. Mapping worker

    Resolves items, customers, tax treatment, and the account each line posts to. The chart-of-accounts mapping is agreed with your accountant in discovery, because they are the ones who have to close the month on it.

  4. QuickBooks Online API

    OAuth 2.0 against the QBO REST API, writing sales receipts, invoices, refund receipts, and journal entries. Intuit throttles API traffic, so writes queue with backoff instead of firing in bursts during a busy hour.

  5. Clearing account model

    Sales never post straight to the bank account. They post to a Shopify clearing account, and each payout entry moves the net amount to the bank and books the fees, so every bank feed line matches exactly one payout.

failure modes

What breaks, and what happens when it does

Every integration fails eventually. The difference between a good one and a bad one is whether it fails safely and tells you.

  • Payouts that never match the books

    The bank feed shows a deposit that matches no sales figure anyone can produce, and reconciliation becomes a monthly archaeology project.

    handling

    A payout is gross sales minus fees, refunds, and adjustments, and it usually spans more than one day of orders. Sales post to a clearing account and each payout posts as its own entry with fees broken out, so the net amount ties to the bank line without spreadsheet forensics.

  • Duplicate posting from webhook redelivery

    The same order appears twice in QuickBooks and revenue is overstated until someone catches it at month end.

    handling

    Shopify redelivers webhooks when an endpoint responds slowly, so every event id is recorded and checked before posting. The Shopify order id is also stamped on the QuickBooks document, which makes any duplicate detectable and provable rather than a mystery.

  • Sales tax recalculated by QuickBooks

    QuickBooks computes a different tax figure than Shopify charged at checkout, and the totals drift by cents that compound across a month.

    handling

    Shopify is authoritative for the tax the customer actually paid. Depending on edition and region, we either pass the charged tax through explicitly on each document or post tax to a liability line in the daily summary, then reconcile at line level rather than letting two tax engines argue.

  • Per-order sync collapsing at volume

    A promotion doubles order volume, the books fall hours behind, and QuickBooks itself slows under tens of thousands of documents.

    handling

    Intuit throttles API requests, and QuickBooks was never meant to hold every order line of a busy store. Past the point where nobody opens individual sales receipts any more, we switch to the daily summary journal and keep order-level detail in Shopify, where it already lives.

  • Refunds landing in the wrong period

    A refund posts against a sale from weeks ago and the payout containing it no longer ties to the bank deposit.

    handling

    Refunds are booked in the payout period that actually contains them rather than backdated to the original sale. The sale keeps its history, the payout stays reconcilable, and your accountant does not have to reopen a closed month.

  • Gift cards booked as revenue

    Revenue is overstated in the month gift cards sell and understated when they redeem, and the accountant flags it at year end.

    handling

    Gift card sales post to a liability account and redemptions draw it down, in both per-order and summary modes. This is standard accounting treatment that quick connector setups routinely skip because it takes configuration to get right.

field mapping

A real slice of the mapping

This is an abridged Order → QBO SalesReceipt mapping, shown so you can sanity-check it against your own system.

Order → QBO SalesReceipt

shopify → quickbooks

  • order.nameSalesReceipt.DocNumber

    Searchable in both systems

  • order.idSalesReceipt.PrivateNote

    Duplicate detection and lookups

  • customer.emailCustomer.PrimaryEmailAddr

    B2B match key

  • line_item.skuLine.SalesItemLineDetail.ItemRef

    Resolved via item lookup

  • line_item.quantityLine.SalesItemLineDetail.Qty
  • line_item.priceLine.SalesItemLineDetail.UnitPrice
  • total_taxSalesReceipt.TxnTaxDetail

    Passed through, not recalculated

  • gatewaySalesReceipt.DepositToAccountRef

    Clearing account per gateway

Representative per-order defaults. Summary-journal builds replace this table with an account-level mapping agreed with your accountant during discovery.

implementation

Timeline and cost

typical duration

2 to 4 weeks

included in scope

  • Discovery with your accountant and a chart-of-accounts mapping
  • Order, refund, and customer flows per the matrix above
  • Payout and fee reconciliation against the bank feed
  • Per-order versus summary decision, documented with the reasoning
  • Idempotent queue, retry, and failure alerting
  • Handover notes written for your bookkeeper, not just your developers

what moves it up

  • QuickBooks Desktop or Enterprise via the Web Connector
  • Multiple stores or currencies posting into one company file
  • Historical backfill of orders and payouts
  • Inventory sync where QuickBooks genuinely holds stock
  • Payment gateways beyond Shopify Payments, such as PayPal

questions

Questions buyers actually ask

Should Shopify orders sync to QuickBooks per order or as a daily summary?

Per-order sync suits stores with modest volume, B2B customers paying on terms, or an accountant who wants customer-level detail inside QuickBooks. A daily summary journal suits everyone else. One entry per day carries gross sales, discounts, refunds, shipping, taxes, gift cards, and fees as account-level lines, and order-level detail stays in Shopify, where it is searchable anyway. The practical test: once nobody opens individual sales receipts in QuickBooks any more, the summary is the better design, and it removes the API throttling and file bloat problems at the same time.

Why does our Shopify payout never match our sales in QuickBooks?

Because a payout is not a day of sales. It is gross sales minus processing fees, minus refunds, minus adjustments, and the orders inside it usually span more than one calendar day. If sales post straight to the bank account, nothing will ever tie. The fix is structural: sales post to a clearing account, and each payout posts as its own entry that moves the net amount to the bank and books the fees. After that, every deposit on the bank feed matches one payout entry exactly, and reconciliation stops being detective work.

Does this work with QuickBooks Desktop or Enterprise?

Yes, but it is a genuinely different project, not a checkbox. QuickBooks Online has a modern REST API that a cloud service calls directly. Desktop and Enterprise integrate through the QuickBooks Web Connector, where the machine running QuickBooks polls for queued work, or through a hosted environment. That polling model changes latency, error handling, and who maintains the connection, so we scope Desktop work separately and price it honestly. Intuit’s investment is visibly in Online, so if you are choosing a version today rather than living with an existing file, integrate Online.

Can QuickBooks manage our inventory?

Technically in a limited way, practically usually no. Inventory tracking is edition-gated in QuickBooks Online and exists to value stock for accounting, not to run multi-location, multi-channel operations. We treat QuickBooks as the financial record and leave stock control to Shopify or a dedicated inventory system. If inventory operations are the actual problem you are trying to solve, you are shopping for an ERP or an IMS rather than an accounting sync, and we will tell you that in the first call instead of selling you the wrong project.

How is sales tax handled between Shopify and QuickBooks?

Shopify is authoritative for the tax charged at checkout, and the integration never lets QuickBooks recalculate it. US editions of QuickBooks Online prefer to compute sales tax themselves, so per-order documents need the charged tax passed through explicitly, and where that fights the automated behaviour, the cleaner pattern is posting tax to a liability account in the daily summary. In VAT and GST regions, Shopify tax lines map to the corresponding QuickBooks tax codes. Either way, the number the customer paid is the number in the books, reconciled at line level.

Do we need a custom integration or will an app do?

Often an app is enough and we say so. Mature connector apps handle straightforward per-order sync, and payout-summary tools such as A2X exist precisely because the payout is the hard part. Custom work earns its keep when you run multiple stores or currencies into one QuickBooks file, sell B2B on terms with real customer records, take payments through gateways beyond Shopify Payments, or have a posting scheme your accountant has already defined that no app can express. A short audit is cheap compared with discovering mid-quarter that an app cannot fit your chart of accounts.

Will thousands of guest checkouts bloat our QuickBooks customer list?

Not if the sync is designed rather than defaulted. B2C checkouts consolidate behind a single web customer, so ten thousand one-time buyers do not become ten thousand QuickBooks records that slow the file and mean nothing to your accountant. Genuine B2B accounts map one to one with their terms and contact details. QuickBooks Online also requires display names to be unique across its name lists, so a naive per-customer sync eventually collides with an existing customer or vendor name and stops. Deduplication rules are set before the first sync, not discovered after it.

shopify + quickbooks

Get a posting scheme your accountant will sign off

Tell us your monthly order volume, whether anyone buys on terms, and who closes your books. We will tell you whether you need per-order sync, a summary journal, or just an app, with a fixed price for the version you actually need.