CRM migration
Field-level mapping, validation, and rollback between Cordial and Microsoft Dynamics 365 Sales . We move data and schema; workflows are rebuilt natively in Microsoft Dynamics 365 Sales .
Cordial
Source
Microsoft Dynamics 365 Sales
Destination
Compatibility
6 of 8
objects map 1:1 between Cordial and Microsoft Dynamics 365 Sales .
Complexity
BStandard
Timeline
2-4 weeks
Overview
Moving from Cordial to Microsoft Microsoft Dynamics 365 Sales is a structural migration from a message-centric JSON data model to a relational sales CRM. Cordial organizes data into flexible collections (Contacts, Products, Channels) with unlimited custom contact attributes; Microsoft Dynamics 365 Sales uses typed Account, Contact, Lead, and Opportunity objects with governed custom fields. We extract Cordial contacts via the REST API, normalize array-type attributes (tags, behavioral events, channel preferences) to Dynamics-compatible formats, and map product variants to Product2 records with Pricebook entries. Order data, which Cordial stores as custom attributes or behavioral events rather than native objects, requires careful schema discovery and transformation before import. Cordial's segment logic and automation workflows have no export API, so we deliver a written inventory for the customer's admin to rebuild in Microsoft Dynamics 365 Sales or Power Automate post-migration.
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
Cordial platform overview
Scorecard, SWOT, gotchas, and pricing for Cordial.
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 Cordial 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.
Cordial
Contact
Microsoft Dynamics 365 Sales
Contact
1:1Cordial Contacts map to Microsoft Dynamics 365 Sales Contact. Standard fields (email, firstname, lastname, phone) migrate directly. Every custom contact attribute is inventoried during discovery: string and number attributes map to typed Dynamics custom fields (new Text, Number, or Decimal fields in the target organization); array-type attributes (e.g. favorite_colors, tag lists, behavioral history) are normalized to delimited strings in a custom field or to a related custom entity, per the normalization strategy agreed during scoping. The Contact's _channel_preferences.email and SMS opt-in status map to HasOptedOutOfEmail and a custom SMS_opt_in__c boolean.
Cordial
List
Microsoft Dynamics 365 Sales
Contact (with list membership flag)
1:1Cordial Lists are static contact collections. We export list membership as a boolean custom field per list (e.g. vip_customer__c = true) or as a lookup table mapping contact email to list name, depending on how many lists exist and whether Dynamics field limits are a concern. If more than 20 lists exist, we use a related CordialListMembership__c custom entity with a Contact lookup to avoid hitting the per-object custom field ceiling.
Cordial
Product
Microsoft Dynamics 365 Sales
Product2 + PricebookEntry
1:manyCordial Products store variants as nested JSON arrays under a single record (with fields like color, size, material per SKU). We unpack the variant array and generate one Product2 record per SKU, preserving the parent product ID as a custom field parent_product_id__c for relationship reconstruction in Dynamics. Each Product2 gets a Standard Pricebook entry created at import time. ProductCode maps from Cordial's productID field.
Cordial
Channel
Microsoft Dynamics 365 Sales
Contact (channel preference fields)
1:1Cordial Channels (email, SMS, push) are stored as sub-attributes on contacts indicating opt-in status and preferences per channel. We export these as separate boolean or string fields on the Dynamics Contact: email_opt_in__c, sms_opt_in__c, push_opt_in__c. Channel-level preference timestamps (when the contact last gave consent) migrate to consent datetime fields if tracked in Cordial.
Cordial
Event / Contact Activity
Microsoft Dynamics 365 Sales
Task
1:1Cordial behavioral events (opens, clicks, purchases, custom events) export via the Contact Activity Export API with time-range and event-type filters. We map purchase events to Task records with custom fields event_type__c = 'purchase', event_data__c carrying the JSON payload, and ActivityDate set to the original Cordial timestamp. Opens and clicks map to Task records with event_type__c values for reporting segmentation. Large event histories (over 100,000 records) are chunked and loaded via the Dynamics 365 Data Export Service or Azure Data Factory.
Cordial
Order (custom attributes)
Microsoft Dynamics 365 Sales
SalesOrder or custom Order entity
lossyOrders are not a native first-class object in Cordial's core schema but are often stored as custom contact attributes or linked via purchase event data. We identify order-related attributes and custom event types during schema discovery, extract order records, and map them to Microsoft Dynamics 365 Sales Order (SalesOrder) if the destination org has the Sales module, or to a custom Order__c entity with line items if the edition does not include Order management. Order date, total amount, currency, and status are mapped to the corresponding Dynamics fields.
Cordial
Segment
Microsoft Dynamics 365 Sales
Custom field or Contact filtering view
1:1Cordial Segments are dynamic rules-based audiences built from contact attributes and event conditions. We export segment definitions as rule summaries in a written inventory document and flag which contacts currently match each segment by writing the segment name to a custom field (e.g. segment_membership__c) on the Contact record. Segment rules themselves cannot be exported via API and require rebuild in Microsoft Dynamics 365 Sales via Advanced Find queries, Power Automate flows, or a Dynamics marketing module.
Cordial
Owner
Microsoft Dynamics 365 Sales
User
1:1Cordial Owners map to Dynamics 365 User records by email match. Any Cordial Owner without a matching Dynamics User goes to a reconciliation queue for the customer's admin to provision before record import resumes. Owner-based routing and team assignments migrate as OwnerId references on Contact, Account, and Opportunity records.
| Cordial | Microsoft Dynamics 365 Sales | Compatibility | |
|---|---|---|---|
| Contact | Contact1:1 | Fully supported | |
| List | Contact (with list membership flag)1:1 | Fully supported | |
| Product | Product2 + PricebookEntry1:many | Fully supported | |
| Channel | Contact (channel preference fields)1:1 | Fully supported | |
| Event / Contact Activity | Task1:1 | Fully supported | |
| Order (custom attributes) | SalesOrder or custom Order entitylossy | Fully supported | |
| Segment | Custom field or Contact filtering view1:1 | Fully supported | |
| Owner | User1: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.
Cordial gotchas
Message experiment results are not API-exportable
Rate limits are method- and endpoint-specific
Custom contact attribute arrays require schema normalization
Products collection uses nested JSON with variants
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
Schema discovery and normalization strategy
We audit the Cordial account across collections (Contacts, Products, Lists, Channels, Events), custom attribute types, and product variant structure. We run a schema extraction pass to inventory every custom field, array-type attribute, order-related attribute, and event type. We deliver a written field mapping document that specifies the Dynamics 365 custom fields to pre-create, the normalization strategy for array attributes, and the order reconstruction logic before any data moves.
Dynamics 365 schema pre-creation
We pre-create the destination schema in Microsoft Dynamics 365 Sales : custom fields on Contact (channel opt-in fields, segment membership fields, normalized attribute fields), custom fields on Product2 (parent_product_id__c, variant attributes), the Pricebook, and any custom Order entity. Schema is deployed into the target org via the Dynamics 365 Web API or a data migration sandbox before production migration begins. We coordinate with the customer's Dynamics admin to provision the migration user's security role with create-read-update permissions on the target entities.
Product catalog extraction and variant unpacking
We export the Cordial Products collection via the REST API. For each product, we parse the variants array, unpack each SKU into a separate Product2 row, create the Standard Pricebook entries, and preserve the parent product reference in parent_product_id__c. If the customer prefers to keep variants collapsed, we create one Product2 per parent product and store variant data as a JSON custom field. Price and currency fields map from Cordial's standard price fields.
Contact migration with channel and list normalization
We export Cordial Contacts via the REST API in batches, applying the normalization strategy agreed in step one. Channel preferences become boolean opt-in fields. List membership becomes per-list boolean fields or a related CordialListMembership__c entity. Array-type attributes become delimited strings in custom text fields. Owner resolution maps by email to the Dynamics User table. Each batch is reconciled against the source count before the next batch begins.
Order reconstruction and event history migration
We extract order-related custom attributes and purchase event data identified during schema discovery, reconstruct order records, and import them to Dynamics SalesOrder or the custom Order entity. Behavioral event history (opens, clicks, custom events) migrates to Task records with custom event_type__c fields and ActivityDate preserving the original timestamp. Large event histories use chunked API writes with rate-limit handling.
Cutover, validation, and automation rebuild handoff
We freeze Cordial writes during cutover, run 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 the Segment and Program inventory document to the customer's admin team. We support a one-week hypercare window where we resolve reconciliation issues. We do not rebuild Cordial Programs as Microsoft Dynamics 365 Sales workflows or Power Automate flows inside the migration scope; that is a separate engagement.
Platform deep dives
Cordial
Source
Strengths
Weaknesses
Microsoft Dynamics 365 Sales
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between Cordial and Microsoft Dynamics 365 Sales .
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Cordial and Microsoft Dynamics 365 Sales .
Object compatibility
All 8 core objects map 1:1 between Cordial and Microsoft Dynamics 365 Sales .
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
Cordial: Method- and endpoint-specific limits; default limits vary per tier; X-Rate-Limit-* response headers exposed; Retry-After header for backoff; limits are customizable per customer contract.
Data volume sensitivity
Cordial 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 Cordial to Microsoft Dynamics 365 Sales migration scoping. Not seeing yours? Book a call.
Walk through your Cordial 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 Cordial
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.