Setup guide · WooCommerce · Xero ● Free on WordPress.org

Setting up Demfilz Sync for Xero

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.

Updated 26 June 2026~15 minWooCommerce 6.0+ · PHP 7.2+

✓ 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.

1

Install

Upload the plugin zip and activate it.

2

Xero app

Get a free Client ID & Secret.

3

Connect & map

Sign in, pick an org, map accounts.

4

Sync

Push an order to Xero.

What this plugin does

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.

Step 1 — Install & activate

  • In WordPress admin, go to Plugins → Add New and search for Demfilz Sync for Xero, then click Install Now and Activate.
  • Or install it from the WordPress.org listing (Download, then Plugins → Add New → Upload Plugin).
  • Make sure WooCommerce is installed and active too.
  • Find the settings under WooCommerce → Xero Sync.

Step 2 — Register a free Xero developer app

Xero needs you to register a small "app" so it can issue you API keys. This is free and takes a couple of minutes.

  • Open the plugin's Connection tab and copy the redirect URI shown there (it looks like https://your-store.com/wp-admin/admin.php?page=dwtx&dwtx_action=oauth_callback).
  • Go to developer.xero.com and sign in with your Xero account, then open My Apps → New app.
  • Choose Web app, give it a name, and paste the redirect URI exactly (including https, no trailing slash) as the app's Redirect URI.
  • Copy the app's Client ID, then generate and copy a Client Secret.

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.

Step 3 — Connect Xero

  • Back on the Connection tab, paste the Client ID and Client Secret and click Save & Connect to Xero.
  • You'll be sent to Xero to sign in, choose which organisation to allow, and approve access — then returned to WordPress.
  • The keys and tokens are stored encrypted in your database. Xero access is refreshed automatically in the background.

Step 4 — Choose your organisation & map accounts

  • Still on Connection, pick your organisation from the list (the organisations you authorised).
  • Go to the Mapping tab and choose:
    • Post orders to Xero as — Invoice (default) or Quote, plus the invoice status (Draft, Submitted or Authorised).
    • Default income account — the account code where sale lines are booked.
    • Default tax rate and shipping tax rate — e.g. GST on Income and GST Free. Leave blank to use the account's default.
  • Save mapping.

Step 5 — Sync an order

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).

Pro — automation & scale

Upgrade on the Pro Licence tab ($19.95/month via Stripe — cancel anytime). Pro adds:

  • Automatic order sync when an order reaches a status you choose (e.g. Processing or Completed), with retry and email alerts.
  • Scheduled inventory sync across all products.
  • Bulk backfill — push past orders with a "Sync to Xero" bulk action.
  • Refunds → credit notes and per-tax-class tax mapping.
PlatformXero, via the official Xero Accounting API (OAuth 2.0).
Sale typePosts 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.
ContactsMatched in Xero by name before creating, to avoid duplicate contacts.
IdempotentThe Xero invoice reference is stored on the order; re-syncing updates it rather than duplicating.
SecurityOAuth tokens encrypted at rest; data sent to Xero only on connect/sync.

FAQ

Do I need to pay for the plugin to test it?

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.

Does it post invoices or quotes?

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.

Is my data safe?

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.

Will it create duplicate invoices or contacts?

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.

What should I watch for on first use?

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.

← Back to Xero Sync Need a hand setting it up?

Want a WordPress plugin like this?

Accounting integrations, payments, shipping or something custom — tell us what you need and we'll come back with a plan and a fixed quote.