Wave Accounting and Tableau integration
Wave Accounting holds your small business invoicing, expenses, and chart of accounts. Tableau turns data into dashboards and reports. Connecting the two lets you build real-time financial dashboards of invoices, customer balances, and account activity without re-keying data or building custom ETL. ml-connector watches for invoice and transaction events in Wave, transforms them into Tableau-ready rows, and refreshes your dashboards on a schedule you control.
What moves between them
Wave transaction and invoice data flows into Tableau. ml-connector subscribes to Wave webhooks for invoice and transaction events, reads the full transaction ledger and customer list via GraphQL query, and writes the rows into a Tableau data source extract. On each event, the extract refreshes so Tableau dashboards and reports show current balances, aged receivables, and account totals. Customer and account reference data is pulled from Wave and published as dimensions in Tableau so reports can slice invoices by customer name and account.
How ml-connector handles it
ml-connector stores Wave OAuth credentials and uses the refresh token to obtain a new access token before expiry, since the 2-hour token lifetime is shorter than typical dashboard refresh intervals. It listens for Wave webhooks on a registered HTTPS endpoint, verifies each signature with the stored webhook secret and current timestamp, and queues the transaction for processing. Because Wave's GraphQL API requires pagination (no batch queries), ml-connector batches reads for customers and accounts, caching reference data to avoid rate-limit issues. For Tableau, ml-connector exchanges the stored PAT for a session token, publishes rows to the designated data source via the REST API, and triggers an extract refresh. Tableau's lack of webhook signature verification means ml-connector validates the event source separately before processing. Because views are read-only in Tableau, all data flows through a single writable data source; reports and dashboards are built as views on top of that source.
A real-world example
A small service business uses Wave Accounting to track invoices and expenses, and builds monthly financial dashboards in Tableau to monitor cash flow, aging receivables, and expense trends. Before the integration, the accountant exported transactions from Wave weekly and re-uploaded them to Tableau as CSV files, a process that introduced manual errors and left dashboards stale between uploads. With Wave and Tableau connected, each new invoice or payment in Wave triggers an automatic refresh of the Tableau data source, so dashboards stay current throughout the month. Month-end reporting starts with up-to-date numbers, and the accountant no longer re-uploads data by hand.
What you can do
- Stream Wave Accounting invoices, payments, and transactions into Tableau data sources on webhook events.
- Build Tableau dashboards and reports on Wave financial data without manual CSV uploads or custom ETL.
- Sync Wave customers and accounts as dimensions in Tableau for slicing reports by customer and chart of accounts.
- Handle Wave OAuth token refresh and Tableau personal access token session exchange automatically.
- Verify Wave webhook signatures and manage Tableau data source refreshes on a cadence matched to your financial close calendar.
Questions
- Can ml-connector write financial transactions back from Tableau into Wave?
- No. ml-connector is read-only from Wave into Tableau. Tableau views are read-only derived objects, and writing transactions back to Wave would require Wave to expose an accounts payable or transaction creation API, which it does not. The flow is one direction: Wave events populate Tableau dashboards.
- How does ml-connector handle Wave's 2-hour OAuth token expiry?
- ml-connector stores Wave's refresh token and uses it to obtain a new access token when the current token is within 15 minutes of expiry, ensuring the token is always fresh before making a GraphQL query or querying for webhook secrets. This prevents 401 errors during scheduled refreshes.
- How does the integration manage customer and account data across Wave and Tableau?
- ml-connector pulls the full customer list and chart of accounts from Wave via GraphQL query when the data source is first set up, and on each subsequent refresh merges new or updated customers and accounts. These are published as dimension tables in Tableau so dashboards can drill down by customer name, business type, and account code.
Related integrations
More Wave Accounting integrations
Other systems that connect to Tableau
Connect Wave Accounting and Tableau
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started