ml-connector
SYSPROZoho CRM

SYSPRO and Zoho CRM integration

SYSPRO runs your manufacturing and distribution operations, while Zoho CRM tracks your sales pipeline. Connecting the two keeps your customer master and billing synchronized across both systems. New customers created in SYSPRO appear in Zoho as accounts, and invoices raised in SYSPRO populate as records in Zoho tied to their payment status. ml-connector handles the different authentication schemes on each side and moves the data on a schedule you control.

How SYSPRO works

SYSPRO is a mid-market ERP for manufacturing and distribution available as cloud or on-premise deployments. It exposes customers (ArCustomer), invoices (ArInvoice), and general ledger accounts (GenMaster) through e.net Business Objects REST and OData APIs. Authentication uses a session token from the Utilities/Logon endpoint, passed as a UserId GUID on all calls, or HTTP Basic Auth with an auto-generated operator code and OData password. SYSPRO has no webhooks, so records are read by polling OData tables with filters on timestamp fields like PostDate and InvoiceDate. Each customer must supply their own server URL, and OData itself is read-only; writes go through e.net Business Objects instead.

How Zoho CRM works

Zoho CRM is a cloud-based customer relationship management platform managing accounts, contacts, deals, and sales records in a SaaS model. It exposes data through REST APIs at region-specific base URLs with OAuth 2.0 authentication, either Authorization Code flow with refresh tokens or Client Credentials for headless integrations. Zoho publishes push webhooks with channel notifications containing record IDs, and channels expire daily and require automated renewal. The access token expires every hour and must be refreshed from the stored refresh token. The token response includes an api_domain field that must be used as the base URL for subsequent API calls.

What moves between them

Customer records flow from SYSPRO into Zoho CRM. When a new customer is created or updated in SYSPRO ArCustomer, ml-connector polls the OData table, retrieves the customer master record with address and credit status, and upserts it as an account in Zoho. AR invoices from SYSPRO ArInvoice are read and mapped into Zoho records, labeled by their payment status and invoice date. The flow is one-directional: Zoho records do not write back to SYSPRO. Customer and invoice records are polled on a 10-minute cadence, aligned with SYSPRO's typical batch invoice posting cycle.

How ml-connector handles it

ml-connector stores the SYSPRO server URL and operator credentials encrypted and fetches a session token on each sync by calling Utilities/Logon and capturing the UserId GUID. It then polls ArCustomer and ArInvoice OData tables with a $filter on PostDate and InvoiceDate to find records changed since the last sync. Each customer and invoice is fetched in full, parsed for contact information and payment terms, and upserted into Zoho using the customer name and invoice number as match keys. ml-connector refreshes the Zoho OAuth access token from the stored refresh token before every API call, and on HTTP 401 it re-authenticates. It maps SYSPRO customer credit limits and currency to Zoho account fields, and SYSPRO invoice status to Zoho record deal stage. Every record carries an audit trail and can be replayed if a Zoho write fails.

A real-world example

A small-to-midsize manufacturer runs SYSPRO ERP for production and billing, and uses Zoho CRM to manage a sales team of eight across two regions. Before the integration, the sales team manually entered customer names and invoice numbers into Zoho after the billing department created them in SYSPRO, a process that took two to three hours per week and created gaps when new customers were added. With SYSPRO and Zoho CRM connected, new customers appear in Zoho within minutes, complete with credit terms and contact address, and invoices automatically sync into the CRM so the sales team has instant visibility into what is outstanding. The team now spends 15 minutes per week reviewing new records instead of re-entering data by hand.

What you can do

  • Sync SYSPRO customer master records into Zoho CRM accounts, including address and credit terms.
  • Map SYSPRO AR invoices into Zoho records with payment status tracking.
  • Authenticate SYSPRO with session tokens and OData HTTP Basic Auth, and Zoho with OAuth 2.0.
  • Poll SYSPRO OData tables on a configurable schedule and refresh Zoho OAuth tokens before every call.
  • Track every record in an audit trail and replay failed writes without manual intervention.

Questions

Which direction does data move between SYSPRO and Zoho CRM?
The main flow is SYSPRO into Zoho CRM. Customer records and invoices move from SYSPRO into Zoho, where they populate accounts and deal records. Zoho does not write back to SYSPRO, since SYSPRO is the source of truth for billing and master data.
Does SYSPRO have webhooks, or does ml-connector need to poll?
SYSPRO does not push webhooks, so ml-connector polls the OData tables on a schedule, filtering by PostDate and InvoiceDate to find changed records. The polling interval is typically 10 minutes, aligned with SYSPRO's batch invoice posting cycle.
How does ml-connector handle the different authentication schemes?
ml-connector stores SYSPRO credentials encrypted and fetches a session token by calling Utilities/Logon to get the UserId GUID. For Zoho, it stores the OAuth refresh token and automatically refreshes the access token before every call, using the api_domain field from the token response as the base URL.

Related integrations

Connect SYSPRO and Zoho CRM

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

Get started