resources
WooCommerce Accounting Integrations: The QuickBooks and Xero Setup Guide Store Owners Actually Need
21 Sept 2026

Running a WooCommerce store means running an accounting workflow, whether you meant to or not. Every order, refund, shipping charge, gateway fee, tax line, and coupon eventually has to land in your books. Do it by hand and you lose evenings to reconciliation. Do it wrong and your accountant sends you a bill with more zeros than expected.
QuickBooks Online and Xero are the two accounting platforms most WooCommerce merchants end up on. Both connect to WooCommerce, but the way you connect them changes everything: how clean your ledger stays, how much your bookkeeper charges, and how badly a tax audit hurts.
This guide walks through the three connection approaches, the actual setup for each platform, the tax-mapping decisions that trip up most stores, and a decision framework for when a plugin is enough and when custom work pays for itself.
Why sync accuracy matters more than sync speed
Most integration write-ups obsess over "real-time sync." Real-time sync is nice. Accurate sync is what saves money.
A poorly mapped integration will pull WooCommerce orders into QuickBooks or Xero as sales, but it will do one or more of the following things wrong:
- Post gross sales but drop transaction fees, so revenue looks inflated and margins look thin.
- Duplicate tax lines because both the order and the tax rate hit the same account.
- Bundle shipping into sales income, breaking your COGS reporting.
- Miss refunds and partial refunds, so returns silently accumulate in receivables.
- Skip multi-currency conversions, leaving orders in the storefront currency while your bank posts in home currency.
Any one of those forces a manual reconciliation cycle every month. Three or four of them and you are effectively keeping a second set of books.
The fix is not a faster sync. It is a mapping decision made once, correctly, at setup.
The three ways to connect WooCommerce to QuickBooks or Xero
You have three options. Pick before you install anything.
1. Off-the-shelf plugin (fastest, cheapest, most opinionated)
A plugin such as MyWorks Sync, QuickBooks Connector, or Xero Bridge for WooCommerce installs on your WordPress site and handles the API calls for you.
Best for: Stores with 100 to 3,000 orders per month, standard product catalogs, one or two tax jurisdictions, and no custom order fields.
Trade-offs: You get their mapping model. Custom fields, unusual tax setups, marketplace-style split payouts, and B2B pricing tiers usually need workarounds. Expect $15 to $100 per month depending on order volume.
2. Middleware connector (moderate cost, more flexibility)
Zapier, Make, and dedicated iPaaS tools like Celigo or Workato sit between WooCommerce and the accounting platform. You define the trigger, filter, and mapping steps.
Best for: Stores that need conditional logic (only sync paid orders, only sync certain product categories, split marketplace commissions into a separate account), or stores that already run other automations through the same platform.
Trade-offs: Every run costs a task or operation credit. High-volume stores can exceed budget quickly. Debugging failed runs takes technical skill.
3. Custom API integration (highest upfront cost, lowest long-term cost at scale)
A developer builds a direct connection between the WooCommerce REST API and the QuickBooks or Xero API, hosted on your own server or a lightweight cloud function. This is standard custom WooCommerce development work and usually takes two to six weeks depending on how many edge cases your business runs into.
Best for: Stores doing over 5,000 orders per month, marketplaces, multi-store setups, ERP-adjacent workflows, or any operation where the plugin approach has already broken twice.
Trade-offs: Higher upfront build cost, typically $4,000 to $15,000 depending on complexity. Once built, it costs almost nothing to run and behaves exactly the way your accountant wants it to.
If you are not sure which bucket you belong in, the plugin route is the safe first move. You can always graduate to a custom build later, and the mapping decisions you make now will carry over.
Setting up QuickBooks Online with WooCommerce
Here is the plugin-based path using MyWorks Sync, which most stores use for QuickBooks Online. The mapping logic below applies whether you use MyWorks, QuickBooks Connector, or a custom build.
Step 1: Chart of accounts prep
Before you connect anything, log into QuickBooks Online and confirm you have distinct accounts for:
- Sales income (broken out by product category if that is how your P&L reports)
- Shipping income
- Discounts (as a contra-income account, not an expense)
- Sales tax payable (per jurisdiction if you file in multiple states)
- Merchant fees (Stripe, PayPal, Authorize.net, etc.)
- Refunds and returns
- Gift card liability (if you sell gift cards)
If any of those accounts are missing, create them now. Fixing this later means rewriting six months of transaction history.
Step 2: Product mapping strategy
Decide whether you want individual product-level sync or category-level rollup.
Individual product sync creates a QuickBooks item for every WooCommerce product. It gives your accountant granular COGS data, but a catalog of 2,000 SKUs becomes a 2,000-item mess in QuickBooks.
Category rollup maps every product in a WooCommerce category to a single QuickBooks item (for example, "Apparel Sales"). Cleaner books, less granular reporting.
For most stores under $2M in annual revenue, category rollup is enough. Above that, product-level sync starts to matter.
Step 3: Connect and authorize
In WooCommerce, install your chosen plugin. Follow the OAuth prompt to authorize the connection to your QuickBooks Online company file. You will be asked to grant access to accounts, items, customers, invoices, and payments. Grant all of them, otherwise the sync will fail silently on the first order that needs a missing scope.
Step 4: Map the six critical touchpoints
This is where most setups quietly fail. Map each of these deliberately.
WooCommerce Field | QuickBooks Account |
| Order line item (product) | Sales income (per category or SKU) |
| Shipping | Shipping income |
| Tax | Sales tax payable |
| Coupon / discount | Discounts (contra-income) |
| Gateway fee | Merchant fees (expense) |
| Refund | Refund receivable, then bank clearing |
If your plugin does not surface all six of these, it will lump some of them into the sales account. That is how gross margin ends up looking 4 to 8 points higher than reality.
Step 5: Test with a $1 order
Run a real transaction. Pay with a real card. Check every field in QuickBooks:
- Did the invoice post at the correct total?
- Did shipping post to its own account?
- Did tax post to the correct jurisdiction?
- Did the gateway fee show up as a separate line?
- Did the customer record get created without duplication?
If any of those five checks fail, do not turn on historical sync yet.
Step 6: Historical import decisions
You will be tempted to backfill six months of orders. Resist it until the go-forward sync has run cleanly for two weeks. Historical imports amplify mapping errors across every order at once, and reversing them is worse than starting fresh.
Setting up Xero with WooCommerce
Xero has stronger native multi-currency handling and a cleaner tax model than QuickBooks Online, which makes it the more popular pick outside North America. The setup pattern is similar, but three things differ.
Difference 1: Tax rates, not accounts
Xero uses tax rates as first-class objects. In QuickBooks Online, tax often lives inside the invoice metadata. In Xero, each product is tagged with a tax rate, and the tax rate determines which account the tax posts to.
Before you connect the sync, make sure every WooCommerce tax rate has a corresponding Xero tax rate with matching percentage and reporting label. GST, VAT, HST, and state sales taxes should each have their own Xero tax rate object. If you sell across the EU, add tax rates for each destination country you register in for OSS reporting.
Difference 2: Invoice vs. sales receipt logic
For paid orders, Xero will create an invoice and mark it paid, or create a "receive money" transaction depending on your plugin settings. Invoice mode preserves customer records and history. Receive money mode is faster but loses per-customer data.
Pick invoice mode. The extra API calls are worth the reporting depth.
Difference 3: Bank feed reconciliation
Xero's biggest advantage is its bank feed. Once your sync posts orders correctly, Xero will match Stripe, PayPal, and bank deposits to the WooCommerce invoices automatically. To make this work, the payment date on the invoice must match the gateway payout date, not the order date. Most plugins get this wrong by default. Check your plugin settings for a "payment date = payout date" option, and enable it.
The Xero setup checklist
- Create tax rates in Xero that match every WooCommerce tax jurisdiction.
- Create accounts for sales, shipping, discounts, gateway fees, refunds, and gift card liability, same as the QuickBooks list.
- Install a plugin such as MyWorks Sync for Xero or a Xero-specific connector. Authorize with OAuth 2.0.
- Map products to sales accounts (category rollup is usually enough).
- Configure payment sync to use payout date, not order date.
- Test with a $1 order, verify all six touchpoints, then let it run for two weeks before touching historical data.
Tax mapping: the decision that costs most stores money
This is the section every setup guide skips. Get it wrong and your accountant will spend hours cleaning it up every quarter.
If you sell in the US
Each state you have nexus in needs its own tax account in QuickBooks (or its own tax rate in Xero). If you use TaxJar, Avalara, or WooCommerce's built-in tax rates, verify the destination state maps to the correct downstream account. A single misrouted state ends up on the wrong sales tax return and gets you a notice.
If you sell in the EU or UK
Post-Brexit, UK VAT and EU VAT are separate returns. Set up two distinct tax rate structures. For EU OSS reporting, one rate per destination country, all pointing to the same OSS payable account.
If you sell in India
GST needs three components (CGST, SGST, IGST) mapped depending on whether the sale is intra-state or inter-state. Most plugins do not handle this natively. This is one of the strongest arguments for a custom build if India is a primary market.
If you sell across Australia and NZ
GST applies to both, but at different rates. Xero handles this well natively; QuickBooks Online needs a custom tax code setup.
Multi-currency
If your storefront accepts currencies other than your accounting home currency, decide once whether to post orders at the transaction exchange rate or the day-end rate. Then lock that setting. Flipping between the two mid-year makes reconciliation a nightmare.
Common errors and how to fix them
"Duplicate customer" errors on sync Most plugins match customers by email. If a customer checks out as a guest twice with the same email, you get duplicates. Enable "match by email" and "merge existing customer" in your plugin settings.
"Tax rate not found" errors Every WooCommerce tax rate must have an exact match in the accounting platform. Adding a new state or country in WooCommerce without adding it in QuickBooks or Xero will kill the sync until you fix it.
Refunds post as expenses instead of refunds Almost every plugin gets this wrong out of the box. Refunds should post as a credit note against the original invoice, not as an expense line. Check your plugin's refund mapping and adjust.
Payout amount does not match invoice total The invoice is gross. The payout is net of gateway fees. If the gateway fee is not being pulled in as a separate line, your bank feed will never match. Add the gateway fee sync as a separate step if your plugin does not do it automatically.
Historical orders sync but new orders do not Almost always an OAuth token expiration. Re-authorize the connection. If it happens more than once a quarter, check whether your plugin refreshes tokens automatically.
When to build custom instead of buying a plugin
Use this decision tree.
Build custom if any of the following are true:
- You do more than 5,000 orders per month and plugin sync speed cannot keep up.
- You sell in a market where the tax model is not natively supported (India GST, Brazil, some GCC countries).
- Your business runs on marketplace payouts (Amazon, Etsy, Faire) that need to be split between merchant, platform, and tax accounts before landing in books.
- You have custom order fields, B2B pricing tiers, or subscription logic the plugin does not preserve.
- You have already replaced two plugins because each new edge case broke something.
Stick with a plugin if all of the following are true:
- Under 3,000 orders per month.
- One to three tax jurisdictions.
- Standard product catalog with no unusual line-item logic.
- No custom fields that need to survive the sync.
Hybrid approach Some of the most stable setups use a plugin for the base sync and a small custom script for one or two edge cases. This is often cheaper than a full custom build and cleaner than fighting a plugin's assumptions. If you go this route, hire a WooCommerce developer with accounting-API experience specifically, not a general WordPress freelancer. The QuickBooks and Xero APIs have enough quirks that domain familiarity saves days of debugging.
Maintenance: what breaks and when
Even a clean setup will break eventually. Expect to spend one to two hours per month on maintenance:
- API version updates. Both QuickBooks and Xero deprecate old API versions on a rolling basis. Plugins usually update quickly, but not always. Check your plugin's changelog every quarter.
- Tax rate changes. State, VAT, and GST rates change. Every rate change in WooCommerce needs the matching rate in the accounting platform.
- New product categories. Adding a new WooCommerce category with no mapping will silently dump those orders into "uncategorized sales." Audit your mapping any time you add categories.
- Gateway changes. Adding Stripe when you already have PayPal means adding a second merchant fees account and mapping the new gateway to it.
- OAuth token refresh failures. Set a calendar reminder to re-authorize every 12 months, before the token expires.
Larger stores usually put this on a monthly checklist owned by whoever manages the WooCommerce technical stack, or hand it to their maintenance partner.
Final checklist before you go live
Run through this list the day before you turn on production sync:
- Chart of accounts complete and matches your P&L structure
- Every tax jurisdiction mapped end to end
- Products mapped to sales accounts (category or SKU level)
- Shipping, discounts, gateway fees, and refunds have their own accounts
- Payment date set to payout date, not order date
- $1 test order verified in the accounting platform
- Historical sync scheduled for two weeks from now, not today
- Someone owns the monthly maintenance checklist
If any of those are missing, do not go live yet. The cost of a bad first month of data is always higher than the cost of a slower rollout.
Closing thought
A WooCommerce-to-accounting integration is one of the few technical decisions in eCommerce where getting it right at setup saves five figures over the life of the store, and getting it wrong costs the same in the other direction. Most store owners underinvest in the mapping conversation because the plugin makes it look like a one-click job. It is not.
If you are setting one up now, spend the day on the mapping. If you already have one running and something looks off, run through the six-touchpoint check on last month's orders. That check surfaces most of the quiet problems.
For merchants who have already outgrown the plugin approach or run into tax models their current stack cannot handle, custom-built accounting integrations pay for themselves within the first year and behave the way your accountant actually wants them to.






