ml-connector
Wave AccountingWooCommerce

Wave Accounting and WooCommerce integration

Wave Accounting runs the books for small businesses. WooCommerce powers the online store. Connecting the two means every WooCommerce order automatically becomes an invoice in Wave with the right customer, products, and amounts, so your accounting stays current without manual data entry. Customers created or updated in either system stay in sync, and your product catalog in both platforms reflects the same items.

How Wave Accounting works

Wave Accounting exposes customers, invoices, products, accounts, and transactions through a GraphQL API at https://gql.waveapps.com/graphql/public. Access requires OAuth 2.0 Authorization Code Flow with 2-hour access tokens and refresh tokens (offline_access scope required). Wave delivers webhooks for invoice.created, invoice.updated, invoice.paid, payment.created, customer.created, customer.updated, transaction.created, product.created, and product.updated events; return HTTP 200 to acknowledge. The connected Wave business must have an active Wave Pro subscription. Invoices have no patch operation, so updates mean create a new invoice or delete and recreate.

How WooCommerce works

WooCommerce is a self-hosted e-commerce plugin for WordPress, unique per merchant domain. It exposes orders, refunds, customers, products, taxes, coupons, and payment gateways through a REST API at https://<customer-domain>/wp-json/wc/v3/. Authentication uses API Key pairs (Consumer Key and Consumer Secret) via HTTP Basic Auth. WooCommerce delivers webhooks for order.created, order.updated, order.deleted, customer.created, customer.updated, customer.deleted, product.created, product.updated, and product.deleted. Webhooks are disabled after 5 consecutive non-2xx responses and must be manually re-enabled. WooCommerce does not expose vendors, purchase orders, GL accounts, or employees.

What moves between them

The primary flow moves from WooCommerce into Wave. New and updated orders in WooCommerce trigger invoice creation in Wave, mapped to the matching Wave customer and products. Customers created or updated in WooCommerce sync into Wave's customer list, and Wave customers created through the accounting system flow back to WooCommerce. Products are aligned in both directions so WooCommerce line items reference valid Wave products. Payments and refunds in WooCommerce update the corresponding Wave invoice status.

How ml-connector handles it

ml-connector stores Wave OAuth credentials and refreshes the 2-hour access token before each request without waiting for a 401 failure. On the WooCommerce side it stores the API Key pair and presents them via HTTP Basic Auth on every REST call. Before the first sync, ml-connector validates that the Wave business has an active Pro subscription; without it, the integration cannot run. When a WooCommerce order arrives via webhook, ml-connector looks up or creates the customer in Wave, matches or creates each product, and posts the order as a new Wave invoice with line items, taxes, and totals. Wave requires the business ID and invoice numbering, so ml-connector stores the Wave business context per customer. Customers flow in both directions: a customer created in Wave gets pushed to WooCommerce if the sync is bidirectional, and a customer deleted in WooCommerce is flagged for audit but not deleted from Wave (Wave invoices depend on the customer record). WooCommerce webhooks carry HMAC-SHA256 signatures; ml-connector validates every signature before processing. If a WooCommerce webhook fails after retries, ml-connector re-queues it; if a Wave GraphQL mutation fails, ml-connector backs off and retries. Every order, customer, and product change is logged with full before-and-after state.

A real-world example

A small craft retailer operates their online store on WooCommerce with 50-200 orders per month and runs Wave Accounting to manage invoicing and tax filing. Before the integration, the owner exported new orders from WooCommerce once a day and manually created matching invoices in Wave, a 30-minute task prone to typos and missing customers. With Wave and WooCommerce connected, each order becomes a Wave invoice automatically within seconds, customers are synced across both platforms, and the accounting team can generate sales reports and tax summaries directly from Wave without the daily manual step.

What you can do

  • Sync WooCommerce orders into Wave as invoices with customers, products, line items, taxes, and totals matched automatically.
  • Keep customers aligned in both directions so new signups in WooCommerce appear in Wave and hand-entered customers in Wave sync back to the store.
  • Match WooCommerce products to Wave products by name or SKU, so line items always reference valid inventory.
  • Handle Wave OAuth 2.0 token refresh, WooCommerce API key authentication, and Pro subscription validation before each sync.
  • Track order and customer changes with full audit logs, retries on both platforms, and error replay for failed webhooks.

Questions

Which direction does data move between Wave and WooCommerce?
Orders and refunds flow from WooCommerce into Wave invoices. Customers are synced bidirectionally, and products are aligned in both directions. Payments are recorded in Wave, and revenue reports are generated from Wave, not WooCommerce. Invoices created directly in Wave do not flow back to WooCommerce orders.
What happens if the Wave business does not have a Pro subscription?
Wave Pro is required for GraphQL API access. ml-connector validates the subscription before the first sync and will not proceed if it is expired or downgraded. If the subscription lapses during an active sync, ml-connector logs the failure and alerts you to renew.
How does ml-connector handle the product and customer matching between the two systems?
Products are matched by exact name or by SKU if provided in both systems. If a WooCommerce order references a product that does not exist in Wave, ml-connector creates a basic product record in Wave before posting the invoice. Customers are matched by email address; if a customer email exists in both systems, they are linked; otherwise, a new customer record is created in the target system.

Related integrations

Connect Wave Accounting and WooCommerce

Free to use. Add your credentials, ping your real systems, and see if we fit.

Get started