Oracle PeopleSoft and Zuora integration
Oracle PeopleSoft runs your general ledger and accounts payable. Zuora runs your subscription billing and invoicing. Connecting the two keeps your revenue ledger in agreement with what you invoiced and collected. Subscription invoices flow from Zuora into PeopleSoft's journal entry system at invoice posting time, and payment records appear as cash receipts allocated to the correct customer and revenue type. Monthly close starts with billing revenue reconciled and matching your accounts receivable.
What moves between them
The integration pulls subscription invoices and payments from Zuora and publishes them into Oracle PeopleSoft's general ledger. When a Zuora invoice is posted, ml-connector receives a webhook notification, fetches the full invoice details including line items and taxes, and posts a debit to accounts receivable and credits to revenue accounts based on the subscription product type. When a payment is processed in Zuora, a credit is applied to the matching AR invoice in PeopleSoft. Refunds and credit memos are handled as reversals. The schedule can be tied to your billing cycle, weekly, or on-demand.
How ml-connector handles it
ml-connector stores the OAuth2 credentials for both Oracle PeopleSoft and Zuora encrypted in its database. On the Zuora side, it receives webhook notifications signed with HMAC-SHA256, validates the signature to confirm the message came from Zuora, then fetches the full record from Zuora's REST API using a refreshed OAuth2 bearer token. On the PeopleSoft side, it queries the customer's unique instance URL, authenticates with HTTP Basic Auth or OAuth2 depending on the PeopleTools version, and posts journal entries through SOAP Component Interface calls, which support idempotent writes using natural business keys. Because PeopleSoft has no webhooks, ml-connector also polls Zuora on a schedule to catch any invoices or payments that may have been created between webhook deliveries, or to handle webhook failures. Zuora rate limits at 50,000 requests per minute in production, so ml-connector batches operations and includes exponential backoff on 429 responses. If a write to PeopleSoft fails partway through (for example, the customer's network drops during a CI call), the record is held in the job queue and replayed on the next run without creating a duplicate entry. Every invoice and payment carries a source ID from Zuora so ml-connector can detect and skip duplicates.
A real-world example
A mid-market SaaS company runs Oracle PeopleSoft for financial reporting and accounts receivable, and Zuora for subscription billing and invoicing. Before integration, the finance team ran a daily export from Zuora, manually categorized each invoice line by product and revenue type, and entered journal entries into PeopleSoft by hand, often the next day or later. At month-end close, they spent hours reconciling Zuora's invoice register against PeopleSoft's revenue accounts, investigating discrepancies caused by timing differences and manual entry errors. With Zuora and Oracle PeopleSoft connected, every invoice posts to the ledger within minutes of being generated in Zuora, automatically mapped to the correct revenue account and cost center by product type. Payments appear as cash receipts matching their source invoices. The company's revenue ledger and Zuora's billing system are always in agreement, and month-end close now starts with billing revenue fully reconciled.
What you can do
- Post Zuora subscription invoices into Oracle PeopleSoft's general ledger and AR, mapped to the correct revenue and customer accounts based on product type.
- Apply Zuora payment records as cash receipts against their matching AR invoices in PeopleSoft, with automatic reversal for refunds and credit memos.
- Validate and store Zuora webhook signatures using HMAC-SHA256 to confirm message authenticity and prevent tampering.
- Authenticate both systems independently: OAuth2 Client Credentials on Zuora and HTTP Basic Auth or OAuth2 on Oracle PeopleSoft.
- Poll Zuora on a schedule as a backup to webhooks, with idempotent journal entry writes so no duplicate postings occur even if a network call is retried.
Questions
- How does the integration handle the fact that each Oracle PeopleSoft customer has a unique URL?
- ml-connector captures and stores the full base URL per customer, including hostname, port, and PeopleSoft node name, so it can reach each instance directly. Because PeopleSoft publishes no shared base address and each installation is self-hosted, the URL is unique and customers provide it during setup.
- Can the integration handle refunds and credit memos from Zuora?
- Yes. When Zuora issues a refund or credit memo, ml-connector receives a webhook notification, fetches the details from Zuora's REST API, and posts a reversal entry in PeopleSoft's general ledger, crediting AR and debiting the original revenue account. If the refund is applied to a previous invoice, the CR side of the credit memo maps to that same invoice in AR.
- What happens if a webhook from Zuora is delayed or lost?
- ml-connector polls Zuora on a configurable schedule (daily, weekly, or custom) as a backup to webhooks. On each poll run, it fetches any invoices and payments created since the last successful run and publishes them to PeopleSoft. This ensures no billing records are missed, even if a webhook fails to deliver.
Related integrations
More Oracle PeopleSoft integrations
Other systems that connect to Zuora
Connect Oracle PeopleSoft and Zuora
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started