Integration

WooCommerce Xero Integration: Sales, Fees and Payouts

WooCommerce connects to Xero through Xero for WooCommerce by Woo, a paid extension that creates a Xero invoice for each order and sends product, shipping, discount and tax data. The bank deposit still won't match any single invoice, because gateway payouts are net of fees and often batch many orders, so you need a clearing account for each gateway. Pandaflow sets up the WooCommerce to Xero sync for you on request.

Pandaflow sets up WooCommerce and Xero on request. Request setup →

Updated

Does WooCommerce integrate with Xero?

Yes, through Xero for WooCommerce by Woo, a paid extension from the WooCommerce team (check the WooCommerce Marketplace for current pricing). Once it is set up, each order in your store creates an invoice in Xero that carries product, shipping, discount and tax data. When a payment comes in, the extension applies it to that invoice.

Its strengths are that it works per order without anyone touching each sale, and the product page lists compatibility with high-performance order storage (HPOS) and the cart and checkout blocks. What it leaves to you is the match between those invoices and the money that reaches your bank. That is the part most owners find hard.

Setup is more than one connect button. In outline:

  1. In WooCommerce, open WooCommerce > Xero and copy the Redirect URI shown under the Client ID field.
  2. In the Xero developer portal, open My Apps, select New app, and set the grant type to Auth Code. Do not choose PKCE or Custom Connection. Name the app for your business, and leave ‘Xero’ out of the name.
  3. Enter your store’s public HTTPS homepage as the company or application URL, and paste the exact Redirect URI.
  4. Copy the Client ID, generate a Client Secret, and copy the secret before you leave the page. Xero shows it only once.
  5. Back in WooCommerce > Xero, paste both values and save. Under Authenticate, answer whether the Xero app was created before March 2, 2026. A wrong answer fails with an unauthorized_client - Invalid scope for client error, so select the correct option and reconnect.
  6. Select Sign in with Xero, choose the organisation, and confirm that Connection status reads [OK] and names the right organisation.

An uncertified Xero app can connect to up to 25 Xero organisations, and each organisation can connect to no more than two uncertified apps. Most stores need one app for the live site and a separate one for each staging site.

Other routes exist too: automation tools that link apps, and manual CSV or journal imports. They can work, and they raise the same reconciliation questions covered below. For the wider picture, see WooCommerce integrations and Xero integrations.

What syncs from WooCommerce to Xero?

The table shows each WooCommerce data item, what the native extension does according to its product page, and what you should check or add yourself. The extension’s page describes orders, items, shipping, discounts, tax and payments. It says nothing about fees, payouts, refunds, disputes or gift cards, so those are where the gaps are.

WooCommerce data Native Xero extension (per its product page) What to check or add
Order Creates an invoice per order The invoice is gross, so a bank deposit will not equal it
Line items, shipping, discounts Sent to Xero with the invoice Map each to the right revenue account and tracking category
Sales tax / VAT Tax data sent; tax rates created or matched Compare Xero’s tax report with WooCommerce’s for one month; check regional and OSS rate names
Payment Applied to the invoice Confirm each gateway pays into its own clearing account, not one bank account
Gateway fee Not described on the product page Post to a Merchant fees expense, using the payout report
Payout to bank Not described on the product page Match one bank line to many payments in the clearing account
Refund Not described on the product page Needs a credit note or reversal; the fee is usually not refunded
Dispute / chargeback No WooCommerce record Separate debit plus fee; enter manually or through your sync
Customer One Xero contact per unique customer, matched by email Watch contact growth and the contact-name setting
Gift card sold Depends on the gift card plugin Should sit as a liability until redeemed

Per-order or daily summary? Per-order invoices give you a trail from each sale to Xero, but a busy shop ends up with many invoices and many contacts. A daily summary, one entry per day per gateway, keeps Xero tidy, but the order detail then has to live somewhere else, such as your WooCommerce reports. Decide this before go-live, because switching later means cleaning up history.

This is an illustrative setup, not a customer story. A $100.00 order carries a $3.20 gateway fee, so the payout is $96.80. The invoice says $100.00, and the bank says $96.80. Nothing is wrong, but a single bank line will never match a single invoice.

Why don’t WooCommerce sales match the Xero bank feed?

An invoice records what the customer owed, before fees. The payout records what the gateway sent after fees, often for many orders at once. Reconciling means matching one bank line to several invoice payments, plus a fee, plus any refunds or disputes.

How does a clearing account fix the mismatch?

Create a Current Asset account in Xero, for example ‘Payment Clearing’, and flag it with ‘Enable payments to this account’ so invoice payments can land there. Use one clearing account for each gateway. If PayPal, card and bank transfer all go to one account, the reconciliation mixes three payout streams.

After each payout, the clearing balance should return to zero. The payout moves the net cash to your bank, and the fee moves to a Merchant fees expense. A balance that keeps growing points to a missed refund, fee or dispute.

What about fees, refunds and disputes?

Fees don’t come from WooCommerce, which only knows the order. Take them from the gateway’s payout report, such as Stripe’s payout reconciliation report, and post them as an expense.

Refunds need a credit note or a reversal in Xero. Gateway fees on refunded orders are generally not returned, so check the gateway’s terms. Using the example above, if $25.00 of the order is refunded the following week, the next payout is short by $25.00. Without the refund and fee entries, $28.20 of the gap between the $100.00 invoice and the cash received is unexplained.

Disputes and chargebacks come off the payout as separate debits, usually with a dispute fee, and WooCommerce has no record of them. Enter them yourself, or have the sync post them, as a reversal of revenue or a hold in a dispute account, plus the fee.

What about tax?

Compare Xero’s tax report with WooCommerce’s tax report for one full month. Look at rate names especially for multi-region or EU OSS rates. One reviewer on the extension’s page reported that the extension matched OSS rates only where the name contained ‘MOSS’, and Woo’s reply said the team had reported it for an update. That is one person’s experience, so test your own rates.

What about gift cards, tips and contacts?

A gift card sold is a liability, not revenue. It should move to revenue only when redeemed. If your sync treats a gift card as a product line, it will overstate revenue in the month of sale. Tips are a liability too if you collect them through a tip plugin.

For contacts, the extension creates one Xero contact per unique customer and, according to Woo’s reply on the product page, matches returning customers by email. If you change the ‘Use customer email in contact name’ setting under WooCommerce > Xero after orders have synced, the same person can end up under two slightly different names.

How does Pandaflow connect WooCommerce to Xero?

The WooCommerce to Xero sync is set up on request. It is not a self-serve connector you switch on yourself. Pandaflow builds it for you.

The agent maps your WooCommerce orders, refunds, fees, tax and payouts to the right Xero accounts, including a clearing account for each gateway. It posts the entries as per-order invoices or as a daily summary, whichever you agree on the call. When an app changes, for example a renamed field, an expired Xero connection or a new tax rate, the agent repairs the sync.

If the Woo extension already covers your invoicing and you only need payout and fee matching, say so on the call. The setup can then focus on that gap.

Pandaflow is free to start. Paid plans are Lite at $79, Silver at $299 and Gold at $499 a month. You can deploy in our cloud or yours. See pricing for details. Which plan your WooCommerce setup falls under depends on the scope agreed on the call.

How do I get it set up, and what will I see once it runs?

  1. Request setup.
  2. Have a short call about what you sell, which gateways you use and how your books are kept.
  3. Pandaflow builds the sync and tests it on real records.
  4. Go live. The agent keeps it running.

Once it runs, you should see sales posted to the right revenue and tax accounts, fees in Merchant fees, refunds as credits, and a clearing account that returns to zero after each payout. Each bank feed line should match one payout at a time.

What can go wrong?

  • Expired Xero authorisation. An order note reporting invalid_grant means the connection needs reconnecting under WooCommerce > Xero. The Xero refresh tokens expire, so check this rather than assume the sync is still running.
  • A renamed tax rate. The clearing balance may look fine while the tax report drifts. Run the one-month tax comparison after any rate change.
  • A gateway added later. A new payment method without its own clearing account pushes the mixed payouts back into one place.
  • A gift card plugin that posts as products. The month’s revenue will look high. Check the first gift card sale before you trust the numbers.

A clearing balance that doesn’t return to zero after a payout is the quickest early warning for most of these.

FAQ

Frequently asked questions

Will it post every sale or a daily summary?

The Woo extension creates one invoice per order. A daily summary, with one entry per day for each gateway, keeps Xero tidier, but the order detail then lives in WooCommerce. Pandaflow can post either way, and you choose on the setup call.

What happens to fees and refunds?

Gateway fees come out of the payout, so they need an expense line taken from the gateway's payout report. Refunds need a credit note or reversal in Xero, and the original fee is usually not returned. Check what your extension version does with each.

Why doesn't my Xero bank feed match my WooCommerce sales?

Invoices are gross, but the bank receives a net, batched payout after fees, refunds and disputes. A clearing account for each gateway lets you match one payout against many orders and shows what is left over.

How do I connect WooCommerce to Xero?

With the Woo extension, you create an OAuth 2.0 app in the Xero developer portal, enter its Client ID and Secret under WooCommerce > Xero, and sign in with Xero. Pandaflow's WooCommerce to Xero sync is set up on request: you ask, have a short call, and Pandaflow builds and tests it.

Is there a self-serve Pandaflow connector for WooCommerce and Xero?

No, not today. Pandaflow sets up the WooCommerce to Xero sync for you on request. The self-serve routes are Shopify to QuickBooks or Xero, and Shopify to HubSpot.

Set up on request

Want WooCommerce and Xero
connected for you?

Tell us what you sell and how your books are set up. We build the sync with you, test it on real records, and keep it running.