SAP S/4HANA and Zuora integration
SAP S/4HANA runs your enterprise finance and procurement. Zuora runs your subscription billing and revenue recognition. Connecting the two keeps your customer master, subscription records, and billing GL in agreement. Customers added in Zuora become business partners in SAP S/4HANA, subscription changes sync automatically, and invoice GL postings flow from Zuora into your general ledger without manual journal entry. ml-connector handles the OAuth dance on both sides, the tenant-specific endpoint URLs, and polls Zuora on a billing calendar you control.
What moves between them
The flow is Zuora to SAP S/4HANA. Customer records (accounts) from Zuora flow into SAP S/4HANA as business partners on a weekly or monthly schedule. Subscription and invoice data from Zuora map to purchase orders and GL journal entries in SAP S/4HANA for revenue recognition and billing GL. Payment records can be synced as well if needed. SAP S/4HANA has no corresponding push back to Zuora, so the integration is one-directional from billing into ERP.
How ml-connector handles it
ml-connector stores both OAuth credential sets encrypted and handles token refresh on both sides before expiry. Because SAP S/4HANA has no webhooks, ml-connector polls Zuora on a schedule you define (e.g., after invoice posting runs, weekly, or daily), rather than waiting for a push. The tenant-specific URLs are required on both sides: Zuora's multi-region base URL must be configured per customer, and SAP S/4HANA's OData service URLs come from the Communication Arrangement setup, not constructed. Customer accounts from Zuora are mapped to SAP S/4HANA A_BusinessPartner records, with Zuora account IDs stored in the partner's external ID field for deduplication on future syncs. Invoice GL postings from Zuora are transformed into SAP S/4HANA journal entries and posted to GL accounts and cost centers that already exist in SAP. ml-connector respects SAP's read-only GL account and cost center data, so there is no push back to SAP. Zuora rate limits at 50,000 requests per minute, so high-volume syncs are paginated, and ml-connector backs off on 429 responses. Every record carries a full audit trail so a failed downstream GL post can be replayed once the blocking issue is resolved.
A real-world example
A mid-market SaaS company runs Zuora for subscription management and billing across ten product lines and multiple geographies, and uses SAP S/4HANA Cloud for consolidated finance and intercompany settlements. Before the integration, the finance team exported customer lists and invoice registers from Zuora each month and re-entered them into SAP S/4HANA by hand to update the customer master and GL. The process took two days and introduced reconciliation errors, since Zuora had the ground truth for active subscriptions but SAP had an out-of-date view. With Zuora and SAP S/4HANA connected, customer changes flow automatically on a weekly basis, and invoice GL postings are recognized the day invoicing runs complete, so the revenue GL is current and the customer master matches the billing system. Month-end close now starts with billing and AR already reconciled.
What you can do
- Sync Zuora customers (accounts) into SAP S/4HANA as business partners, deduplicated by external ID.
- Flow Zuora invoice GL postings into SAP S/4HANA journal entries on a schedule tied to your billing calendar.
- Map Zuora subscription and revenue data to SAP S/4HANA GL accounts and cost centers for billing GL in your general ledger.
- Refresh OAuth 2.0 tokens on both sides before expiry and handle Zuora's multi-region base URLs and SAP S/4HANA's tenant-specific OData endpoints.
- Poll Zuora on a schedule you define, with automatic retries on rate limits, full audit trail, and error replay if a GL post fails.
Questions
- Does data flow bidirectionally between Zuora and SAP S/4HANA?
- No. The integration flows Zuora to SAP S/4HANA only. Customer, subscription, invoice, and billing GL data move from Zuora into SAP S/4HANA. SAP S/4HANA has no corresponding push back to Zuora, and GL accounts and cost centers in SAP are maintained in SAP only.
- Why does ml-connector poll Zuora instead of using webhooks?
- SAP S/4HANA has no native webhook system for cloud connectors, so data must be pulled on a schedule. Although Zuora supports outbound webhooks, polling is more reliable for billing integrations, since Zuora's webhook timeout is fixed at 25 seconds and high-volume tenants can exceed rate limits during peak invoice posting runs.
- How does ml-connector handle the different OAuth token expiry times on each side?
- ml-connector caches both OAuth tokens and refreshes them before expiry on each side independently. Zuora tokens expire in one hour, so ml-connector refreshes them regularly. SAP S/4HANA tokens are typically 12 hours, so ml-connector refreshes them as well before they expire, ensuring no 401 errors during polling.
Related integrations
More SAP S/4HANA integrations
Other systems that connect to Zuora
Connect SAP S/4HANA and Zuora
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started