QuickBooks Desktop and Microsoft Dynamics 365 Sales integration
QuickBooks Desktop runs accounting and vendor management. Dynamics 365 Sales runs the sales pipeline and customer relationship management. Connecting the two keeps your customer and vendor master data in agreement and aligns invoiced orders across both systems. When a new customer is added in QuickBooks Desktop, they appear as an account in Dynamics 365 Sales. When a sales order is created in Dynamics, the invoice that backs it flows into QuickBooks Desktop without re-entry. ml-connector handles the very different transport layers on each side and orchestrates the sync on a schedule you control.
What moves between them
The main flow is bidirectional. QuickBooks Desktop customers and vendors sync to Dynamics 365 Sales accounts and contacts so the CRM reflects your current customer and vendor roster. Dynamics sales orders flow into QuickBooks Desktop as invoices and update their status as orders are fulfilled and invoiced. Products and items are aligned in both directions so sales line items reference the correct inventory or service item in both systems. References such as account classifications and customer types are kept in sync. Because QuickBooks Desktop is pull-only (no webhooks), ml-connector polls the QBWC agent on a regular interval, typically aligned with your sales cycle (hourly or daily).
How ml-connector handles it
ml-connector stores the QuickBooks Desktop QBWC credentials and Dynamics 365 OAuth client credentials encrypted, and initiates a SOAP session on each poll by calling the authenticate() method with the stored credentials. For each entity (Customer, Vendor, Item, SalesOrder), it queries QuickBooks Desktop with ModifiedDateRangeFilter to find records changed since the last poll, fetches the current EditSequence (version counter) before any modifications to prevent concurrent edit conflicts, and transforms the QBXML payloads into Dynamics OData JSON. On the Dynamics side, it exchanges the OAuth client credentials for a fresh bearer token (tokens expire in roughly 60 minutes) and posts or updates records via the REST API. When Dynamics 365 webhooks are enabled, ml-connector can listen for sales order changes and propagate them back to QuickBooks immediately rather than waiting for the next poll cycle. All records carry a full audit trail, and any failed downstream write to Dynamics is logged so the record can be replayed once the issue is resolved.
A real-world example
A mid-market sales organization runs QuickBooks Desktop for accounting and bookkeeping across three regional offices, and Dynamics 365 Sales to manage leads, opportunities, and the sales pipeline. Before the integration, the accounting team maintained a separate customer list in QuickBooks and the sales team maintained a different one in Dynamics, creating confusion about billing addresses, payment terms, and whether a prospect was already a customer. When an order closed in Dynamics, the sales team emailed the details to accounting, who re-entered the invoice details into QuickBooks by hand, creating duplicate entry errors and invoice reconciliation delays. With QuickBooks Desktop and Dynamics 365 Sales connected, customers created in either system appear in both within the next poll cycle (typically one hour), and closed sales orders flow automatically into QuickBooks as invoices, pre-populated with the correct customer, items, and amounts. The accounting team now starts month-end close with orders and invoices already in agreement.
What you can do
- Sync QuickBooks Desktop customers and vendors to Dynamics 365 Sales accounts and contacts, keeping master data aligned across both systems.
- Move sales orders created in Dynamics 365 Sales into QuickBooks Desktop as invoices with correct customer, items, and amounts.
- Authenticate QuickBooks Desktop via SOAP session-token handshake and Dynamics 365 Sales via OAuth 2.0 Client Credentials flow.
- Poll QuickBooks Desktop through the customer-hosted QBWC agent on a regular interval, with change detection via ModifiedDateRangeFilter and EditSequence management.
- Provide a complete audit trail on every customer, vendor, order, and invoice moved between the systems, with the ability to replay failed records.
Questions
- Which direction does data flow between QuickBooks Desktop and Dynamics 365 Sales?
- The flow is bidirectional. Customers and vendors in QuickBooks Desktop sync to accounts and contacts in Dynamics 365 Sales so the sales team sees the current customer roster. Sales orders created in Dynamics 365 Sales flow into QuickBooks Desktop as invoices so accounting can bill and reconcile them. Items and products are aligned in both directions so line items reference the correct inventory in both systems.
- Does ml-connector support Dynamics 365 webhooks, or does it only poll?
- ml-connector supports both. Because QuickBooks Desktop has no webhooks, it polls the customer-hosted QBWC agent on a regular interval you set. When Dynamics 365 Sales webhooks are enabled in your Dataverse environment, ml-connector can listen for sales order and opportunity changes and push them back to QuickBooks immediately rather than waiting for the next poll cycle, accelerating the sync on the Dynamics side.
- What happens if QuickBooks Desktop or Dynamics 365 are unavailable during a sync?
- ml-connector logs every failed record with full context and retries on the next scheduled poll or webhook trigger. If a customer is created in Dynamics but the write to QuickBooks fails (for example, because the QB instance is temporarily offline or the item does not exist in QB yet), the record is marked for replay in the audit log so it can be synced once the issue is resolved without creating a duplicate.
Related integrations
More QuickBooks Desktop integrations
Other systems that connect to Microsoft Dynamics 365 Sales
Connect QuickBooks Desktop and Microsoft Dynamics 365 Sales
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started