Back to Dashboard
How the QuickBooks Sync Works
1. What the integration syncs
| CRM | QuickBooks Online | Direction | |
|---|---|---|---|
| Clients (primary contact person + primary company, TRN) | ↔ | Customers | Both ways |
| Services catalogue | → | Items (Type: Service) | CRM → QBO only |
| Estimates (lines, VAT, validity) | ↔ | Estimates | Both ways |
| Invoices (lines, VAT, one continuous numbering) | ↔ | Invoices | Both ways |
| Invoice payments | ↔ | Payments (applied to the invoice) | Both ways |
| Credit notes | ↔ | Credit Memos | Both ways |
| Expenses (approved only) | ↔ | Bills (Vendor auto-created) | Both ways |
2. Connecting QuickBooks Online
- Create an app at developer.intuit.com (QuickBooks Online Accounting scope) and copy the Client ID and Client Secret.
- Add this Redirect URI to the app:
https://crm.digitsonline.com/integrations/quickbooks/oauth/callback - Paste the credentials in Settings, Save, then click Connect to QuickBooks and approve — the company (realm) is captured automatically.
- Real-time (optional): in the Intuit developer portal enable Webhooks for your app,
point them at
https://crm.digitsonline.com/api/integrations/quickbooks/webhook, copy the Verifier Token into Settings. Events are rejected until the verifier is set.
3. Exactly what maps where
- Clients → Customers: the display name is the client's primary company; email/phone/mobile come from the primary contact person; the primary company's address and 15-digit TRN are carried over. QuickBooks-created customers pull back as CRM clients.
- Document lines: QuickBooks requires every sales line to reference an Item — the sync keeps a default "Professional Services" item for this and carries your CRM description, quantity and rate on each line, with the VAT tax code applied (auto-detected by rate, or forced via Settings).
- One continuous numbering: CRM numbers are pushed as the QuickBooks DocNumber, and documents created inside QuickBooks are renumbered to the CRM's next sequential number on pull (enable "Custom transaction numbers" in QuickBooks → Account and settings → Sales for the rename to stick).
- Payments: a CRM payment is pushed as a QuickBooks Payment applied to the invoice, so balances always match; QuickBooks-recorded payments pull back and the CRM invoice recalculates paid/due and status (partial / paid) automatically.
- Expenses → Bills: only approved expenses post; the Vendor is auto-created from "Purchased From" (suffixed when the name clashes with a customer), and lines post to your first Expense account.
- Updates: QuickBooks requires the current SyncToken on every update — the sync refetches it automatically, so "stale object" conflicts resolve on the next run.
4. Realtime & scheduling
- CRM → QuickBooks: pushed the moment a sync runs — click a Sync button for instant, or the hourly automatic sync (enable in Settings; requires the server scheduler).
- QuickBooks → CRM: with webhooks configured, changes made inside QuickBooks (customers, invoices, estimates, payments, credit memos, bills) arrive within seconds. Without webhooks: next manual/hourly run.
- Change detection ensures re-running any sync is safe and never duplicates data.
5. When something fails
Every failed record's reason is recorded — click Details on a run in Recent Sync Activity, or open the
Results & Fix Guide page for step-by-step solutions
(missing Income/Expense account, duplicate names, stale-object conflicts, expired connection, unlinked payments).