Appearance
Accounting: Xero and QuickBooks
Invoices and payments push to your ledger automatically when an invoice is paid, so your bookkeeper is not re-keying what the shop already recorded.
Connecting
Insight, then Integrations, then the Accounting card.
| Field | Value |
|---|---|
| Provider | xero or quickbooks |
| Access token / refresh token | From your OAuth app for that provider |
Both providers need OAuth credentials from an app in their developer console:
| Provider | Also needs |
|---|---|
| Xero | Xero tenant id, client id, client secret |
| QuickBooks Online | Realm id, client id, client secret |
Only the provider you choose is active. There is no both-at-once mode.
Matching customers
Set the Xero/QB ID on each customer record to their contact id in your accounting system. Without it, the sync may create a new contact rather than matching your existing one, and you end up reconciling two versions of the same customer.
Do this for your regular trade accounts before turning the sync on. One-off retail customers matter far less.
What syncs
| Direction | What |
|---|---|
| Out | Invoices, when issued; payments, when recorded |
| In | Payments recorded against invoices in your ledger, so an invoice paid in Xero shows paid here |
Tax on a synced invoice uses your tax scheme. If your accounting system's tax codes are set up differently, fix the mapping before you sync a month of invoices, not after.
Before you switch it on
- Reconcile your ledger to a known-good state, so you can tell which entries came from the sync.
- Match your top customers' accounting IDs.
- Sync one invoice and look at it in your accounting system: contact, tax code, account code, amount.
- Then let it run.
Troubleshooting
| Symptom | Check |
|---|---|
| Duplicate contacts | Accounting IDs not matched on customer records |
| Invoice rejected | Tax code or account code mapping in your ledger |
| Nothing syncing | Token expired. OAuth tokens need refreshing; reconnect the card |
| Payments not coming back | The inbound payment pull, which runs on a schedule rather than instantly |