CRM migration
Field-level mapping, validation, and rollback between CRUMP CRM and Salesforce Sales Cloud. We move data and schema; workflows are rebuilt natively in Salesforce Sales Cloud.
CRUMP CRM
Source
Salesforce Sales Cloud
Destination
Compatibility
12 of 14
objects map 1:1 between CRUMP CRM and Salesforce Sales Cloud.
Complexity
BStandard
Timeline
4-8 weeks
Overview
CRUMP CRM is a verticalised layer on Microsoft Dynamics 365, so data access runs through the Dynamics 365 web API and OData endpoint rather than a CRUMP-specific REST API. The first step in any migration is auditing the source org's Dynamics 365 license tier because lower-tier licenses restrict which entities are visible via the API and may enforce per-user call limits. We connect directly to the Dynamics 365 instance, enumerate active entities, then pull Contacts, Accounts, Deals, Projects, and Tickets in dependency order. Custom objects added on top of Dynamics 365 are enumerated individually because no two deployments share the same schema. We do not migrate Workflows, automations, or invoicing configurations; we deliver a written inventory of these for the customer's admin to rebuild. Attachments stored as Dynamics 365 notes or SharePoint-linked blobs require a separate file-level export pass and are flagged as out-of-scope unless a dedicated file migration is scoped separately.
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.
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
Each row shows how a CRUMP CRM object lands in Salesforce Sales Cloud, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
CRUMP CRM
Contact
Salesforce Sales Cloud
Lead or Contact (split required)
1:manyContacts from the Dynamics 365 CRM module map to Salesforce Lead if the contact is an unqualified prospect or to Salesforce Contact if the contact is associated with an Account. We apply the split based on the source contact's statecode, ownerid relationship, and any custom Dynamics 365 fields indicating qualification status. The original CRUMP CRM contact record ID is preserved in a custom field crump_contact_id__c on both Lead and Contact for audit and cross-reference.
CRUMP CRM
Account (Company)
Salesforce Sales Cloud
Account
1:1Dynamics 365 Accounts map directly to Salesforce Account. The accountid from Dynamics 365 becomes the dedupe key during import. Parent-account hierarchy migrates via the ParentId field on Account. Account is created before any Contact import so that the AccountId lookup is satisfied at the moment of Contact insert.
CRUMP CRM
Deal (Opportunity)
Salesforce Sales Cloud
Opportunity
1:1CRUMP CRM Deals correspond to Dynamics 365 Opportunities. Deal name, estimatedvalue, closeprobability, and actualclosedate migrate to Opportunity Name, Amount, Probability, and CloseDate. The Dynamics 365 pipeline stage (stageid and stagename) maps to Salesforce StageName, which we configure as a Sales Process before migration. Closed-won and closed-lost reasons from Dynamics 365 custom fields become Salesforce Loss Reason and Win Reason picklist values.
CRUMP CRM
Project
Salesforce Sales Cloud
Custom Object (Project__c)
1:1CRUMP CRM Projects live in the Project Management module, a distinct Dynamics 365 entity type from CRM Deals. We export project records including project name, status, start and end dates, and assigned team members as a Salesforce custom object named Project__c. Task-level detail within projects may not be fully representable in a standard Salesforce deployment and is documented separately as a Phase 2 custom object or PSA (Product Scheduling Automation) integration scope.
CRUMP CRM
Ticket (Case)
Salesforce Sales Cloud
Case
1:1Helpdesk tickets in CRUMP CRM are Cases in Dynamics 365 and migrate to Salesforce Case if the destination org includes Service Cloud or if the customer configures Case as a standard object. Ticket title, status, priority, description, and the linked contact's customerid migrate to Case Subject, Status, Priority, Description, and ContactId. Custom fields attached to tickets require explicit enumeration during the audit phase and are created as custom Case fields before import.
CRUMP CRM
Invoice
Salesforce Sales Cloud
Order (with OrderProducts)
1:1Invoicing records from the bundled suite export with line items, totals, and payment status. CRUMP CRM invoices link back to the originating Deal (Opportunity) in Dynamics 365; we reconstruct this relationship by matching the originating opportunityid on the invoice to the migrated Opportunity. Invoices become Salesforce Order records. If the customer does not use Salesforce Order Management, we deliver invoices as a structured CSV alongside the migration with a reference map for manual entry.
CRUMP CRM
Task (CRM tasks, project tasks, helpdesk tasks)
Salesforce Sales Cloud
Task
1:1CRUMP CRM stores tasks across multiple modules: CRM tasks, project tasks, and helpdesk tasks. We deduplicate and label each task by its origin module using a custom field crump_module__c so the destination team can categorise or filter them. Task subject, status, priority, activitydate, and ownerid migrate directly. The original Dynamics 365 activityid is preserved in crump_activity_id__c for reconciliation.
CRUMP CRM
Engagement: Email
Salesforce Sales Cloud
EmailMessage + Task
1:1Email history from Dynamics 365 CRM activities migrates to Salesforce EmailMessage records linked to an Activity Task record. The WhoId on Task points to the migrated Lead or Contact; WhatId points to the related Opportunity or Account. Email body and timestamp preserve. We use the Salesforce Bulk API 2.0 for large email histories because standard CSV import does not support the EmailMessage object.
CRUMP CRM
Engagement: Meeting
Salesforce Sales Cloud
Event
1:1Meeting records from Dynamics 365 activities migrate to Salesforce Event with StartDateTime, EndDateTime, Subject, and Location preserved. Attendee mapping links to EventRelation records pointing at the migrated Leads, Contacts, and Users. We resolve attendee email addresses against the migrated User and Contact tables during the transform phase.
CRUMP CRM
Engagement: Call
Salesforce Sales Cloud
Task (TaskSubtype = Call)
1:1Call activity records from Dynamics 365 CRM migrate to Salesforce Task with TaskSubtype = Call. Call disposition, duration, and any recording URL stored in Dynamics 365 custom fields migrate to custom Task fields. Activity ordering is preserved by setting ActivityDate to the original Dynamics 365 timestamp.
CRUMP CRM
Engagement: Note
Salesforce Sales Cloud
Note
1:1Notes from Dynamics 365 CRM migrate to Salesforce Note records linked via ContentDocumentLink to the parent record (Lead, Contact, Account, or Opportunity). Note body migrates as plain text. Any note attachments (which are separate blob records in Dynamics 365) are flagged separately for the file-level export pass.
CRUMP CRM
User (Team Member)
Salesforce Sales Cloud
User
1:1CRUMP CRM user accounts and their Dynamics 365 security role assignments require explicit mapping. We resolve users by email match against the Salesforce destination org's User table. Inactive users in CRUMP CRM are archived rather than imported to avoid ghost records. Any CRUMP CRM user without a matching Salesforce User goes to a reconciliation queue for the customer's admin to provision before record import resumes.
CRUMP CRM
Attachment
Salesforce Sales Cloud
ContentVersion + ContentDocumentLink
lossyAttachments stored as Dynamics 365 notes or SharePoint-linked document locations require a separate file-level export pass and cannot be migrated through the standard API layer without explicit SharePoint access credentials. We flag this as a separate file migration scope and do not include binary blob migration inside the standard API migration pass. If the customer uses Dynamics 365's notes with attachments, we enumerate every note with an attachment and provide a file inventory with record linkage for manual re-attachment or a scoped file migration engagement.
CRUMP CRM
Custom Entity (Dynamics 365)
Salesforce Sales Cloud
Custom Object
1:1Custom entities created on top of the Dynamics 365 instance are enumerated during the audit phase. Each custom entity and its fields are documented individually because no two Dynamics 365 deployments share the same custom schema. We pre-create the equivalent Salesforce custom objects with matching field types, lookup relationships, and validation rules in a Sandbox before any data import. The destination API name follows Salesforce __c convention and is matched to the source entity's logical name where possible.
| CRUMP CRM | Salesforce Sales Cloud | Compatibility | |
|---|---|---|---|
| Contact | Lead or Contact (split required)1:many | Fully supported | |
| Account (Company) | Account1:1 | Fully supported | |
| Deal (Opportunity) | Opportunity1:1 | Fully supported | |
| Project | Custom Object (Project__c)1:1 | Fully supported | |
| Ticket (Case) | Case1:1 | Fully supported | |
| Invoice | Order (with OrderProducts)1:1 | Fully supported | |
| Task (CRM tasks, project tasks, helpdesk tasks) | Task1:1 | Fully supported | |
| Engagement: Email | EmailMessage + Task1:1 | Fully supported | |
| Engagement: Meeting | Event1:1 | Fully supported | |
| Engagement: Call | Task (TaskSubtype = Call)1:1 | Fully supported | |
| Engagement: Note | Note1:1 | Fully supported | |
| User (Team Member) | User1:1 | Fully supported | |
| Attachment | ContentVersion + ContentDocumentLinklossy | Fully supported | |
| Custom Entity (Dynamics 365) | Custom Object1: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.
CRUMP CRM gotchas
Dynamics 365 licensing tier gates API access
No publicly documented API endpoint or developer portal
Per-user pricing creates predictable but escalating costs
Salesforce Sales Cloud gotchas
Workflow Rules and Process Builder are retired
Bulk API batch quota exhaustion during large imports
Storage overage billing is non-obvious
Account-Contact many-to-many relationship mapping
Territory and team member import ordering dependencies
Pair-specific challenges
Migration approach
Dynamics 365 credential and license audit
We collect Dynamics 365 admin credentials or a service account with read permissions on the source org. We enumerate the license tier assigned to the source org and identify which entities are accessible via the web API under the current credentials. We produce a written entity inventory listing every CRM entity visible to the migration account, its record count, and any entities that are inaccessible due to license restrictions. This inventory is the gating artifact for the migration plan; if critical entities are blocked, the customer must resolve the license or access restriction before scoping continues.
Data inventory and deduplication
We pull a full data dump from accessible Dynamics 365 entities: Contacts, Accounts, Opportunities, Projects, Cases, Tasks, Email activities, Meetings, Calls, Notes, Invoices, Users, and any enumerated custom entities. We calculate total record counts per entity, identify dark data (duplicate, outdated, or inactive records), and assess data quality. We deliver a data quality report that estimates the usable record volume versus total record volume. We do not import dirty data into Salesforce without flagging it; the customer chooses whether to clean before migration or import as-is with a quality disclaimer.
Destination schema design and sandbox provisioning
We design the Salesforce destination schema in a Sandbox org. This includes provisioning custom objects, custom fields, Record Types for each CRUMP CRM pipeline, Sales Processes, Page Layouts, and the Lead-versus-Contact split rule derived from the source contact qualification data. We also create the crump_*__c custom fields that preserve source IDs and metadata for audit. The schema design is reviewed and approved by the customer's Salesforce admin before any migration begins.
Sandbox migration and reconciliation
We run a full migration into the Salesforce Sandbox using production-like data volume. The customer's admin and RevOps lead reconcile record counts against the source Dynamics 365 inventory, spot-check 25-50 random records in Salesforce against the Dynamics 365 source, and sign off the mapping. Any field mapping corrections, custom object additions, or stage name adjustments happen in the Sandbox before production migration begins. This step prevents corrections from disrupting a live cutover.
Owner and user provisioning
We extract every distinct CRUMP CRM user referenced on Contacts, Accounts, Opportunities, Cases, and activity records and match by email against the Salesforce destination org's User table. Users without a matching Salesforce User go to a reconciliation queue. The customer's Salesforce admin provisions any missing Users (active for current team members, inactive for departed users who own historical records). Migration cannot proceed past this step because OwnerId references are required on most standard Salesforce objects.
Production migration in dependency order
We run production migration in strict dependency order: Users (manually provisioned and validated), Accounts, Contacts (with AccountId resolved and the Lead-Contact split applied), Leads, Opportunities (with StageName, RecordTypeId, and OwnerId resolved), Cases, Tasks and Activities (via Bulk API 2.0 for large volumes), Invoices as Orders, Custom Objects (last, because they often contain lookups to standard objects), and Files (file-level pass enumerated separately). Each phase emits a row-count reconciliation report before the next phase begins. We do not migrate Workflows, automations, or invoicing configurations; these are documented in a separate rebuild inventory delivered at cutover.
Platform deep dives
CRUMP CRM
Source
Strengths
Weaknesses
Salesforce Sales Cloud
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 1 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 CRUMP CRM and Salesforce Sales Cloud.
Object compatibility
1 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
CRUMP CRM: Not publicly documented; governed by Dynamics 365 licence tier.
Data volume sensitivity
CRUMP CRM 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 CRUMP CRM to Salesforce Sales Cloud migration scoping. Not seeing yours? Book a call.
Walk through your CRUMP CRM to Salesforce Sales Cloud migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave CRUMP CRM
Other ways to arrive at Salesforce Sales Cloud
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.