Wave Accounting and TaxJar integration
Wave Accounting runs invoicing and transaction tracking for small businesses. TaxJar handles sales tax compliance across US states and nexus regions. Connecting Wave to TaxJar means every invoice created in Wave automatically flows to TaxJar for real-time sales tax calculation and compliance reporting. Tax rates stay current as you create and update invoices, and transaction records are synced to state tax authorities without manual export.
What moves between them
Invoices flow from Wave to TaxJar in one direction. When an invoice is created or updated in Wave, ml-connector reads the invoice data and posts it to TaxJar for tax calculation and transaction reporting. Customer exemption data can flow from TaxJar back to Wave for future invoice exemption validation. Sales tax rates and nexus regions are retrieved from TaxJar on demand or on a sync schedule when new jurisdictions are encountered. Refunds in Wave are synced to TaxJar as refund transactions for compliance reporting.
How ml-connector handles it
ml-connector stores Wave OAuth2 credentials and TaxJar API tokens encrypted at rest. Wave's OAuth2 access tokens expire in 2 hours, so ml-connector refreshes the token automatically before expiry using the long-lived refresh token. TaxJar tokens do not expire and are validated on each request. Wave publishes webhook events for invoices and transactions; ml-connector listens on the registered webhook endpoint and validates each signature with HMAC-SHA256 before processing. For TaxJar, since it offers no webhooks, ml-connector polls Wave's transaction list on a schedule or waits for a webhook event from Wave. When an invoice flows to TaxJar, ml-connector maps Wave invoice line items (with products and amounts) to the TaxJar /taxes endpoint to fetch real-time rates, then posts the completed transaction to /transactions/orders with the calculated tax. If a customer is marked as tax-exempt in TaxJar, that exemption status is cached and applied to future Wave invoices for that customer. Retries and idempotency keys prevent duplicate transaction reports.
A real-world example
A small e-commerce or professional services business uses Wave Accounting to send invoices and track revenue, and must comply with sales tax reporting across the states where they have nexus. Before the integration, the business exported invoices from Wave monthly and manually entered them into TaxJar, risking missed transactions and wrong tax rates. With Wave and TaxJar connected, each invoice triggers real-time tax calculation in TaxJar, capturing the correct tax rate for the customer's address at invoice time. Transactions automatically report to state tax authorities, and month-end tax liability is calculated from real invoice data instead of estimates or manual entry.
What you can do
- Post Wave invoices to TaxJar for real-time sales tax calculation based on customer location and product type.
- Automate sales tax transaction reporting to state tax authorities without manual export from Wave.
- Sync customer tax exemption status from TaxJar back to Wave so future invoices honor exemptions.
- Validate Wave invoice addresses against TaxJar and flag mismatches before syncing.
- Track nexus regions and sales tax rates in TaxJar as Wave expands to new states.
Questions
- Which direction does data move between Wave Accounting and TaxJar?
- Invoices and transactions flow from Wave to TaxJar for tax calculation and compliance reporting. Customer exemption status flows from TaxJar back to Wave so tax-exempt customers are not taxed on future invoices. Sales tax rates and nexus regions are retrieved from TaxJar on demand when Wave creates an invoice in a new jurisdiction.
- How does the integration handle Wave's OAuth2 tokens and TaxJar's API keys?
- ml-connector stores both credential sets encrypted at rest. Wave OAuth2 access tokens expire in 2 hours, so ml-connector refreshes them automatically before expiry using the refresh token. TaxJar API tokens do not expire but are validated on each request, and renewal or rotation is handled without downtime.
- Does the integration use Wave webhooks or poll for invoices?
- ml-connector uses Wave's webhooks for invoice.created, invoice.updated, and invoice.paid events, which trigger immediate syncs to TaxJar. Since TaxJar does not support webhooks, ml-connector posts completed invoices to TaxJar for tax calculation and transaction reporting via direct API calls, with idempotency keys to prevent duplicate reports.
Related integrations
More Wave Accounting integrations
Other systems that connect to TaxJar
Connect Wave Accounting and TaxJar
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started