Short answer
Most Shopify–QuickBooks Online problems are accounting problems, not API problems. Decide first whether to post every order or a daily summary, and reconcile Shopify Payments payouts as net deposits that book fees and refunds separately. On the technical side, QuickBooks Online allows 500 requests per minute and 10 per second per company and app, apps on the free Builder tier get 500,000 metered read calls a month, and inventory quantity tracking requires the Plus or Advanced plan. Verify webhook signatures and never let a retry create a second sales receipt.
QuickBooks Online integration surface at a glance (documented by the vendor; see sources)
- API
- QuickBooks Online Accounting API (REST), authorized per company (realm ID) with OAuth 2.0.
- Rate limits
- 500 requests per minute per realm ID; 10 requests per second per realm ID and app (production).
- Batch endpoint
- Up to 30 payloads per batch recommended; 40 batch requests per minute per realm and app; 120 per minute per realm.
- Metered calls
- Apps on the Intuit App Partner Program Builder tier get 500,000 CorePlus calls per workspace per month; beyond that, HTTP 429.
- Webhooks
- Signed with an intuit-signature header: HMAC-SHA256 of the payload keyed with the app's verifier token.
- Inventory
- Quantity-on-hand tracking is available in QuickBooks Online Plus and Advanced.
- Shopify Orders
- Sync service Summarize
- QuickBooks Online Receipts
QuickBooks Online is the accounting system behind a large share of small and mid-size US Shopify stores. The integration looks simple — “send orders to QuickBooks” — but the hard part is producing books that reconcile to the bank. This page covers the accounting decisions first, then the API details. As on every page, documented marks statements from Intuit or Shopify documentation, and recommendation marks our guidance. Nothing here is accounting or tax advice; confirm the setup with your accountant.
How Shopify and QuickBooks Online connect
Documented (Intuit): the QuickBooks Online Accounting API is a REST API. Each QuickBooks company is identified by a realm ID, and apps are authorized per company with OAuth 2.0. QuickBooks can send webhook notifications when entities change.
Documented (Shopify): Shopify exposes orders, refunds, and Shopify Payments balance transactions and payouts through the Admin GraphQL API, and sends webhooks for events such as order creation.
Recommendation: the integration usually runs as a small external service (or a marketplace app) that listens to Shopify webhooks, keeps a mapping table of Shopify IDs to QuickBooks IDs, and posts to QuickBooks on a schedule. QuickBooks rarely needs to push data back to Shopify, unlike an ERP that runs fulfillment.
Decision 1: per-order or summary posting
| Approach | What QuickBooks receives | Good for | Watch out for |
|---|---|---|---|
| Per order | One sales receipt (or invoice) per Shopify order, refunds as refund receipts | Low volume; B2B orders that need invoices and terms | Thousands of transactions; more API calls; customer list growth |
| Daily summary | One summary transaction per day (or per payout) with lines for product sales, discounts, shipping, tax, and refunds | D2C stores with many small orders | Order-level detail stays in Shopify; needs a clear audit trail |
Recommendation: for D2C volume, summaries usually make cleaner books and fewer failure points. For B2B orders on payment terms, post individual invoices so accounts receivable works. Many stores do both: summaries for card-paid web orders, invoices for wholesale.
Decision 2: how payouts reconcile
Documented (Shopify): Shopify Payments balance transactions record each money movement — charges, refunds, adjustments, and payouts — with gross amount, fee, and net, and each transaction can be associated with the payout that settled it.
Recommendation: use a clearing account (sometimes called an undeposited funds or Shopify clearing account):
- Record sales and payments into the clearing account, not straight to the bank.
- When a payout lands, post a deposit to the bank account for the net amount, with lines that clear the payments, book processing fees to an expense account, and account for refunds, chargebacks, and adjustments.
- The clearing account should return to roughly zero after each payout. A growing balance is your early warning that something isn’t being posted.
This is the single change that most often turns “QuickBooks never matches the bank” into a five-minute monthly reconciliation. Gift cards, other gateways (PayPal, Shop Pay Installments), and marketplace orders each need their own clearing logic.
Sales tax
Recommendation: let Shopify — or the tax engine connected to Shopify — remain the system that calculates sales tax at checkout, and post the calculated tax to QuickBooks as a liability by jurisdiction rather than recalculating it in QuickBooks. Recalculating produces rounding differences and conflicting exemption decisions. Because US sales tax obligations depend on where you have nexus, have a tax professional review which reports you’ll file from and which system holds the source of truth. See sales tax in ERP integrations.
Products and inventory
Documented (Intuit): quantity-on-hand inventory tracking is available on QuickBooks Online Plus and Advanced.
Recommendation:
- If you post summaries, you don’t need every Shopify variant as a QuickBooks item — map sales to a few income categories instead.
- If you post per order with inventory tracking, match variants to QuickBooks items by SKU and store the QuickBooks item ID on your mapping table. Enforce unique SKUs in Shopify first (mapping products to SKUs).
- Keep one system as the stock source of truth. For multi-location stores, that is usually Shopify or a dedicated inventory tool, with cost of goods sold posted to QuickBooks — QuickBooks Online is not a warehouse management system.
Refunds and cancellations
Recommendation: post refunds in the same model as sales — a refund receipt or credit memo per order, or a refunds line in the daily summary. Don’t net a refund against the next day’s sales without a line of its own, or your sales reports will understate gross revenue. Cancellations before payment capture usually need no accounting entry. See refunds and cancellations.
API limits and metered calls
Documented (Intuit):
- Production: 500 requests per minute per realm ID and 10 requests per second per realm ID and app.
- Batch endpoint: up to 30 payloads per batch recommended; throttled at 40 batch requests per minute per realm ID and app, and 120 batch requests per minute per realm ID.
- Apps on the Builder tier of the Intuit App Partner Program have an included limit of 500,000 CorePlus API calls per workspace per month; calls beyond it are throttled with HTTP 429.
Recommendation: don’t poll QuickBooks for changes you can learn from Shopify. Read calls are the metered kind, so cache QuickBooks reference data (accounts, tax codes, item IDs) locally and refresh it occasionally. Use the batch endpoint for backfills, and retry 429s with exponential backoff.
Webhooks and authentication
Documented (Intuit): QuickBooks webhook notifications carry an intuit-signature header. Intuit’s verification is an HMAC-SHA256 hash of the payload keyed with the verifier token from the app dashboard, compared with that header.
Recommendation:
- Verify the signature on every notification and reject requests without one — don’t make verification conditional on the header being present.
- OAuth tokens expire and refresh tokens rotate: store the newest refresh token every time you refresh, in one place, and alert a human when a company’s authorization is revoked or lapses. A silently disconnected company is the most common reason a QuickBooks sync “stops working”.
Idempotency and retries
Documented (Intuit): Intuit’s best-practices guidance describes sending a unique requestid query parameter on write requests so that a repeated request returns the original response instead of creating a duplicate.
Recommendation: use requestid, but don’t rely on it alone. Keep your own mapping of Shopify order or payout IDs to QuickBooks transaction IDs, and set a reference you can query (for example the Shopify order number in the document number, within the field’s length limit). After a timeout, look the transaction up before retrying. The general pattern is in retries and idempotency.
App, connector, or custom build
Recommendation:
- Marketplace apps and connectors suit most single-store merchants with standard needs; evaluate them on payout reconciliation, refund handling, and multi-currency, not on how they sync orders.
- Custom integrations make sense with multiple stores and currencies, B2B invoicing rules, or when QuickBooks must reconcile with a 3PL or another ERP.
- If you’re outgrowing QuickBooks Online — multiple entities, warehouses, and complex fulfillment — compare the effort with a full ERP such as NetSuite and use the cost estimator for a first sizing.
Common pitfalls
- Gross sales posted to the bank, so deposits never match payouts.
- Fees never recorded, overstating revenue and cash.
- Duplicate sales receipts after retries without a lookup or
requestid. - Tax recalculated in QuickBooks, producing mismatches with what customers paid.
- Expired authorization that nobody notices for weeks.
- Inventory tracked in two places with no single source of truth.
Frequently asked questions
Should every Shopify order become its own transaction in QuickBooks Online?
Not necessarily. Posting each order gives order-level detail but creates thousands of transactions and more API calls. Many stores post a daily or per-payout summary (sales, tax, discounts, shipping, refunds, fees) instead and keep order detail in Shopify. Choose with your accountant based on what reports you need from QuickBooks.
Why don't my Shopify Payments deposits match QuickBooks?
A payout is a net amount — the sum of charges minus refunds, processing fees, chargebacks, and adjustments, often covering several days of orders. If QuickBooks only records gross sales, the bank deposit never matches. Record payments to a clearing account and post each payout as a deposit that clears those payments and books fees and refunds as separate lines.
Can QuickBooks Online track inventory for my Shopify store?
Quantity-on-hand tracking is available on QuickBooks Online Plus and Advanced, according to Intuit. Lower plans can still record products but not stock quantities. Even on Plus or Advanced, QuickBooks Online is an accounting system, not a warehouse system; stores with multiple warehouses or complex fulfillment often keep stock in Shopify or a dedicated inventory tool and post cost of goods sold to QuickBooks.
What happens if my integration exceeds QuickBooks API limits?
Requests are throttled with HTTP 429. Intuit documents 500 requests per minute per company and 10 per second per company and app, separate batch limits, and — for apps on the free Builder tier of the Intuit App Partner Program — a monthly allowance of 500,000 CorePlus calls per workspace. Summarized posting, batching, and webhooks instead of polling keep you well inside these limits.
How do I avoid duplicate sales receipts when a request times out?
Keep a mapping table of Shopify IDs to QuickBooks transaction IDs, write it as soon as a create succeeds, and before retrying an uncertain request, query QuickBooks for the transaction (for example by document number or a reference you set) instead of blindly posting again. Intuit's best-practices guidance also describes sending a unique requestid with write requests so a repeated request returns the original response.
Sources and further reading
Platform-specific statements on this page were checked against these sources on . Vendor APIs change; confirm details in the current documentation before you build.
- [1] API call limits and throttles — Intuit Developer
- [2] QuickBooks Online API best practices — Intuit Developer
- [3] Webhooks (QuickBooks Online Accounting API) — Intuit Developer
- [4] OAuth 2.0 for QuickBooks Online — Intuit Developer
- [5] Set up and track your inventory in QuickBooks Online — Intuit QuickBooks
- [6] ShopifyPaymentsBalanceTransaction (GraphQL Admin API) — Shopify
- [7] Shopify webhooks — Shopify
Related reading
- Platforms Shopify ERP Integration How Shopify connects to an ERP — the GraphQL Admin API, webhooks, inventory states, fulfillment orders, rate limits — plus the sync patterns and pitfalls that matter.
- ERP integrations Shopify NetSuite Integration: Architecture, APIs, and Pitfalls How to integrate Shopify with Oracle NetSuite — REST web services, OAuth 2.0, external-ID upserts, concurrency limits, order and inventory flows, and connector options.
- Guides How to Handle Refunds and Cancellations in an ERP Integration Model ecommerce refunds, cancellations, and returns in an ERP — credit notes, restocking, partial refunds, shipping refunds, and which system initiates each action.
- Guides How to Implement Retries and Idempotency A practical implementation of retries with exponential backoff and jitter, plus idempotency keys, so ecommerce-ERP integrations can retry safely without side effects.
- Comparisons Custom ERP Integration vs. Off-the-Shelf Connectors Compare building a custom ecommerce-ERP integration with buying a prebuilt connector — fit, cost over time, flexibility, support, and the questions to ask vendors.
- Tools ERP Integration Cost Estimator Estimate relative complexity and an illustrative effort range for your project.