CRM migration

Migrate from Cordial to HubSpot

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

Cordial logo

Cordial

Source

HubSpot

Destination

HubSpot logo

Compatibility

100%

10 of 10

objects map 1:1 between Cordial and HubSpot.

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

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.

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

HubSpot logo

HubSpot

What's pulling them in

  • Lowest barrier to entry of any major CRM — the free tier with unlimited contacts lets teams validate fit before committing to a paid plan, according to G2 and Capterra reviewers.
  • Native integration between the CRM and sales engagement tools (sequences, email tracking, dialer) means no separate sync configuration, a theme across G2 Sales Hub reviews.
  • Pipeline visualization, deal tracking, and automated workflows are consistently praised as intuitive and easy to set up without developer involvement.
  • Strong onboarding for new team members — reviewers on Capterra and G2 highlight how quickly new reps become productive without formal training.
  • The HubSpot platform ecosystem (Marketing, Sales, Service, CMS hubs) allows growing companies to consolidate tools without building new integrations.

Object mapping

How Cordial objects map to HubSpot

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

maps to

HubSpot

Contact

1:1
Fully supported

Cordial 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

maps to

HubSpot

Company

1:1
Fully supported

Cordial 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

maps to

HubSpot

Product

1:1
Fully supported

Cordial 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)

maps to

HubSpot

Contact engagement timeline

1:1
Fully supported

Cordial 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

maps to

HubSpot

HubSpot Lists

1:1
Fully supported

Cordial 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

maps to

HubSpot

Custom Object

1:1
Fully supported

Cordial 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

maps to

HubSpot

Custom field on Contact

1:1
Fully supported

Cordial'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

maps to

HubSpot

Custom properties on Product

1:1
Mapping required

Cordial 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

maps to

HubSpot

Contact engagement timeline / custom fields

1:1
Fully supported

Cordial 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

maps to

HubSpot

HubSpot Lists

1:1
Fully supported

Cordial 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.

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

HubSpot logo

HubSpot gotchas

High

Marketing Contacts billing model is migration-critical

High

Feature tier gating is not visible until onboarding

Medium

Mandatory onboarding fees inflate year-one cost

Medium

HubSpot CSV importer cannot migrate engagements or attachments

Medium

Custom objects require Enterprise and a pre-existing schema

Pair-specific challenges

  • Subscription status granularity is reduced in HubSpot's native model

    Cordial tracks email subscription across multiple dimensions: unsubscribed, bounced, complained, and the date of each transition. HubSpot's built-in subscription property is a single toggle. We map Cordial's detailed flags to a custom contact property (Opt_Status__c) and preserve the unsubscribe timestamp in a separate custom datetime field. The built-in HubSpot subscription toggle is set from Cordial's primary email subscription status. Without the custom field, HubSpot reports will only show the current opt-in/out state without the historical reason code.

  • Product variants require flattening from Cordial's nested JSON to HubSpot's child-product model

    Cordial stores product variants as a nested array within the product object (variants: [{sku, attr: {color, size}, price}]). HubSpot Products model variants as separate child product records linked to a parent product via the parent_product_id property. Each Cordial product variant becomes a distinct HubSpot product with its own SKU, and the parent-child relationship is created via HubSpot's product variant linkage. Products with deeply nested or multi-level variant structures require pre-migration schema planning to determine the correct hierarchy mapping.

  • Custom collections with nested arrays need schema preprocessing

    Cordial's flexible collection schema supports arrays of mixed-type values and deeply nested objects stored as JSON in the collection document. HubSpot custom object properties do not support array-type fields natively. We preprocess these schemas during the migration audit: flat arrays are mapped to single-value properties, and nested arrays are either split into separate properties or JSON-stringified into a custom text field. The decision is made per collection during the schema review and documented in the migration plan before data is loaded.

  • Engagement history must be summarized rather than imported event-by-event

    Cordial open and click events are stored as individual activity records per contact, each with its own timestamp, campaign name, and UTM data. A highly-engaged Cordial contact can have hundreds of individual event records. HubSpot's engagement timeline shows activity summaries rather than hundreds of individual logged events. We migrate a configurable window of recent engagement events as individual HubSpot engagement records and summarize older engagement data into lifetime counters stored in custom contact fields. The cutoff window is configurable and agreed upon before the migration run.

  • N:N contact-to-organization links collapse to a primary company in HubSpot

    Cordial allows a single contact to be associated with multiple organizations simultaneously. HubSpot contacts have a single primary associated company and use Account Contact Relationships (a beta feature) for additional company links. We migrate the most-recently-modified Cordial organization link as the primary HubSpot company association. Secondary organization links are preserved in a custom text field listing all associated company IDs from Cordial. This allows HubSpot admins to manually re-establish additional company associations using Account Contact Relationships after migration if that feature is enabled in their HubSpot account.

Migration approach

Six steps for a successful Cordial to HubSpot data migration

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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

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.
HubSpot logo

HubSpot

Destination

Strengths

  • Genuinely useful free CRM tier with no seat limit on contact records.
  • All-in-one sales engagement layer (sequences, email tracking, calling, dialer) embedded natively in the CRM, eliminating a separate integration.
  • Intuitive interface and fast onboarding for individual reps, per G2 and Capterra reviews.
  • Workflow automation triggers across contacts, deals, and tickets with a visual builder.
  • API coverage for all standard objects including custom objects at Enterprise tier.

Weaknesses

  • Pricing model is contact-based at the marketing layer — importing all records as marketing contacts can multiply the monthly bill by 4×.
  • Feature tier cliffs are frequent surprises: sequences, calling, advanced reporting, and quoting are all gated, often requiring plan upgrades mid-implementation.
  • Mandatory onboarding fees at Professional ($1,500) and Enterprise ($3,500) are not prominently disclosed on the pricing page.
  • API rate limits are restrictive for bulk migration — burst limits of 100-200 req/10sec and search endpoint limits of 4 req/sec require careful job queuing.
  • Custom objects, additional pipelines, and advanced forecasting are Enterprise-only, making cost projections difficult for growing teams.

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 HubSpot.

  • 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 HubSpot 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 HubSpot data migrations

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

Can't find your answer?

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

Book a free 30 minute consultation

Most Cordial-to-HubSpot migrations complete in 48–72 hours for accounts with fewer than 50,000 contacts and a standard product catalog. Larger datasets exceeding 500,000 records, multiple custom collections, or complex nested product variants extend the timeline to 5–7 days. The schema audit and mapping document review are the longest planning steps; the actual data load runs on a predictable clock based on HubSpot API rate limits.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Cordial.
Land in HubSpot, 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