Help centre

Xero integration for locums

Link your Sessional account to your Xero organisation so your workplaces, invoices and expenses post themselves, and paid invoices come back automatically.

What the Xero integration does

Plenty of Australian locums keep their books in Xero and do their admin in Sessional. The Xero integration joins the two so you stop double-keying. Once connected, Sessional pushes accounting data to your Xero organisation and watches for payments coming the other way:

  • Contacts: each workplace you record becomes a Xero contact, so invoices land against the right customer instead of a loose name match
  • Invoices: your Sessional invoices are created in Xero as approved sales invoices (ACCREC) in AUD, with line items and your invoice number carried across
  • Expenses: logged expenses post as bills (ACCPAY) under the account code you choose, so they reconcile against your bank feed without doubling up
  • Payments back: when an invoice is paid in Xero, by bank reconciliation, a bank feed or a manual entry, Sessional marks the matching invoice as paid for you

Note

Xero sync is a Pro feature. Connect it from Dashboard, then Integrations. You will need an active Xero subscription with at least one organisation.

Connecting your Xero organisation

Setup is three short steps and takes a couple of minutes:

  1. Connect to Xero: from the Integrations page, choose Connect to Xero. You are sent to Xero to sign in and approve access. Sessional uses OAuth 2.0 with PKCE, so your Xero password is never seen or stored here.
  2. Select your organisation: if your Xero login has more than one organisation, pick the one to sync. Most locums have a single org, which is selected for you.
  3. Map your account codes: match each Sessional category to an account from your own Xero chart of accounts, so income and expenses post exactly where your accountant expects.

Tip

Not sure which account codes to use? Ask your accountant or bookkeeper. The mapping step works with whatever chart of accounts you already have, whether that is a standard Australian template or a custom structure.

Your access is stored as encrypted OAuth tokens and refreshed automatically in the background, so the connection keeps working without you re-authorising every session.

Mapping your account codes

During setup you map Sessional categories to codes in your Xero chart of accounts. There is one income mapping and one per expense category:

  • Sales (required): the income account your invoice lines post to, usually a sales or professional income account
  • Expense categories: fuel, mileage, equipment, training, insurance, subscription, professional fees and other, each mapped to one of your expense accounts

A sales code is mandatory because invoices have to land somewhere; the expense mappings are yours to set. If a category is not mapped, expenses in that category are simply skipped during sync rather than guessed at, so nothing posts to the wrong account.

How and when syncing happens

You do not press a sync button for routine work. A sync run resolves your workplaces as contacts, pushes outstanding invoices, posts your expenses as bills, and then checks for payments. Some details worth knowing:

  • Invoices push as approved, never as paid. Xero records the payment itself when you reconcile, so the two systems never argue about settlement
  • Live invoices are included: issued, acknowledged and overdue invoices all sync, so connecting after a quiet spell still brings your ledger up to date. Paid and voided invoices stay out
  • Hourly shifts show properly: an eight-hour shift appears as quantity 8 at your hourly rate, not a single lump line, so the Xero invoice reads the way you would write it
  • Expenses post as bills (ACCPAY) so they slot into bank-feed reconciliation cleanly
  • No duplicates: each synced record remembers its Xero counterpart, and runs are spaced to respect Xero's API limits, so re-running a sync will not create copies

Payments flowing back to Sessional

When you connect, Sessional registers a Xero webhook. As soon as a payment is applied to one of your synced invoices in Xero, Xero notifies Sessional. Sessional then verifies the notification is genuine using an HMAC signature, finds the matching invoice, and marks it as paid with a note that the payment came from Xero. Partial payments are recorded but leave the invoice open until it is settled in full.

The upshot: once your bank feed reconciles an invoice in Xero, you do not have to come back and tick it off in Sessional as well. The Earnings and Reporting views update on their own.

Important

Payment detection depends on Xero delivering its webhook. During a Xero outage there can be a short delay before a payment shows in Sessional. You can always mark an invoice as paid by hand if you need it reflected straight away.

A note on GST and BAS

Your invoices push to Xero in AUD, and how GST is treated on them is governed inside Xero by your chart of accounts and the tax rates set on those accounts. Sessional does not override your Xero tax setup. For your own GST registration status, GST turnover and a quarter-by-quarter BAS summary, use Sessional's BAS view, which is built around Australian rules including the GST registration turnover threshold. Treat both tools as preparation aids and confirm your lodgement with your accountant or registered tax agent.

Disconnecting

You can disconnect Xero whenever you like from the Integrations page. When you do:

  • No further data syncs in either direction
  • The webhook is removed, so payment notifications stop
  • Anything already synced stays put in Xero: nothing is deleted
  • Invoices already marked paid in Sessional keep their paid status
  • Your stored Xero tokens are deleted from Sessional

Reconnect later and Sessional re-establishes the link. Records already in Xero are recognised by their stored reference, so a reconnect will not duplicate them.

Frequently asked questions

Do I need a paid Xero subscription to use the integration?
Yes. You need an active Xero subscription with at least one organisation. Sessional connects to a single Xero organisation per account, and the integration itself requires the Sessional Pro plan.
Will my older invoices sync when I first connect?
Live invoices, those that are issued, acknowledged or overdue, are picked up so your ledger catches up even after a quiet period. Paid and voided invoices are left out. There is a sensible cap per run, so a large backlog finishes across a couple of syncs.
Does the integration set GST on my Xero invoices?
Invoices post in AUD and the GST treatment is governed by your Xero chart of accounts and the tax rates on those accounts, not overridden by Sessional. For your GST turnover and a BAS summary against Australian thresholds, use the BAS view in Sessional and confirm with your tax agent.
What happens if I edit an invoice directly in Xero?
Changes you make in Xero are not pulled back into Sessional. The integration pushes data from Sessional to Xero, and the only thing that flows back is payment status via the webhook, so an invoice settled in Xero is marked paid in Sessional.
Is my Xero data secure?
Sessional stores only encrypted OAuth tokens and never sees your Xero password. Access tokens are short-lived and refreshed automatically, and you can revoke access at any time from Sessional or from your connected apps in Xero.

Related guides

Stop double-keying your locum books

Xero sync comes with Pro, alongside advanced reporting, the REST API and priority support. Start free and upgrade when it suits you.