ml-connector
Sage 100Looker

Sage 100 and Looker integration

Sage 100 holds your company's financial records. Looker surfaces those records to stakeholders through dashboards and analytics. Connecting the two lets finance teams analyze invoice aging, cash flow, and GL balances in Looker without manual exports. AP invoices, GL journal entries, and customer balances sync from Sage 100 on a schedule, loaded into Looker's modeled data layer where dashboards and scheduled reports can consume them. ml-connector handles the on-premises SOAP or agent bridge on the Sage 100 side and manages OAuth2 credential refresh on Looker, keeping both sides in sync.

How Sage 100 works

Sage 100 exposes accounts payable, accounts receivable, general ledger, and inventory through SOAP web services (eBusiness Web Services) or through a local Windows agent wrapping the BOI COM layer. SOAP covers only sales orders and customers; full AP, GL, PO, and vendor access requires the BOI agent running on the customer's server. Authentication uses username and password passed per call (no tokens). Polling is the only option; Sage 100 has no webhooks or push events. Recommended polling cadence: AP invoices every 15 minutes, purchase orders every 15 minutes, vendors hourly, GL accounts daily.

How Looker works

Looker exposes dashboards, queries, scheduled reports, and users through REST APIs authenticated with OAuth2 client credentials. The API base varies by deployment (cloud instances use .cloud.looker.com, legacy AWS use .looker.com:19999). Bearer tokens expire after 1 hour with no refresh endpoint, so integration must re-authenticate on each token expiry. Looker can receive data via Scheduled Plans (cron-driven webhooks to email, S3, or SFTP) or query results via the REST API. Looker models warehouse data, not ERP data natively, so it is a read-mostly platform for analytics; there is no native write path back to financial records.

What moves between them

AP invoices, GL accounts, GL journal entries, and AR customer data flow from Sage 100 into Looker. The integration polls Sage 100 at a cadence tied to your accounting close calendar, extracts the records, and inserts or updates them into Looker's modeled data layer so dashboards and scheduled reports can query them. The flow is one-way: Looker is a read-only analytics platform and does not write financial data back to Sage 100.

How ml-connector handles it

ml-connector stores Sage 100 credentials encrypted and uses them to authenticate SOAP calls or establish a connection to the local BOI agent. For Looker, it exchanges client_id and client_secret for an OAuth2 bearer token, caching it until expiry and re-authenticating when needed. Since Sage 100 is on-premises and pull-only (no webhooks), ml-connector polls at a frequency you define: AP invoices every 15 minutes, GL accounts daily. Sage 100 SOAP requires company code (3-char identifier) on every call and does not support pagination at scale; the BOI agent adds more flexibility but is tied to the customer's server. Looker queries can return up to 5000 rows per call; larger result sets are streamed or split into batches. Every record carries a timestamp (Sage 100's DateLastUpdated or DateCreated) and a full audit trail, so failed syncs can be retried or replayed.

A real-world example

A mid-sized food distributor runs Sage 100 for AP, AR, GL, and inventory. The finance team needs weekly visibility into invoice aging, cash flow by vendor, and GL account balances. Before the integration, they exported a CSV from Sage 100 by hand each Friday and uploaded it to Looker for analysis. With Sage 100 and Looker connected, GL accounts, AP invoices, and AR customer balances are extracted from Sage 100 every 15 minutes and modeled in Looker. The finance team's dashboards update automatically, they can slice invoice aging by vendor or cost center in real time, and the Friday manual export step is gone.

What you can do

  • Extract GL accounts, journal entries, AP invoices, and AR customer data from Sage 100 on a polling schedule you control.
  • Authenticate to Sage 100 via SOAP or local Windows BOI agent, and to Looker via OAuth2 client credentials with automatic token refresh.
  • Load financial records into Looker's modeled data layer for analysis, dashboard queries, and scheduled report generation.
  • Handle Sage 100's company code requirement, multi-segment GL account formats, and SOAP pagination limits transparently.
  • Maintain a full audit trail of every record extracted, with timestamp tracking and error replay for failed syncs.

Questions

What financial records flow from Sage 100 into Looker?
The integration extracts GL accounts, GL journal entries, AP invoices and vendors, AR customers and invoices, and inventory items. Polling frequency is configurable: AP invoices every 15 minutes, GL accounts daily, and vendors hourly. Only Sage 100 data is synced; Looker is a read-only analytics platform.
Does the integration support Sage 100 on-premises and the local BOI agent?
Yes. ml-connector can authenticate via SOAP web services or via a Windows agent wrapping the BOI COM layer. SOAP is limited to sales orders and customers; full AP, GL, and PO access requires the BOI agent running on the customer's server. The integration manages either credential set encrypted.
How does ml-connector handle Looker's 1-hour token expiry?
Looker's OAuth2 bearer tokens expire after 1 hour with no refresh endpoint. ml-connector caches the token and monitors its age, re-authenticating with client_id and client_secret when the token is about to expire. This is transparent to the pipeline.

Related integrations

Connect Sage 100 and Looker

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

Get started