ml-connector
Sage 100Zendesk

Sage 100 and Zendesk integration

Sage 100 runs your AR, AP, GL, inventory, and purchasing. Zendesk handles customer support and tickets. Connecting the two keeps your support team in sync with your customer master and gives every ticket the context of the customer's AR record - open invoices, payment history, and credit terms. New customers added to Sage 100 show up in Zendesk as organizations, and customer contacts appear as support users. Support agents can see the AR context without leaving Zendesk. ml-connector handles the complexity of bridging Sage 100's on-premises SOAP layer to Zendesk's cloud REST API.

How Sage 100 works

Sage 100 exposes customer, contact, and AR invoice records through SOAP Web Services at a customer-hosted endpoint, or through a local Windows agent that wraps the BOI COM interface for deeper access to AP, GL, and purchase orders. Both SOAP and BOI require on-premises deployment - there is no Sage 100 cloud API. Authentication uses username and password passed per SOAP call or Windows service account credentials for the local agent. Sage 100 has no webhooks or event stream, so records are read by polling against DateLastUpdated and DateCreated fields at a cadence the customer controls.

How Zendesk works

Zendesk exposes support tickets, users, organizations, and knowledge base articles through REST APIs with a cloud-hosted base URL scoped to the customer's subdomain. Authentication uses OAuth 2.0 authorization code flow or an API token with basic auth. Zendesk can push support ticket events (created, updated, assigned, solved, closed) to a registered webhook endpoint with HMAC-SHA256 signature verification, or ml-connector can poll the ticket API at a configurable frequency.

What moves between them

Customer records flow from Sage 100 into Zendesk as organizations, and customer contacts flow as support users. Sage 100 AR invoices are read on each sync to enrich Zendesk ticket context with payment history and open balance. The integration polls Sage 100 on a schedule the customer sets - typically every 15 to 30 minutes for high-velocity changes, or hourly for more stable customer bases. When a support ticket is created in Zendesk, ml-connector verifies the ticket's customer email matches a contact in Sage 100 and logs the link in the audit trail. All other data flows one direction, from Sage 100 into Zendesk, since Zendesk is support-only and has no AR or AP data to send back.

How ml-connector handles it

ml-connector stores the Sage 100 SOAP endpoint URL and credentials encrypted, and the Zendesk OAuth2 tokens in secure vaults. On each poll, it calls Sage 100 SOAP (or the local agent via mTLS if configured) to fetch customer records since the last sync, using DateLastUpdated to track changes. It then upserts those records into Zendesk as organizations via the REST API, mapping the Sage 100 customer number to the Zendesk organization external_id so updates do not duplicate. Contact records are upserted as Zendesk users, linked to their parent organization. When Sage 100 and Zendesk differ on email or name - such as a customer merge or a contact who moved to a different organization - ml-connector logs the mismatch in the audit trail and requires manual reconciliation, since changing a user's email in Zendesk requires a separate API call outside the standard update path. Sage 100's lack of webhooks means the integration relies entirely on polling; the sync frequency can be tuned based on the velocity of customer master changes and the tolerance for lag in support visibility. All records carry a full audit trail including the source row, the transformation, and the Zendesk record ID, so any sync can be replayed if a downstream call fails.

A real-world example

A mid-sized software reseller runs Sage 100 on-premises for AR, AP, and general ledger, and uses Zendesk for customer support. Before the integration, support agents had to manually look up customers in Sage 100 via Remote Desktop or a shared login to see invoices, payment terms, and credit status. This was slow, created security risk, and meant support context was frequently missing. After connecting Sage 100 and Zendesk through ml-connector, customer and contact records sync automatically every 30 minutes. When a support ticket comes in, the agent sees the customer as a Zendesk organization with the AR context enriched from Sage 100 - open invoices, days past due, and credit limit - without leaving Zendesk. New customers created in the Sage 100 master show up in Zendesk the next sync, so support never handles a ticket for a customer who does not exist in the system.

What you can do

  • Sync Sage 100 customers to Zendesk as organizations, linked by external ID to prevent duplication.
  • Sync Sage 100 customer contacts to Zendesk as support users, mapped to their parent organizations.
  • Enrich Zendesk tickets with AR context from Sage 100 - open invoices, payment history, and credit terms.
  • Authenticate Sage 100 via SOAP username and password or local Windows agent with mTLS, and Zendesk via OAuth 2.0.
  • Poll Sage 100 on a customer-defined schedule, with full audit trail, deduplication, and replay on failure.

Questions

How does ml-connector handle Sage 100 being on-premises while Zendesk is cloud-hosted?
ml-connector stores the Sage 100 SOAP endpoint URL and credentials encrypted and connects to it directly via HTTPS. If the customer has deployed a local Windows agent for deeper access, ml-connector can connect to that agent via mTLS instead of SOAP. The OAuth tokens for Zendesk are stored in a secure vault, and ml-connector manages both credential sets independently so each side authenticates in its own language.
What happens when a customer record changes in Sage 100?
ml-connector polls Sage 100 at a frequency the customer controls - typically every 15 to 30 minutes. When a poll finds a customer record with a newer DateLastUpdated timestamp, ml-connector fetches the full record and upserts it into Zendesk by organization external_id. If the email or name changed, ml-connector logs the change in the audit trail; renaming or merging organizations in Zendesk still requires manual action via the Zendesk admin panel or a separate API call, since Zendesk's user email field is immutable after creation.
Can Zendesk push events back into Sage 100?
No. Sage 100 is read-only in this integration - there is no AP, AR, or GL write capability that would make sense for a support ticketing system. Zendesk can receive ticket metadata enriched with AR context, but support tickets do not flow into Sage 100. If you need to track support cases in your GL or mark a customer for hold due to support issues, that requires a separate workflow outside of this integration.

Related integrations

Connect Sage 100 and Zendesk

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

Get started