ml-connector
Sage 50Microsoft Teams

Sage 50 and Microsoft Teams integration

Sage 50 runs accounting and finance on Windows, storing vendors, invoices, orders, and general ledger transactions locally. Microsoft Teams enables collaboration and approvals across your finance team. Connecting them surfaces critical accounting events in Teams so approvers see purchase orders, invoices, and payments in real time and can act on them without switching applications. ml-connector polls Sage 50's local SDK for changes and posts rich notifications to Teams channels you designate.

How Sage 50 works

Sage 50 is a desktop-installed accounting application available in US (Sage 50 US, formerly Peachtree Accounting) and UK (Sage 50 Accounts, formerly Sage Line 50) editions. It exposes vendors, customers, purchase invoices, sales invoices, purchase orders, sales orders, vendor payments, GL accounts, general journal entries, employees, inventory items, and goods received notes through a local Windows SDK (US .NET SDK or UK Sage Data Objects COM/ActiveX layer). Authentication uses Windows-local username and password against the Sage 50 user database, with the ApplicationID and CompanyPath (US) or DataPath (UK) specifying the target company. Sage 50 has no REST API, webhooks, or cloud integration surface, so integration requires polling modified records by LastModifiedDate or transaction date with a recommended poll interval of 5 to 15 minutes.

How Microsoft Teams works

Microsoft Teams exposes channels, chat messages, users, and meetings through the Microsoft Graph REST API under https://graph.microsoft.com/v1.0/. Authentication uses OAuth 2.0 client credentials flow against Microsoft Entra ID, requiring tenant_id, client_id, and client_secret. Teams supports webhook subscriptions via Graph change notifications, where a subscriber registers a webhook endpoint and receives notifications when monitored resources change (team, channel, or user updates). Subscriptions expire in 3 days and must be renewed; Teams does not expose invoices, POs, GL accounts, or vendor records, so Teams functions as a notification and approval surface only.

What moves between them

Sage 50 accounting events flow outbound to Microsoft Teams. ml-connector polls Sage 50 at your chosen interval (typically 5 to 15 minutes) for purchase invoices, purchase orders, vendor payments, GL postings, and customer receipts exceeding thresholds you set. For each record, it composes a notification or approval card and posts it to a designated Teams channel. Approvers in Teams can act on purchase order or payment notifications without opening Sage 50. The data flow is unidirectional (Sage 50 to Teams); Teams does not write back into Sage 50, as Teams has no invoice, order, or GL data of its own.

How ml-connector handles it

ml-connector runs on a Windows machine with Sage 50 installed and the SDK available (either .NET SDK for US edition or Sage Data Objects for UK edition). It authenticates against Sage 50 using Windows-local credentials and the company path you supply, then polls for modified records using the LastModifiedDate field or audit trail. For each new or modified record matching your notification rules (for example, purchase orders over 5000 USD, or any vendor payment), ml-connector constructs a Teams card with the vendor name, amount, GL account, and project code if applicable. It authenticates to Microsoft Graph using OAuth 2.0 client credentials, posts the card to a Teams channel you specify, and logs the notification in its audit trail. Sage 50 requires exclusive access while the SDK session is open (no interactive user logged in), so the polling window should align with a scheduled non-interactive time block. Rate limits and quota for Teams webhooks are enforced at the tenant level (10,000 total subscriptions per Azure AD tenant), so ml-connector batches notifications to stay within your allocation. Every notification carries full source record lineage so finance teams can trace back to the original Sage 50 transaction.

A real-world example

A mid-sized professional services firm runs Sage 50 Accounts (UK edition) for accounting and vendor management across three UK offices. Finance approvers are spread across the organization and live in Microsoft Teams. Before the integration, purchase order approvals required someone to check Sage 50 manually each morning, or approvers had to log in when a new PO landed. With Sage 50 connected to Teams, each new purchase order over GBP 2,500 appears as a card in a designated Finance Approvals channel within 10 minutes of entry, with vendor name, amount, GL account, and project code. Approvers can review and comment in Teams, and the approval request is logged alongside the original Sage 50 transaction for audit trail compliance. Month-end reconciliation now references Teams approval timestamps tied to Sage 50 posting dates.

What you can do

  • Notify Teams channels when purchase invoices, purchase orders, or vendor payments post in Sage 50, with configurable thresholds.
  • Surface GL account and project code mappings in Teams cards so approvers see where transactions land in the chart of accounts.
  • Poll Sage 50 on a schedule aligned with your finance workflow, with full audit trail linking Team notifications back to the original transaction.
  • Support both Sage 50 US (Peachtree) and Sage 50 UK (Line 50) editions through the appropriate SDK and authentication method.
  • Authenticate to Teams via OAuth 2.0 client credentials and Sage 50 via Windows-local credentials, with encrypted credential storage.

Questions

Can Microsoft Teams approve or reject transactions in Sage 50?
No. Microsoft Teams is a notification and discussion surface only. Teams approvers can view and comment on purchase orders or payments in Teams, but ml-connector does not write approvals back into Sage 50. Sage 50 remains the system of record for transaction state and posting.
Does the Sage 50 user account need special permissions?
The integration account must have read access to vendors, customers, invoices, orders, and GL accounts in Sage 50, and must not be logged in interactively while ml-connector's SDK session is active. Sage 50 enforces exclusive access on the local machine. The account should be created as a dedicated service user with the minimum necessary rights to query transaction history.
What happens if Sage 50 is not running or the Windows machine is offline?
ml-connector's polling will fail and retry on the next interval. If the machine is offline for an extended period, notifications will queue until Sage 50 is available again. There is no catch-up backfill; ml-connector resumes polling from the last successful check point, so any transactions posted during downtime will be picked up on the next successful poll if they fall within the query window.

Related integrations

Connect Sage 50 and Microsoft Teams

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

Get started