ml-connector
SAP Business OneZuora

SAP Business One and Zuora integration

SAP Business One manages your core business processes: purchasing, inventory, sales, and general ledger. Zuora manages your billing and revenue, tracking subscriptions, invoices, and customer accounts. Connecting the two keeps your billing system in sync with your operational reality. Invoices created in SAP Business One post into Zuora as billing records, payments flow between systems, and revenue is recognized consistently across both platforms without manual re-entry or dual data entry.

How SAP Business One works

SAP Business One exposes business partners, invoices, purchase invoices, purchase orders, incoming and outgoing payments, journal entries, chart of accounts, dimensions, profit centers, and items through OData v4 REST endpoints at a customer-specific Service Layer base URL (no global endpoint). It authenticates with a session token from POST /Login that returns a B1SESSION cookie with a 30-minute inactivity timeout; newer versions v10.0 FP 2305+ support OAuth 2.0 if the customer has IAM configured. Webhooks are supported in v10.0 FP 2602+ with server-side activation, but polling with UpdateDate filters is the default and recommended approach since most deployments run on-premise without webhook infrastructure readily available.

How Zuora works

Zuora exposes accounts, subscriptions, invoices, payments, payment methods, refunds, credit memos, products, and orders through REST APIs anchored at a multi-region base URL that varies by customer tenant (rest.zuora.com, rest.eu.zuora.com, rest.ap.zuora.com, and others). It authenticates exclusively with OAuth 2.0 client credentials; tokens expire in one hour and should be reused across requests within that window. Zuora delivers notifications through Callout webhooks over HTTPS with configurable retry behavior and optional HMAC-SHA256 signatures. Webhook events cover billing (Invoice Posted, Invoice Due, etc.), payments (for electronic payments only), subscriptions (renewed, cancelled, amended), and accounts (created, updated). Webhook payloads are minimal and typically contain only the object ID; the receiver must call back to fetch the full record.

What moves between them

The primary flow moves from SAP Business One into Zuora. Sales invoices from SAP Business One post into Zuora as billable records; purchase invoices and journal entries map to revenue transactions or contra entries. Payments recorded in SAP Business One update Zuora payment records to keep the accounts reconciled. Chart of accounts dimensions and profit centers from SAP Business One map to Zuora accounting dimensions where the systems share GL structure. Customer master data (business partners in SAP terminology) is validated against Zuora accounts so invoices always land on an active subscription. The sync runs on a schedule you control, typically daily or after batch invoice runs, with no real-time push required.

How ml-connector handles it

ml-connector maintains two credential sets: a SAP Business One session token (or OAuth 2.0 bearer token for v10.0+) and a Zuora OAuth 2.0 client credential pair. For SAP Business One, it accepts the full customer-specific Service Layer base URL since SAP publishes no shared global endpoint; it opens a session once and reuses it across requests to avoid the cold-start penalty, and it detects session timeouts (error code -5002) and re-authenticates. For Zuora, it exchanges the client credentials for an access token, caches it for reuse, and refreshes when the token approaches expiry. SAP Business One runs on-premise with self-signed TLS certificates in many cases, so ml-connector validates or bypasses certificate checks per customer policy. On the data side, SAP invoice numbers (DocNum field) are checked for duplicates before retry, since SAP has no published idempotency keys. Zuora's webhook payload contains only object IDs, so ml-connector can either poll Zuora for full records or ingest from SAP Business One first and match by invoice number and date. Multi-region Zuora endpoints are detected from the customer's tenant URL at setup time. Rate limits are respected: Zuora enforces 50,000 requests per minute in production, and ml-connector throttles accordingly. Every record carries a full audit trail and can be replayed if downstream posting fails.

A real-world example

A mid-market SaaS company runs SAP Business One for order management, purchasing, and general ledger, and uses Zuora for subscription billing and revenue recognition. Before the integration, the finance team exported daily invoices from SAP Business One and manually keyed them into Zuora, matching invoice numbers to subscriptions by hand, then tracked payments in both systems separately. This created daily reconciliation delays and frequent mismatches between what SAP Business One said was invoiced and what Zuora was billing. With SAP Business One and Zuora connected, each invoice posted in SAP Business One flows into Zuora automatically, matched to the correct subscription by customer and date, and payments move between systems on a daily schedule. Month-end revenue recognition reconciles from day one, and the manual keying step is eliminated.

What you can do

  • Post SAP Business One sales invoices into Zuora as billing records, matched to the correct customer subscription.
  • Sync SAP Business One payments and Zuora payments to keep accounts reconciled across both systems.
  • Map SAP Business One chart of accounts dimensions and profit centers to Zuora accounting dimensions for consistent GL coding.
  • Authenticate SAP Business One with session token or OAuth 2.0 and Zuora with OAuth 2.0 client credentials, handling token refresh and session reuse.
  • Poll on a schedule tied to your batch invoice and payment runs, with duplicate detection, audit trails, and error replay.

Questions

Which direction does data move between SAP Business One and Zuora?
The primary flow is from SAP Business One into Zuora. Sales invoices, payments, and journal entries move from SAP Business One into Zuora to keep billing and revenue consistent. Customer master data is validated in both directions to ensure invoices land on active accounts.
How does the integration handle SAP Business One's session token timeout and Zuora's multi-region endpoints?
ml-connector opens a SAP Business One session once and reuses it across requests to avoid the cold-start penalty; it detects timeout errors (code -5002) and re-authenticates automatically. For Zuora, it reads the multi-region base URL from the customer's tenant configuration at setup time and uses that endpoint for all OAuth 2.0 and API calls.
Does ml-connector need to handle SAP Business One self-signed TLS certificates and Zuora's webhook minimal payloads?
Yes. SAP Business One on-premise often uses self-signed certificates; ml-connector respects customer certificate policies for validation or bypass. Zuora webhook payloads contain only object IDs, so ml-connector can poll Zuora for full records or ingest from SAP Business One first and match by invoice number and date.

Related integrations

Connect SAP Business One and Zuora

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

Get started