ml-connector
Sage X3Microsoft Power BI

Sage X3 and Microsoft Power BI integration

Sage X3 holds your finance and operations data. Microsoft Power BI makes that data visible to your business. Connecting the two keeps your dashboards and reports fresh without manual exports and re-imports. GL entries post into Power BI hours after they post in Sage X3, and your finance team can analyze suppliers, purchase orders, and invoice aging without leaving Power BI.

How Sage X3 works

Sage X3 exposes GL accounts, GL entries, suppliers, purchase orders, sales invoices, and products through REST (legacy api1) and GraphQL (Xtrem) endpoints. Authentication uses OAuth2 client credentials for GraphQL or HTTP Basic Authentication for the REST api1 path. Access tokens expire after 5 minutes and must be refreshed using the refresh token, which is valid for 30 days. Sage X3 does not support outbound webhooks, so records are read by polling and compared against updatedDate and modifiedDateTime fields to detect changes since the previous sync.

How Microsoft Power BI works

Microsoft Power BI exposes push datasets through a REST API that accepts rows posted as JSON. Authentication uses OAuth 2.0 client credentials via Azure service principal, with tokens obtained from login.microsoftonline.com and included as Bearer headers on every call. The service principal must be assigned as Member or Admin on the target workspace, and developer settings must be enabled in the Power BI Admin portal to allow service principals to use the API. Push datasets require a predefined table schema before rows are posted, and updates typically succeed within seconds.

What moves between them

Records move from Sage X3 into Microsoft Power BI on a schedule you control. GL entries, purchase orders, sales invoices, and supplier master records are polled from Sage X3, mapped to Power BI table columns, and posted into push datasets in your workspace. Sage X3 is the source of truth, and Power BI is a read-only reporting destination.

How ml-connector handles it

ml-connector stores both credential sets and refreshes the Sage X3 access token on every sync cycle (tokens expire after 5 minutes), using the 30-day refresh token to obtain a new bearer. It accepts the Sage X3 server URL, port, and folder name per customer since there is no shared base address. On the Power BI side, ml-connector uses the service principal OAuth token to authenticate, and creates or updates push datasets in your workspace with the table schema you define. Because Sage X3 does not support webhooks, ml-connector polls on a schedule (hourly, daily, or on-demand) and uses updatedDate and modifiedDateTime to fetch only changed records. It tracks which records have been synced using their internal keys so the same GL entry or invoice does not get posted twice. Power BI push dataset updates are latency-sensitive, so ml-connector batches rows efficiently and retries failed POSTs with exponential backoff.

A real-world example

A mid-size distributor uses Sage X3 for purchasing, inventory, and general ledger accounting, and needs its finance team and sales operations to track supplier performance, cash flow by GL account, and invoice aging in Power BI dashboards. Before the integration, the finance team exported GL entries from Sage X3 each morning, transformed them in Excel, and loaded them into Power BI datasets by hand, which took 30 minutes and introduced re-keying errors. With Sage X3 and Power BI connected, GL entries and supplier records flow into Power BI automatically on a daily schedule, the dashboards refresh overnight, and the morning analysis starts with verified data.

What you can do

  • Push GL entries, suppliers, purchase orders, and sales invoices from Sage X3 into Microsoft Power BI push datasets on a schedule you define.
  • Authenticate Sage X3 with OAuth2 bearer tokens and handle 5-minute token expiry by refreshing automatically using the 30-day refresh token.
  • Authenticate Microsoft Power BI with service principal OAuth2 and manage workspace access without stored passwords.
  • Poll Sage X3 on a schedule (hourly, daily, weekly, or on-demand) and detect changes using updatedDate and modifiedDateTime fields so only new and modified records are synced.
  • Track synced records to prevent duplicates, with full audit trail and error replay if a Power BI POST fails.

Questions

How often does data sync from Sage X3 to Power BI?
You control the sync schedule. ml-connector can poll Sage X3 hourly, daily, weekly, or on-demand. Sage X3 does not support outbound webhooks or event push, so ml-connector uses polling and compares updatedDate and modifiedDateTime fields to detect changes since the previous run.
What if the Sage X3 access token expires during a sync?
Sage X3 access tokens expire after 5 minutes, and ml-connector automatically refreshes them using your refresh token (valid for 30 days). If a refresh token is about to expire, ml-connector alerts you so you can renew credentials with your Sage X3 Connected Application before the integration stops.
Do the same records sync twice if a power outage interrupts the sync?
No. ml-connector tracks which records have been posted to Power BI using their internal keys, and a resumed sync picks up where it left off without re-posting. Every record carries a full audit trail and can be manually replayed if needed.

Related integrations

Connect Sage X3 and Microsoft Power BI

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

Get started