Money

Xero Integration

A two-way connection to the Chamber's Xero organisation. Chamber CRM raises invoices and pushes them to Xero; Xero reports payments back. Nothing is keyed twice.
Sync logTest connection⟲ Sync now
ConnectionAccount mappingContact matchingSync logErrors (2)

Connection

Connected
Xero organisation
South Canterbury Chamber of Commerce Inc.
Tenant ID
e4f1…9b2c
Connected by
Finance Administrator
Connected on
14 Mar 2026
Access token
Valid · refreshes automatically
Refresh token expires
18 Nov 2026 (rolls on each use)
Last successful sync
Today 09:47 (14 min ago)

Granted scopes

accounting.transactionsinvoices, credit notes, payments
accounting.contactscreate & match contacts
accounting.settings.readchart of accounts, tax rates
accounting.reports.readaged receivables
accounting.attachmentsnot requested
payroll.*never requested
Least privilege: the integration asks for nothing it does not use. Payroll is never in scope.

Sync health (24h)

Invoices pushed
38
Payments pulled
21
Contacts created
3
Credit notes
1
Queued
1
Errors
2

API budget used today
1,140 of 5,000 daily calls · well inside Xero's 60/min and 5,000/day limits. The queue throttles itself automatically.

Sync schedule

Push invoices immediatelyOn raise, on approve
Xero webhooks for paymentsNear-instant. Signature-verified (HMAC).
Reconciliation sweep every 15 minSafety net — catches anything a webhook missed
Nightly full check 02:00Compares balances, flags drift

What syncs, and which way

One direction of truth for every fact — this is the whole design
DataDirectionSystem of recordTriggerNotes
Organisation → Xero contactCRM → XeroChamber CRMOn first invoiceMatched on NZBN, then name, then email. Unmatched go to a review queue rather than creating a duplicate.
Sales invoicesCRM → XeroChamber CRMOn raise / approvePushed as AUTHORISED with line items, account codes, tax rate and tracking categories.
Credit notesCRM → XeroChamber CRMOn issueAllocated against the original invoice automatically.
Payments & part paymentsXero → CRMXeroWebhook + sweepUpdates invoice status, clears the member's balance, stops the reminder ladder.
Card payments taken in CRMCRM → XeroChamber CRMOn successful chargePosted as a payment against the invoice to the nominated clearing account.
Chart of accountsXero → CRMXeroOn demand / dailyRead-only. Populates the account pickers throughout the CRM.
Tax ratesXero → CRMXeroDailyRead-only. GST 15% is selected per line, never hard-coded.
Tracking categoriesXero → CRMXeroDailyRead-only. Lets the Chamber report P&L by revenue stream and by event.
Bank transactions & reconciliationNot syncedXeroDeliberately out of scope. The bank feed and reconciliation stay entirely in Xero.
Bills / accounts payableNot syncedXeroOut of scope. The Chamber's supplier invoices are a Xero matter.

Account mapping

Chamber CRM revenue stream → Xero account
Revenue streamXero accountTax rateTracking
Membership subscriptions200 — Membership SubscriptionsGST on Income (15%)Revenue Stream → Membership
Membership — not-for-profit201 — Membership NFPGST on Income (15%)Revenue Stream → Membership
Event tickets202 — Event IncomeGST on Income (15%)Revenue Stream → Events + Event → (per event)
Training & CPD203 — Training IncomeGST on Income (15%)Revenue Stream → Training
Directory & advertising204 — Directory IncomeGST on Income (15%)Revenue Stream → Directory
Sponsorship205 — Sponsorship IncomeGST on Income (15%)Revenue Stream → Sponsorship
Card payment clearing090 — Windcave ClearingNo GST
Merchant fees404 — Bank & Merchant FeesGST on Expenses
Accounts and tracking options are read live from Xero — if the accountant adds a code, it appears here without a developer.

Contact matching

2 to review
Match order: 1. stored Xero contact ID → 2. NZBN → 3. exact legal name → 4. billing email. No match on all four means a human decides — the integration never guesses and never silently creates a duplicate.
CRM organisationLikely Xero contactConfidence
Southern Districts Trust
Charity CC…4417
Sthn Districts Trust Inc
Email matches, name differs
LikelyLink New
Bay Street Physio
No NZBN on file
No candidate foundNoneCreate in Xero

Errors

2
INV-2026-0820 rejected09:31
Xero: Account code 203 is archived
Rate limit backoff02:14
60/min exceeded during renewal batch. Queue paused 60s and resumed. 0 invoices lost.
Failures never disappear. Every push is queued, retried with exponential backoff, and surfaced here until a human resolves it.

Sync log

Type: All ▾Result: All ▾Export
TimeDirectionObjectReferenceResultXero IDDetail
09:47:02Xero → CRMPaymentINV-2026-0411Applieda3f8…2d1$1,719.25 · webhook
09:31:44CRM → XeroInvoiceINV-2026-0820RejectedAccount 203 archived
09:30:58CRM → XeroInvoiceINV-2026-0819QueuedAwaiting contact link
09:18:11CRM → XeroContactHilltop DigitalCreated7c22…9baMatched by NZBN
08:20:03CRM → XeroInvoice batchRenewal run — Oct cohort47 of 47Took 51s · throttled to 55/min
02:00:00Xero → CRMReconciliation sweepAll open invoices0 drift784 invoices compared
The log is append-only and retained for 7 years — it is the evidence trail if the Chamber's accounts are ever audited.