ml-connector
Sage 100Microsoft Dynamics 365 Sales

Sage 100 and Microsoft Dynamics 365 Sales integration

Sage 100 runs your on-premises operations and order fulfillment. Microsoft Dynamics 365 Sales manages your sales pipeline and quotes in the cloud. Connecting the two keeps your customer master data and sales orders synchronized across both systems, so your sales team sees up-to-date information from your order book, and your operations team sees the deals in the pipeline.

How Sage 100 works

Sage 100 is an on-premises ERP that exposes customers, sales orders, vendors, AP invoices, GL accounts, and purchase orders through SOAP Web Services (sales and customer data only) or via a local Windows agent wrapping the BOI COM layer (full AP, GL, and PO access). The SOAP endpoint is customer-hosted at https://<customer-server>/ebusinesswebservices/masservice.svc and requires username and password per call; there are no tokens, no OAuth, and no webhooks. Polling is the only sync method, using DateLastUpdated or DateCreated fields to detect changes. The system requires a local Windows service account, per-call credentials, and company code on every request; it also has no idempotency keys and applies concurrent write locks on shared records.

How Microsoft Dynamics 365 Sales works

Microsoft Dynamics 365 Sales is a cloud CRM built on Microsoft Dataverse that manages leads, opportunities, accounts, contacts, quotes, and sales orders. It exposes these records through REST (OData v4.0) at https://{org-name}.api.crm.dynamics.com/api/data/v9.2/ and authenticates with OAuth 2.0 client credentials via Microsoft Entra ID. The API supports webhooks via Dataverse Event Framework for Create, Update, Delete, and custom actions with synchronous or asynchronous execution, and also accepts polling. Webhook payloads are limited to 256 KB and use shared-secret validation rather than HMAC. Tokens expire in approximately 60 minutes.

What moves between them

Customer and sales order data flows from Sage 100 into Microsoft Dynamics 365 Sales. New and modified customers in Sage 100 sync to Dynamics accounts; new and modified sales orders in Sage 100 sync to Dynamics sales orders, mapped to the corresponding Dynamics account. Reference data such as product and price lists on the Dynamics side remain the source of truth for new quote pricing. Data flows one direction only, since Sage 100 is the system of record for operations and fulfillment.

How ml-connector handles it

ml-connector maintains the Sage 100 customer server hostname, local agent credentials (API key or mTLS certificate), company code, and SOAP username and password, encrypted at rest. On the Dynamics side it stores the OAuth client ID and secret and manages token refresh on each 60-minute expiry. It polls Sage 100 at intervals tied to your operational rhythm (customers hourly, sales orders every 15 minutes) by querying the DateLastUpdated field to find changes since the last run, fetches matching customer and order records through SOAP or the local agent, and posts or updates the mapped records in Dynamics via REST. Sage 100 sales orders map to Dynamics sales orders; Sage customers map to Dynamics accounts. Concurrent write locks on Sage 100 records are handled with exponential backoff and retry. Every record carries an audit trail and can be replayed if a downstream Dynamics call fails.

A real-world example

A mid-sized distributor runs Sage 100 on-premises for order entry, inventory, and fulfillment, and uses Microsoft Dynamics 365 Sales in the cloud for pipeline management and deal tracking across a geographically distributed sales team. Before the integration, the sales team entered customer data and quoted orders manually into Dynamics, while the operations team re-entered deal wins from the CRM into Sage 100 for fulfillment, causing delays and mismatches. With Sage 100 and Dynamics 365 Sales connected, customer master data syncs automatically whenever operations updates a customer profile, and new sales orders from Dynamics flow into Sage 100 ready for fulfillment without manual re-entry. The sales team always sees current customer information and outstanding orders from Sage, and the operations team sees the pipeline deals in real time.

What you can do

  • Sync new and modified customers from Sage 100 into Microsoft Dynamics 365 Sales accounts on a schedule you control.
  • Post sales orders from Sage 100 into Dynamics sales orders, mapped to the matching Dynamics account.
  • Bridge Sage 100 SOAP and local Windows agent transport with OAuth 2.0 REST on the Dynamics side.
  • Poll Sage 100 at intervals matched to your operational tempo, with exponential backoff and retry for concurrent locks.
  • Keep both systems aligned with a full audit trail and the ability to replay failed records.

Questions

How does ml-connector handle Sage 100's lack of webhooks and cloud API?
Sage 100 is on-premises with no webhooks or push events. ml-connector polls the Sage SOAP endpoint or local Windows agent on a schedule matched to your operational rhythm (customers hourly, sales orders every 15 minutes) and fetches records by DateLastUpdated or DateCreated. The local agent must be installed on the customer server and configured with credentials that ml-connector stores encrypted.
What is the direction of data flow between Sage 100 and Microsoft Dynamics 365 Sales?
Data flows from Sage 100 into Dynamics 365 Sales. Customer and sales order records sync from Sage into Dynamics; reference data such as products and price lists on the Dynamics side remain the source of truth for new quotes and pricing. Sage 100 is the system of record for operations and fulfillment.
How does ml-connector bridge the authentication difference between Sage 100 and Dynamics 365 Sales?
Sage 100 uses stateless username and password per SOAP call with no tokens or OAuth, and requires company code on every request. Microsoft Dynamics 365 Sales uses OAuth 2.0 via Microsoft Entra ID with tokens that expire in approximately 60 minutes. ml-connector stores both credential sets encrypted and manages token refresh on the Dynamics side while passing Sage username and password per call.

Related integrations

Connect Sage 100 and Microsoft Dynamics 365 Sales

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

Get started