ERR_WAVE_INVOICE_SYNC on Wave: Wave invoice sync failed — a source invoice does not appear in Wave, an update is rejected, or a replay risks creating a second invoice. Root cause: Wave invoice synchronisations fail when the source system and Wave disagree about the customer, invoice line data, tax configuration, currency, or the previous sync state. The most damaging version is a partial success: the source job times out or records an error after Wave has already created the invoice. Retrying without an external reference can then create a duplicate receivable. The fix is to diagnose the individual invoice, validate its accounting prerequisites, and make the write operation idempotent before replaying it. Step 1: Identify one failed invoice and check whether Wave already has it. From the integration run, capture the source invoice ID, invoice number, customer email, total, currency, and attempted timestamp. In Wave, search Invoices for the invoice number and customer before rerunning anything. If a matching invoice already exists, treat the job as a partial success and repair the source-to-Wave mapping rather than submitting a new create request. This one check prevents the most common duplicate-invoice outcome. Step 2: Verify the customer record is resolved before the invoice is sent. Open the affected customer in Wave and compare their name, email, and billing information with the source record. If your connector creates customers on demand, make sure it stores the returned Wave customer ID and uses that ID for later invoices. Matching by display name alone is unsafe because legal names, spacing, and shared household addresses vary. Resolve or create the customer first, then send the invoice against the stored Wave reference. Step 3: Validate line items, taxes, discounts, and currency in a single test invoice. Build a controlled test from the failed source invoice with one line item, then add the original tax, discount, and additional lines one at a time. Check that each product description, quantity, unit price, tax treatment, and currency is supported by the connector mapping. Invoice imports frequently fail because a tax code is absent, a discount is represented as a negative line unsupported by the connector, or a decimal is sent using the wrong locale format. Step 4: Use an external reference as the idempotency key. Store the immutable source invoice ID in the Wave invoice memo, a dedicated custom reference field if available through your connector, or a mapping table in the integration database. On every retry, search for that reference before creating a new invoice. If a record exists, update only permitted fields or mark the source row as synced. An invoice number that users can edit is not sufficient as an idempotency key. Step 5: Separate invoice creation from payment and status synchronisation. Do not make invoice creation depend on a payment-status update in the same transaction. First confirm that the invoice is present in Wave with the expected total. Then sync payment, overdue, or void status in a later step. Splitting the workflow makes failures easier to diagnose and prevents a failed payment lookup from causing the create step to run again. Step 6: Reconcile the failed batch against both systems. After fixing the mapping, export the failed source invoice IDs and compare them with Wave invoices for the same period. Categorise each source invoice as created once, already present, intentionally excluded, or still failed. Keep this reconciliation report with the integration log. It gives you a defensible audit trail and catches silent gaps that a simple successful rerun would otherwise hide.