CRM migration
Field-level mapping, validation, and rollback between Cordial and HubSpot. We move data and schema; workflows are rebuilt natively in HubSpot.
Cordial
Source
HubSpot
Destination
Compatibility
10 of 10
objects map 1:1 between Cordial and HubSpot.
Complexity
BStandard
Timeline
48–72 hours
Overview
Cordial organizes contacts around messaging attributes: subscription status flags, engagement counters (opens, clicks), and behavioral properties that drive campaign targeting. HubSpot organizes contacts around lifecycle stages and deal pipelines, with a separate product catalog and custom objects for non-standard data. The migration carries every contact, company, product record, and engagement event through HubSpot's REST and Bulk APIs, with subscription flags mapped to HubSpot's opt-in model and custom collections mapped to HubSpot custom objects. Subscription preferences, journey definitions, and any custom data collections stored in Cordial's flexible JSON collections do not migrate automatically — those require manual configuration in HubSpot after data lands. FlitStack AI sequences the migration so foreign-key relationships resolve correctly: companies first, then contacts, then products and deals, then engagement history as a final pass. The API-based approach means no data is written to Cordial during migration, allowing your team to continue operations in Cordial while HubSpot is populated with the cutover snapshot and a delta capture window covers any mid-migration changes.
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 Cordial object lands in HubSpot, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
Cordial
Contact
HubSpot
Contact
1:1Cordial contacts map directly to HubSpot contacts. Subscription status flags (subscribed, unsubscribed, bounced, complained) are mapped to HubSpot's email_events timeline and a custom Opt_Status__c field. Cordial's cdate and lmdate timestamps are preserved as custom datetime fields so reporting continuity is maintained.
Cordial
Organization
HubSpot
Company
1:1Cordial organizations map to HubSpot companies using a direct field mapping. Cordial's domain field maps to HubSpot's domain name on the company record. Parent-child organizational hierarchies in Cordial map to HubSpot's parent company lookup where those relationships exist, preserving the organizational structure during migration. If multiple parent-child levels exist in Cordial, each level is translated to the corresponding HubSpot parent_company_id relationship.
Cordial
Product
HubSpot
Product
1:1Cordial products with nested variant arrays require flattening for HubSpot's product-variant model. Each Cordial product variant becomes a HubSpot child product linked via the parent_product_id property. Cordial product attributes map to HubSpot custom product fields; custom attributes not supported natively are stored as JSON in a custom field.
Cordial
Engagement events (opens, clicks, sends)
HubSpot
Contact engagement timeline
1:1Cordial open, click, and send events migrate as HubSpot engagement records on the contact timeline. Each event type becomes a logged engagement with the original timestamp, campaign name, and UTM parameters preserved. HubSpot's timeline UI shows the latest engagement by default; full event history is stored in custom fields for reference.
Cordial
Lists
HubSpot
HubSpot Lists
1:1Cordial lists map to HubSpot static lists. Dynamic lists in Cordial — those built with filter rules — do not automatically become HubSpot smart lists; the filter logic is exported as a reference document and the smart list criteria are rebuilt in HubSpot manually after migration.
Cordial
Custom collections
HubSpot
Custom Object
1:1Cordial user-defined collections map to HubSpot custom objects. Each collection name becomes a custom object type in HubSpot. Collections containing nested arrays are processed: the array field is either stored as a JSON-stringified string property or split into multiple single-value properties depending on the schema complexity — this is decided during the schema audit phase.
Cordial
Subscription preferences
HubSpot
Custom field on Contact
1:1Cordial's granular subscription flags for multiple channels (e.g., sms_subscribed, email_subscribed, push_notifications, in_app_notifications) map to HubSpot custom contact properties. Each Cordial subscription dimension becomes a dedicated custom property on the HubSpot contact. The built-in HubSpot marketing email subscription property is set based on Cordial's primary email subscription flag. Detailed preference flags and channel-specific opt-out timestamps require custom properties created before migration begins.
Cordial
Channels
HubSpot
Custom properties on Product
1:1Cordial channel data attached to products (e.g., channel_used: email, sms, push) maps to HubSpot product custom fields. If a Cordial product is associated with multiple channels, each association is stored as a separate custom field value on the HubSpot product record.
Cordial
Journey events
HubSpot
Contact engagement timeline / custom fields
1:1Cordial journey events (step entered, goal achieved, exit) are mapped to HubSpot contact engagement records. The journey name and step name are stored in engagement properties. For high-frequency event logs, the raw events are summarized and stored in a custom text field on the contact rather than as individual engagement records.
Cordial
Segments
HubSpot
HubSpot Lists
1:1Cordial segment definitions migrate as HubSpot static lists populated with the segment's current member contacts. The segment rule logic itself — the conditions that defined membership — is exported as a JSON rule object for reference during manual rebuild of HubSpot smart lists.
| Cordial | HubSpot | Compatibility | |
|---|---|---|---|
| Contact | Contact1:1 | Fully supported | |
| Organization | Company1:1 | Fully supported | |
| Product | Product1:1 | Fully supported | |
| Engagement events (opens, clicks, sends) | Contact engagement timeline1:1 | Fully supported | |
| Lists | HubSpot Lists1:1 | Fully supported | |
| Custom collections | Custom Object1:1 | Fully supported | |
| Subscription preferences | Custom field on Contact1:1 | Fully supported | |
| Channels | Custom properties on Product1:1 | Mapping required | |
| Journey events | Contact engagement timeline / custom fields1:1 | Fully supported | |
| Segments | HubSpot Lists1: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
HubSpot gotchas
Marketing Contacts billing model is migration-critical
Feature tier gating is not visible until onboarding
Mandatory onboarding fees inflate year-one cost
HubSpot CSV importer cannot migrate engagements or attachments
Custom objects require Enterprise and a pre-existing schema
Pair-specific challenges
Migration approach
Audit Cordial data and document the mapping plan
We export a full inventory of Cordial contacts, organizations, products, lists, custom collections, and journey event schemas via the Cordial API. The audit phase produces a mapping document that specifies which Cordial collections map to which HubSpot objects, which fields require custom properties, and how nested JSON in product variants and custom collections will be handled. This document is reviewed with your team before any data moves.
Create HubSpot custom properties and custom objects
Before migration data lands, we create the HubSpot custom contact properties (Opt_Status__c, Cordial_Create_Date__c, Lifetime_Email_Opens__c, Lifetime_Email_Clicks__c, and others identified in the audit), product custom fields for extended attributes, and any custom objects required for Cordial collections. If HubSpot Enterprise is not active, custom objects are not available — we discuss the alternative approach using JSON-stringified custom properties during the scoping call. All custom field names and data types are confirmed with your team before creation to ensure alignment with downstream reporting needs.
Run a sample migration with field-level diff
A representative slice of 200–500 records migrates first: contacts across different subscription states, organizations with parent-child relationships, products including variants, and a sample of engagement events. We generate a field-level diff report showing every source field, its mapped HubSpot field, the value in Cordial, and the value in HubSpot. You review the diff; we adjust the mapping plan based on your feedback before committing to the full run.
Execute full migration with delta capture and validation
The full migration runs through HubSpot's Contacts API and Bulk API endpoints, loading companies first, then contacts, then products, then custom object records. Engagement events are loaded as a final pass. A cutover snapshot captures all records as of the go-live moment, and a delta window of 24–48 hours captures any Cordial changes made during cutover. We run record-count validation, field-completeness checks, and spot-check subscription status values before sign-off.
Export automation references and close out
We export Cordial list definitions, segment filter logic, and journey step names as JSON reference documents for your HubSpot team to use when rebuilding smart lists and workflows. Cordial's automation logic — journey conditions, trigger events, and audience rules — is not migratable; these documents give your team a structural blueprint for HubSpot Workflows. We delete the sample migration records and provide a post-migration handoff document listing any manual steps remaining, such as enabling the Account Contact Relationships beta feature for secondary company associations.
Platform deep dives
Cordial
Source
Strengths
Weaknesses
HubSpot
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 Cordial and HubSpot.
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
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 HubSpot migration scoping. Not seeing yours? Book a call.
Walk through your Cordial to HubSpot 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 HubSpot
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.