ERP migration
Field-level mapping, validation, and rollback between Sales ERP and Microsoft Dynamics 365 Business Central. We move data and schema; workflows are rebuilt natively in Microsoft Dynamics 365 Business Central.
Sales ERP
Source
Microsoft Dynamics 365 Business Central
Destination
Compatibility
17 of 17
objects map 1:1 between Sales ERP and Microsoft Dynamics 365 Business Central.
Complexity
BStandard
Timeline
4-8 weeks
Overview
Moving from Sales ERP to Microsoft Dynamics 365 is a cross-platform ERP migration that requires resolving the structural differences between Salesforce's object model and Dynamics 365's entity schema. Salesforce uses standard and custom objects accessible via Bulk API 2.0 and REST, while Dynamics 365 relies on Dataverse entities with OData endpoints and a separate ERP layer (Business Central or Finance and Supply Chain Management) that may or may not be co-deployed. We extract from Salesforce using Bulk API 2.0 with rate-limit-aware chunking, transform the record set to match Dynamics 365 entity schemas, and load via the Dynamics 365 Data Import API or Azure Data Factory with lookup resolution on Account, Contact, and Owner before child records insert. Historical transaction data, financial dimensions, and contract renewal terms require explicit scoping because they are routinely dropped to cut migration scope. Workflows, Approval Processes, and AppExchange extensions do not migrate as code; we deliver a written inventory of every active automation for the customer's Dynamics partner to rebuild in Power Automate or the applicable ERP configuration layer.
Every standard and custom field arrives verified.
AI proposes the map; you confirm before any record moves.
Parent–child, lookups, and ownership stay linked.
Calls, emails, meetings — with original timestamps.
Documents, uploads, and inline notes move with the record.
Source platform
Sales ERP platform overview
Scorecard, SWOT, gotchas, and pricing for Sales ERP.
Destination platform
Microsoft Dynamics 365 Business Central platform overview
Scorecard, SWOT, gotchas, and pricing for Microsoft Dynamics 365 Business Central.
Data migration guide
The complete Dynamics 365 Business Central migration guide
Data model, import mechanisms, field mapping strategy, pitfalls, and cutover — by the engineers running it.
Destination checklist
Dynamics 365 Business Central migration checklist
Pre- and post-cutover tasks for moving onto Microsoft Dynamics 365 Business Central.
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
Each row shows how a Sales ERP object lands in Microsoft Dynamics 365 Business Central, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
Sales ERP
Account
Microsoft Dynamics 365 Business Central
Account
1:1Salesforce Account maps directly to Dynamics 365 Account. We use Account Name as the primary match key, with Website and BillingAddress as secondary dedupe fields. Parent Account hierarchies migrate as Account.ParentAccountId lookups resolved against the stored Salesforce Account ID in a reference field. Ownership maps from Salesforce OwnerId to Dynamics 365 OwnerId systemuser via email match. Multi-currency Accounts require CurrencyId resolution if the Dynamics 365 destination has a multi-currency configuration enabled.
Sales ERP
Contact
Microsoft Dynamics 365 Business Central
Contact
1:1Salesforce Contact maps to Dynamics 365 Contact with AccountId resolved to the target Account.ID before insert. We run deduplication on email address during transform. Salesforce's Account Contact Relation (ACR) object has no direct Dynamics 365 equivalent; we flatten primary-contact relationships into Contact.ParentCustomerId on the Contact record. Secondary contact roles are stored in a custom Contact Relationship entity in Dynamics 365 if the customer requires that granularity.
Sales ERP
Opportunity
Microsoft Dynamics 365 Business Central
Opportunity
1:1Salesforce Opportunity maps to Dynamics 365 Opportunity with StageName mapped to Dynamics StatusReason on the Opportunity entity. Probability migrates to an integer field; if Salesforce uses non-integer probabilities (e.g., 37%), we round to the nearest supported integer or store the original value in a custom field. OwnerId resolves to Dynamics OwnerId via email match. RecordTypeId on Salesforce maps to Dynamics opportunitycustomerassuranceprocessid if multiple sales processes are configured.
Sales ERP
Lead
Microsoft Dynamics 365 Business Central
Lead
1:1Salesforce Lead maps to Dynamics 365 Lead with LeadSource, Status, Industry, and Rating preserved. We preserve any custom lead scoring fields in Dynamics 365 custom fields. Salesforce Lead conversion produces Account, Contact, and Opportunity in Salesforce; Dynamics 365 Lead qualification creates the same downstream records via the Qualify action on the Lead entity. We document the qualification rule mapping during scoping.
Sales ERP
Order
Microsoft Dynamics 365 Business Central
SalesOrder (Business Central) or Order (Sales)
1:1Salesforce Order maps to Microsoft Dynamics 365 Sales Order (Business Central) or Order entity (Microsoft Dynamics 365 Sales CRM). The mapping depends on whether the destination includes the ERP layer. Order status (Draft, Activated, Fulfilled, Cancelled) maps to the corresponding Dynamics status codes. OrderItems map to SalesOrderLine records with LineAmount, Quantity, and ProductId resolved against the target Product entity. We flag whether the customer needs historical closed orders migrated or only open/active orders.
Sales ERP
Contract
Microsoft Dynamics 365 Business Central
Agreement (Business Central)
1:1Salesforce Contract maps to Dynamics 365 Business Central Agreement or CRM Contract entity depending on the deployed ERP layer. StartDate, EndDate, Status, and Renewal Terms migrate as standard fields. Contract-Order lineage from Salesforce (Orders linked to Contracts) requires the Contract ID to be preserved in a reference field so that the relationship can be rebuilt in Dynamics 365's ERP layer after migration.
Sales ERP
Product2
Microsoft Dynamics 365 Business Central
Product
1:1Salesforce Product2 maps to Dynamics 365 Product. ProductCode (hs_sku equivalent) becomes the Dynamics ProductNumber. IsActive in Salesforce maps to StateCode (Active/Inactive). We validate that all migrating products have at least one active price list entry in the destination before completing the product phase; missing price list entries are flagged as a reconciliation item.
Sales ERP
PricebookEntry
Microsoft Dynamics 365 Business Central
PriceListItem (Business Central) or ProductPriceLevel (Sales)
1:1Salesforce PricebookEntry maps to Dynamics 365 ProductPriceLevel (CRM Sales) or SalesPrice (Business Central ERP). Each Pricebook in Salesforce becomes a PriceList in Dynamics 365. UnitPrice migrates to Amount. We resolve Pricebook2Id to the target pricelevelid before inserting price list entries. Custom Pricebook-specific pricing requires explicit mapping because Dynamics 365 separates price list assignment from product pricing more strictly than Salesforce does.
Sales ERP
Case
Microsoft Dynamics 365 Business Central
Incident (Service)
1:1Salesforce Case maps to Dynamics 365 Customer Service entity Incident. Case Status maps to Incident statecode and statuscode. Case Origin maps to a custom field or the Priority field if the destination does not use Origin. AccountId and ContactId lookups resolve to Dynamics Account and Contact before Case insertion. Entitlement and SLAs from Salesforce require mapping to Dynamics 365 Service Level Agreement entities; we flag any entitlement-specific fields that cannot map to standard Dynamics fields.
Sales ERP
Campaign
Microsoft Dynamics 365 Business Central
Campaign
1:1Salesforce Campaign maps to Dynamics 365 Campaign with CampaignType, Status, BudgetedCost, and StartDate preserved. Campaign Member migration requires resolving the CampaignMember's Contact or Lead reference to the migrated Dynamics 365 record. Custom Campaign fields (e.g., regional codes, campaign budget categories) map to Dynamics custom fields on the Campaign entity. Campaign hierarchies map to Dynamics 365 Campaign Parent Campaign ID lookups.
Sales ERP
User
Microsoft Dynamics 365 Business Central
SystemUser
1:1Salesforce User records map to Dynamics 365 SystemUser by email address match. We extract all Users referenced as OwnerId on migrating records before migration begins. Users without a match in the Dynamics 365 destination org are placed in a reconciliation queue for the customer's admin to provision. Deactivated Salesforce Users are not migrated by default to avoid consuming Dynamics 365 licenses.
Sales ERP
Custom Object (__c)
Microsoft Dynamics 365 Business Central
Custom Entity
1:1Salesforce custom objects (API Name ending in __c) map to Dynamics 365 custom entities created via a solution or the Power Apps maker portal. We pre-create the destination entity schema—including all attributes, lookup relationships, and option set values—before any custom object records are imported. Custom field types (picklist, multi-select picklist, formula, roll-up summary) require type-by-type mapping decisions during discovery because Dynamics 365 does not support all Salesforce field type equivalents (e.g., Salesforce formula fields must be computed in Power Automate or as calculated columns in Dataverse).
Sales ERP
Attachment
Microsoft Dynamics 365 Business Central
Annotation (noteattachment)
1:1Salesforce Attachment records migrate to Dynamics 365 Annotation entity with noteType = 1 (attachment). The Base64-encoded Body from Salesforce maps to the Dynamics documentbody attribute. We validate that Dynamics 365 has sufficient storage quota before attachment migration; if the target environment has SharePoint integration enabled, we prefer file-based document storage via SharePoint libraries rather than Dataverse annotation storage to avoid storage quota exhaustion.
Sales ERP
Note
Microsoft Dynamics 365 Business Central
Annotation (note)
1:1Salesforce Note records migrate to Dynamics 365 Annotation with noteType = 0 (note). Notebody rich text maps to annotation's notetext field. We preserve the parent record reference by resolving the Salesforce ParentId to the corresponding Dynamics record ID via stored original ID lookups before inserting annotations.
Sales ERP
Task
Microsoft Dynamics 365 Business Central
Task
1:1Salesforce Task records migrate to Dynamics 365 Task. Subject, Status, Priority, ActivityDate, and Description preserve. OwnerId resolves to Dynamics SystemUser via email match. WhatId (Opportunity, Account, Case reference) resolves via the stored Salesforce original ID lookup table. Tasks linked to custom objects resolve against those custom entity IDs after custom object migration completes.
Sales ERP
Event
Microsoft Dynamics 365 Business Central
Appointment
1:1Salesforce Event records migrate to Dynamics 365 Appointment with Start, End, Location, and Subject preserved. Salesforce Event attendees map to Dynamics 365 Appointment's optionalattendees and requiredattendees party list fields via Attendee resolved against the migrated Contact or User ID. Recurring events (RecurrenceRule) from Salesforce require transformation to the Dynamics 365 recurrence pattern format.
Sales ERP
OpportunityLineItem
Microsoft Dynamics 365 Business Central
SalesOrderLine (Business Central) or OpportunityProduct (Sales)
1:1Salesforce OpportunityLineItem maps to Dynamics 365 OpportunityProduct (Sales CRM) or SalesOrderLine (Business Central ERP). The mapping depends on whether the order management layer is in the CRM or ERP application. We resolve the PricebookEntry reference to a Dynamics price list item ID, the Product reference to a Dynamics Product ID, and the Opportunity reference to the migrated Opportunity ID before inserting line items.
| Sales ERP | Microsoft Dynamics 365 Business Central | Compatibility | |
|---|---|---|---|
| Account | Account1:1 | Fully supported | |
| Contact | Contact1:1 | Fully supported | |
| Opportunity | Opportunity1:1 | Fully supported | |
| Lead | Lead1:1 | Fully supported | |
| Order | SalesOrder (Business Central) or Order (Sales)1:1 | Fully supported | |
| Contract | Agreement (Business Central)1:1 | Fully supported | |
| Product2 | Product1:1 | Fully supported | |
| PricebookEntry | PriceListItem (Business Central) or ProductPriceLevel (Sales)1:1 | Fully supported | |
| Case | Incident (Service)1:1 | Fully supported | |
| Campaign | Campaign1:1 | Fully supported | |
| User | SystemUser1:1 | Fully supported | |
| Custom Object (__c) | Custom Entity1:1 | Fully supported | |
| Attachment | Annotation (noteattachment)1:1 | Fully supported | |
| Note | Annotation (note)1:1 | Fully supported | |
| Task | Task1:1 | Fully supported | |
| Event | Appointment1:1 | Fully supported | |
| OpportunityLineItem | SalesOrderLine (Business Central) or OpportunityProduct (Sales)1:1 | Fully supported |
Gotchas + challenges
Platform-specific issues from each side, plus the pair-specific challenges that don't show up on either platform's page on its own.
Sales ERP gotchas
API rate limits cap daily call volume by license tier
Historical data is often left behind to cut implementation scope
Custom object attachments require Base64 encoding
Object relationships break silently without ID preservation
Data quality issues derail migration timelines
Microsoft Dynamics 365 Business Central gotchas
Named-user licensing has no concurrent-use relief
API rate limits throttle large-volume migrations
Historical posted transactions require selective migration scoping
NAV-to-Business Central cloud migration requires partner coordination
Custom fields and AL extensions require separate migration handling
Pair-specific challenges
Migration approach
Discovery and Dynamics application stack definition
We audit the Salesforce source org across all installed packages, custom objects, active Pricebook entries, Opportunity and Order record volumes, and any industry-cloud extensions (Financial Services Cloud, Health Cloud, Manufacturing Cloud). We pair this with a Dynamics 365 target-stack decision: Microsoft Dynamics 365 Sales CRM standalone for organizations moving only the CRM layer; Dynamics 365 Business Central for mid-market organizations needing ERP (orders, inventory, financials); Dynamics 365 Finance and Supply Chain Management for large enterprises with advanced supply chain and financial consolidation requirements. The discovery output is a written migration scope document that defines the application stack, the record volumes per object, the historical scope, and any pre-migration data quality work required.
Schema design and entity provisioning
We design the destination Dynamics 365 schema based on the source Salesforce object map. For CRM migrations, this includes provisioning custom entities for any Salesforce custom objects, adding custom fields to standard entities, configuring option sets for picklist fields, and setting up the Price List structure. For ERP co-migrations, this includes designing the Chart of Accounts structure, defining financial dimension sets, and configuring the Sales Order and Agreement entity schemas in Business Central or F&SCM. Schema is deployed into a Dynamics 365 Sandbox environment first for validation. We also configure field-level security profiles so that the migration user has write access to all target entities before ingestion begins.
Sandbox migration and reconciliation
We run a full migration into the Dynamics 365 Sandbox using production-like record volumes. The customer's Dynamics administrator reconciles record counts (Accounts in, Contacts in, Opportunities in, Orders in, Activities in) against the source Salesforce extraction reports, spot-checks 25-50 records for field-level accuracy, and validates that parent-child relationships resolved correctly (e.g., Contacts have AccountId, Opportunities have AccountId). Any mapping corrections are made before production migration begins. Financial dimension value tables are loaded and validated in Sandbox if the destination includes Business Central or F&SCM.
Owner and User reconciliation
We extract every distinct Salesforce Owner referenced on Account, Contact, Opportunity, Order, and Case records and match by email against the Dynamics 365 SystemUser table. Owners without a matching SystemUser are placed in a reconciliation queue. The customer's Dynamics admin provisions any missing users (active or inactive depending on whether the original Salesforce user is still employed). This step is gated before production migration because OwnerId is a required reference on most standard entities in Dynamics 365.
Production migration in dependency order
We run production migration in record-dependency order: Users (manual, validated), Accounts (from Salesforce Companies), Contacts (with AccountId resolved), Leads, Opportunities (with AccountId, OwnerId, and RecordTypeId resolved), Products and Price Lists, Sales Orders and Order Lines (with ProductId and AccountId resolved), Contracts, Cases, and Activities (Tasks, Events, Notes, Attachments via bulk import API). Custom objects are migrated last because they often have lookup dependencies on standard objects. Each phase emits a row-count reconciliation report before the next phase begins. For high-volume objects, we use Dynamics 365 bulk import or Azure Data Factory with OData connectors to maintain throughput.
Cutover, validation, and automation rebuild handoff
We freeze Salesforce write access during the cutover window, run a final delta migration of any records modified during the migration window, then set Dynamics 365 as the system of record. We deliver the Workflow, Approval Process, and Process Builder inventory document to the customer's Dynamics partner or admin team. We support a one-week hypercare window to resolve any immediate post-migration reconciliation issues. We do not rebuild Salesforce Workflows as Power Automate flows or business rules inside the migration scope; that work is scoped separately with a Dynamics 365 partner or handled by the customer's internal admin team.
Platform deep dives
Sales ERP
Source
Strengths
Weaknesses
Microsoft Dynamics 365 Business Central
Destination
Strengths
Weaknesses
Complexity grading
Standard ERP migration. All 8 core objects map 1:1 between Sales ERP and Microsoft Dynamics 365 Business Central.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Sales ERP and Microsoft Dynamics 365 Business Central.
Object compatibility
All 8 core objects map 1:1 between Sales ERP and Microsoft Dynamics 365 Business Central.
Field mapping clarity
Field mapping is derived from defaults — final spec confirmed during the sample migration.
Timeline complexity
8-object category — typical timelines run 2–7 days end-to-end.
API constraints
Sales ERP: 1,000 to 100,000 API calls per day depending on license tier; concurrent request limits also apply.
Data volume sensitivity
Sales ERP exposes a bulk API — large-volume migrations stream efficiently.
Estimator
Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.
Step 1
Pick a category, then your source and destination platforms.
Category
FAQ
Answers to the questions buyers ask most during Sales ERP to Microsoft Dynamics 365 Business Central migration scoping. Not seeing yours? Book a call.
Walk through your Sales ERP to Microsoft Dynamics 365 Business Central migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave Sales ERP
Other ways to arrive at Microsoft Dynamics 365 Business Central
Ready when you are
Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.