Acumatica and Microsoft Power BI integration
Acumatica runs your financials, distribution, and manufacturing as the system of record. Microsoft Power BI is the analytics service your team uses to build dashboards and share insights. Power BI has no place to store an invoice or a GL account, so this connection works around that reality: ml-connector reads finance records from Acumatica and pushes them as rows into Power BI dataset tables on a schedule you set, so vendors, AP bills, purchase orders, payments, and GL journals are reportable without manual exports. It handles the very different APIs and auth on each side and moves data one direction, from the ERP into the reporting layer.
What moves between them
The flow runs from Acumatica into Microsoft Power BI. On each scheduled run, ml-connector reads new and changed Acumatica records since the last high-water mark and posts them as rows into the matching Power BI push dataset tables, such as Vendors, Invoices, PurchaseOrders, Payments, and GLAccounts. Direction is one way, ERP to reporting layer, because Power BI is a dashboard sink rather than a system of record. Cadence is set per flow, from frequent intraday pushes to a nightly load, and the run records the LastModifiedDateTime watermark so the next run only sends deltas.
How ml-connector handles it
ml-connector stores both credential sets encrypted. On the Acumatica side it accepts the full tenant URL and the endpoint version per customer, requests an OAuth 2.0 token, and refreshes it when a call returns 401, unwrapping the field values Acumatica returns as {value: ...} objects. On the Power BI side it requests a service principal token with the analysis.windows.net/powerbi/api/.default scope, not a Microsoft Graph scope, since the wrong audience returns 401, and it resolves the workspace name to a group GUID before any call because all paths use the GUID rather than the display name. Because Power BI has no change events, the connector polls Acumatica on LastModifiedDateTime and pages with $top and $skip. Push dataset rows are append-only with no idempotency key, so to avoid duplicates the connector either deletes the table rows and re-posts a clean set or tracks the watermark and sends only net-new rows, staying within the push limits of 10,000 rows per POST and 75 columns per table. After a load it can trigger a dataset refresh. Acumatica returns HTTP 429 once the request count crosses the licensed threshold and Power BI returns 429 with a Retry-After header, so the connector backs off with jitter and retries either side. Schema is additive, so adding a column to a table is safe, and every record carries a full audit trail and can be replayed if a push fails.
A real-world example
A mid-sized distribution company runs Acumatica for procurement, AP, and the general ledger across several warehouses, and its finance team builds management dashboards in Microsoft Power BI. Before the integration, an analyst exported bills and GL journals from Acumatica to spreadsheets every week and refreshed the Power BI model by hand, which left dashboards a week stale and prone to copy-paste errors. With Acumatica and Microsoft Power BI connected, new bills, payments, and journal lines flow into push dataset tables on a nightly schedule, allocated to the right tables and cost centers. Spend and cash dashboards refresh on their own, and the manual export step is gone.
What you can do
- Post Acumatica vendors, AP bills, purchase orders, payments, and GL journals into Microsoft Power BI push dataset tables.
- Run one-way ERP to reporting syncs so Power BI stays a clean dashboard copy of Acumatica finance data.
- Poll Acumatica on LastModifiedDateTime with offset pagination so each run sends only new and changed records.
- Bridge Acumatica OAuth 2.0 and a Power BI service principal token scoped to analysis.windows.net, refreshing both before they expire.
- Post rows in batches within the push limits, trigger a dataset refresh, and keep retries and a full audit trail on every record.
Questions
- Can ml-connector write invoices or GL accounts into Microsoft Power BI as records?
- Power BI is a reporting and analytics service with no native vendor, invoice, purchase order, or GL account object, so there is nothing to store those records as. Instead ml-connector reads the finance records from Acumatica and posts them as rows into Power BI push dataset tables that you can build reports on. Acumatica stays the system of record, and the connector never treats Power BI as one.
- Which direction does data move between Acumatica and Microsoft Power BI?
- Data moves one way, from Acumatica into Microsoft Power BI. Acumatica is the system of record and Power BI is the reporting layer, so ml-connector reads finance records from Acumatica and posts them as rows into Power BI dataset tables. It does not write data back into Acumatica from Power BI.
- Does Power BI push changes back, or does the connector poll Acumatica?
- Power BI sends no outbound webhooks, so the connector never waits for an event from it. Acumatica can emit Push Notifications, but the reliable pattern used here is polling Acumatica on a LastModifiedDateTime filter on a schedule you set. Each run stores the high-water mark so the next run sends only the records that changed.
Related integrations
More Acumatica integrations
Other systems that connect to Microsoft Power BI
Connect Acumatica and Microsoft Power BI
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started