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
Connecting your Xero organisation
Setup is three short steps and takes a couple of minutes:
- 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.
- 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.
- 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
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
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?
Will my older invoices sync when I first connect?
Does the integration set GST on my Xero invoices?
What happens if I edit an invoice directly in Xero?
Is my Xero data secure?
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.