· 15 min read

Salesforce Dynamics 365 Integration: Options, Setup and Pitfalls

A Salesforce Dynamics 365 integration usually connects one of two things: Salesforce sales with Dynamics 365 finance (Business Central or Finance), or two CRMs that ended up side by side after a merger. You can build it with Microsoft’s Salesforce connector in Power Automate or Logic Apps, Azure Data Factory, an iPaaS such as MuleSoft, or a custom build on both APIs. Before you pick a tool, decide whether you are integrating for good or bridging to a single CRM.
A cloud CRM window and a tiled business app window with a ledger, connected by two-way arrows through a key that links matching records
Running Salesforce and Dynamics 365 together?Tell us which records need to move and who owns them. Our engineers can map the sync, build it and support it after launch.
Map my Salesforce–Dynamics sync

Why companies run Salesforce and Dynamics 365 together

Microsoft Dynamics 365 is a family of apps, not one product. So "Salesforce Dynamics 365 integration" can mean very different projects. Four situations cover most of them:

  • Sales in Salesforce, finance in Dynamics 365. The sales team lives in Salesforce, while orders, invoices and cash sit in Dynamics 365 Business Central or Dynamics 365 Finance. This is a CRM-to-ERP integration, and it is usually permanent.
  • Two CRMs after a merger or acquisition. One company sells in Salesforce, the acquired one in Dynamics 365 Sales. Leadership wants one pipeline report and no double-booked accounts.
  • Different divisions, different CRMs. A services unit runs Dynamics 365 Customer Service, product sales run Salesforce, and both touch the same customers.
  • A phased migration. The company is moving from one CRM to the other and needs both in sync for months while teams switch over.

The first case is about a clean quote-to-cash flow. The other three are CRM-to-CRM syncs, which are harder than they look because both systems want to own the same accounts, contacts and opportunities. For the wider picture of Salesforce integrations, start with our Salesforce integration guide.

Integrate, consolidate or migrate?

Answer this before you compare tools. A permanent two-way sync between two CRMs is one of the most expensive integrations to run, because every new field, picklist value and sales process change has to be made twice.

Your situationUsual answerWhy
Salesforce for sales, Business Central or Finance for accountingIntegrate, permanentlyDifferent jobs; each system is the master for its own records
Two CRMs, same customers, one company after a mergerConsolidate, with a temporary syncTwo masters for one customer never stay clean; sync only what the bridge period needs
Two CRMs, separate customers and teamsIntegrate a few shared objects, or just report across bothOften only accounts, a shared pipeline view or a handoff between teams is needed
Moving from one CRM to the otherMigrate, with a sync during cutoverA one-time migration plus a short sync is cheaper than months of two-way sync

If you decide to move from Salesforce to Dynamics 365 Sales or Customer Service, Microsoft now has a migration tool for that direction. According to Microsoft’s documentation, Dynamics 365 Activate (in preview as of October 2026, US region only) scans a Salesforce org, maps objects and fields to Dataverse, creates the schema and migrates data with reconciliation. It assesses flows, Process Builder, workflow rules and Apex, but does not convert or migrate them. Moving the other way, from Dynamics 365 to Salesforce, is usually done with Salesforce’s data tools, an ETL or iPaaS tool, or a migration partner.

Salesforce and Dynamics 365: who sends what Salesforce Integration layer Dynamics 365 Accounts, contacts Opportunities, quotes Order, invoice, payment status on the account Power Automate, Logic Apps, Data Factory, iPaaS or custom code ID cross-reference SF ID ↔ GUID Dataverse D365 Sales, Customer Service Business Central or Dynamics 365 Finance Orders, invoices, payments 1. master records 2. won deal to order 3. bill 4. status flows back Each record has one master. The integration layer stores both IDs so it updates records instead of duplicating them.
A typical setup: master data flows from its owner, won deals become orders in the ERP, and finance status flows back to Salesforce.

Your integration options compared

There is no Microsoft or Salesforce product that syncs the two CRMs out of the box. These are the realistic routes, from lightest to heaviest.

1. Power Automate (and Power Apps) with the Salesforce connector

Microsoft publishes a Salesforce connector for Power Automate, Power Apps and Copilot Studio. According to Microsoft’s connector reference, it is a Premium connector, so users need a license that includes premium connectors. It has triggers for created and modified records, actions to create, update and upsert records by External ID, SOQL queries and Bulk API jobs. Pair it with the Dataverse connector, whose "When a row is added, modified or deleted" trigger covers the Dynamics side.

The limits matter for a CRM sync. As of October 2026, Microsoft lists a throttle of 900 calls per connection per 60 seconds, there is no Salesforce trigger for deleted records, custom multi-select picklist fields are not supported by the Create record and Update record actions, and the Salesforce org must have API access enabled (trial orgs don’t). It works well for a handful of one-way flows; a full two-way sync built from many flows becomes hard to monitor.

2. Azure Logic Apps and Azure Data Factory

The same Salesforce connector is available in Azure Logic Apps, which suits IT teams that want integrations in Azure with source control and monitoring. For bulk data, Azure Data Factory’s Salesforce V2 connector (the older V1 connector has been removed) copies data to and from Salesforce using Bulk API 2.0, with insert and upsert by External ID, and authenticates with OAuth 2.0 client credentials. It is built for scheduled batch loads: initial migrations, nightly syncs and feeds into a data warehouse, not real-time updates.

3. An iPaaS: MuleSoft, Boomi, Workato

All three have connectors for Salesforce and for Dynamics 365 (MuleSoft’s Microsoft Dynamics 365 Connector, for example, connects to the Dynamics 365 cloud API with OAuth 2.0 authentication). You design the flows, error queues and retry logic once and reuse them for other systems. This is the usual choice when Salesforce and Dynamics 365 are two of many systems, or when a merger brings several integrations at once. MuleSoft is a Salesforce company; our Salesforce MuleSoft integration guide covers when it is worth the price.

4. Prebuilt connector apps

Several vendors sell ready-made Salesforce sync apps on Microsoft AppSource and on AppExchange (now AgentExchange), especially for Salesforce Business Central integration. They are quick to start but vary widely in what they sync, so ask for a demo with your own objects and a written list of supported fields.

5. Custom integration on both APIs

A small service calls the Salesforce REST and Bulk APIs (and listens to Change Data Capture or Platform Events) on one side, and the Dataverse Web API, Business Central API v2.0 or Dynamics 365 Finance data entities on the other. You get full control over matching, conflict rules and logging, and you own maintenance through every release of both platforms.

One more option is read-only: Salesforce Connect can show Dataverse records inside Salesforce as external objects through its OData 4.0 adapter, because the Dataverse Web API is an OData v4 service. Data is read live and not copied. It is a paid add-on in Enterprise, Performance and Unlimited editions and works best for lookups, not for sync.

OptionWhat it syncsDirectionCost levelEffortMain limits
Power Automate + Salesforce connectorAny standard or custom object, record by recordOne-way or two-way (one flow per direction)$ premium licensesLow900 calls per minute per connection; no delete trigger; no multi-select picklists on write
Azure Logic AppsSame connector, Azure-managedAny$ usage-basedLow to mediumSame connector limits; needs Azure skills
Azure Data FactoryBulk copy of objects, insert or upsertBatch, either way$ usage-basedMediumScheduled, not real-time; Salesforce Bulk API batch limits
iPaaS (MuleSoft, Boomi, Workato)Whatever you build; templates helpAny$$–$$$ subscription plus buildMedium to highYou own design, error handling and monitoring
Prebuilt connector appVendor-defined objects, often accounts, contacts, ordersUsually two-way$–$$ subscriptionLowCustom objects and logic may not be covered
Custom (Salesforce APIs + Dataverse or Business Central APIs)AnythingAny$$$ build plus upkeepHighYour team maintains it through every release

Cost levels are relative. Microsoft licenses Power Platform and Azure services per user or per use, and iPaaS vendors quote by connectors and volume, so price the option with the record volumes you actually expect.

Which option fits you

Five questions, about a minute. The result is a starting point, not a final architecture.

Which Salesforce Dynamics 365 integration fits you?

Object and field mapping

Agree on these tables with sales ops and finance before anyone builds a flow. The "system of record" column decides which side wins when both change.

CRM to CRM: Salesforce and Dynamics 365 Sales (Dataverse)

SalesforceDynamics 365 Sales (Dataverse)DirectionSystem of recordNotes
AccountAccountTwo-way or one-wayOne system per account segmentSplit by region, business unit or owner team; never "whoever edited last"
ContactContactFollows its accountSame as the accountMatch on stored ID first, email second
LeadLeadUsually noneEach CRM for its own leadsSync leads only for a defined handoff between teams
OpportunityOpportunityOne-way to the reporting sideThe CRM where the deal is workedMap stages and probabilities explicitly; amounts in one currency or with currency code
Product, price bookProduct, price listFrom the ERP or one CRMThe system that billsDifferent structures: price books vs price lists with unit groups
CaseCase (incident)Only if both teams serve the same customersThe support team’s CRMOften a read-only view is enough
Owner (user or queue)Owner (user or team), business unitMapped, not syncedEach CRMKeep a user mapping table; unmatched owners go to a default

CRM to ERP: Salesforce and Business Central or Dynamics 365 Finance

SalesforceBusiness Central / FinanceDirectionSystem of recordNotes
AccountCustomerSF → D365 on first won deal, billing fields backSalesforce for sales fields, ERP for billingCompany, currency, payment terms and tax area live in the ERP
Product, price book entryItem, sales priceD365 → SFERPOne price book per currency or price group
Opportunity or quoteSales quote or sales orderSF → D365Salesforce until syncedTrigger on Closed Won or signed quote, not on every save
Custom object or related listPosted sales invoice, paymentD365 → SFERPRead-only in Salesforce; headers and status, not every line
Account fieldsBalance, overdue amount, credit limitD365 → SFERPUseful for renewals and credit holds

On every synced pair, store the other system’s ID: an External ID field in Salesforce and an alternate key column in Dataverse. Microsoft’s documentation describes alternate keys exactly for this, letting an integration find and upsert a row by an external system’s identifier.

How to set up the integration, step by step

These steps follow the most common path, Power Automate or an iPaaS between Salesforce and Dataverse. A custom build follows the same order with code in place of configuration.

  1. Write down scope and ownersOne page: which objects sync, in which direction, which system masters each one (per object, and per field where needed), and what is out of scope. Get sign-off from sales ops on both sides and, for ERP flows, the controller.
  2. Prepare sandboxesA Salesforce sandbox and a Dynamics 365 sandbox environment (or a Business Central sandbox) with realistic data, including your messiest accounts. Never build the first version against production.
  3. Create dedicated integration usersIn Salesforce, an API-only user with a permission set limited to the synced objects; according to Salesforce Help, supported editions include a limited number of free Salesforce Integration user licenses. In Dynamics 365, an application user registered in Microsoft Entra ID with a security role limited to the same tables. Don’t run flows under a person’s login.
  4. Add cross-reference fieldsCreate an External ID field in Salesforce for the Dynamics GUID and a text column with an alternate key in Dataverse for the Salesforce ID, on every synced object.
  5. Build user, picklist and currency mapsA table that maps Salesforce users and queues to Dynamics users and teams, every picklist value to its Dataverse choice, and currencies on both sides. Unmapped values must go to a visible default, not fail silently.
  6. Match existing records onceExport accounts and contacts from both systems, match them (by domain, tax ID or account number, then by hand), clean duplicates and write both IDs back before you switch on automatic creation.
  7. Build one direction at a timeStart with the master direction for accounts, then contacts, then opportunities or orders. Use upsert by the stored key everywhere, and skip changes made by the integration user to avoid loops.
  8. Test edge casesMerges, deletes, owner changes, a picklist value that exists on one side only, a record edited in both systems within a minute, and a burst of bulk updates to see how the flows handle throttling.
  9. Set up alerts, then go liveRoute failed records to a named owner with the reason, decide who checks the error log daily, and go live outside quarter-end. Watch the first two weeks closely.

Built by Gilzor

Results we’ve shipped

70+products launched
98%delivered on time
85%clients come back
Art Scherbakov, Co-FounderAndrew Laminsky, CTOYuri Rudenya, Head of Mobile Development at GilzorAlena Timofeeva, Product Marketing Lead

Talk to the people who build it. Tell us about your project and get a free estimate of scope, timeline and cost.

See how we’d approach yours

CRM-to-CRM sync pitfalls and how to fix them

PitfallWhat happensFix
Two masters for one recordEdits overwrite each other; reps lose trust in both CRMsOne master per object, segment or field; the other side is read-only for those fields
No cross-reference IDsDuplicates on every sync; merges in one system break linksExternal ID in Salesforce, alternate key in Dataverse; upsert, never blind create; handle merges explicitly
Ownership models differRecords land with the wrong owner or the integration user; sharing breaksMap Salesforce users and queues to Dynamics users, teams and business units; default unmatched owners to a named queue
Picklist and choice mismatchesSync errors or wrong values; Salesforce stores text values, Dataverse choices store a number behind each labelA value-mapping table with a default; freeze picklist changes or add them to a change process
Sync loopsAn update in one system triggers an update back, foreverIgnore changes made by the integration user; compare values before writing; filter triggers to the fields you sync
Deletes not handledRecords deleted in one CRM live on in the otherSync deletes from the Dataverse side via its delete trigger; for Salesforce, use Change Data Capture or a periodic reconciliation
API limits on both sidesThrottling errors at peak, partial syncsQueue and retry with backoff, honor Retry-After, move bulk work to off-hours batch jobs
Too much syncedLicenses, storage and API calls spent on data nobody usesSync the shared minimum; show the rest live or in a shared report

API limits deserve a closer look because a two-way sync hits both platforms at once. On the Dynamics side, according to Microsoft’s documentation, Dataverse service protection limits are counted per user and per web server: by default 6,000 requests and 20 minutes of combined execution time in a five-minute sliding window, and 52 or more concurrent requests. Exceeding them returns a 429 error with a Retry-After header, so your integration must wait and retry. On the Salesforce side, the org has a rolling 24-hour API request allocation that depends on edition and licenses, and the Power Automate connector adds its own per-connection throttle. Check the Salesforce allocation in Setup before you size the sync.

Salesforce with Business Central or Dynamics 365 Finance

A Salesforce Business Central integration is a CRM-to-ERP project, the same quote-to-cash loop as connecting Salesforce to any ERP. A few Microsoft-specific facts shape the design:

  • Business Central’s built-in CRM integration is for Dynamics 365 Sales. According to Microsoft’s documentation, it runs through Dataverse and couples items, prices, opportunities, sales orders and posted invoices with Dynamics 365 Sales. It does not connect to Salesforce, so Salesforce needs its own connector, iPaaS or custom build.
  • Business Central API v2.0 is the custom route. It is a REST API, enabled by default for Business Central online. Microsoft notes that the standard APIs can’t be extended with extra fields; you copy the API page in AL and publish a custom API instead, so budget for a little AL development.
  • Dynamics 365 Finance syncs with Dataverse through dual-write. Microsoft describes dual-write as near-real-time, bidirectional integration between finance and operations apps and Dataverse. If you already run dual-write, connecting Salesforce to Dataverse can give it customer and order data without a second direct link into Finance.

For how the full order-to-cash loop works between a CRM and an ERP, including who creates the customer and how orders lock after sync, see our Salesforce NetSuite integration guide; the design carries over to Business Central almost unchanged. For SAP on the ERP side, see the Salesforce SAP integration guide.

When a custom integration makes sense

Power Automate flows and connector apps handle simple, low-volume syncs well. A custom build, or custom logic inside an iPaaS, pays off when:

  • Matching is hard: the same customer exists in both CRMs under different names, with different hierarchies.
  • You need field-level mastering, for example sales fields from Salesforce and service fields from Dynamics 365 on the same account.
  • Several companies, currencies or business units each follow their own rules.
  • Volume or speed is past what per-connection throttles and premium licenses handle economically.

A typical custom build has a small integration service with a queue, OAuth clients for Salesforce and Microsoft Entra ID, idempotent upserts keyed on the stored IDs, Change Data Capture or Dataverse change tracking to pick up changes, a retry and error dashboard, and automated tests for each flow.

$10–40kTypical two-way CRM sync build in 2026
$40–150k+ERP integration with Business Central or Finance (orders, invoices, payments)
15–25%Of the build per year for maintenance and release updates

Our API integration cost guide breaks down where that money goes, and the data integration cost guide covers migrations and warehouse feeds.

Go-live checklist

Tick what is already done. It shows how ready your integration is for real data.

Salesforce Dynamics 365 go-live readiness

FAQ

Can Salesforce integrate with Microsoft Dynamics 365?
Yes. There is no single built-in sync between the two products, but Microsoft publishes a Salesforce connector for Power Automate, Power Apps and Azure Logic Apps, Azure Data Factory can copy data to and from Salesforce, iPaaS platforms such as MuleSoft, Boomi and Workato have connectors for both systems, and both sides have well-documented REST APIs for a custom build.
Does Business Central have a native Salesforce integration?
No. Business Central’s built-in CRM integration targets Dynamics 365 Sales through Dataverse. For a Salesforce Business Central integration you use a third-party connector from Microsoft AppSource, an iPaaS, Power Automate with the Business Central and Salesforce connectors, or a custom build on Business Central’s REST API (v2.0).
Should we integrate Salesforce and Dynamics 365 Sales or migrate to one CRM?
If both CRMs serve the same customers, plan to consolidate: a two-way CRM-to-CRM sync is expensive to run and never fully removes duplicates and conflicts. Integrate when the two systems will genuinely coexist for years, for example separate business units with separate customers, or as a bridge during a phased migration. Run a sync only for the objects that both teams actually share.
Is the Salesforce connector in Power Automate free?
No. Microsoft classifies the Salesforce connector as Premium in Power Automate and Power Apps, so every user or flow that uses it needs a license that includes premium connectors. In Azure Logic Apps it is a Standard-class connector billed with Logic Apps usage. The Salesforce org also needs API access, which trial orgs do not have.
How do you avoid duplicates when syncing two CRMs?
Store each system’s record ID in the other: an External ID field in Salesforce and an alternate key column in Dataverse. Then upsert by that key instead of creating records, match existing records once before go-live, and decide which system is allowed to create new accounts and contacts. Matching by name or email alone always produces duplicates over time.
How much does a Salesforce Dynamics 365 integration cost?
A one-way flow built in Power Automate or an iPaaS template can cost a few thousand dollars in setup plus licenses. A two-way CRM sync typically costs $10,000–40,000 to build in 2026, and an integration with Dynamics 365 Finance or Business Central covering orders, invoices and payments $40,000–150,000 or more. Budget 15–25% of the build per year for maintenance.

Where Gilzor fits

Gilzor’s engineers, based in Poland and Cyprus, can map your Salesforce and Dynamics 365 data, decide with you what to integrate and what to consolidate, build the sync on Power Platform, an iPaaS or the platform APIs, and support it after launch. See Gilzor’s Salesforce integration services.

No sales pitch

Get a straight answer for your project

Tell us what you’re building. We’ll reply with options, a rough cost and timeline. If we’re not the right fit, we’ll say so.

Next, a few optional questions so the first call is useful. We use your details only to reply to your request. Privacy Policy

Andrew Laminsky
Written byAndrew Laminsky

CTO of Gilzor. Responsible for architecture and the engineering standards our teams work by.

LinkedIn →

Gilzor · Web Development partner

Need a team for your web product?

95%referred by business partners
70+successful launches
85%repeat business
98%delivered on time

The team behind them

Art Scherbakov
Art ScherbakovCo-Founder
Andrew Laminsky
Andrew LaminskyCTOLinkedIn
Yuri Rudenya
Yuri RudenyaHead of Mobile Development at GilzorLinkedIn
Alena Timofeeva
Alena TimofeevaProduct Marketing LeadLinkedIn
Tell us what you’re buildingOptions, a rough cost and timeline for your project. No commitment.

More insights