Wave Accounting and Shopify integration
Wave Accounting handles your books. Shopify handles your store. Connecting them keeps your AR ledger in sync with your actual sales and payments. Shopify orders automatically become Wave invoices, mapped to the right customer, and payment confirmations from Shopify post as revenue transactions in Wave without manual re-entry. ml-connector handles the OAuth flows on both sides and manages the webhook handshake so every sale reaches your ledger on schedule.
What moves between them
Data flows bidirectionally. Shopify order and customer events arrive via webhook; ml-connector maps each order to a Wave customer (creating if new) and creates a Wave invoice dated the order date, with line items tied to Wave products. Shopify payment confirmations (order.paid events) trigger Wave payment records against the matching invoice. Wave transactions created outside this flow (manual adjustments, refunds) are read and synced back to Shopify order metadata for reconciliation. The sync runs in near real time when webhooks are active; Wave transactions are polled on a schedule for completeness.
How ml-connector handles it
ml-connector stores Wave refresh tokens encrypted and uses them to refresh access before expiry. Shopify offline tokens (which do not expire) are also encrypted at rest. Both systems use GraphQL; ml-connector translates Shopify order line items into Wave line items with amount, description, and product reference. Shopify customer names map to Wave customers by email (exact match) or are created as new customers. Wave invoices are generated in draft status and posted when Shopify marks the order as paid. Shopify webhook signatures are verified using HMAC-SHA256 against the x-shopify-webhook-id header. Wave webhook signatures use HMAC-SHA256 against the x-wave-signature header with a 5 minute replay window. The main challenge is Wave's lack of an update operation on invoices once created; changes to a Shopify order after Wave invoice creation result in a refund + new invoice pattern or manual adjustment in Wave. Every transaction carries a full audit trail, allowing replay if either system becomes temporarily unavailable.
A real-world example
A small online retailer sells furniture and decor via Shopify and uses Wave Accounting for invoicing and AR. Before the integration, the owner manually exported daily orders from Shopify, created invoices in Wave, and matched payment confirmations by hand. Month-end reconciliation required hunting for orders paid in Shopify but not yet invoiced in Wave, leading to discrepancies and delayed closing. With Shopify and Wave connected, each order automatically becomes a Wave invoice the moment it ships, payment confirmations post as revenue, and the AR aging report reflects actual cash collected. The owner now spends no time on data entry and closes books two days faster.
What you can do
- Map Shopify orders to Wave Accounting invoices automatically, with line items, amounts, and customer details.
- Create Wave customer records from Shopify customers on first order, maintaining a single source of truth for AR.
- Post Shopify payment confirmations as Wave payment records against the matching invoice.
- Authenticate both Wave and Shopify with OAuth 2.0, store tokens encrypted, and refresh before expiry.
- Verify webhook signatures on both sides and provide a full audit trail of every synced transaction for reconciliation.
Questions
- What happens if a Shopify order is changed after the Wave invoice is created?
- Wave Accounting does not support updating an invoice after creation. ml-connector detects the change, creates a reversal/credit memo in Wave and generates a new invoice for the updated amount. Both invoices remain in the audit trail so the reconciliation is complete.
- Does ml-connector handle refunds from Shopify into Wave?
- Yes. When Shopify records a refund (full or partial), ml-connector creates a corresponding credit memo or negative transaction in Wave, mapped to the original invoice. The refund is tracked in the audit log for reconciliation.
- How often are Shopify orders synced to Wave if webhooks fail?
- Shopify order and customer events arrive via webhook in near real time. If a webhook delivery fails (Shopify returns a non-200 response), Shopify retries up to 19 times over 48 hours. ml-connector also polls Shopify orders on a configurable schedule (e.g., hourly) as a backstop, so no order is ever permanently missed.
Related integrations
More Wave Accounting integrations
Other systems that connect to Shopify
Connect Wave Accounting and Shopify
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started