ml-connector
Microsoft Dynamics GPZuora

Microsoft Dynamics GP and Zuora integration

Microsoft Dynamics GP runs your on-premises financials and Zuora runs your subscription billing. Connecting the two ensures your GL journals and invoice detail align between systems without manual re-keying. Revenue from Zuora subscriptions posts into Dynamics GP's general ledger, allocated to the correct GL account and cost center, and invoice changes in Zuora update the corresponding receivables records in GP. ml-connector handles the very different authentication models and the pull-only nature of both systems.

How Microsoft Dynamics GP works

Microsoft Dynamics GP is an on-premises ERP installed on customer's Windows Server with SQL Server backend, covering financials, payables, receivables, purchasing, and inventory. It exposes GL accounts, GL journal entries, customers, receivables invoices, vendors, payables invoices, purchase orders, and inventory items through REST Service Based Architecture (SBA) at https://<server>:<port>/GPService/Tenants(<TenantName>)/Companies(<CompanyName>)/<Module>/<Resource>, or through SOAP Web Services at http://<server>:<port>/Dynamics/GPService/GPService. Authentication is Windows domain-based (Negotiate, Kerberos, or NTLM) tied to Active Directory, with no OAuth2 or API key options. Dynamics GP has no webhook system, so records must be polled by ModifiedDate filters at customer-defined intervals, typically 100-200ms apart to avoid overloading the server.

How Zuora works

Zuora is a subscription billing and revenue management platform exposing accounts, subscriptions, invoices, payments, and products through a REST API with OAuth2 client credentials authentication. The base URL is multi-region specific (rest.zuora.com, rest.sandbox.na.zuora.com, or rest.eu.zuora.com) and must be configured per tenant. Zuora supports webhook notifications (Callout Notifications) for billing events, payment transactions, subscription changes, and account updates, with HMAC-SHA256 signature validation and configurable retry behavior. Webhook payloads contain minimal detail and require a callback to fetch the full record. Zuora enforces rate limits of 50,000 RPM in production and cursor-based pagination with a max page size of 40 records.

What moves between them

The main flow is from Zuora back into Microsoft Dynamics GP. When a Zuora subscription is invoiced or a payment is collected, ml-connector receives the webhook event, queries Zuora for the invoice and payment detail, and posts a GL journal entry into Dynamics GP's general ledger, allocated to the correct GL account and cost center matching the Zuora product. Customer and account information flows in both directions so GP customer master reflects Zuora account updates. GL journals can be posted only during open fiscal periods in GP, and once posted are read-only, so ml-connector validates the fiscal period before posting and handles the workflow of journal approval if required.

How ml-connector handles it

ml-connector stores both the Windows domain account for Dynamics GP and the Zuora OAuth2 credentials encrypted. On the Zuora side, it exchanges client credentials for a bearer token and reuses it for one hour before refreshing. It listens for Zuora webhook events and validates the HMAC-SHA256 signature against the configured webhook key. When a Zuora invoice or payment notification arrives, ml-connector fetches the full invoice and payment record from Zuora, maps the product to the correct GL account and cost center in GP, and constructs a GL journal entry. For posting into GP, it wraps the journal payload in the SBA required Payload key, validates that the target fiscal period is open, and retries with exponential backoff if GP returns a transient error. If an attempt fails and the journal was not posted, ml-connector replays the entry on the next webhook or scheduled reconciliation run. Because both systems enforce strict GL posting, ml-connector never overwrites a posted transaction; it only appends new reversals if needed to correct a prior posting.

A real-world example

A mid-market SaaS company runs Microsoft Dynamics GP on-premises for general accounting, GL, and payables, and uses Zuora for their subscription billing platform covering 500+ customers across monthly, annual, and usage-based subscriptions. Before the integration, the finance team exported invoice and payment detail from Zuora every day and manually created GL journal entries in GP, allocating revenue by product line and payment method. Month-end close required a full reconciliation of Zuora invoices against GP revenue accounts and manual investigation of differences. With Zuora and Microsoft Dynamics GP connected, each Zuora invoice and payment posts to GP automatically on the correct GL account, month-end close starts with revenue already reconciled, and the manual journaling step is eliminated.

What you can do

  • Post Zuora invoices and revenue recognition entries into Microsoft Dynamics GP's general ledger on the correct GL accounts and cost centers.
  • Keep Zuora customer accounts and Dynamics GP customer master aligned with bidirectional syncing.
  • Map Zuora products and rate plans to GL accounts and cost centers so billing revenue lands on the correct ledger dimensions.
  • Authenticate Microsoft Dynamics GP with Windows domain credentials and Zuora with OAuth2 client credentials, validating webhook HMAC-SHA256 signatures.
  • Handle GL posting constraints including open fiscal periods, journal approval workflows, and posted-transaction immutability with full audit trail.

Questions

Which direction does data move between Microsoft Dynamics GP and Zuora?
The main flow is from Zuora into Microsoft Dynamics GP. Invoices, payments, and revenue recognition entries post into GP's general ledger from Zuora, while customer and account master data is aligned bidirectionally. GL journal entries in GP are read-only once posted, so ml-connector does not update prior revenue transactions; it only appends reversals or new entries if a Zuora transaction is corrected.
How does ml-connector handle the Windows domain authentication Dynamics GP requires?
ml-connector stores the Windows domain account credentials (username and password) encrypted and uses them to authenticate every SBA REST or SOAP Web Services call against the specific GP tenant and company. The account is created by the customer in Active Directory and granted appropriate role-based security in GP User setup.
What happens if a Zuora invoice arrives when Dynamics GP's fiscal period is closed?
ml-connector validates the fiscal period status before posting. If the target period is closed, it queues the journal entry and retries during the next scheduled reconciliation run, or notifies the customer that the period must be reopened. Once the period is open, ml-connector posts the entry and logs the audit trail.

Related integrations

Connect Microsoft Dynamics GP and Zuora

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

Get started