Xero accounting integration
Sync your invoices, expenses, contacts, and payments with Xero automatically.
What does the Xero integration do?
The Xero integration connects your Sessional account to your Xero organisation, keeping your accounting records in sync without manual data entry. When connected, Sessional can:
- Sync contacts — organisations you work with are created as Xero contacts, so your invoices are linked to the correct customer record
- Sync invoices — when you create or send an invoice in Sessional, it is automatically pushed to Xero as a sales invoice with the correct line items, dates, and amounts
- Sync expenses — logged expenses are pushed to Xero as bills (accounts payable), categorised under your chosen account codes. Bills work with Xero’s bank reconciliation so there are no duplicates with bank feed imports
- Detect payments — when an invoice is marked as paid in Xero (manually or via bank reconciliation), Sessional picks up the payment through a webhook and marks the invoice as paid on your dashboard
Note
Setting up
Setup takes about two minutes:
- Connect to Xero — click “Connect to Xero” on the Integrations page. You will be redirected to Xero to sign in and authorise Sessional.
- Select your organisation — if you have multiple Xero organisations, choose which one to sync with. If you only have one, it is selected automatically.
- Map your account codes — map each Sessional category (sales income, fuel, training, insurance, etc.) to an account in your Xero chart of accounts. This ensures invoices and expenses are posted to the correct accounts for your specific setup.
Tip
Sessional stores encrypted OAuth2 tokens. Access tokens are refreshed automatically, so your connection stays active without re-authorisation.
How syncing works
Syncing happens automatically whenever you take an action in Sessional that affects your accounting data:
- Creating an invoice — the invoice is pushed to Xero immediately, along with the contact if it does not already exist. The Xero invoice number mirrors your Sessional invoice number.
- Sending an invoice — if the invoice was created before you connected Xero, it is synced at the point of sending.
- Voiding an invoice — the corresponding Xero invoice is also voided.
- Logging an expense — the expense is pushed to Xero as a spend transaction under the mapped account code.
- Deleting an expense — the corresponding Xero transaction is removed.
Each synced record stores a reference to its Xero counterpart. This prevents duplicates if you trigger the same action twice.
Tip
Account code mapping
During setup, you map each Sessional category to a Xero account code from your own chart of accounts:
- Sales (income) — the revenue account for invoice line items (typically a “Sales” or “Professional Income” account)
- Expense categories — fuel, mileage, equipment, training, insurance, subscriptions, professional fees, and other. Each maps to an expense account in your chart of accounts
You choose the accounts, so the integration works with any Xero chart of accounts, whether you use the default UK template or a custom structure set up by your accountant. Expense categories that are not mapped are skipped during sync.
Payment detection via webhooks
Sessional registers a webhook with Xero when you connect. When a payment is applied to one of your synced invoices in Xero — whether through bank reconciliation, manual entry, or a bank feed — Xero sends a notification to Sessional.
Sessional then:
- Verifies the webhook signature using HMAC to ensure it is genuine
- Looks up the corresponding Sessional invoice
- Marks the invoice as paid, recording the payment date and a note that the payment was detected via Xero
This means you do not need to manually update invoice statuses in Sessional when payments come through your bank account and are reconciled in Xero.
Important
What happens when you disconnect
You can disconnect Xero at any time from the Integrations page. When you disconnect:
- No further data is synced between Sessional and Xero
- The webhook subscription is removed, so payment notifications stop
- Invoices and expenses already synced to Xero remain in your Xero account — nothing is deleted
- Invoices already marked as paid in Sessional keep their paid status
- The stored OAuth2 tokens are securely deleted from Sessional
If you reconnect later, Sessional will re-establish the link. Previously synced records are recognised by their Xero reference, so they will not be duplicated.
What gets synced and what does not
To keep things clear, here is a summary of what is and is not included in the sync:
- Synced to Xero — contacts (organisations), sales invoices, invoice line items, expense transactions, invoice voids
- Synced back from Xero — payment status only (via webhooks when a payment is applied to a synced invoice)
- Not synced — bookings, availability, documents, profile data, mileage logs (mileage is synced as an expense amount, not as individual journey records)
The integration is focused on accounting data. Operational data such as bookings and documents stays within Sessional.
Troubleshooting
If something is not syncing as expected:
- Check your connection status — go to Integrations and confirm the status shows “Connected”. If it shows “Disconnected” or “Error”, try reconnecting.
- Check your Xero subscription — the integration requires an active Xero subscription. If your Xero account is expired or locked, syncing will fail.
- Review the sync log — each synced item shows its Xero reference on the invoice or expense detail page. If the reference is missing, the sync did not complete.
- Re-authorise if prompted — in rare cases, Xero may revoke the connection. If Sessional prompts you to re-authorise, click through the OAuth flow again.
Frequently asked questions
Do I need a Xero subscription?
Yes. You need an active Xero subscription with at least one organisation. Sessional connects to a single Xero organisation per account.
Can I use Xero and PocketSmith at the same time?
Yes. The two integrations serve different purposes. Xero handles your accounting ledger (invoices, expenses, tax), while PocketSmith handles bank transaction reconciliation. They do not conflict with each other.
Will existing invoices be synced when I first connect?
Only new invoices created or sent after connecting are synced automatically. If you need to push historical invoices to Xero, re-send them from the invoices page and they will be synced at that point.
What if I edit an invoice in Xero directly?
Changes made directly in Xero are not synced back to Sessional. The integration is designed to push data from Sessional to Xero, with payment status being the only information that flows back via webhooks.
Is my Xero data secure?
Sessional stores only an encrypted OAuth2 refresh token. Access tokens are short-lived (30 minutes) and refreshed on demand. Your Xero login credentials are never seen or stored by Sessional. The connection can be revoked at any time from either Sessional or Xero’s connected apps settings.