ml-connector
Microsoft Dynamics GPSalesforce

Microsoft Dynamics GP and Salesforce integration

Dynamics GP manages your core financials, purchasing, and inventory on Windows Server; Salesforce manages your sales pipeline and customer relationships in the cloud. Connecting them keeps your customer master data, orders, and accounts receivable in sync across both systems. New customers in Dynamics GP appear in Salesforce Accounts, orders from Salesforce flow into GP with proper GL posting, and settled AR invoices post back into Dynamics GP as GL transactions without manual re-keying. ml-connector bridges the authentication gap and handles the different APIs on each side.

How Microsoft Dynamics GP works

Microsoft Dynamics GP is an on-premises ERP for SMBs, installed on customer's Windows Server with SQL Server backend. It exposes vendors, customers, payables invoices, receivables invoices, purchase orders, GL accounts, GL journal entries, inventory items, and other financial records through REST Service Based Architecture (SBA) at https://<server>:<port>/GPService/Tenants(<TenantName>)/Companies(<CompanyName>)/<Module>/<Resource>, or through SOAP/WCF Web Services at http://<server>:<port>/Dynamics/GPService/GPService?singleWsdl. Dynamics GP authenticates with Windows Active Directory credentials (Negotiate, Kerberos, or NTLM); there is no OAuth2, API keys, or cloud authentication. Dynamics GP does not support webhooks or push notifications, so all data must be read by polling with ModifiedDate filters.

How Salesforce works

Salesforce is a cloud CRM platform that exposes Accounts, Contacts, Opportunities, Orders, Invoices, Leads, and other objects through REST API at https://<MyDomain>.my.salesforce.com/services/data/v63.0/, secured with OAuth2 Client Credentials Flow. Each call requires a Client ID, Client Secret, and instance URL, with bearer tokens expiring after a configured session timeout (default 2 hours). Salesforce also supports Change Data Capture via Pub/Sub API for real-time push on Account, Contact, Opportunity, Order, Invoice, and Lead objects with 3-day retention, but ml-connector can also poll using GET /sobjects/<Object>/updated/ with a datetime range.

What moves between them

Customers and customer master data flow from Dynamics GP into Salesforce Accounts on a daily or weekly polling schedule. Orders placed in Salesforce flow into Dynamics GP as Sales Orders or receivables invoices, mapped to the correct GP customer and GL accounts. Settled AR invoices and payments in Dynamics GP are read and posted back to Salesforce Opportunities and Orders to keep the sales pipeline accurate. GL posting journals in Dynamics GP are created from Salesforce order data when revenue is recognized, mapped to customer-configured GL accounts and cost centers.

How ml-connector handles it

ml-connector stores the Windows domain account credentials securely and uses them to authenticate against your Dynamics GP SBA or SOAP endpoint on your internal network (customer must expose the endpoint via firewall with valid SSL or through a local agent). On the Salesforce side, ml-connector stores the OAuth2 Client ID and Client Secret encrypted, refreshes the bearer token when it expires, and calls the Salesforce REST API. Because Dynamics GP does not support webhooks, ml-connector polls the SBA or SOAP endpoint for new and modified customers, orders, and AR invoices on a schedule you control, with ModifiedDate filters to minimize load on your SQL Server. The polling respects Dynamics GP's constraint that only unposted (Work) transactions can be written, so orders from Salesforce are created as open documents and users must verify and post them in Dynamics GP before they affect GL accounts. Customer and GL account mappings are configured once, and every record carries a full audit trail so failed syncs can be inspected and replayed.

A real-world example

A mid-sized industrial distributor runs Dynamics GP on Windows Server for order entry, payables, GL, and inventory, and uses Salesforce for their field sales team. Before the integration, the inside sales team manually keyed orders from Salesforce into Dynamics GP, creating a 6-hour lag and frequent data entry errors. The AR manager exported GP invoices to Excel weekly to see which Salesforce opportunities should be marked won or closed. With Dynamics GP and Salesforce connected, orders placed in Salesforce flow into GP as open SO documents ready for verification, and AR invoices post back to Salesforce so the sales team sees which opportunities are fully invoiced. The order entry lag dropped to near-real-time, and month-end AR reconciliation is now automated.

What you can do

  • Sync customer master data from Dynamics GP to Salesforce Accounts on a polling schedule, keeping customer lists in both systems aligned.
  • Push orders created in Salesforce into Dynamics GP as Sales Orders or receivables invoices, mapped to the correct GP customer and GL accounts.
  • Post AR invoices and payments from Dynamics GP back to Salesforce Opportunities and Orders, so the sales pipeline reflects invoice status and settlement.
  • Authenticate Dynamics GP with Windows Active Directory credentials and Salesforce with OAuth2 Client Credentials, bridging the on-premises and cloud authentication models.
  • Poll Dynamics GP on a schedule you define with ModifiedDate filters and retries, with a full audit trail on every customer, order, and invoice record.

Questions

How does ml-connector authenticate to Dynamics GP when it runs in the cloud?
ml-connector stores the Windows domain account credentials securely and uses them to authenticate against your Dynamics GP SBA or SOAP endpoint when it polls. Your Dynamics GP server must expose its SBA or SOAP endpoint through your firewall with a valid SSL certificate or through a local agent so ml-connector can reach it. The caller credentials are mapped to a Dynamics GP User with appropriate role-based security so Dynamics GP enforces the same permissions on API calls as it does in the UI.
Can ml-connector write orders from Salesforce directly into posted GL accounts in Dynamics GP?
No. Dynamics GP enforces a constraint that write operations only work on unposted (Work) transactions. Orders from Salesforce are created as open Sales Orders or unposted receivables invoices in Dynamics GP, and users must verify and post them in Dynamics GP before they affect GL accounts. This protects your financial records and ensures finance teams review orders before they hit the ledger.
Does polling Dynamics GP on a schedule hurt performance on my SQL Server?
ml-connector uses ModifiedDate filters to fetch only new and changed records since the last poll, and it respects rate limits by spacing requests 100-200ms apart and limiting concurrent connections to 2-5. You control the polling interval, so you can start with a slower schedule (once per day) and increase frequency only if needed. ml-connector tracks what it has seen so it does not re-fetch the same invoice or customer twice.

Related integrations

Connect Microsoft Dynamics GP and Salesforce

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

Get started