WooCommerce Xero integration for real-time financial reporting and automated bookkeeping

How to Integrate WooCommerce with Xero for Real-Time Financial Reporting

Xero and WooCommerce serve different parts of the same business but don’t talk to each other by default. The result for most store owners: manually entering sales data into Xero, reconciling bank feeds against order reports, and discovering discrepancies at month end that take hours to untangle. A properly configured Xero integration eliminates all of that. This guide covers the full setup and the configuration details that determine whether the integration actually works reliably.

What WooCommerce-Xero Integration Handles

A working integration between WooCommerce and Xero automatically creates and syncs:

  • Invoices or sales receipts – Each WooCommerce order creates a Xero invoice (if payment pending) or a paid invoice/sales receipt (if payment captured at checkout)
  • Contacts – New customers become Xero contacts; returning customers match to existing contacts by email
  • Line items – Products with quantities, descriptions, and prices match to Xero inventory items or account codes
  • Tax – GST, VAT, or sales tax on orders posts to the appropriate Xero tax accounts
  • Credit notes – WooCommerce refunds create Xero credit notes, reversing the revenue and tax impact
  • Payment records – Payments post to the corresponding Xero bank account (separate accounts for Stripe, PayPal, etc.)

The integration’s value isn’t just saving manual entry time – it’s having real-time financial data in Xero. P&L, cash flow forecasts, and tax liability reports in Xero become accurate without waiting for end-of-month reconciliation.


Xero for WooCommerce (official plugin)

Xero offers an official WordPress plugin through the Xero App Marketplace. It handles the core sync functionality and uses OAuth 2.0 authentication with Xero’s API. Suitable for straightforward single-currency stores with standard Xero configurations.

Taxomate

Taxomate specializes in accounting integration for e-commerce and handles WooCommerce-Xero sync with more configuration options than the official plugin. Particularly strong for stores that need categorized revenue tracking (by product category, shipping income, fee income) rather than line-item per order.

Zapier or Make (formerly Integromat)

For simpler sync requirements or when you need custom logic, Zapier and Make connect WooCommerce order events (new order, order completed, refund issued) to Xero actions. Less robust than a dedicated plugin for real-time sync at volume, but useful for specific workflows where the standard plugin doesn’t fit.


The connection requires creating an app in the Xero Developer Portal and granting it access to your organization. The process:

  1. Go to developer.xero.com and log in with your Xero credentials
  2. Click “New App,” choose “Web App,” and enter your WordPress site’s redirect URI (provided by your integration plugin)
  3. Copy the Client ID and Client Secret from the Xero developer portal
  4. Enter these credentials in your WordPress integration plugin settings
  5. Click “Connect to Xero” – you’ll authorize access to your specific Xero organization
  6. Select the Xero organization to connect (if you have multiple)

After the OAuth flow completes, the plugin has access to your Xero data. Test with a manual sync of a recent order before setting up automated sync.


Account mapping determines where WooCommerce transactions land in your Xero chart of accounts. Getting this right determines whether your Xero reports are useful. Standard mappings needed:

WooCommerce ElementXero Account TypeExample Account Name
Product sales revenueRevenueSales – Product
Shipping collectedRevenueShipping Revenue
Discount codes appliedRevenue reductionDiscounts Given
GST/VAT/Sales taxLiabilityGST on Sales / Sales Tax Payable
Stripe paymentsBank accountStripe Clearing Account
PayPal paymentsBank accountPayPal Account
RefundsRevenue reductionRefunds – Product Sales
Stripe feesExpense (if syncing)Bank Charges

A note on payment accounts: many accountants prefer a “clearing account” approach where Stripe deposits go to a Stripe Clearing Account, and then you reconcile against the actual Stripe payouts (which include Stripe’s fees already deducted) into your operating bank account. This is cleaner than trying to account for gross sales vs. net deposits in the same account.


If you sell in multiple currencies, Xero’s multi-currency support becomes relevant. Xero (on plans that include multi-currency) can hold foreign currency bank accounts and creates exchange gains/losses automatically when payments are received in currencies other than your base currency.

In your integration settings:

  • Configure which Xero bank account each currency’s payments post to
  • Set whether to use Xero’s exchange rates or WooCommerce’s at-time-of-order rates
  • Configure how exchange rate differences between order creation and payment settle are recorded

For stores with significant multi-currency revenue, having your accountant review the multi-currency setup before going live is worth it. Exchange rate recording errors compound over time and become difficult to unwind.


With a properly configured integration, Xero’s Profit and Loss report becomes your live business dashboard. Key reports that become useful immediately:

  • P&L by month – Revenue, COGS (if you track inventory in Xero), gross profit, and operating expenses in real time
  • Sales tax liability – What you owe in GST/VAT/sales tax this period, ready to file
  • Cash flow statement – Actual cash movement vs. accrual revenue
  • Accounts receivable – Outstanding invoices (relevant if you sell on payment terms to B2B customers)

When your WooCommerce revenue appears in Xero in real time, your accountant stops being a quarterly report generator and starts being a business advisor who can see what’s actually happening.


Some store owners want inventory to flow between WooCommerce and Xero – purchase orders in Xero updating WooCommerce stock levels, or WooCommerce sales updating Xero inventory values. This bidirectional inventory sync is complex and prone to conflicts.

Recommendation: unless you have a compelling reason, don’t sync inventory bidirectionally. Manage inventory in WooCommerce (it’s better at it), and use Xero purely for financial tracking. If you need inventory costing in your P&L (COGS tracking), you can post cost of goods entries periodically from a WooCommerce inventory report without real-time sync.


The Xero bank feed shows your actual bank transactions. The integration creates payments records in Xero for each WooCommerce order. Reconciliation connects these two data streams.

For Stripe: Stripe deposits your net earnings (after fees) in batch payouts, not per-transaction. The reconciliation challenge is matching one Stripe payout against dozens of individual WooCommerce order payments. The clearing account approach handles this: each WooCommerce order payment posts to the Stripe Clearing Account, and each Stripe bank deposit is matched against the clearing account balance.

Use Stripe’s built-in Xero integration (in Stripe Dashboard > Settings > Accounting integrations) alongside your WooCommerce integration for the cleanest reconciliation workflow. The Stripe-Xero integration handles the payout-side matching, while the WooCommerce-Xero integration handles the order-side posting.


Tax handling is where most WooCommerce-Xero integrations break down, and incorrect tax configuration produces the most expensive errors to fix. The challenge is that WooCommerce and Xero handle tax differently, and the integration needs to translate between the two systems accurately.

WooCommerce tax classes determine which tax rate applies to each product. Standard tax, reduced rate, zero rate, and any custom tax classes you have created each need to map to a corresponding Xero tax code. If you sell products across multiple tax categories – for example, standard-rated clothing and zero-rated food items – each category needs its own mapping. A missing mapping means some orders will post to Xero without tax information, creating discrepancies in your tax liability reports.

Tax-inclusive vs tax-exclusive pricing is another common source of errors. WooCommerce stores can be configured to display prices including or excluding tax. Xero invoices can also be set to tax-inclusive or tax-exclusive. If these settings do not match, the integration may double-count tax or miss it entirely. Verify that your WooCommerce tax display setting and your Xero invoice default setting align before enabling the sync.

EU VAT and cross-border sales add another layer of complexity. If you sell to EU customers and need to apply different VAT rates based on the customer’s country, your WooCommerce tax configuration already handles this through the tax rate tables. The integration needs to map each country-specific rate to a corresponding Xero tax code, or use a single EU VAT tax code with variable rates. Consult with your accountant on the preferred approach for your specific tax filing requirements.

US sales tax varies by state and sometimes by city and county. If you use a service like TaxJar or WooCommerce Tax for automated rate calculation, ensure the integration passes the calculated tax amount to Xero rather than recalculating it. Double-calculating tax with different rate databases produces discrepancies that are difficult to trace and resolve.


Refunds are the most common source of reconciliation problems in WooCommerce-Xero integrations. A full refund is relatively straightforward – the integration creates a Xero credit note that reverses the original invoice. But partial refunds, shipping-only refunds, and refunds with restocking fees require more nuanced handling.

Full refunds should create a credit note in Xero that mirrors the original invoice with negative amounts. The credit note should reverse both the revenue and the tax, leaving your P&L and tax liability reports accurate. Verify that your integration creates credit notes with the correct tax codes – a refund that reverses revenue but not tax will overstate your tax liability.

Partial refunds require the credit note to reflect only the refunded line items and amounts. Most integration plugins handle this correctly, but test it with a partial refund on a multi-item order before relying on automated sync. The common error is a partial refund that creates a credit note for the full order amount rather than just the refunded portion.

Refund timing matters for financial reporting. If a sale was recorded in March but the refund is processed in April, your March revenue is overstated and your April revenue is understated until the credit note posts. For stores with significant refund volumes, this timing difference can materially affect monthly P&L accuracy. Configure your integration to create the credit note dated to the refund processing date, not the original order date, unless your accountant advises otherwise.


If you use WooCommerce Subscriptions for recurring products, the integration needs to handle renewal orders correctly. Each subscription renewal generates a new WooCommerce order, which should create a new Xero invoice. The integration must distinguish between initial subscription orders and renewals so they post to the correct revenue accounts.

Consider creating separate Xero revenue accounts for one-time sales and subscription revenue. This separation lets you track recurring revenue growth independently from one-time sales in your P&L report – a distinction that matters for business valuation and financial planning. A business with $10,000 per month in recurring subscription revenue is worth significantly more than one with $10,000 in unpredictable one-time sales, and your Xero reports should make this distinction visible.

Subscription cancellations and downgrades also need consideration. When a customer cancels a subscription, no new orders are generated so no new Xero entries are created. But if your accountant tracks deferred revenue or subscription obligations, you may need a manual or custom-coded process to adjust these entries when subscriptions change status.


For high-volume stores processing hundreds of orders per day, the integration’s performance and reliability become critical. The Xero API has rate limits – currently 60 calls per minute per application. If your sync tries to push more than 60 orders per minute, calls will fail and orders will be missed.

The solution for high-volume stores is batched sync with queuing. Instead of syncing each order individually as it arrives, queue orders and sync them in batches every few minutes. Most integration plugins handle this automatically, but verify the batch size and frequency settings match your order volume. A store processing 500 orders per day (roughly 20 per hour) will have no issues with real-time per-order sync. A store processing 5,000 orders per day needs batching to stay within API limits.

Monitor your sync queue for backlogs. During peak sales periods like Black Friday, order volume can spike ten times above normal. If your sync cannot keep up, the queue grows and your Xero data falls behind. Set up alerting for queue depth so you know when the integration is struggling before it becomes a problem that affects your financial reporting accuracy.

Xero also has a limit of 1,000 API calls per organization per day on certain endpoints. If you hit these limits, consider using Xero’s batch API endpoints that allow multiple operations in a single call, reducing the total number of API calls needed to sync the same number of orders.


Never enable automated sync to your production Xero organization without thorough testing. Xero offers a Demo Company that you can use for integration testing without affecting your real financial data. The testing process should cover these scenarios at minimum:

  • A simple single-product order with standard tax – verify invoice, contact, and payment all post correctly
  • A multi-product order with mixed tax rates – verify each line item has the correct tax code
  • An order with a discount code – verify the discount posts as a revenue reduction, not a negative line item
  • A full refund – verify the credit note reverses both revenue and tax correctly
  • A partial refund – verify only the refunded amount appears on the credit note
  • A returning customer – verify the order links to the existing Xero contact rather than creating a duplicate
  • A multi-currency order (if applicable) – verify the correct currency and exchange rate are used

After each test, check the Xero P&L report, tax summary report, and bank reconciliation to confirm the numbers match what you expect. Have your accountant review the test results before switching to production sync. Catching a mapping error during testing saves hours of cleanup compared to discovering it after a month of live sync has posted thousands of incorrectly mapped transactions.


IssueCauseFix
Duplicate contacts in XeroEmail matching failing for returning customersStandardize email format in WooCommerce, check matching settings
Tax amounts not matchingTax code mapping incompleteMap all WooCommerce tax classes to Xero tax codes
Invoices in wrong currencyCurrency mapping misconfiguredReview per-currency account mappings
Missing orders in XeroSync error during high-volume periodCheck sync log, manually trigger sync for missing date range
Credit note not reversing taxRefund document type configurationReview refund handling settings, ensure full tax reversal is enabled

For the QuickBooks equivalent of this integration, see the WooCommerce-QuickBooks sync guide. For understanding how better financial visibility connects to overall store management during market shifts, the e-commerce market conditions guide covers cash flow monitoring in detail.


A WooCommerce-Xero integration is not a set-and-forget system. It requires ongoing monitoring to ensure data accuracy and to catch sync failures before they create reconciliation problems that are expensive to fix.

Weekly checks: Compare your WooCommerce sales dashboard total with Xero’s revenue for the same period. These numbers should match within a small margin (differences can occur due to timing of order status changes). If the gap is more than a few percent, investigate immediately – there are likely failed syncs or mapping errors that need attention.

Monthly reconciliation: At month end, reconcile your Xero bank accounts against your actual bank and payment processor statements. The clearing account balances should be close to zero after reconciliation. A persistent balance in a clearing account indicates orders that synced to Xero but whose corresponding bank deposits have not been matched, or bank deposits that arrived without corresponding order records.

Quarterly review with your accountant: Have your accountant review the integration output quarterly. They can spot mapping errors, tax code issues, and categorization problems that you might miss because you are focused on running the store rather than reading financial statements. An hour of your accountant’s time reviewing the integration quarterly prevents days of cleanup work at year end.

Plugin and API updates: When you update your integration plugin, WooCommerce, or when Xero updates their API, test the sync with a manual order before assuming everything still works. API changes occasionally break field mappings or change the format of synced data, and catching these issues with a single test order is infinitely easier than discovering them after a week of broken syncs.

Keep a sync error log that records every failed sync with the date, order ID, and error message. Review this log weekly. Patterns in sync failures reveal systematic issues – for example, if all orders with a specific payment method fail to sync, you have a payment method mapping problem. If orders above a certain dollar amount fail, you may have a Xero invoice limit issue. The error log turns random-seeming sync failures into diagnosable, fixable problems.

Xero Plans and Integration Compatibility

Not all Xero plans support the features needed for a full WooCommerce integration. Understanding which plan you need prevents frustrating limitations after setup.

Xero Starter (previously Early): Limited to 20 invoices per month. This is insufficient for any WooCommerce store with meaningful order volume because each order creates an invoice. You will hit the limit within the first few days of the month and sync will stop.

Xero Standard (previously Growing): Unlimited invoices, multi-currency support, and bank reconciliation. This is the minimum viable plan for most WooCommerce stores and handles the majority of integration requirements.

Xero Premium: Everything in Standard plus multi-currency, analytics, and expense management. Required if you sell in multiple currencies and need Xero to handle exchange rate tracking and foreign currency bank accounts.

If you are currently on Xero Starter and considering the WooCommerce integration, upgrade to Standard before setting up the integration. Discovering mid-month that you have hit your invoice limit and your financial data is incomplete is a worse outcome than paying for the plan you actually need from the start.

The Bottom Line

A properly configured WooCommerce-Xero integration transforms your accounting from a monthly cleanup exercise into a live reporting system. The setup takes a few hours and a review session with your accountant – after that, it runs automatically and your Xero reports stay current without manual work.

The configuration quality is what separates a useful integration from a source of reconciliation problems. Spend the time getting account mapping, tax codes, and currency handling right before your first live sync. The clearing account approach for payment processors (rather than posting gross revenue direct to bank) is the single most impactful setup decision for clean reconciliation. And ongoing monitoring – weekly sales comparisons, monthly bank reconciliation, and quarterly accountant reviews – ensures the integration stays accurate as your store evolves, your product catalog changes, and both platforms release updates that can affect sync behavior.

Custom Accounting Integrations for WooCommerce

For stores with complex tax structures, multi-currency requirements, or non-standard Xero configurations that the standard plugin doesn’t handle, WooCustomDev builds custom accounting integrations using the Xero API directly. Contact us to discuss your specific requirements.

Facebook
Twitter
LinkedIn
Pinterest
WhatsApp

Related Posts

Leave a Reply

Your email address will not be published. Required fields are marked *