Short answer
Connect WooCommerce to QuickBooks Online with WooCommerce webhooks (signed with X-WC-Webhook-Signature) plus a scheduled REST query using modified_after to catch anything missed, and run the sync outside WordPress so slow accounting calls never slow down checkout. Decide with your accountant between per-order sales receipts and daily summaries, reconcile gateway payouts (Stripe, WooPayments, PayPal) through a clearing account, post tax as calculated at checkout, and stay within QuickBooks Online's limits — 500 requests per minute and 10 per second per company and app, plus a monthly allowance of metered read calls on Intuit's free Builder tier.
QuickBooks Online integration surface at a glance (documented by the vendor; see sources)
- WooCommerce API
- REST API under /wp-json/wc/v3; orders can be listed with modified_after for incremental sync.
- WooCommerce webhooks
- Signed with X-WC-Webhook-Signature (base64 HMAC-SHA256); disabled after 5 consecutive failed deliveries.
- QuickBooks limits
- 500 requests per minute per realm ID; 10 requests per second per realm ID and app.
- Metered calls
- Builder tier of the Intuit App Partner Program: 500,000 CorePlus calls per workspace per month; beyond that, HTTP 429.
- Inventory
- QuickBooks Online quantity-on-hand tracking is available in the Plus and Advanced plans.
- Stripe payouts
- Stripe's balance transactions can be listed by payout ID for automatic payouts.
- WooCommerce Orders
- Sync service Verify
- QuickBooks Online Receipts
- Gateway payouts Stripe
WooCommerce and QuickBooks Online are one of the most common pairings for small US online stores. Because WooCommerce runs on your own WordPress hosting and QuickBooks is an accounting system rather than an ERP with fulfillment, this integration is mostly about two things: getting every sale, refund, fee, and tax amount into the books correctly, and making sure deposits match the bank. As on every page, documented marks statements from WooCommerce, Intuit, or Stripe documentation, and recommendation marks our guidance. Nothing here is accounting or tax advice.
How the two connect
Documented (WooCommerce): WooCommerce exposes a REST API under /wp-json/wc/v3 and sends webhooks for topics such as order creation and updates. Webhook payloads are signed with X-WC-Webhook-Signature, a base64-encoded HMAC-SHA256 of the payload. A webhook is disabled after five consecutive failed deliveries. Order listings accept a modified_after parameter, which supports incremental queries.
Documented (Intuit): the QuickBooks Online Accounting API is a REST API authorized per company (realm ID) with OAuth 2.0.
Recommendation: run the integration as a small external service, not inside WordPress page requests:
- Receive WooCommerce webhooks, verify the signature on the raw body, and queue the event.
- Fetch the current order from the WooCommerce API (webhook payloads can be stale by the time you process them).
- Post to QuickBooks according to your posting model (below), storing the WooCommerce order ID → QuickBooks transaction ID mapping.
- Every hour or so, list orders with
modified_afteryour last checkpoint to catch anything the webhooks missed — including the whole period a webhook was disabled.
Decide the posting model first
| Approach | QuickBooks receives | Fits |
|---|---|---|
| Per order | One sales receipt per paid order; refund receipts for refunds | Low volume, or when bookkeepers need order-level detail in QuickBooks |
| Daily summary | One summary per day or per payout with lines for sales, discounts, shipping, tax, refunds | Higher volume D2C stores |
| B2B invoices | Invoices on terms for wholesale orders | Stores that sell on account |
Recommendation: decide this with your accountant before choosing an app or writing code. It drives the number of API calls, the size of your customer list, and how easy month-end is. The same trade-offs apply as in Shopify + QuickBooks Online.
Payouts: Stripe, WooPayments, and PayPal
Documented (Stripe): for automatic payouts, Stripe’s balance transactions can be listed by payout ID, returning only the transactions paid out in that payout. Stripe also offers a payout reconciliation report.
Recommendation: every gateway pays out net amounts that bundle charges, refunds, fees, and disputes. Use one clearing account per gateway:
- Record each payment (or each day’s payments) into the gateway’s clearing account.
- For each payout, read its contents from the gateway — Stripe balance transactions by payout, or the payout/settlement report of WooPayments or PayPal.
- Post a deposit: net to the bank, fees to merchant fees expense, refunds and disputes to their accounts, and clear the payments from the clearing account.
- Check that the clearing account returns to roughly zero after each payout.
The pattern is explained step by step in reconciling payouts in your ERP.
Sales tax
Recommendation: let WooCommerce — or the tax engine connected to it — calculate tax at checkout, and post that tax to QuickBooks as a liability by jurisdiction. Don’t let QuickBooks recalculate tax on imported sales, or amounts will differ from what customers paid. If you sell on marketplaces too, keep marketplace-collected tax out of your own liability. See sales tax in ERP integrations.
Products and inventory
Documented (Intuit): quantity-on-hand tracking is available on QuickBooks Online Plus and Advanced.
Recommendation:
- With summary posting, map sales to a handful of income accounts or product categories; you don’t need every variation as a QuickBooks item.
- With per-order posting and inventory in QuickBooks, match each WooCommerce product and variation to a QuickBooks item by SKU. WooCommerce allows empty SKUs, so enforce unique, non-empty SKUs before launch.
- Keep a single stock master. For one location and simple products, QuickBooks can be it; otherwise keep stock in WooCommerce or an inventory tool and post cost of goods sold.
Refunds
Documented (WooCommerce): refunds are a sub-resource of orders in the REST API.
Recommendation: post each refund as a refund receipt (per-order model) or as a refunds line in the summary, with tax reversed in the same jurisdictions. Partial refunds and shipping-only refunds need their own test cases — the test plan template lists them. See refunds and cancellations.
QuickBooks API limits and reliability
Documented (Intuit): production limits are 500 requests per minute per realm ID and 10 requests per second per realm ID and app. 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, after which calls are throttled with HTTP 429. Intuit’s best-practices guidance describes a requestid parameter so a repeated write returns the original response.
Recommendation:
- Cache QuickBooks reference data (accounts, tax codes, item IDs) instead of reading it on every order — reads are the metered kind.
- Use
requestidon writes and keep your own mapping table; after a timeout, look the transaction up before retrying. - Store the newest refresh token every time you refresh and alert when a company’s authorization is lost.
WooCommerce-specific pitfalls
- Webhooks silently disabled after five failed deliveries — monitor webhook status and keep the
modified_aftersafety net. - Plugin side effects: subscription, gift card, or multi-currency plugins change order data; test mappings with the real plugin set.
- Direct database integrations that break with High-Performance Order Storage — use the REST API.
- Hosting limits: large backfills compete with shoppers for the same server; run them off-peak.
- Payouts never reconciled, so the clearing account grows month after month.
Frequently asked questions
Should the WooCommerce–QuickBooks sync run as a WordPress plugin?
For anything beyond a small store, run it as an external service. A plugin that calls QuickBooks during checkout or admin actions makes accounting latency and outages visible to shoppers and staff. An external service receives WooCommerce webhooks, queues them, and posts to QuickBooks independently.
Why are some WooCommerce orders missing in QuickBooks?
The most common causes are a WooCommerce webhook that was disabled after repeated failed deliveries, a QuickBooks authorization that expired or was revoked, and orders with products or tax rates that have no mapping. Add a scheduled query for orders modified since your last checkpoint, alert on disabled webhooks and lost authorization, and send unmapped orders to a review queue.
How do I reconcile Stripe or WooPayments deposits in QuickBooks?
Record payments into a clearing account, then post each gateway payout as a deposit that clears the payments it contains and books fees, refunds, and disputes separately. For Stripe, balance transactions can be listed by payout ID, which gives you the contents of each payout. Other gateways provide payout or settlement reports for the same purpose.
Can QuickBooks Online be the inventory master for WooCommerce?
It can on QuickBooks Online Plus or Advanced, which include quantity-on-hand tracking, and for simple single-location stores it works. For multiple warehouses, kits, or a 3PL, keep stock in WooCommerce or a dedicated inventory tool and post cost of goods sold to QuickBooks.
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] WooCommerce REST API documentation — WooCommerce
- [2] High-Performance Order Storage — WooCommerce
- [3] API call limits and throttles — Intuit Developer
- [4] QuickBooks Online API best practices — Intuit Developer
- [5] Set up and track your inventory in QuickBooks Online — Intuit QuickBooks
- [6] List all balance transactions — Stripe
- [7] Payout reconciliation report — Stripe
Related reading
- Platforms WooCommerce ERP Integration How WooCommerce connects to an ERP — the REST API, webhooks and signatures, HPOS order storage, batch endpoints — and the hosting factors that shape a reliable sync.
- ERP integrations Shopify QuickBooks Online Integration: Orders, Payouts, and Inventory How to connect Shopify to QuickBooks Online — per-order vs. daily summary posting, Shopify Payments payout reconciliation, inventory limits, API throttles, and webhooks.
- Guides How to Reconcile Shopify Payments Payouts in Your ERP Why Shopify payouts never match your sales, and how to reconcile them in an ERP — clearing accounts, balance transactions, fees, refunds, and chargebacks.
- Guides Sales Tax in Ecommerce ERP Integrations: Nexus, Tax Engines, and Data Flow How US sales tax should flow between Shopify, a tax engine, and your ERP — nexus after Wayfair, marketplace orders, exemptions, refunds, and reconciliation.
- 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.
- Templates Shopify to ERP Field Mapping Template A starting field map for the order-to-cash flows most Shopify–ERP integrations need.