Shop & Products·5 min read·

How do I connect Xero to sync orders and contacts to my accounting?

Authorize Xero once and every completed order creates an approved ACCREC invoice for the customer, free instead of a paid accounting-sync plugin.

The Xero connector keeps your accounting current without manual entry: every completed order creates an ACCREC (accounts receivable) invoice in your Xero organisation, with a matching Xero contact for the customer. It's a free alternative to the $109/year official accounting-sync plugin.

The plugin install and the general troubleshooting steps apply to every integration and are written once in the shared integrations guide. What follows is what is particular to Xero.

Step 1 — Authorize your Xero organisation

Open Admin → Plugins → Xero and click Connect Xero. This is an OAuth flow — you sign in to Xero, approve access to your organisation, and you're redirected back with the panel showing Connected. There's no API key to copy or paste.

VeloCMS asks for the accounting.transactions and accounting.contacts permissions, so it can create invoices and contacts, and offline_access, so the connection survives past a single session. The standard sign-in scopes (openid, profile and email) are included. Nothing in payroll, bank feeds or reports is requested.

If you see a notice that the connector isn't configured instead of a Connect button, that's a platform-level setup step your VeloCMS instance hasn't completed — not something you can fix from this panel. Contact support if you need it enabled.

What happens after an order

  • VeloCMS looks up the customer's email in your Xero contacts. If a match exists, it's reused; otherwise a new Xero Contact is created, named with the customer's email address.
  • An ACCREC invoice is then created in Xero for the order, linked to that contact.
  • If the contact lookup or creation fails for any reason, the invoice is still created using the customer's email directly — a contact hiccup never stops the invoice from syncing.

What the invoice looks like

Each invoice has a single line described as Order # and the VeloCMS order ID, with quantity 1 and the order total as the unit amount. The line is coded to account 200, which is the Sales account in Xero's default demo company, and there is no setting in the panel to use a different code. If your chart of accounts uses another code for sales, plan to recode these lines in Xero. The invoice is created with the status Authorised, meaning approved, not a draft. VeloCMS does not record a payment against it, so match the payment in Xero the way you would any other.

VeloCMS sends Xero an idempotency key built from the order, for both the contact and the invoice. If the same order is processed again, for example after an interrupted attempt, Xero returns the original invoice instead of creating a second one.

If Xero is briefly unreachable or your authorization has expired, the sync attempt fails quietly in the background — it never blocks or delays the order itself. The order is then listed under Admin → Integrations → Sync activity. Xero has no Retry button there, so create that invoice in Xero by hand once you've reconnected.

Disconnecting

Click Disconnect in the panel to remove VeloCMS's tokens, remove your organisation from VeloCMS's connections in Xero, and revoke the refresh token. Invoices and contacts already created in Xero stay there; no further invoices are created after disconnecting.