ml-connector
Sage 100Microsoft Teams

Sage 100 and Microsoft Teams integration

Finance teams often track critical GL postings and AP invoice status by email or manual log checks. Sage 100 and Microsoft Teams, connected through ml-connector, keep your finance team in a single channel where Sage 100 AP invoices, manual checks, and GL postings appear as they are recorded. No more hunting for invoice images or manually tracking GL totals across email and spreadsheets. Every posting carries full approval context and audit trail.

How Sage 100 works

Sage 100 is an on-premises ERP system covering accounts payable, general ledger, purchase orders, sales orders, and inventory. It exposes data through eBusiness Web Services (SOAP, covering sales orders and customers only) or through a local Windows agent wrapping the BOI COM layer (which includes AP invoices, GL accounts, GL journal entries, purchase orders, and vendors). The system uses username and password authentication per call, with no tokens or OAuth. Sage 100 has no webhooks or push events; data must be polled via DateLastUpdated or DateCreated fields. Company code is required on every call, and users must be individually enabled for Web Services.

How Microsoft Teams works

Microsoft Teams is a cloud collaboration platform accessible via the Microsoft Graph REST API. Teams authenticates with OAuth 2.0 client credentials and supports webhooks via Microsoft Graph change notifications, which expire after 3 days and must be renewed. Teams has no native ERP data objects (invoices, GL accounts, vendors, or payments); it functions as a messaging and notification surface. Teams rate limits are not documented but scale with tenant size. All application permissions require Azure AD admin consent, and webhooks must validate and return within 10 seconds.

What moves between them

Data flows from Sage 100 into Microsoft Teams. ml-connector polls Sage 100 for new AP invoices, manual checks, and GL journal entries (typically every 15 to 30 minutes for AP and GL), and posts summaries and alerts to designated Teams channels. Each notification includes the invoice number, amount, GL account, vendor, and journal entry details. GL reconciliation alerts run on a daily schedule. No data flows back to Sage 100; Teams is read-only notification surface.

How ml-connector handles it

ml-connector maintains both the Sage 100 local agent connection (via the customer-provided BOI agent or SOAP endpoint URL, company code, and credentials) and the Microsoft Teams OAuth connection (tenant ID, client ID, and client secret). On the Sage 100 side, it polls AP invoices, manual checks, GL accounts, and GL journal entries by DateLastUpdated at a cadence tied to your close cycle. Because Sage 100 has no idempotency keys, ml-connector tracks record IDs to avoid posting duplicates. On the Teams side, it posts formatted messages to pre-configured channels using the Microsoft Graph chat message API. GL reconciliation alerts compare total postings per GL account and send a summary message daily. The integration handles Sage 100's concurrent write limits (rare for polling reads) and Teams' 10-second webhook validation window. Every notification is logged with timestamp, vendor, and amount for audit compliance.

A real-world example

A mid-sized distributor runs Sage 100 on-premises for AP, GL, and inventory. The accounting team uses Microsoft Teams for daily chat and coordination. Before the integration, the team manually checked Sage 100 for new invoices and GL postings several times a day, often missing urgent items or approvals. With Sage 100 and Teams connected, new AP invoices appear in a Teams channel within minutes of entry, flagged by vendor and amount, and GL reconciliation alerts run daily so the team spots posting errors before the close. Approval workflows now live in Teams, reducing context-switching and delays.

What you can do

  • Post Sage 100 AP invoices and manual checks to Microsoft Teams channels within minutes of receipt or creation.
  • Send daily GL reconciliation alerts to Teams summarizing total postings per GL account for close cycle verification.
  • Bridge on-premises Sage 100 authentication to Microsoft Teams OAuth, handling the local agent credentials and company code transparently.
  • Prevent duplicate notifications by tracking Sage 100 invoice and journal entry IDs across polling cycles.
  • Maintain a full audit trail in both systems: Sage 100 records logged with Teams message IDs for cross-system traceability.

Questions

How does ml-connector access Sage 100 if it is on-premises?
ml-connector requires the customer to deploy a local BOI agent on the Sage 100 server or expose the eBusiness Web Services SOAP endpoint over HTTPS (with company code and credentials per call). The agent or SOAP endpoint acts as the bridge from ml-connector's cloud infrastructure to the on-premises Sage 100 instance. The customer controls which GL accounts, AP vendors, and company codes are accessible.
Can Teams receive GL entries and AP invoices in real-time or only on a schedule?
Microsoft Teams webhooks expire every 3 days and require active renewal. ml-connector uses polling instead to avoid managing subscriptions. AP invoices and GL entries are polled from Sage 100 every 15 to 30 minutes (configurable per your close cycle) and posted to Teams immediately after each poll. For critical GL accounts or vendors, polling intervals can be tightened.
What happens if Sage 100 has no new invoices or GL entries?
ml-connector polls on schedule whether or not new records exist. If no new invoices or GL entries are found, no message is posted to Teams. GL reconciliation summaries are sent daily regardless, showing zero new postings if that is the case, so the team always knows the system is working.

Related integrations

Connect Sage 100 and Microsoft Teams

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

Get started