ml-connector
Oracle NetSuiteMicrosoft Dynamics 365 Sales

Oracle NetSuite and Microsoft Dynamics 365 Sales integration

Your finance team runs Oracle NetSuite as the source of truth for customers, orders, and revenue. Your sales team tracks opportunities and deals in Microsoft Dynamics 365 Sales. Without a connection, customer data gets out of sync between systems, sales orders entered in Dynamics 365 Sales have to be re-keyed into NetSuite, and revenue reconciliation becomes a manual process. Oracle NetSuite and Microsoft Dynamics 365 Sales connected keeps your customer master consistent and moves sales orders from the ERP into the CRM without duplication or re-entry.

How Oracle NetSuite works

Oracle NetSuite exposes customers, sales orders, invoices, line items, and classifications through REST Web Services (SuiteTalk), with optional Event Subscriptions (webhooks) for create, edit, and delete events on supported record types, or polling via SuiteQL for bulk and historical reads. Authentication is OAuth 2.0 with a certificate (recommended), TBA tokens (legacy), or Authorization Code flow. NetSuite publishes no HMAC signature on Event Subscriptions, so webhook security relies on IP allowlist and shared secret. Tokens are valid for 60 minutes with no refresh token in the M2M flow.

How Microsoft Dynamics 365 Sales works

Microsoft Dynamics 365 Sales is built on Dataverse and exposes accounts, contacts, opportunities, sales orders, quotes, and invoices through the Dataverse REST API (OData v4.0). Webhooks are available via the Dataverse Event Framework for create, update, delete, and custom events, returning a 60-second timeout with one automatic retry. Authentication is OAuth 2.0 via Microsoft Entra ID with client credentials for server-to-server integration. Webhook security uses a shared secret (WebhookKey, HttpQueryString, or HttpHeader), not HMAC. Dynamics 365 Sales does not include GL accounts or AP ledger records; finance transactions require Dynamics 365 Finance.

What moves between them

Customers and sales orders flow from Oracle NetSuite into Microsoft Dynamics 365 Sales. NetSuite customers map to Dynamics 365 Sales accounts, and NetSuite sales orders create or update Dynamics 365 Sales sales orders. Customer changes in NetSuite (address, credit limit, contact) sync to the corresponding Dynamics 365 Sales account record on a polling schedule. Sales orders are read-only in the CRM direction; ml-connector does not write orders back into NetSuite.

How ml-connector handles it

ml-connector accepts the NetSuite account ID and certificate, exchanges it for an OAuth bearer token (and refreshes before expiry), and polls for customer and sales order changes via SuiteQL queries. On the Dynamics 365 Sales side it uses Microsoft Entra ID client credentials to obtain an access token and creates or updates accounts and orders through the Dataverse REST API. Customer records are mapped by external ID (NetSuite customer ID stored in Dynamics 365 Sales as a field) to avoid duplicates. Sales order line items are mapped to Dynamics 365 Sales order lines, with product lookups handled by SKU or NetSuite inventory item ID. Because NetSuite has a 60-minute OAuth token lifetime, ml-connector refreshes the token before each polling cycle. Dynamics 365 Sales webhooks can supplement polling when webhook registration is available, cutting latency on customer updates. Every record carries an audit log entry including the NetSuite source ID, timestamp, and any mapping exceptions.

A real-world example

A mid-market B2B distributor runs Oracle NetSuite for order management and revenue recognition. The sales team uses Microsoft Dynamics 365 Sales to track customer opportunities and forecast deals. Before the integration, sales operations manually entered customers from the CRM into NetSuite, then reconciled customer credit limits and addresses in both systems quarterly. Sales reps did not know which opportunities were orders already fulfilled in NetSuite, leading to duplicate orders and lost revenue. With Oracle NetSuite and Microsoft Dynamics 365 Sales connected, customers sync automatically when they are created in NetSuite, sales orders appear in Dynamics 365 Sales as read-only records so reps see fulfillment status, and the sales pipeline in the CRM stays aligned with what shipped from the ERP.

What you can do

  • Sync Oracle NetSuite customers to Microsoft Dynamics 365 Sales accounts on a polling schedule, with external ID-based deduplication.
  • Move NetSuite sales orders into Dynamics 365 Sales sales orders with line item mappings and product lookups.
  • Bridge NetSuite certificate-based OAuth authentication with Microsoft Entra ID OAuth, refreshing tokens before expiry.
  • Map NetSuite customer classifications and sales order statuses to Dynamics 365 Sales fields for consistent data model alignment.
  • Maintain a full audit trail on every customer and order record, including NetSuite source ID and any mapping exceptions.

Questions

What data flows between Oracle NetSuite and Microsoft Dynamics 365 Sales?
Customers and sales orders flow from NetSuite into Dynamics 365 Sales. NetSuite customers become Dynamics 365 Sales accounts, and NetSuite sales orders create Dynamics 365 Sales sales orders. Customer changes such as address and credit limit updates are synced regularly. Sales orders are read-only in the CRM so the ERP remains the source of truth for fulfillment.
How does ml-connector handle the different authentication schemes between NetSuite and Dynamics 365 Sales?
ml-connector stores the NetSuite OAuth certificate and client ID encrypted, refreshing the bearer token before it expires. On the Dynamics 365 Sales side it uses Microsoft Entra ID client credentials (also stored encrypted) to obtain separate tokens. Each system is authenticated independently with its own token lifecycle, and ml-connector handles the token refresh before each polling cycle to avoid 401 errors.
How are NetSuite customers matched to Dynamics 365 Sales accounts to avoid duplicates?
ml-connector stores the NetSuite customer ID in a Dynamics 365 Sales account field (external ID) and uses that field to detect existing accounts on subsequent syncs. This prevents duplicate accounts when the same NetSuite customer is synced multiple times, and allows the CRM record to be enriched by the sales team without creating new customer accounts in NetSuite.

Related integrations

Connect Oracle NetSuite and Microsoft Dynamics 365 Sales

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

Get started