Start a Project
AEO & GEO

Xero WooCommerce Integration: Setup Guide

20 min read
Adam Khaled

Adam Khaled

Founder, Web25

Xero WooCommerce Integration: Setup Guide

Quick answer: A Xero WooCommerce integration sends your store’s orders, customers and payments to Xero as invoices, so nobody retypes them. You can use the WooCommerce Xero extension, an app from the Xero App Store, or custom code. The right one depends on your order volume, whether stock matters to your books, and what Xero’s limits and fees allow.

Key takeaways

  • Orders, customers and payments usually flow from WooCommerce to Xero as invoices, and Xero is the place for the books, not for orders.
  • Xero allows 60 calls per minute and 5000 per day for each connected organisation, and answers HTTP 429 when you go over.
  • Access tokens last 30 minutes, and a refresh token that sits unused for 60 days stops working.
  • Apps created on or after 2 March 2026 must use Xero’s granular scopes, and Xero now prices apps in tiers.
  • A paid Xero invoice cannot be voided through the API, so decide how refunds work before launch.

Table of contents

If your orders arrive in WooCommerce and your accountant works in Xero, someone is probably typing orders into Xero or exporting spreadsheets. This guide explains how a Xero WooCommerce integration works, which way to build it, and what to check before you spend money.

What does a Xero WooCommerce integration sync?

A Xero WooCommerce integration moves each sale from your store into your accounting, so your books match what customers bought and paid. Xero is accounting software. WooCommerce is where the order starts.

The WooCommerce Xero extension, made by Woo, is one example. Its documentation says it sends billing details, product lines, shipping, fees and order totals, and that payments are applied to the matching invoice. That list is a good guide to what a typical integration covers.

Xero WooCommerce integration data flow: orders, customers and payments go to Xero as invoices
DataUsual directionWhy it matters
Orders as invoicesWooCommerce to XeroEvery sale shows up in the books without retyping
Customers as contactsWooCommerce to XeroOne contact per customer for invoices and statements
PaymentsWooCommerce to XeroInvoices show as paid and bank reconciliation is easier
Tax, shipping, fees and discountsWooCommerce to XeroTotals match, and so does the tax you report
RefundsWooCommerce to XeroKeeps the books correct after returns
Stock quantitiesDepends on which system owns stockOnly matters if you track inventory in Xero

Stock needs a decision. The extension’s documentation says it can send inventory item codes so Xero reduces tracked stock when products sell, and that this is not a two-way sync. Xero’s Items endpoint returns quantity on hand for items tracked as inventory, so custom code can read it. If you keep stock in WooCommerce, tell Xero only what your accountant needs.

How can you connect WooCommerce to Xero?

There are three ways to connect WooCommerce to Xero: the WooCommerce Xero extension, an app from the Xero App Store, or custom code. Start with the simplest one that covers your real workflow, and move up only when it does not.

MethodBest forWatch out for
WooCommerce Xero extensionOne store sending orders, contacts and payments to one Xero organisationPer its documentation, it uses one payment account for all payment gateways, tax rates must match, and stock is not two-way
App from the Xero App StoreReconciling sales and payouts, or syncing inventory, depending on the appThe collection lists 15 apps with different jobs, so read each listing for your region and check that it supports WooCommerce
Custom codeCustom fields, several stores, unusual refund or tax rules, or full control over errors and loggingBuild and maintenance cost, and you handle tokens, rate limits and Xero’s changes yourself

If the extension covers your flows, use it. There is no point paying for custom development to rebuild what a ready-made plugin already does.

Custom code starts to pay off when your process does not fit the standard one. Typical triggers are several WooCommerce stores feeding one Xero organisation, invoices that need extra fields, a different payment account per gateway, or an approval step before anything reaches the books.

What do Xero’s limits, tokens and fees mean for your plan?

Xero sets rules on how often you can call it, how long a login lasts and what an app costs. They shape the build, so read them before you pick a method.

RuleWhat Xero saysWhat to do about it
Call limitsPer organisation, 60 calls per minute, 5000 per day and 5 in progress at once. Per app across all organisations, 10,000 calls per minuteQueue calls, slow down when you get HTTP 429, and wait the number of seconds in the Retry-After header
Access tokenXero’s Node library describes a bearer token with a 30 minute expirationRefresh the token before it expires, and request the offline_access scope so Xero issues a refresh token
Refresh tokenThe extension’s documentation says it expires after 60 days without useSave the newest refresh token every time you refresh, and alert someone before it lapses
ScopesGranular scopes apply to apps created on or after 2 March 2026, as the extension’s documentation and Xero’s developer blog explainRequest only what you need, such as invoices and payments, instead of one broad scope
Uncertified appsThe extension’s documentation says an uncertified app can connect to up to 25 Xero organisations, and an organisation can connect to no more than two uncertified appsCheck how many apps your Xero organisation already uses

Fees depend on the route. Xero’s pricing page prices apps in tiers by the number of Xero organisations they connect. They run from a Starter tier with no charge, five connections and access to a demo organisation only, to Core at 35 Australian dollars a month for 50 connections, with higher tiers above that.

For one business connecting its own Xero organisation, Xero offers Custom Connections. They use the client credentials grant for a single organisation and cost five US dollars a month. The Xero FAQ says they are available for organisations in Australia, New Zealand, the UK and the US, and Xero’s page says you can test one against the Xero demo company for free. If your Xero organisation is elsewhere, ask whoever builds the integration which route Xero requires, and check the pricing page again before you commit, because the tiers started on 2 March 2026.

How do you set up a Xero WooCommerce integration in 8 steps?

To set up a Xero WooCommerce integration, decide what Xero should receive, check your Xero plan and region, create a secure connection, map your accounts and tax rates, build the invoice and payment flows, plan for refunds, respect Xero’s limits, then reconcile and test before going live. The steps below follow that order.

Step 1: Decide what Xero should receive and when

List the data you want in Xero: invoices, payments, contacts and maybe stock. Then pick the trigger. The WooCommerce Xero extension lets you send invoices manually, when an order is created, when it is paid or when it is completed, and recommends sending after payment. Fewer unpaid or abandoned orders then reach your books.

Step 2: Check your Xero plan, region and chart of accounts

Find out which country your Xero organisation is in, because that decides whether Custom Connections are available. If you sell in several currencies, the extension’s documentation says your Xero plan must include multi-currency accounting and each currency must be enabled in Xero. Ask your accountant which sales account, shipping account and bank account each flow should use.

Step 3: Create secure access

Xero uses OAuth 2.0. You create an app in Xero’s developer portal, enter a redirect address, and authorise it for your organisation. With the WooCommerce extension, you copy the redirect URI from its settings screen into the Xero app. With a Custom Connection, you use a client ID and secret and your client authorises the connection by email.

Request only the scopes you need, including offline_access. For your own code, keep the client secret outside the website files and rotate it if anyone who had it leaves.

Step 4: Map your accounts and tax rates

List how a WooCommerce record becomes a Xero record. The extension’s documentation says tax rates must match between the two systems or errors occur, so compare every tax rate in both before you test. Map shipping, fees and discounts to Xero accounts, and map each payment gateway to the right bank or clearing account. Our payment gateway API integration guide shows how payouts bundle charges, refunds and fees. If you send product codes, make every SKU unique and match it to a Xero item code.

Decide how customers match too. The extension looks for an existing Xero contact with the order’s billing email and creates one if it finds none. Your own code needs the same rule, written down.

Step 5: Build the invoice flow

Use a WooCommerce webhook, a message the store sends to another system when something happens, to start the flow when an order is paid. Each order should find or create the contact and create an invoice. Xero invoice numbers must be unique, and invoices have a Reference field, so store the WooCommerce order number in one of them.

Send an Idempotency-Key header with every write, because the Xero API definition describes it as a way to retry requests without the risk of duplicate processing. If a call fails halfway, a retry then cannot create the same invoice twice. Read the store through the WooCommerce REST API rather than the database.

Step 6: Handle payments and refunds

Apply each payment to its invoice so Xero shows it as paid. Then plan refunds. The extension’s documentation says that when an order is fully refunded it tries to void the Xero invoice, and that a paid invoice cannot be voided through the API and has to be adjusted manually. For paid orders, decide with your accountant whether a refund should create a credit note instead.

Step 7: Respect Xero’s limits

Put calls in a queue that stays under 60 per minute for each organisation, with no more than 5 at a time. When Xero answers HTTP 429, wait the number of seconds in the Retry-After header. When you read data back, ask for pages of up to 100 invoices and use the If-Modified-Since header, so you fetch only what changed.

Store the newest refresh token after every refresh, and put an alert on any failed refresh. A sale spike, such as a promotion, is the moment these limits show up.

Step 8: Reconcile, then test before going live

Add a scheduled job that compares recent WooCommerce orders with Xero invoices and reports any difference in count or total. Then test on the Xero demo company first, with real order shapes: a refund, a discount, a foreign currency order and a failed payment. Run the first live week with alerts on, and check the first invoices with your accountant.

What did we learn from a similar accounting sync?

Web25 has not published a Xero project yet. We did build a custom WooCommerce and POHODA integration for Mirael3D, a store selling 3D-printing filament. POHODA is accounting software popular in Slovakia and Czechia, so the job is close to this one. Web orders had to reach the accounting system without anyone entering them again.

The Mirael3D POHODA case study shows what mattered in practice:

  • The connector ran in dry-run mode, with writes disabled, until the log had been checked line by line. A full audit of 129 matched products then found no stock discrepancies.
  • Generated XML documents were checked against the vendor’s published schema files before deployment. The same habit applies to Xero, because a payload that fails the API’s rules should never reach live books.
  • Cancelled orders ran through an off, log-only or live switch, because that step changes accounting records. Xero’s refund and void rules are a good place for the same caution.
  • Historical duplicates were blocked, so an order that arrives twice does not become two records.

This is one project on one pair of systems, so treat it as an example of method. Xero has its own limits and quirks, which is why steps 6 and 7 come before launch.

What does a Xero WooCommerce integration cost?

There is no honest single price, because the cost depends on a handful of factors you can list before you ask for a quote. A standard extension setup is a small job, and a custom sync with unusual rules is a larger one.

FactorPushes the cost up when
MethodThe extension, billed per plan, does not cover your flows, so custom code is needed
Xero routeYour Xero region rules out Custom Connections, so you fall under Xero’s app tiers
Number of flowsYou sync contacts, invoices, payments, refunds and stock, not just invoices
Refund and tax rulesYou have credit notes, mixed tax rates or several currencies
Stores and organisationsSeveral stores feed one Xero organisation, or one store feeds several
Order volumePeak days push you close to Xero’s call limits
MonitoringYou want alerts, token care and someone to fix issues after launch

The extension was listed at 98 euros for a one-year plan when we checked in October 2026. Budget for the time after launch as well. An integration touches your books, so it needs monitoring, and our guide to website maintenance packages covers how ongoing care is usually priced.

What mistakes break the sync?

Most failures trace back to a check nobody made before launch.

  • Letting the refresh token lapse, because Xero expires it after 60 days without use.
  • Leaving tax rates different between WooCommerce and Xero.
  • Assuming a paid invoice can be voided through the API.
  • Sending calls without a queue, then hitting 60 per minute during a sale.
  • Retrying a failed write without an idempotency key, which creates duplicates.
  • Building a new app on broad scopes after 2 March 2026.
  • Selling in a foreign currency when the Xero plan has no multi-currency.
  • Testing on live books instead of the demo company.

Who should build a Xero WooCommerce integration?

If the WooCommerce Xero extension covers your flows, you may not need anyone to build anything, and we will say so. It is a ready tool made by Woo, and a developer only has to install and test it.

Web25 is our agency, and we build custom integrations between WooCommerce stores and accounting software, including Xero, then keep them monitored afterward. That fits when your process is unusual, when several stores feed one organisation, or when you want refunds, tax and errors handled your way. Our backend and API service page explains how we work, and you can tell us about your setup to see whether a plugin is enough.

The general method is in our guide to custom API integration services. The Shopify NetSuite integration guide and the Odoo WooCommerce integration guide walk through two other pairings. For a NetSuite ERP, see the NetSuite WooCommerce integration guide.

FAQ

Not always. The WooCommerce Xero extension can create invoices, contacts and payments from your orders through setup screens, although someone still has to create the Xero app, map the accounts and test it. You need a developer when you have custom fields, several stores feeding one Xero organisation, special refund rules, or you want your own logging and error handling.

Only in a limited way. The WooCommerce Xero extension can send item codes so Xero reduces tracked stock when a product sells, but its documentation says this is not a two-way sync. Xero's Items endpoint does return the quantity on hand for tracked items, so custom code can read it. Decide which system owns stock before you build anything.

Not necessarily. The WooCommerce Xero extension creates an invoice for each order. Some apps in Xero's WooCommerce collection instead focus on reconciling sales and payouts. Which suits you depends on your volume, how you sell, and how your accountant likes to see the books, so ask your accountant before you choose.

Xero's documentation lists 60 calls per minute, 5000 per day and 5 in progress at once for each connected organisation. Across all organisations, an app has a limit of 10,000 calls per minute. If each order needs three calls, for example a contact, an invoice and a payment, the daily limit covers roughly 1,600 orders. Go over a limit and Xero answers with HTTP 429 and a Retry-After header.

The WooCommerce Xero extension was listed at 98 euros for a one-year plan when we checked in October 2026. Xero also prices apps by how many organisations they connect. Its pricing page lists a Core tier at 35 Australian dollars a month, and Custom Connections for a single organisation cost five US dollars a month in Australia, New Zealand, the UK and the US. Custom work adds build and maintenance time on top.

Xero refresh tokens expire when they are not used for 60 days, and the WooCommerce Xero extension's documentation says a store that has not talked to Xero for that long has to be authorised again. A scheduled job that touches the connection and an alert on failures prevent a silent break.

What to do next

Find out which country your Xero organisation is in and whether your plan covers your currencies, then list the flows you need: invoices, payments, refunds and stock. Those answers tell you whether the extension is enough. Take them to your accountant or developer, together with the questions in the FAQ above.


Written by Adam Khaled, Founder, Web25. Last updated October 2026.

More from the blog

Xero WooCommerce Integration: Setup Guide | Web25 Blog