Connect WooCommerce to your Xero organisation and start pushing orders across. Here's how to install the plugin, register a free Xero developer app, connect with OAuth, map your accounts and GST, and sync your first order.
✓ Free on WordPress.org. This plugin writes to your live accounting organisation, so before you use it on real books, connect it to a Xero demo company or trial organisation first, run a few test orders, and confirm the invoices look right in Xero.
Upload the plugin zip and activate it.
Get a free Client ID & Secret.
Sign in, pick an org, map accounts.
Push an order to Xero.
Demfilz Sync for Xero connects your store to Xero through the official Xero Accounting API. The free Basic version lets you push an order to Xero as an invoice or quote at the click of a button, syncs the contact, and pulls stock-on-hand back for a product. The Pro version ($19.95/month via Stripe) adds automatic order sync, scheduled inventory, bulk backfill, refunds and per-tax-class rules.
You'll need: a WordPress site with WooCommerce 6.0+ and PHP 7.2+, and a Xero organisation to connect to. You do not need a paid plugin licence to test — the free tier does the full connect-and-sync. To have an organisation you can use a free Xero trial, or the built-in "Demo Company" in any Xero login.
Plugins → Add New and search for Demfilz Sync for Xero, then click Install Now and Activate.Plugins → Add New → Upload Plugin).WooCommerce → Xero Sync.Xero needs you to register a small "app" so it can issue you API keys. This is free and takes a couple of minutes.
https://your-store.com/wp-admin/admin.php?page=dwtx&dwtx_action=oauth_callback).https, no trailing slash) as the app's Redirect URI.Tip: Xero requires an https redirect URI, so test on a real (staging) site with a valid SSL certificate rather than localhost. One Xero app can hold several redirect URIs, so you can add both a staging and a live store to the same app.
Open any WooCommerce order. In the Xero Sync box, click Sync to Xero. The plugin creates or matches the contact, posts the invoice with your mapped account and GST rate, and stores the Xero reference on the order so it's never duplicated. Open the invoice in Xero to confirm the totals. The Logs tab records every attempt.
To pull stock, edit a product, open the Inventory tab, and click Pull stock from Xero (matched by SKU against tracked Xero items).
Upgrade on the Pro Licence tab ($19.95/month via Stripe — cancel anytime). Pro adds:
| Platform | Xero, via the official Xero Accounting API (OAuth 2.0). |
|---|---|
| Sale type | Posts as an Invoice (Draft, Submitted or Authorised) or a Quote. Line totals are sent ex-GST and Xero computes the tax from your rate, so totals reconcile. |
| Contacts | Matched in Xero by name before creating, to avoid duplicate contacts. |
| Idempotent | The Xero invoice reference is stored on the order; re-syncing updates it rather than duplicating. |
| Security | OAuth tokens encrypted at rest; data sent to Xero only on connect/sync. |
No. The free Basic tier does the full connect-and-sync (orders, contacts, stock). You only need a Xero organisation to point at — a free Xero trial or the built-in Demo Company is fine. The $19.95/mo Pro plan only unlocks automation.
Either — choose on the Mapping tab. Invoices can be posted as Draft, Submitted or Authorised; quotes are created as Draft so you can review and send them.
OAuth tokens are encrypted in your WordPress database, and order data is only sent to Xero when you connect or sync. The plugin declares its use of the Xero API as required for WordPress.org.
No. Contacts are matched before being created, and each order stores its Xero invoice reference — re-syncing updates the existing invoice rather than making a new one.
Because it writes to your accounts, test on a demo or trial organisation first and eyeball the first few synced invoices (totals, tax, account) in Xero. Found something off? Let us know — we're happy to help.
This plugin is independent and not affiliated with, endorsed by, or sponsored by Xero, WooCommerce, Automattic or Stripe. Product names are trademarks of their respective owners.
Accounting integrations, payments, shipping or something custom — tell us what you need and we'll come back with a plan and a fixed quote.