Your CRM and Xero, finally on the same page.
Connect Xero once via OAuth. Every fifteen minutes we pull payment status, contact changes, and invoice updates. Sync individual clients from the CRM; watch the whole firm's sync status from Accounting. One credential, two surfaces — no double-entry.
OAuth 2 in two clicks
Admins connect Xero from Settings > Integrations > Xero. Approve the scopes, pick a tenant, done. Credentials never leave your org boundary.
15-minute polling
No webhooks, no tunnels, no signature-verification headaches. Every 15 minutes a CF Worker pulls payment + contact updates and reflects them in ImmiIQ.
Per-client sync buttons
On any client billing tab, a ‘Sync to Xero’ button creates or updates the matching Xero contact + pushes outstanding invoices. One click, one audit log.
Invoice mirror
Invoices created in ImmiIQ appear in Xero. Payment applied in Xero flips the ImmiIQ invoice to paid. The books stay one book.
Cross-client sync log
Accounting > Xero Sync shows every sync attempt — success, error, last-seen timestamp, error JSON. Debug across the whole firm in one view.
Bi-directional contact sync
Edit a client in Xero, it reflects in ImmiIQ next poll. Edit in ImmiIQ, pushed on next sync. Source of truth lives where your team works.
Scoped + audit-logged
We request the minimum scopes (accounting.contacts + accounting.transactions). Every sync attempt writes to audit_logs with the user, tenant, and response.
One suite, no accounting sprawl.
Credentials live in Settings. Per-client sync lives in CRM. Firm-wide status lives in Accounting. Everything tracks to the same Xero tenant — so your bookkeeper and your agents see the same numbers.