Wave Accounting and Microsoft Dynamics 365 Sales integration
Wave Accounting keeps your books. Microsoft Dynamics 365 Sales manages your pipeline. Connecting them puts every invoice and customer from Wave Accounting into Dynamics 365 Sales so your sales team sees the full financial picture without manual entry. New invoices, customer updates, and payment records from Wave flow automatically into your Dynamics 365 Sales accounts and contacts, keeping the two systems in sync as you grow.
What moves between them
The main flow moves from Wave Accounting into Microsoft Dynamics 365 Sales. When invoices are created, updated, or marked paid in Wave, ml-connector receives the webhook notification and inserts or updates the corresponding account and contact records in Dynamics 365 Sales, mapping Wave customers to Dynamics 365 Sales accounts and invoice details to the quote or order timeline. Customer records created or updated in Wave are synced as accounts and contacts in Dynamics 365 Sales. Payment records from Wave are logged as activities on the corresponding Dynamics 365 Sales account. The integration is event-driven on the Wave side, responding in near-real time to webhook deliveries, and does not write back to Wave Accounting.
How ml-connector handles it
ml-connector subscribes to Wave Accounting's invoice and customer webhooks at setup and verifies each webhook signature using the HMAC-SHA256 x-wave-signature header with a 5-minute window. When Wave sends a notification, ml-connector retrieves the full invoice or customer record via the Wave GraphQL API using the OAuth access token, refreshing the token when it approaches expiry. The record is then mapped to the Dynamics 365 Sales schema: Wave customers become Dynamics 365 Sales accounts (mapped by email or external ID), and invoice line items create or update quote records linked to the account. ml-connector stores both credential sets encrypted and applies rate-limit backoff when either API returns 429. Because Dynamics 365 Sales uses client credentials OAuth, ml-connector exchanges the secret once at startup and caches the bearer token until refresh. Wave invoice updates are idempotent on the Dynamics 365 Sales side: the integration matches existing quotes or orders by external reference before inserting duplicates, and invoice paid events add a payment activity or mark the quote as won depending on the Dynamics 365 Sales workflow configuration.
A real-world example
A small consulting firm runs Wave Accounting for invoicing and general accounting and uses Dynamics 365 Sales to track pipeline and manage client relationships. Before the integration, the sales team manually logged invoices into Dynamics 365 Sales after they were sent in Wave, often days after the fact. With Wave and Dynamics 365 Sales connected, each invoice is instantly visible to the sales team as a Dynamics 365 Sales activity or linked quote on the client account. Customer records are automatically created as accounts in Dynamics 365 Sales so new clients added in Wave appear in the CRM pipeline without duplicating effort. Month-end, the entire invoice history flows from Wave into Dynamics 365 Sales without re-entry.
What you can do
- Sync Wave Accounting invoices into Microsoft Dynamics 365 Sales as quotes or activities on the matching account.
- Map Wave Accounting customers to Dynamics 365 Sales accounts so the CRM reflects the complete customer base.
- Log customer creation, invoice updates, and payments from Wave as timeline events in Dynamics 365 Sales.
- Subscribe to Wave webhooks for invoice and customer events with HMAC-SHA256 signature verification and automatic token refresh.
- Deduplicate records by external ID or email match and apply idempotent updates to existing Dynamics 365 Sales accounts.
Questions
- Which direction does data move between Wave Accounting and Microsoft Dynamics 365 Sales?
- The main flow is from Wave Accounting into Microsoft Dynamics 365 Sales. Invoices, customers, and payment records move from Wave into Dynamics 365 Sales accounts and activities. ml-connector does not write back to Wave Accounting, so your Wave books remain the system of record for financial data.
- How does ml-connector handle Wave and Dynamics 365 Sales authentication?
- Wave uses OAuth 2.0 Authorization Code Flow with a 2-hour access token and refresh token. Dynamics 365 Sales uses client credentials OAuth via Microsoft Entra ID. ml-connector stores both credential sets encrypted, exchanges each at startup, and automatically refreshes them before expiry. All requests to Wave include webhook signature verification with HMAC-SHA256.
- What happens when a Wave invoice is updated or a payment is marked paid?
- ml-connector receives the webhook, verifies the signature, retrieves the full invoice record from Wave, and syncs it to the matching Dynamics 365 Sales account. Updates are idempotent: if a quote already exists for that invoice (matched by external ID), it is updated rather than duplicated. Payment events are logged as activities on the account timeline.
Related integrations
More Wave Accounting integrations
Other systems that connect to Microsoft Dynamics 365 Sales
Connect Wave Accounting and Microsoft Dynamics 365 Sales
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started