CRM migration
Field-level mapping, validation, and rollback between m-savvy and Microsoft Dynamics 365 Sales . We move data and schema; workflows are rebuilt natively in Microsoft Dynamics 365 Sales .
m-savvy
Source
Microsoft Dynamics 365 Sales
Destination
Compatibility
6 of 8
objects map 1:1 between m-savvy and Microsoft Dynamics 365 Sales .
Complexity
BStandard
Timeline
3-5 weeks
Overview
Migrating from m-savvy to Microsoft Microsoft Dynamics 365 Sales is a cross-architecture move from a Canadian SMB-focused Salesforce-backed platform to Microsoft's cloud-native CRM built on Dataverse. M-savvy stores customer data against a flat Contact and Company model with custom objects discovered only through live API inspection; Dynamics 365 uses the Account-Contact relationship model with Opportunities as the pipeline record. We begin every engagement by enumerating m-savvy's custom object schemas via API because m-savvy publishes no public schema reference, and we map every pipeline stage to a Microsoft Dynamics 365 Sales Process and Record Type. We do not migrate automations or workflows: m-savvy automation patterns have no direct equivalent in Dynamics 365 Power Automate or native Sales automation, so we deliver a written inventory of every active rule for the customer's admin to rebuild. Attachment files require a separate file-export pass from m-savvy's storage layer and a re-upload to Dynamics 365 with relink to parent record IDs post-ingestion.
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
m-savvy platform overview
Scorecard, SWOT, gotchas, and pricing for m-savvy.
Destination platform
Microsoft Dynamics 365 Sales platform overview
Scorecard, SWOT, gotchas, and pricing for Microsoft Dynamics 365 Sales .
Data migration guide
The complete Microsoft Dynamics 365 Sales migration guide
Data model, import mechanisms, field mapping strategy, pitfalls, and cutover — by the engineers running it.
Destination checklist
Microsoft Dynamics 365 Sales migration checklist
Pre- and post-cutover tasks for moving onto Microsoft Dynamics 365 Sales .
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
Each row shows how a m-savvy object lands in Microsoft Dynamics 365 Sales , including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
m-savvy
Contact
Microsoft Dynamics 365 Sales
Contact
1:1M-savvy Contacts map to Dynamics 365 Contact. We preserve all standard fields — FullName, Email, BusinessPhone, MailingAddress, LifecycleStage (as a custom field if the destination field does not exist) — and link each Contact to a parent Account after the Account import phase. Owner resolution happens by email match against the destination User table. Any Contact without a matching Account during migration is held in a reconciliation queue until Account IDs are available.
m-savvy
Account (Company)
Microsoft Dynamics 365 Sales
Account
1:1M-savvy Account records map directly to Dynamics 365 Account. The Account-Contact relationship is directional in Dynamics 365: Account is the parent, Contact is the child. We import Accounts before Contacts and use the m-savvy Company ID as the external key for deduplication. Industry, size, and billing address fields map to the equivalent Dynamics 365 Account fields. If m-savvy stores multiple address types (billing, shipping) per Company, we map the primary address to the Account Address fields and hold secondary addresses for Account Address configuration in Dynamics 365.
m-savvy
Deal
Microsoft Dynamics 365 Sales
Opportunity
1:1M-savvy Deals map to Dynamics 365 Opportunity. Dealstage maps to Dynamics 365 StageName against a Sales Process we configure before migration. CloseDate, Amount, and Probability transfer directly. If m-savvy stores a Closed-Won or Closed-Lost reason as a custom field, we map it to Dynamics 365 internal字段 or a custom field for loss and win reason analysis. Each Deal's associated Contact and Account resolve to the migrated ContactId and AccountId at migration time.
m-savvy
Lead
Microsoft Dynamics 365 Sales
Lead
1:1M-savvy Leads (distinct from Contacts in m-savvy's data model) map directly to Dynamics 365 Lead. Lead status and lead source from m-savvy map to Dynamics 365 Lead Status and LeadSource. If the customer converts Leads to Contacts in m-savvy, we preserve both the original Lead record and the converted Contact during migration. Lead owner assignment resolves by email match against the destination User table.
m-savvy
Pipeline and Pipeline Stage
Microsoft Dynamics 365 Sales
Sales Process and Stage
lossyM-savvy pipeline definitions and custom stage names are read from the m-savvy schema via API during discovery. Each m-savvy pipeline becomes a Microsoft Dynamics 365 Sales Process linked to an Opportunity Record Type. Stage probability values migrate from m-savvy to Dynamics 365 probability fields with rounding to the nearest integer percentage allowed by Dynamics 365. We flag stage count or ordering differences that would require a redesign of the customer's sales process in Dynamics 365.
m-savvy
Activity (Call, Email, Meeting, Task)
Microsoft Dynamics 365 Sales
Task, Email (EmailMessage), and ActivityPointer
1:1M-savvy activity records (calls, emails, meetings, tasks) linked to Contacts, Accounts, or Deals migrate to Dynamics 365 Task, Email, and ActivityPointer entities. We set the Regarding (object) lookup on each activity to the migrated ContactId, AccountId, or OpportunityId after parent record resolution. Activity timestamps and subject lines preserve. Call duration and disposition values migrate to custom Task fields where Dynamics 365 does not have native equivalents. Activity type is encoded via the ActivityTypeCode or TaskSubtype field.
m-savvy
Custom Object
Microsoft Dynamics 365 Sales
Custom Entity
1:1M-savvy custom objects require manual schema discovery via live API during the scoping phase because m-savvy publishes no public schema reference. We enumerate every custom object type, its fields, and its data types, then build a destination Dynamics 365 custom entity with equivalent fields using the Dataverse schema editor. Custom object lookups to standard objects (Contact, Account, Opportunity) are preserved as Dataverse lookups, and parent-record resolution happens during the migration transform phase. We share the complete schema map with the customer for confirmation before any data moves.
m-savvy
Attachment
Microsoft Dynamics 365 Sales
Annotation (Note) or SharePoint
lossyM-savvy stores attachment files separately from record data and requires a separate file-export pass. We download files via the m-savvy file API, stage them locally, then upload to Dynamics 365 as Annotation records (for in-record notes and files) or SharePoint document locations linked via the Regarding field. Each file is relinked to its parent Contact, Account, or Opportunity by resolving the original m-savvy parent record ID to the migrated Dynamics 365 record ID. Attachments whose parent records failed migration are flagged and held for manual review.
| m-savvy | Microsoft Dynamics 365 Sales | Compatibility | |
|---|---|---|---|
| Contact | Contact1:1 | Fully supported | |
| Account (Company) | Account1:1 | Fully supported | |
| Deal | Opportunity1:1 | Fully supported | |
| Lead | Lead1:1 | Fully supported | |
| Pipeline and Pipeline Stage | Sales Process and Stagelossy | Fully supported | |
| Activity (Call, Email, Meeting, Task) | Task, Email (EmailMessage), and ActivityPointer1:1 | Fully supported | |
| Custom Object | Custom Entity1:1 | Fully supported | |
| Attachment | Annotation (Note) or SharePointlossy | 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.
m-savvy gotchas
Custom object schemas require manual discovery before migration
Plan tier restrictions limit exportable record volumes
Attachment files are not embedded in record exports
Microsoft Dynamics 365 Sales gotchas
Professional tier 15-table custom table limit blocks migrations
October 2024 pricing increase applies at renewal for all customers
Custom fields must be created in the UI before API writes
Power Platform request limits apply to bulk migrations
Activity records orphaned to inactive owners fail silently
Pair-specific challenges
Migration approach
Discovery and plan assessment
We audit the m-savvy org via API: enumerating all standard objects (Contact, Account, Deal, Lead, Activity), identifying custom objects by inspecting the live schema, counting record volumes per object, and reviewing the current plan tier for export restrictions. We pair this with a Microsoft Dynamics 365 Sales edition recommendation (Professional at $65/user for most migrations; Enterprise at $105/user if the customer needs Copilot, advanced AI, or complex opportunity product bundling). The discovery output is a written migration scope with the m-savvy custom object schema map, record counts, and a Dynamics 365 edition recommendation.
Schema design and pipeline configuration
We design the Dynamics 365 destination schema. This includes provisioning custom entities for any m-savvy custom objects, creating custom fields with Dataverse-appropriate data types, configuring Sales Processes for each m-savvy pipeline, creating Opportunity Record Types to scope stage values per business unit, and mapping m-savvy Deal stages to Dynamics 365 StageName values with probability percentages. Schema is deployed into a Dynamics 365 Sandbox via the Dataverse Web API or a deployment tool before any data moves. We flag any stage count or ordering differences that require a redesign of the customer's sales process.
Sandbox migration and reconciliation
We run a full migration into a Dynamics 365 Sandbox using production-like data volume. The customer's RevOps or system admin reviews record counts across all objects, spot-checks 20-40 records against the m-savvy source, and validates that custom object relationships resolved correctly. Any schema corrections, field mapping adjustments, or validation rule bypasses are identified here. We do not begin production migration until the sandbox pass is signed off.
Owner reconciliation and User provisioning
We extract every distinct m-savvy Owner (hubspot_owner_id or equivalent) referenced on Contact, Account, Deal, Lead, and Activity records and match by email against the Dynamics 365 destination org's User table. Any m-savvy Owner without a matching Dynamics 365 User goes to a reconciliation queue for the customer's admin to provision before record import resumes. Owner resolution must be complete before import begins 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: Accounts (from m-savvy Companies), Contacts (with AccountId resolved from the Account phase), Leads (with owner resolved), Opportunities (with AccountId, OwnerId, and RecordTypeId resolved), Activity history (Tasks, Emails via Dataverse API with batch chunking), Custom Objects (last, after standard object lookups are established), then Attachment files (separate file-export pass with parent record ID relink). Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and automation rebuild handoff
We freeze writes to m-savvy during cutover, execute a final delta migration of any records modified during the migration window, then enable Microsoft Dynamics 365 Sales as the system of record. We deliver a written inventory of every m-savvy automation and workflow rule with its trigger, conditions, and recommended Dynamics 365 Power Automate equivalent. We do not rebuild m-savvy automations as Power Automate flows inside the migration scope. We support a five-day hypercare window for reconciliation issues. Power Automate rebuild, post-migration admin training, and Dynamics 365 configuration refinement are separate engagements.
Platform deep dives
m-savvy
Source
Strengths
Weaknesses
Microsoft Dynamics 365 Sales
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 3 of 8 objects need a mapping; the rest are 1:1.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across m-savvy and Microsoft Dynamics 365 Sales .
Object compatibility
3 of 8 objects need a mapping; the rest are 1:1.
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
m-savvy: Not publicly documented.
Data volume sensitivity
m-savvy doesn't expose a bulk API — REST + parallelization used for high-volume runs.
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 m-savvy to Microsoft Dynamics 365 Sales migration scoping. Not seeing yours? Book a call.
Walk through your m-savvy to Microsoft Dynamics 365 Sales migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave m-savvy
Other ways to arrive at Microsoft Dynamics 365 Sales
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.