Sage X3 and Zuora integration
Sage X3 manages your manufacturing, procurement, and finance. Zuora manages your subscription billing and revenue recognition. Connecting the two keeps your financial records and your subscription revenue in sync. Sales invoices created in Sage X3 flow into Zuora as billing events, customer master data aligns between the systems, and your revenue ledgers reflect the same transactions in both places without manual re-entry or reconciliation delays.
What moves between them
The main flow is Sage X3 into Zuora. Sales invoices and customer master records created or updated in Sage X3 are polled on a schedule and written into Zuora as Accounts, Subscriptions, or Invoices depending on the customer's revenue model. GL accounts and product dimensions from Sage X3 are mapped to Zuora's product catalog and revenue recognition rules. Payment information flows the opposite direction: Zuora payment records are read to reconcile with Sage X3 cash receipts and bank feeds. Because Zuora webhook payloads are minimal, ml-connector either requests full record details after a webhook fires or polls Zuora on its own schedule if the customer prefers polling to webhooks.
How ml-connector handles it
ml-connector stores both credential sets encrypted. For Sage X3, it builds the customer-specific server URL and uses OAuth2 bearer tokens for GraphQL or HTTP Basic credentials for REST api1, refreshing short-lived tokens well before the 5-minute expiry. It polls Sage X3 on a schedule by checking the updatedDate field on invoices and customers. For Zuora, it refreshes OAuth2 access tokens (1-hour expiry) on each request and uses the correct multi-region base URL for the customer's Zuora tenant. When syncing, ml-connector maps Sage X3 line items to Zuora products, ensures the GL account and revenue category match Zuora's chart of accounts, and retries failed calls to Zuora when rate limits return 429 status. If Zuora webhook pushes are enabled, ml-connector receives invoice and payment notifications at a registered endpoint, validates the HMAC-SHA256 signature, and reconciles those events against Sage X3 records. Every synced record carries metadata including the source transaction ID, sync timestamp, and GL account mapping so the audit trail is complete.
A real-world example
A mid-sized software distributor runs Sage X3 for order-to-cash finance and procurement, and uses Zuora to manage recurring revenue from software maintenance contracts and support subscriptions. Before the integration, the revenue accounting team exported invoice records from Sage X3 weekly and uploaded them to Zuora manually, then spent several days reconciling revenue recognition and chasing discrepancies between the ERP and the billing system. With Sage X3 and Zuora connected, each new invoice posted in Sage X3 flows into Zuora automatically, mapped to the correct product and revenue schedule. Month-end revenue close no longer requires manual export and upload, and the GL balances match Zuora's recognized revenue without exception handling.
What you can do
- Sync sales invoices from Sage X3 to Zuora as Accounts and Invoices, mapped to products and revenue categories.
- Keep customer master data and GL account dimensions aligned across Sage X3 and Zuora so billing transactions post to the correct accounts.
- Bridge Sage X3 OAuth2 and HTTP Basic authentication models and refresh short-lived X3 tokens before expiry.
- Receive and validate Zuora webhook notifications for invoices and payments, and reconcile them against Sage X3 records.
- Poll Sage X3 on a configurable schedule using updatedDate fields, with automatic retries and a full audit trail of every record moved.
Questions
- How does ml-connector handle the different authentication models between Sage X3 and Zuora?
- Sage X3 supports OAuth2 bearer tokens for GraphQL endpoints or HTTP Basic authentication for REST api1 legacy paths, with tokens expiring in 5 minutes. Zuora uses OAuth2 client credentials with 1-hour expiry. ml-connector stores both credential sets encrypted, refreshes Sage X3 tokens before they expire, and requests new Zuora tokens on a schedule to avoid mid-flow expiry.
- Does the integration use Sage X3 webhooks or polling?
- Sage X3 does not support native webhooks, so ml-connector polls using the updatedDate and modifiedDateTime fields on invoices and customers to detect changes since the last sync. This allows the integration to work on any Sage X3 version and deployment model, whether on-premise or cloud.
- How are Sage X3 GL accounts and products mapped to Zuora's revenue model?
- When an invoice flows from Sage X3 to Zuora, ml-connector maps each line item's product and GL account to Zuora's configured product catalog and revenue recognition rules. The mapping is stored with the audit trail so reconciliation always shows which GL account in Sage X3 corresponds to which Zuora product or revenue schedule.
Related integrations
More Sage X3 integrations
Other systems that connect to Zuora
Connect Sage X3 and Zuora
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started