ml-connector
Sage 100Microsoft Power BI

Sage 100 and Microsoft Power BI integration

Sage 100 runs your on-premises finance operations but doesn't natively cloud-connect. Microsoft Power BI is where your finance team wants to see the data - dashboards, drilling, real-time alerts on spending and aged payables. Connecting the two means finance gets live visibility into AP aging, GL account balances, and vendor activity without exporting spreadsheets and re-keying every morning. ml-connector bridges the on-premises gap and moves the data on a schedule that syncs with your posting cycle.

How Sage 100 works

Sage 100 is an on-premises ERP system covering accounts receivable, accounts payable, general ledger, inventory, purchasing, and sales orders. It exposes limited data through SOAP eBusiness Web Services at the customer's IIS endpoint, which covers only sales orders and AR customers. Full access to AP invoices, GL journal entries, purchase orders, and vendors requires the BOI (Business Object Interface) COM layer, which must be wrapped by a local Windows service agent running on the Sage 100 server. The agent bridges the gap because Sage 100 has no native REST API or cloud transport. Sage 100 has no webhooks or push events, so all reads are polling-based. Authentication is username and password per call (no tokens). The company code (3-character identifier) is required on every call, and GL accounts use multi-segment formats (e.g. 4000-01-00) that vary by customer configuration.

How Microsoft Power BI works

Microsoft Power BI is a cloud analytics service where your team builds dashboards, reports, and visualizations. The Power BI REST API manages workspaces, reports, and datasets, and also supports push datasets - a way to send data in real-time via REST. Authentication is OAuth 2.0 with a service principal (client credentials grant). The service principal must be added as a workspace member and developer settings must be enabled in the Power BI admin portal. Push datasets are fed by POSTing rows to a REST endpoint, so ml-connector reads Sage 100 data, transforms it to match the Power BI table schema, and pushes rows in bulk. Power BI does not push events outbound - it is a consumption and analytics destination, not a source. Tokens expire after about one hour and must be refreshed by re-requesting credentials.

What moves between them

The flow runs from Sage 100 into Power BI. ml-connector polls Sage 100's BOI interface on a schedule you set - typically AP invoices every 15 minutes, GL accounts daily, and vendors hourly - and pushes the transformed data into Power BI push datasets. Each push refreshes the Power BI tables with the latest balances, invoice status, and vendor master data. The flow is one-direction (Sage 100 to Power BI only) because Power BI is an analytics destination, not a transaction source.

How ml-connector handles it

ml-connector runs as a Windows service on your Sage 100 server (or a server with network access to it). It stores the Windows service account username and password encrypted, and uses those credentials to call the Sage 100 BOI interface through the local COM layer. Because Sage 100 has no webhooks and both systems use different auth models - Sage 100 uses stateless username/password, Power BI uses OAuth2 bearer tokens - ml-connector handles the polling cadence and the token lifecycle. It polls Sage 100 on your schedule, extracts the company code and multi-segment GL account structure, maps the data to Power BI table columns, and POSTs rows to the push dataset endpoint. If a POST fails, ml-connector retries with backoff. Sage 100 uses COM record-locking for concurrent writes, so high-frequency polls include backoff to avoid contention. Power BI tokens are refreshed before they expire, so the push never stalls waiting for a new token. Every transaction is audited so you can trace which records moved and when.

A real-world example

A mid-sized wholesale distributor runs Sage 100 on premises for AP, GL, and inventory. The finance manager currently exports an AP aging report from Sage 100 once a day, uploads it to Excel, and re-keys totals by vendor into a Power BI dashboard for the CFO. With Sage 100 and Power BI connected, the dashboard refreshes every 15 minutes with the latest AP invoices, invoice status, and payment terms. The CFO sees vendor aging in real-time, catches early payment discounts, and the daily manual export step disappears.

What you can do

  • Poll Sage 100's accounts payable, general ledger, and vendor records on a schedule aligned with your posting cycle, encrypted and audited.
  • Push AP invoice data, GL account balances, and vendor master records into Power BI push datasets via OAuth2 so your finance team sees live dashboards.
  • Map Sage 100's multi-segment GL account structure and company codes to Power BI columns so reports are accurate by cost center and account.
  • Run the bridge agent as a Windows service on your Sage 100 server with encrypted credentials, handling COM record-locking and retries automatically.
  • Refresh Power BI datasets on a cadence that syncs with your payables and GL posting without manual intervention or spreadsheet exports.

Questions

Does the bridge agent have to run on the Sage 100 server itself?
The agent must run on a Windows machine with network access to your Sage 100 server and the COM layer. Best practice is to run it on the Sage 100 machine itself to avoid latency and complexity. ml-connector handles the Windows service installation, credentials, and lifecycle.
Which Sage 100 records flow into Power BI and how often?
AP invoices, GL journal entries, GL account balances, and vendor master data are the main flows. AP invoices typically poll every 15 minutes, GL accounts daily, and vendors hourly - you control the schedule. Each poll pushes new and updated rows into Power BI push datasets so your dashboards stay current.
How does ml-connector handle the different auth models between Sage 100 and Power BI?
Sage 100 uses stateless username/password per BOI call; ml-connector encrypts those credentials and submits them on each request. Power BI uses OAuth2 bearer tokens that expire in about one hour. ml-connector handles the token refresh cycle so the push endpoint never stalls waiting for credentials. Every authenticated call is logged for audit.

Related integrations

Connect Sage 100 and Microsoft Power BI

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

Get started