CRM migration
Field-level mapping, validation, and rollback between Cordis CRM and Salesforce Sales Cloud. We move data and schema; workflows are rebuilt natively in Salesforce Sales Cloud.
Cordis CRM
Source
Salesforce Sales Cloud
Destination
Compatibility
11 of 14
objects map 1:1 between Cordis CRM and Salesforce Sales Cloud.
Complexity
CModerate
Timeline
4-8 weeks
Overview
Moving from Cordis CRM to Salesforce is a multi-vector migration that requires solving for the absence of a publicly documented REST API on the source side. Cordis CRM organizes customer data around Profiles, Campaigns, and Tasks, while Salesforce uses the Account-Contact-Lead-Opportunity data model with explicit lookup relationships. We request a scoped data export file from the customer, normalize its format, and load it into our migration pipeline with dependency-ordered inserts. Document management, campaign membership, and task history transfer as linked records, not flattened rows. Custom fields require manual survey during scoping because Cordis does not publish field schemas publicly. Salesforce workflows, sequences, and reports do not migrate; we deliver a written inventory of every automation requiring rebuild in Salesforce Flow and a report mapping document for the customer's admin to act on.
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 Cordis 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.
Cordis CRM
Contact
Salesforce Sales Cloud
Contact
1:1Cordis CRM Contact records map to Salesforce Contact. The contact's name, email, phone, and address fields map to Salesforce standard fields (FirstName, LastName, Email, Phone, MailingStreet, MailingCity, MailingState, MailingPostalCode, MailingCountry). We resolve the Cordis Company linkage to a Salesforce AccountId using company-name matching against the imported Account records. Any Cordis custom contact properties identified during scoping map to Salesforce custom fields with the __c suffix. Contact Priority or contact type flags from Cordis map to a custom picklist field cordis_contact_type__c for post-migration segmentation.
Cordis CRM
Contact (unqualified prospect)
Salesforce Sales Cloud
Lead
1:manyCordis CRM does not separate prospects from customers at the object level. We define a split rule during scoping based on Cordis contact properties such as lifecycle stage, last activity date, or deal association. Contacts without any associated Deal or Campaign membership in Cordis are candidates for Salesforce Lead rather than Contact. The original Cordis contact record is preserved in a custom field cordis_original_id__c on the Lead for audit and cross-reference. The customer's admin approves the split rule before migration begins.
Cordis CRM
Company
Salesforce Sales Cloud
Account
1:1Cordis CRM Company records map to Salesforce Account. Company name maps to Account Name, domain or website maps to Website, industry maps to Industry (mapped to the Salesforce standard picklist), and employee count maps to NumberOfEmployees. Account is created before any Contact import so that the AccountId lookup is satisfied at the moment of Contact insert. We use company name as the dedupe key and flag any duplicate Account names in the export for the customer to resolve before migration.
Cordis CRM
Pipeline (Deal)
Salesforce Sales Cloud
Opportunity
1:1Cordis CRM Deal records map to Salesforce Opportunity. The deal name maps to Opportunity Name, deal value maps to Amount, deal stage maps to StageName, and expected close date maps to CloseDate. We map Cordis pipeline assignments to Salesforce Record Types and Sales Processes during the schema design phase. If Cordis uses multiple pipelines, each becomes a separate Salesforce Record Type on Opportunity with its own stage whitelist and page layout. Owner resolution uses email matching to the imported Salesforce User records.
Cordis CRM
Deal Stage
Salesforce Sales Cloud
Opportunity Stage
lossyEach Cordis CRM deal stage value maps to a Salesforce Opportunity StageName entry in a Salesforce Sales Process. Stage probability percentages migrate from Cordis to Salesforce StageProbability, rounded to the nearest integer allowed by Salesforce. Stage order is preserved by setting the sort order in the OpportunityStage metadata. We configure the Sales Process in a Salesforce Sandbox before production migration and validate stage visibility per profile.
Cordis CRM
Task
Salesforce Sales Cloud
Task
1:1Cordis CRM Tasks (both automated and manual) map to Salesforce Task records. Task subject maps to Subject, due date maps to ActivityDate, status maps to Status (Not Started, In Progress, Completed), and priority maps to Priority. Assigned owner resolves via email match to Salesforce User. Task body or description maps to Description. Recurrence rules from Cordis tasks do not transfer; we flag recurring tasks and document the pattern for the customer's admin to reconfigure in Salesforce Flow after migration.
Cordis CRM
Document
Salesforce Sales Cloud
ContentVersion + ContentDocumentLink
1:1Cordis CRM documents attached to Contact, Company, or Deal records map to Salesforce ContentVersion (file content) and ContentDocumentLink (relationship). The document title maps to Title on ContentVersion and the file extension maps to FileType. ContentDocument is created automatically when ContentVersion is inserted. We link each ContentDocument to the parent record (Contact, Account, or Opportunity) via ContentDocumentLink with link type EntityPermission. Version history is not guaranteed in the Cordis export; we migrate the latest version and flag multi-version documents so the customer can decide whether to restore earlier versions manually post-migration.
Cordis CRM
Attachment
Salesforce Sales Cloud
ContentVersion + ContentDocumentLink
1:1Cordis CRM file attachments linked to Contact, Company, or Deal records map to Salesforce ContentVersion and ContentDocumentLink following the same pattern as document migration. We preserve the original filename in Title and the file extension in FileType. Attachments without a recognized parent record go into a holding queue for the customer's admin to assign before finalizing the migration.
Cordis CRM
Campaign
Salesforce Sales Cloud
Campaign
1:1Cordis CRM Campaigns map to Salesforce Campaign. Campaign name maps to Name, start date maps to StartDate, end date maps to EndDate, status maps to IsActive, and budgeted cost maps to BudgetedCost. We create the Campaign in Salesforce before importing membership so that the CampaignId is available for ContentDocumentLink resolution on the member records.
Cordis CRM
Campaign Member
Salesforce Sales Cloud
CampaignMember
1:1Cordis CRM campaign membership records map to Salesforce CampaignMember. The contact or prospect maps to either Salesforce ContactId (if the contact was migrated as Contact) or LeadId (if split to Lead). CampaignMember Status maps from Cordis engagement status (Responded, Sent, Open). We resolve CampaignMember records after Contacts and Leads are fully imported and reconciled, using the cordis_original_id__c cross-reference field to match the correct parent.
Cordis CRM
Owner
Salesforce Sales Cloud
User
1:1Cordis CRM owner references on Contact, Company, Deal, Task, and Campaign records map to Salesforce User via email matching. We extract every distinct owner ID from the export file, match by email address against the destination Salesforce org's User table, and build an owner mapping table. Any Cordis owner without a matching Salesforce User goes to a reconciliation queue; the customer's Salesforce admin provisions missing Users before record import continues. Owner resolution must complete before any phase that assigns OwnerId.
Cordis CRM
Custom Fields
Salesforce Sales Cloud
Custom Fields (__c)
lossyCordis CRM custom fields are not publicly documented in a schema reference. During scoping, we survey the customer's Cordis instance via screen share to identify all active custom fields, their data types, and the records they are attached to. Each custom field is then pre-created in Salesforce with the equivalent data type (text field for strings, number field for integers, date field for dates, picklist for enums). The __c suffix follows Salesforce naming convention. We map Cordis custom field names to Salesforce API field names and preserve the mapping in our transform configuration for the migration run.
Cordis CRM
Engagement Activity (Call, Email, Meeting)
Salesforce Sales Cloud
Task + Event + EmailMessage
1:1Cordis CRM engagement records (calls, emails, meetings) linked to contacts map to Salesforce Task (for calls and generic activities), Event (for meetings), and EmailMessage (for emails). Call duration and disposition migrate to custom Task fields. Email body and headers migrate to EmailMessage linked to a Task on the timeline. Meeting start and end times migrate to Event StartDateTime and EndDateTime. The WhoId on the Task or Event points to the migrated Contact or Lead; the WhatId points to the related Account or Opportunity. We use the Bulk API 2.0 for large engagement volumes and resolve parent-record IDs at migration time.
Cordis CRM
Custom Objects
Salesforce Sales Cloud
Custom Object (__c)
1:1If Cordis CRM contains custom object types beyond the standard Contact, Company, and Deal, we migrate them to Salesforce custom objects following the same __c naming convention. We pre-create the destination schema in Salesforce including all custom fields, lookup relationships to standard objects (Account, Contact, Opportunity), and validation rules before any data import. The customer identifies custom objects during scoping; if Cordis does not expose custom object definitions publicly, we request the export file structure during the data audit phase and infer the schema from the export columns.
| Cordis CRM | Salesforce Sales Cloud | Compatibility | |
|---|---|---|---|
| Contact | Contact1:1 | Fully supported | |
| Contact (unqualified prospect) | Lead1:many | Fully supported | |
| Company | Account1:1 | Fully supported | |
| Pipeline (Deal) | Opportunity1:1 | Fully supported | |
| Deal Stage | Opportunity Stagelossy | Fully supported | |
| Task | Task1:1 | Fully supported | |
| Document | ContentVersion + ContentDocumentLink1:1 | Fully supported | |
| Attachment | ContentVersion + ContentDocumentLink1:1 | Fully supported | |
| Campaign | Campaign1:1 | Fully supported | |
| Campaign Member | CampaignMember1:1 | Fully supported | |
| Owner | User1:1 | Fully supported | |
| Custom Fields | Custom Fields (__c)lossy | Mapping required | |
| Engagement Activity (Call, Email, Meeting) | Task + Event + EmailMessage1:1 | Fully supported | |
| Custom Objects | Custom Object (__c)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.
Cordis CRM gotchas
No documented public API for self-service bulk export
Google Workspace integration does not auto-export email history
Document version history may not export cleanly
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
Scoping and export coordination
We audit the customer's Cordis CRM instance via screen-share to identify all active objects, custom fields, pipeline configurations, and campaign structures. Because Cordis has no documented public API, we coordinate with the customer to request a scoped data export file (CSV format) covering Contacts, Companies, Deals, Tasks, Documents, Attachments, Campaigns, and Campaign Members. We survey the instance manually to build the custom field inventory. The scoping output is a written migration scope, a Cordis-to-Salesforce object mapping table, and an export request ticket submitted to Cordis support if vendor-assisted export is required.
Destination schema design and Sandbox provisioning
We design the Salesforce destination schema in a Sandbox org. This includes provisioning custom fields (with __c suffix matched to Cordis custom field names and types), Opportunity Record Types and Sales Processes for each Cordis pipeline, Page Layouts per Record Type, and the Lead-Contact split rule approved by the customer's admin. We deploy schema via Salesforce metadata API into the Sandbox and validate field-level security settings for the migration user. Schema must be finalized and signed off before any data loads begin.
Data normalization and transform build
We normalize the Cordis CSV export into Salesforce-compatible CSV with typed fields, date formats (ISO 8601), and picklist values mapped to Salesforce enums. We build a transform configuration that maps Cordis field names to Salesforce API field names, resolves company-name to AccountId for Contact records, and applies the Lead-Contact split rule. Owner resolution uses email matching to the destination Salesforce User table. Any records with missing required fields go to a validation queue for the customer's admin to correct before the next phase.
Sandbox migration and reconciliation
We run a full migration into a Salesforce Sandbox (Full Copy or Partial Copy) using the production-like data volume. The customer's RevOps or admin lead reconciles record counts (Contacts in, Leads in, Accounts in, Opportunities in, Tasks in), spot-checks 25-50 random records against the Cordis source, and validates that document ContentDocumentLinks resolve to the correct parent records. Any mapping corrections happen in the Sandbox transform configuration. The customer signs off the Sandbox migration before production migration begins.
Production migration in dependency order
We run production migration in record-dependency order. Accounts are imported first (from Cordis Companies). Contacts and Leads are imported second with AccountId resolved. Opportunities are imported third with AccountId, OwnerId, and RecordTypeId resolved. Tasks, Events, and EmailMessage records are imported via Bulk API 2.0 with batch chunking (150,000 rows per batch) and parent-record lookup resolution. Documents and Attachments migrate as ContentVersion with ContentDocumentLink to the parent record. Campaigns and CampaignMembers import last. Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and handoff documentation
We freeze Cordis CRM writes during the cutover window, run a final delta migration of any records modified during the migration window, and then enable Salesforce as the system of record. We deliver a written Workflow and Automation Inventory document (listing every Cordis task automation requiring rebuild in Salesforce Flow), a Report and Dashboard mapping document, and a Custom Field Reference sheet. We support a one-week hypercare window for reconciliation issues. We do not rebuild Cordis automations as Salesforce Flow inside the migration scope; that is a separate engagement or an internal admin task.
Platform deep dives
Cordis CRM
Source
Strengths
Weaknesses
Salesforce Sales Cloud
Destination
Strengths
Weaknesses
Complexity grading
Moderate CRM migration. 4 of 8 objects need a mapping; the rest are 1:1.
Overall complexity
Moderate migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Cordis CRM and Salesforce Sales Cloud.
Object compatibility
4 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
Cordis CRM: Not applicable — no public API..
Data volume sensitivity
Cordis 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 Cordis CRM to Salesforce Sales Cloud migration scoping. Not seeing yours? Book a call.
Walk through your Cordis 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 Cordis 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.