CRM migration

Migrate from Cordial to Salesforce Sales Cloud

Field-level mapping, validation, and rollback between Cordial and Salesforce Sales Cloud. We move data and schema; workflows are rebuilt natively in Salesforce Sales Cloud.

Cordial logo

Cordial

Source

Salesforce Sales Cloud

Destination

Salesforce Sales Cloud logo

Compatibility

69%

9 of 13

objects map 1:1 between Cordial and Salesforce Sales Cloud.

Complexity

BStandard

Timeline

4-8 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from Cordial to Salesforce Sales Cloud is a schema-translation migration, not a straight record copy. Cordial organizes data into flexible JSON-based collections where contact attributes, channel preferences, and product variants are stored as flattened properties or nested arrays; Salesforce expects typed fields, explicit Account-Contact relationships, and a standard product catalog. We normalize Cordial's custom contact attributes (including array-type fields like tag lists and behavioral history) into Salesforce custom fields, reconstruct order history from Cordial behavioral event data, and map channel opt-in status to HasOptedOutOfEmail and CampaignMember Status. Cordial Products with nested variant JSON (SKU, color, size) are unpacked into Salesforce Product2 records with one SKU per row. Automation Programs, segment definitions, and message experiment results do not migrate via API; we document each for manual rebuild in Salesforce Flow and manual export from the Cordial UI before cutover. We use the Salesforce Bulk API for large contact and engagement batches and resolve all Account-Contact-Opportunity parent relationships before record insert.

Field-level fidelity

Every standard and custom field arrives verified.

Schema-aware mapping

AI proposes the map; you confirm before any record moves.

Relationships preserved

Parent–child, lookups, and ownership stay linked.

Full activity history

Calls, emails, meetings — with original timestamps.

Attachments & notes

Documents, uploads, and inline notes move with the record.

Why teams make this switch

Two sides of the same decision

Leaving

Cordial logo

Cordial

What's pushing teams away

  • Some users report that complex reporting and advanced analytics require workarounds, with out-of-the-box dashboards feeling insufficient for deep performance analysis.
  • Scaling large contact databases can introduce latency in segment queries and campaign execution, particularly when audiences exceed several million records.
  • The drag-and-drop interface, while easy to use for basic campaigns, can become limiting when building sophisticated multi-step automation logic that requires more programmatic control.

Choosing

Salesforce Sales Cloud logo

Salesforce Sales Cloud

What's pulling them in

  • The AppExchange marketplace with 5,000+ prebuilt apps gives enterprises integrations for nearly every business workflow without custom development.
  • Native Einstein AI for lead scoring, opportunity insights, and predictive forecasting adds intelligence without a separate platform purchase.
  • Territory management, multi-currency support, and advanced forecasting satisfy the needs of complex B2B sales organizations with structured revenue teams.
  • Slack, Tableau, and CPQ are deeply integrated into the core platform, keeping the sales stack unified for teams already in the Salesforce ecosystem.
  • Organizations with a large, established Salesforce implementation choose it because switching costs — integrations, custom code, trained admins — are prohibitive.

Object mapping

How Cordial objects map to Salesforce Sales Cloud

Each row shows how a Cordial 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.

Cordial

Contact

maps to

Salesforce Sales Cloud

Lead or Contact (split required)

1:many
Fully supported

Cordial Contacts map to Salesforce Lead or Contact depending on whether they represent an unqualified prospect or a known organization member. We use Cordial's channel subscriptions and any lifecycle-related custom attributes to determine the split. Unqualified email subscribers with no associated company map to Salesforce Lead; Contacts with a known organization and purchase history map to Salesforce Contact with AccountId resolved. The original Cordial contact key is preserved in a custom field cordial_contact_key__c for audit and cross-reference.

Cordial

Custom Contact Attributes (string, number, geo)

maps to

Salesforce Sales Cloud

Custom Fields on Lead or Contact

1:1
Fully supported

Cordial's flat attribute schema means each custom contact property (e.g. loyalty_tier, preferred_store, acquisition_source) maps to a Salesforce custom field on the appropriate object. String attributes map to Text(255) or Text Area; numeric attributes map to Number; geo attributes map to geolocation or Address components. We create the destination schema in a Sandbox before migration and validate field types against Salesforce field limits (1,024 character limit per custom text field).

Cordial

Custom Contact Attributes (array type)

maps to

Salesforce Sales Cloud

Multi-Select Picklist or Related List

lossy
Fully supported

Cordial stores some properties as arrays (e.g. favorite_colors, purchase_history, behavioral_tags). Arrays do not have a direct Salesforce equivalent. We normalize them during transformation: multi-value arrays with fewer than 150 unique values become Salesforce Multi-Select Picklist; high-cardinality arrays become a related custom object with a lookup to the parent Contact and one row per array value. The normalization strategy is agreed upon during scoping and documented in the mapping specification.

Cordial

List (static segment membership)

maps to

Salesforce Sales Cloud

Campaign + CampaignMember or Custom List Object

1:1
Fully supported

Cordial Lists are static sub-collections of Contacts. We export list membership as a Campaign with Campaign Type = Marketing List and add each list member as a CampaignMember with Status = Sent. For organizations that prefer a pure list model, we offer a custom Cordial_Lists__c object with a lookup to Contact and a List_Name__c field, which is simpler to query but breaks standard Campaign reporting. The customer chooses during scoping.

Cordial

Segment (dynamic rules-based audience)

maps to

Salesforce Sales Cloud

Campaign with Filter Logic Document

1:1
Fully supported

Cordial Segments are dynamic rule-based audiences built from contact attributes and event conditions. Segment definitions are not API-exportable. We document each active segment with its rules, conditions, and estimated match count at migration time, then deliver a written segment inventory to the customer's admin for manual rebuild as a Salesforce Campaign with filter criteria or as a Flow-based audience query. Segment membership at migration time is captured as a CampaignMember snapshot.

Cordial

Product

maps to

Salesforce Sales Cloud

Product2

1:1
Fully supported

Cordial Products store standard fields (productID, productName, price) plus a variants array containing SKU and attribute pairs. We export products to Salesforce Product2 with ProductCode set to the root product ID, Name set to productName, and Description carrying the full JSON for reference. The variants array is processed separately (see Variant mapping below).

Cordial

Product Variant (nested JSON)

maps to

Salesforce Sales Cloud

Product2 (one per SKU) or Custom Variant Fields

1:many
Fully supported

Cordial product variants (color, size, SKU) are nested JSON arrays under a single product record. We unpack the variant array and generate one Salesforce Product2 record per SKU, preserving the parent Cordial product ID in a custom field parent_product_id__c. Variant-level pricing (if stored) maps to StandardPricebook2 entries per SKU. If the destination prefers a single product with variant attributes, we use Salesforce's Quantity Scheduling or Product Attribute Sets instead, agreed upon during scoping.

Cordial

Channel Preferences (email, SMS opt-in)

maps to

Salesforce Sales Cloud

HasOptedOutOfEmail + Custom Channel Fields

1:1
Fully supported

Cordial Channels are sub-attributes on Contact indicating opt-in status per channel. We map email opt-in to Salesforce HasOptedOutOfEmail (false = opted in, true = opted out, per Salesforce convention). SMS and push opt-in status migrate to custom fields sms_opt_in__c and push_opt_in__c as boolean. Channel-level preferences (e.g. preferred_send_time) become custom fields on Contact.

Cordial

Behavioral Event (custom event type)

maps to

Salesforce Sales Cloud

Task or Custom Event Object

1:1
Fully supported

Cordial supports custom event types stored as behavioral events on contacts (purchases, abandoned_cart, page_view, etc.). Events are not first-class objects in Cordial's API but are accessible via the Contact Activity Export API with time-range filters. We export events as Salesforce Task records with TaskSubtype = Custom and a custom event_type__c field distinguishing the event type. High-volume event types (e.g. page_view) can be summarized and stored as custom fields on Contact rather than individual Task rows to avoid Salesforce storage limits.

Cordial

Order Data (custom attributes or event-linked)

maps to

Salesforce Sales Cloud

Custom Order Object + Order Line Items

lossy
Fully supported

Orders are not a native first-class object in Cordial's core schema but are often stored as custom attributes on contacts or linked via event data with event_type = purchase. We identify order-related attributes (order_id, order_total, order_date) and custom event types during schema discovery, then design a custom Cordial_Order__c object in Salesforce with fields for order_id, contact_lookup__c, order_total__c, order_date__c, and a related Cordial_Order_Item__c object for line items. If order data is sparse, we may store it as custom fields on Contact instead. This is determined during discovery.

Cordial

Message Analytics (opens, clicks, bounces, unsubscribes)

maps to

Salesforce Sales Cloud

CampaignMember Status + Custom Activity Fields

1:1
Fully supported

Cordial Message Analytics (opens, clicks, bounces, unsubscribes) are available via the Message Analytics Export API. We map these to Salesforce CampaignMember Status values (Sent, Delivered, Opened, Clicked, Unsubscribed, Bounced) on the corresponding Campaign. Aggregate metrics (open rate, click rate per campaign) are stored as custom fields on the Campaign for reporting. Message experiment results (A/B test variants and winner data) are NOT exportable via API and must be manually exported from the Cordial UI before migration cutover; we flag this gap during scoping.

Cordial

Program (automation workflow)

maps to

Salesforce Sales Cloud

Flow (documentation only)

1:1
Fully supported

Cordial Programs organize campaigns and automation sequences but are not API-exportable. We document each active Program with its trigger conditions, steps, delays, and channel actions as a written specification. The customer's Salesforce admin or a Salesforce partner rebuilds these as Salesforce Flow (record-triggered, scheduled, or screen flow variants). The program documentation includes a trigger recommendation (e.g. Lead-created, Contact-field-changed, scheduled) and a step-by-step rebuild guide. This is a manual handoff, not an automated migration.

Cordial

Owner (user reference)

maps to

Salesforce Sales Cloud

User

1:1
Fully supported

Cordial Owners are referenced on Contact, Product, and Engagement records. We resolve Owners by email match against the Salesforce destination org's User table. Any Cordial Owner without a matching Salesforce User is held in a reconciliation queue for the customer's admin to provision before record import resumes. OwnerId is required on standard Salesforce objects, so this step gates the production migration.

Gotchas + challenges

What specifically takes care here

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 logo

Cordial gotchas

Medium

Message experiment results are not API-exportable

Medium

Rate limits are method- and endpoint-specific

Low

Custom contact attribute arrays require schema normalization

Low

Products collection uses nested JSON with variants

Salesforce Sales Cloud logo

Salesforce Sales Cloud gotchas

High

Workflow Rules and Process Builder are retired

High

Bulk API batch quota exhaustion during large imports

Medium

Storage overage billing is non-obvious

Medium

Account-Contact many-to-many relationship mapping

Low

Territory and team member import ordering dependencies

Pair-specific challenges

  • Orders are not a native Cordial object

    Cordial does not have a native Orders collection. Order data is stored as custom contact attributes (e.g. last_order_date, lifetime_value) or linked via behavioral events with event_type = purchase. During discovery, we run a schema scan to identify every order-related attribute and event type in the customer's Cordial instance. We then design a custom Cordial_Order__c object in Salesforce and reconstruct order history as individual Order records. If the customer's Cordial instance has no order event type defined, order history cannot be reconstructed and only the current-state custom attributes migrate.

  • Array-type contact attributes require normalization

    Cordial stores some contact properties as arrays (e.g. favorite_colors, behavioral_tags, purchase_history). Salesforce does not support array-type fields. We flatten array fields to delimited strings (pipe-separated within a 255-character Text field) for small-cardinality arrays, or create a related custom object with one row per array value for high-cardinality arrays. We agree on the normalization strategy with the customer during scoping because the choice affects reporting and filter logic in Salesforce.

  • Message experiment results are not API-exportable

    Cordial's Message Analytics Export API explicitly excludes experiment results for batch and automated messages. If the customer has live A/B or multivariate tests in Cordial, we cannot pull those results programmatically. We flag this gap during scoping and recommend exporting experiment data from the Cordial UI before migration cutover. Without a UI export, experiment history (variant names, open rates, click rates, winner determination) will not transfer to Salesforce. We document the active experiments so the customer's team can recreate them in Salesforce Marketing Cloud or Account Engagement.

  • Cordial Programs are not API-exportable

    Cordial's Program logic, triggers, delays, and automation steps are not accessible via API. We cannot migrate automation workflows as code. We deliver a written Program inventory documenting each active program with its trigger conditions, step sequence, delays, channel assignments, and estimated daily volume. The customer's admin rebuilds these as Salesforce Flow or, if the destination includes Marketing Cloud Account Engagement, as Engagement Programs. We do not perform the Flow rebuild inside the migration scope.

  • Salesforce validation rules can block contact import

    Salesforce orgs enforce validation rules (required formats, conditional required fields, picklist whitelists) and field-level security that can reject records during data load. We coordinate with the customer's Salesforce admin to grant the migration user the Bulk API permission set and either temporarily disable validation rules during load or extend them with a migration-context bypass. Skipping this step typically results in 5-25 percent record rejection on the first import pass. We re-run validation after migration completes and restore all rules.

Migration approach

Six steps for a successful Cordial to Salesforce Sales Cloud data migration

  1. Schema discovery and data audit

    We audit the source Cordial instance across contacts, custom attribute schema (including data types and array fields), Products collection with variant structures, Lists, active Segments, behavioral event types, and any order-related custom attributes or event data. We pair this with a Salesforce edition review: Professional ($80/user) covers most migrations; Enterprise ($165/user) is required if the customer needs record-triggered Flow at scale, custom fiscal periods, or advanced territory management. The discovery output is a written migration scope, a source data inventory, and a Salesforce schema design specification.

  2. Destination schema design

    We design the Salesforce destination schema in a Sandbox. This includes custom objects for orders (Cordial_Order__c) and order items (Cordial_Order_Item__c) if order reconstruction is needed, custom fields for array-normalized attributes, multi-select picklists for low-cardinality arrays, a related list custom object for high-cardinality arrays, channel opt-in custom fields (sms_opt_in__c, push_opt_in__c), and a cordial_contact_key__c field for audit. We configure Campaign Record Types for Cordial list membership and message analytics. Schema is deployed via Salesforce metadata API into a Full Copy Sandbox for validation.

  3. Sandbox migration and reconciliation

    We run a full migration into the Salesforce Sandbox using production-like data volumes. The customer's RevOps lead reconciles record counts (Contacts in, Leads in, Accounts in, CampaignMembers in, Tasks in, Custom Order records in), spot-checks 25-50 random records against the Cordial source, and validates the array normalization strategy against reporting requirements. Any mapping corrections happen here before production migration begins. This step typically takes one to two weeks depending on data volume.

  4. Owner reconciliation and User provisioning

    We extract every distinct Cordial Owner referenced on Contact, Product, and Engagement records and match by email against the Salesforce destination org's User table. Owners without a matching Salesforce User are held in a reconciliation queue for the customer's admin to provision before record import resumes. Salesforce requires OwnerId on most standard objects, so this step gates the production migration. We also validate that the migration user has the correct permission set and Bulk API access.

  5. Production migration in dependency order

    We run production migration in record-dependency order: Accounts (from Cordial organization data if present), Users (validated), Leads and Contacts (with AccountId resolved and array normalization applied), Products and Pricebook entries (with variants unpacked), Campaign records (one per Cordial List), CampaignMembers (list membership), Custom Order records (reconstructed from event data), Tasks (behavioral events), and finally custom objects. Each phase emits a row-count reconciliation report before the next phase begins. We use the Salesforce Bulk API 2.0 for large batches with exponential backoff.

  6. Cutover, validation, and Program inventory handoff

    We freeze Cordial writes during cutover, run a final delta migration of any records modified during the migration window, then enable Salesforce as the system of record. We deliver the Cordial Program inventory document to the customer's admin team for Flow rebuild. We deliver the message experiment export checklist for UI-based export before cutover. We support a one-week hypercare window where we resolve any reconciliation issues. We do not rebuild Cordial Programs as Salesforce Flow inside the migration scope; that is a separate engagement.

Platform deep dives

Context on both ends of the pair

Cordial logo

Cordial

Source

Strengths

  • Flexible JSON-based data model accommodating unlimited custom contact attributes without schema migration overhead.
  • Drag-and-drop Sculpt block editor for rapid email production without requiring developer resources.
  • Product-centric architecture treating SKUs, variants, and catalog data as native objects for personalization.
  • AI agents introduced in 2026 for automated email production and data intelligence workflows.
  • SFTP, AWS S3, and Google Cloud Storage integration for automated data export workflows.

Weaknesses

  • Message experiment results are explicitly not available via the export API, requiring manual UI-based export for A/B test data.
  • Reporting and analytics dashboards are described as insufficient by some users for deep performance analysis, often requiring supplemental BI tooling.
  • Segment logic and automation workflows lack a public export API, making migration of campaign automation a manual rebuild exercise.
  • Order data is not a native first-class object, often stored as custom attributes or behavioral events, requiring careful schema discovery before migration.
Salesforce Sales Cloud logo

Salesforce Sales Cloud

Destination

Strengths

  • Largest enterprise app ecosystem in CRM with 5,000+ AppExchange integrations covering nearly every vertical workflow.
  • Native Einstein AI delivers lead scoring, opportunity insights, and predictive forecasting without a third-party layer.
  • Advanced territory management, multi-currency, and flexible forecasting satisfy complex B2B revenue structures.
  • Deep platform extensibility: Custom Objects, Apex, Flow, and the Metadata API allow full schema customization.
  • Well-documented REST API, Bulk API, and Composite API with published rate limits for programmatic migration.

Weaknesses

  • Pricing model is layered and opaque in practice: per-seat fees plus storage overages, add-on subscriptions, and annual uplifts compound to 30–40% above sticker price.
  • Workflow Rules and Process Builder are deprecated, forcing all orgs onto Salesforce Flow — a migration task that catches many teams by surprise.
  • Steep administrative complexity: meaningful configuration requires a dedicated Salesforce admin or consultant.
  • API rate limits are edition-gated (100k/day base for Enterprise) and easily exhausted by large historical imports without throttling.
  • Data export is exportable via Data Loader but preserving relationship integrity across 30+ objects requires careful ETL sequencing.

Complexity grading

How hard is this migration?

Standard CRM migration. 1 of 8 objects need a mapping; the rest are 1:1.

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across Cordial and Salesforce Sales Cloud.

  • Object compatibility

    B

    1 of 8 objects need a mapping; the rest are 1:1.

  • Field mapping clarity

    C

    Field mapping is derived from defaults — final spec confirmed during the sample migration.

  • Timeline complexity

    B

    8-object category — typical timelines run 2–7 days end-to-end.

  • API constraints

    B

    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

    A

    Cordial exposes a bulk API — large-volume migrations stream efficiently.

Estimator

Estimate your Cordial to Salesforce Sales Cloud migration cost

Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.

Step 1

What are you migrating?

Pick a category, then your source and destination platforms.

Category

FAQ

Frequently asked questions about Cordial to Salesforce Sales Cloud data migrations

Answers to the questions buyers ask most during Cordial to Salesforce Sales Cloud migration scoping. Not seeing yours? Book a call.

Can't find your answer?

Walk through your Cordial to Salesforce Sales Cloud migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Most migrations land between four and eight weeks for accounts under 50,000 contacts and no order history reconstruction. Migrations with large contact volumes (over 500,000), behavioral event history, complex product variant catalogs (hundreds of SKUs with multi-level variants), or custom order-event types move to ten to eighteen weeks because of variant unpacking, event normalization, and custom order object design. The discovery phase typically adds one to two weeks regardless of migration size.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Cordial.
Land in Salesforce Sales Cloud, intact.

Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.

Accuracy guarantee Rollback included Quote in 1 business day