ml-connector
Sage IntacctMicrosoft Power BI

Sage Intacct and Microsoft Power BI integration

Sage Intacct runs accounting and ERP for your company. Microsoft Power BI visualizes financial data for your leadership team. Connecting the two keeps your dashboards and reports fed with current vendor lists, GL balances, and cost center dimensions from Intacct, without manual exports or re-entry. ml-connector schedules the data pipeline, handles the authentication differences between the two systems, and logs every record for audit.

How Sage Intacct works

Sage Intacct is a cloud-based ERP and accounting system exposing vendors, AP bills, AP payments, GL accounts, and dimensions through an XML gateway endpoint at https://api.intacct.com/ia/xml/xmlgw.phtml. Authentication is session-based: an initial call exchanges senderId, senderPassword, companyId, userId, and userPassword for a sessionid that is cached for 50 minutes. Intacct has no webhook system, so all data flows are polling-driven or manually triggered. HTTP 200 responses may contain application-level errors inside the XML body, requiring parsing for errormessage tags and status.

How Microsoft Power BI works

Microsoft Power BI is a cloud-based analytics and visualization service. The REST API manages workspaces, datasets, dashboards, and reports, and accepts row inserts into push datasets. Authentication is OAuth2 client credentials: a service principal authenticates via POST to the Microsoft login endpoint with client_id and client_secret, receiving a bearer token valid for approximately one hour. Tokens must be refreshed by re-requesting credentials when they expire. Power BI is read-mostly and does not push events outbound, but the service principal must be added as a member or admin on each workspace it accesses.

What moves between them

Vendor and GL account records flow from Intacct into Power BI push datasets on a schedule you define, typically daily or weekly. Intacct is the system of record; Power BI is the visualization destination. Cost centers and dimensions are also pushed to align financial reporting in Power BI with the GL structure in Intacct. The flow is unidirectional, since Power BI is a reporting system and has no data to write back into the GL.

How ml-connector handles it

ml-connector stores the Intacct session credentials encrypted and makes the initial getAPISession call to obtain a sessionid, caching it for up to 50 minutes. It then polls Intacct's XML gateway at your scheduled interval, parsing XML responses and extracting errors from the application-level status tags. On each poll, ml-connector transforms the Intacct vendor and GL records into the table schema that has been defined in Power BI, then POSTs rows to the push dataset using the OAuth2 bearer token. If the token has expired (typically after one hour), ml-connector refreshes it by re-requesting client credentials before the next push. The Intacct XML gateway serializes all operations through a single endpoint, so ml-connector batches requests efficiently and includes the uniqueid flag in control blocks to allow the server to deduplicate retried operations. Power BI push datasets have size and latency limitations per Microsoft documentation, and ml-connector respects those boundaries by staging large volumes across multiple requests. Every record carries a full audit trail.

A real-world example

A mid-sized professional services firm runs Sage Intacct for accounting and project management across three offices. Finance leadership uses Power BI dashboards to monitor cash flow, project profitability, and vendor spend in real time. Before the integration, the finance team exported vendor and GL account lists from Intacct weekly, manually uploaded them to a Power BI file, and refreshed the dashboards by hand. Sales and delivery teams asking for current numbers often received stale data from the prior week's export. With Intacct and Power BI connected, vendor lists and GL balances sync automatically every night, so the dashboards are fresh each morning and the finance team spends no time on manual exports.

What you can do

  • Push vendor records from Sage Intacct into Power BI push datasets and keep vendor master data current in your dashboards.
  • Sync GL accounts and cost center dimensions from Intacct to Power BI so financial reporting aligns with the ERP structure.
  • Authenticate Sage Intacct with session-based credentials and Microsoft Power BI with OAuth2 service principal flow.
  • Handle Intacct XML parsing, session refresh, and Power BI token lifecycle automatically on a schedule you define.
  • Audit and replay every vendor, GL, and dimension record that moves from Intacct to Power BI.

Questions

How does the integration handle the difference between Intacct's XML gateway and Power BI's REST API?
ml-connector translates between the two transports and authentication models. It posts to Intacct's XML gateway with session credentials, parses XML responses to extract errors and data, then transforms the records into JSON and posts them to Power BI datasets with OAuth2 bearer tokens. Session IDs are cached for 50 minutes and refreshed automatically; bearer tokens are refreshed when they expire.
What if Intacct's XML response contains an application-level error inside the HTTP 200 body?
ml-connector parses every XML response for errormessage tags and status values, not just HTTP status codes. If an error is detected, the record is logged in the audit trail and not pushed to Power BI until the underlying issue is resolved and the operation is retried.
Does Power BI push notifications back to the integration when data is refreshed?
No. Power BI does not send outbound webhooks. ml-connector polls Intacct on your defined schedule, transforms the data, and pushes it into Power BI datasets. Power BI's own refresh operations are read-only events that the connector can monitor but not directly drive.

Related integrations

Connect Sage Intacct and Microsoft Power BI

Free to use. Add your credentials, ping your real systems, and see if we fit.

Get started