SYSPRO and Zuora integration
SYSPRO runs your manufacturing and distribution operations. Zuora handles your subscription billing and recurring revenue. Connecting them keeps your customer master synchronized and your invoices aligned between ERP and billing. New customers and order lines in SYSPRO flow into Zuora's order catalog, invoice records are matched to GL accounts in real time, and payment receipts from Zuora post back to SYSPRO's AR without manual re-entry.
What moves between them
Data flows bidirectionally. From SYSPRO to Zuora: customer records, invoice line items, and order data are polled from SYSPRO OData and mapped to Zuora account and order structures. From Zuora to SYSPRO: payment notifications (payment processed, payment declined) and invoice events are received via webhook, matched against SYSPRO GL accounts and customer records, and posted as AR payments and adjustments. The sync is event-driven on the Zuora side (webhooks) and time-triggered on the SYSPRO side (polling every 5 to 15 minutes).
How ml-connector handles it
ml-connector manages two separate credential sets and authentication flows. On SYSPRO it accepts the customer server URL and either a session token (requiring periodic refresh at Utilities/Logon) or basic auth credentials (operator code and OData password), and polls OData tables with timestamp filters to detect new customers and invoices. On Zuora it exchanges client credentials for an OAuth token, caches it until expiry, and registers a webhook listener for payment and invoice notifications, validating each payload with HMAC-SHA256 before processing. Customer records from SYSPRO are mapped to Zuora account IDs, and invoice line items are translated to Zuora order lines tied to the matching GL revenue accounts. Zuora payment webhooks fire only for electronic payments, not external or manual payments, so ml-connector must poll for those separately. Rate limits are honored via backoff: Zuora enforces 50,000 requests per minute in production and 2,000 per minute on the AUTH endpoint. Webhook payloads are minimal and trigger API callbacks to Zuora for full record detail. Every payment record carries an audit trail and can be replayed if a GL posting fails.
A real-world example
A mid-sized software company runs SYSPRO for procurement, inventory, and finance, and Zuora for subscription billing and SaaS order management. Before the integration, the finance team exported customer lists from both systems weekly, manually reconciled accounts and subscription counts, and re-entered payment records from Zuora into SYSPRO's AR module by hand. With SYSPRO and Zuora connected, new customer accounts created in SYSPRO automatically appear in Zuora's account catalog, invoices generated in SYSPRO are matched to subscriptions in Zuora, and payments received through Zuora's payment processor post to SYSPRO's AR ledger without re-keying. Month-end close is faster because customer and revenue records are already in sync.
What you can do
- Poll customer and invoice data from SYSPRO OData and create or update matching accounts and orders in Zuora.
- Receive payment and invoice notifications from Zuora and post them to SYSPRO's AR and GL accounts using the mapped customer and account relationships.
- Map SYSPRO GL accounts to Zuora revenue recognition accounts so invoices land on the correct ledger line.
- Authenticate SYSPRO with session tokens or HTTP Basic Auth, and Zuora with OAuth 2.0 client credentials, managing token refresh and expiry automatically.
- Validate webhook signatures with HMAC-SHA256 on all Zuora events and maintain a full audit trail on every payment and invoice posted to SYSPRO.
Questions
- Which direction does data move between SYSPRO and Zuora?
- Data flows both ways. Customer and invoice records move from SYSPRO to Zuora on a polling schedule. Payment notifications and invoice events from Zuora are validated and posted back to SYSPRO's AR and GL accounts. GL account mappings are configured in both directions so revenue lands on the correct account.
- How does ml-connector handle SYSPRO's lack of webhooks and Zuora's minimal webhook payloads?
- ml-connector polls SYSPRO OData every 5 to 15 minutes using timestamp filters on PostDate and InvoiceDate to detect new records. For Zuora webhooks, ml-connector receives the event notification with minimal data (object ID only), validates the HMAC signature, and immediately calls Zuora's REST API to fetch the full record for posting to SYSPRO.
- What happens when Zuora payment notifications include only electronic payments?
- Zuora webhooks fire only for electronic payments processed through Zuora's payment processor. ml-connector still polls SYSPRO's AR for manually entered or external payments, and manual payments in Zuora must be re-keyed or sent via a separate sync. The audit trail tracks which records came through webhooks and which came from polling.
Related integrations
More SYSPRO integrations
Other systems that connect to Zuora
Connect SYSPRO and Zuora
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started