Wave Accounting and Microsoft Power BI integration
Wave Accounting keeps your small business books. Power BI visualizes your financial data for real-time insights. Connecting the two puts your invoices, customers, transactions, and tax registers into reports and dashboards without manual export or re-entry. New invoices appear in Power BI within minutes of creation in Wave, and year-end financial analysis is ready whenever you need it.
What moves between them
Wave invoices, transactions, customers, and sales tax records flow into Power BI push datasets. ml-connector subscribes to Wave's webhooks for invoice and payment events, and polls Wave's GraphQL endpoint on a schedule to fetch updated transactions and customer records. Each record is transformed to Power BI's table schema and posted to the corresponding push dataset. Power BI dataset refreshes are triggered after each batch load so reports and dashboards reflect the latest accounting state.
How ml-connector handles it
ml-connector stores Wave OAuth credentials encrypted and uses the refresh token to obtain a fresh access token every 2 hours as Wave's tokens expire. Power BI service principal credentials are also encrypted and tokens are refreshed on each API call that returns 401. Wave webhook notifications are validated with HMAC-SHA256 using Wave's signature header and a 5-minute replay window; any signature mismatch returns 401 to cause Wave to retry. When invoices are created, updated, or paid in Wave, or when a transaction is recorded, ml-connector transforms the GraphQL response fields into Power BI column names and datatypes, then POSTs the batch to the push dataset. Power BI requires the table schema to be declared before rows can be inserted, so ml-connector creates or updates the dataset schema on first run and when Wave's field list expands. If a dataset refresh is enabled, ml-connector triggers it after the batch loads so downstream reports see the new data immediately. Rate-limit headers from both APIs are tracked and respected with exponential backoff.
A real-world example
A small consulting firm uses Wave Accounting for invoicing clients and tracking expenses. The finance owner wants to see cash flow, invoice aging, and expense trends in real time without exporting CSV files weekly. With Wave and Power BI connected, each invoice automatically appears in a Power BI dashboard within minutes of creation, and a monthly expense breakdown refreshes every night. The owner can now spend time on strategy instead of manual reporting.
What you can do
- Stream Wave invoices, payments, customers, and transactions into Power BI push datasets via webhooks and scheduled polling.
- Transform Wave GraphQL fields to Power BI table schemas automatically, with schema updates handled on first run and when fields expand.
- Validate Wave webhook signatures with HMAC-SHA256 and enforce a 5-minute replay window to prevent duplicate processing.
- Authenticate Wave with OAuth 2.0 refresh token flow and Power BI with service principal client credentials, managing token expiry for both.
- Trigger Power BI dataset refreshes after each batch load so reports and dashboards reflect the latest accounting data in real time.
Questions
- Does ml-connector push all Wave entities into Power BI or only certain records?
- ml-connector streams invoices, payments, customers, transactions, products, accounts, vendors, and sales tax records. Wave does not expose bills, purchase orders, employees, or payroll through its GraphQL API, so those are not available for the integration.
- What happens when a Wave invoice is updated or deleted?
- Wave webhooks fire on invoice.created, invoice.updated, and invoice.paid events. ml-connector transforms each event and posts the updated row to Power BI. Wave invoices can only be created, approved, sent, or deleted - there is no patch operation - so ml-connector receives full invoice state from each webhook and upserts it into Power BI.
- How does ml-connector handle Wave and Power BI token expiry?
- Wave access tokens expire every 2 hours, and ml-connector refreshes them automatically using the refresh token. Power BI service principal tokens expire after about 1 hour, and ml-connector detects a 401 response and re-authenticates with client credentials. Both credential sets are stored encrypted.
Related integrations
More Wave Accounting integrations
Other systems that connect to Microsoft Power BI
Connect Wave Accounting and Microsoft Power BI
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started