CRM migration

Migrate from Customer.io to HubSpot

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

Customer.io logo

Customer.io

Source

HubSpot

Destination

HubSpot logo

Compatibility

100%

11 of 11

objects map 1:1 between Customer.io and HubSpot.

Complexity

BStandard

Timeline

24–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Customer.io organizes data around people profiles, companies, and behavioral events — it functions as a customer engagement platform rather than a traditional CRM. HubSpot structures data as contacts, companies, deals, and tickets with a property-based field model that uses camelCase naming (lifecycle_stage, createdate, hs_object_id) and a marketing-contact billing flag that distinguishes engaged from non-marketing contacts. The migration carries all Customer.io people and company data into HubSpot contacts and companies, maps custom attributes to HubSpot custom properties, and transfers event history as engagement logs or custom event properties. Custom objects migrate 1:1 to HubSpot custom objects, but deal and ticket equivalents must be created as custom objects in HubSpot since Customer.io has no native deal or ticket model. Workflows, journeys, and campaign logic cannot migrate — FlitStack exports your workflow definitions as a rebuild reference for HubSpot's automation tools. The migration runs via HubSpot's native API and bulk import endpoints, with a delta-pickup window capturing any changes during cutover.

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

Customer.io logo

Customer.io

What's pushing teams away

  • Pricing scales aggressively with profile count, and inactive users still count toward the monthly bill, creating surprises for large user bases.
  • Steep learning curve: workflows and segmentation require developer involvement, making the platform inaccessible for non-technical marketers.
  • No built-in CRM functionality forces teams to maintain a separate CRM and sync it via integration, adding operational overhead.
  • Support response times on the Essentials plan frustrate teams hitting complex setup issues that require expert guidance.
  • Implementation typically takes 4–8 weeks to reach full maturity, including IP warming, event mapping, and workflow replication.

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 Customer.io objects map to HubSpot

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

Customer.io

Person (profile)

maps to

HubSpot

Contact

1:1
Fully supported

Customer.io people map directly to HubSpot contacts. Email serves as the primary identifier for both platforms. Custom traits on the profile become HubSpot custom properties — we create each property in HubSpot's schema before migration and preserve the original attribute values.

Customer.io

Person (segment membership)

maps to

HubSpot

Contact (list membership + custom property)

1:1
Fully supported

Customer.io segment membership is a dynamic filter result, not a static list. We capture segment membership at migration time and write each segment name as a HubSpot custom property (Segment_Membership__c) so you can rebuild equivalent segments in HubSpot using list membership or static lists.

Customer.io

Company

maps to

HubSpot

Company

1:1
Fully supported

Customer.io companies map 1:1 to HubSpot companies. The company identifier (id or external_id from Customer.io) is stored as a custom property for traceability. HubSpot company properties like domain, industry, and employee count map from corresponding Customer.io company attributes. All standard HubSpot company properties receive data where Customer.io provides equivalent attributes.

Customer.io

Person-to-Company association

maps to

HubSpot

Contact-Company association

1:1
Fully supported

Customer.io's person-to-company relationship (identifying which people belong to which company) migrates to HubSpot's contact-company association. HubSpot supports primary and secondary company associations — the primary company from Customer.io becomes the primary association in HubSpot. Multi-company memberships are preserved as secondary associations in HubSpot.

Customer.io

Custom Object (type)

maps to

HubSpot

Custom Object (type)

1:1
Fully supported

Customer.io custom objects (Accounts, Employers, etc.) map 1:1 to HubSpot custom objects. We create the custom object type in HubSpot, map all custom attributes to HubSpot custom properties, and preserve object-to-object relationships using HubSpot's association labels. Each custom object requires schema configuration in HubSpot before migration data is loaded.

Customer.io

Event (track call)

maps to

HubSpot

Engagement log (email/call/meeting) + custom event properties

1:1
Fully supported

Customer.io events are arbitrary behavioral track calls with custom event names and properties. We categorize common event patterns (page_view → logged page view, purchase → deal activity) and map them to HubSpot engagement types where semantically equivalent. Less common events migrate as custom event properties on the contact record for reference and future HubSpot workflow triggers.

Customer.io

Person created_at timestamp

maps to

HubSpot

Contact Original_Create_Date__c (custom datetime)

1:1
Fully supported

HubSpot sets CreatedDate at migration time. Customer.io's created_at timestamp is preserved as a custom datetime property (Original_Create_Date__c) on each contact so reporting continuity is maintained and historical analysis reflects the original account creation date. This ensures all historical reports reference the true first contact date.

Customer.io

Person identifier (cio_id)

maps to

HubSpot

Contact Source_System_ID__c (custom text)

1:1
Fully supported

Customer.io's internal person ID (cio_id) is stored as a custom text field (Source_System_ID__c) on the HubSpot contact for traceability, delta-run de-duplication, and audit purposes. This prevents duplicate contact creation on subsequent migration runs and enables accurate record matching across platform syncs.

Customer.io

No equivalent (Customer.io lacks native deals)

maps to

HubSpot

Deal (custom object)

1:1
Fully supported

Customer.io has no native deal or opportunity object. If your team has built deal-like structures as custom objects in Customer.io, we map those to HubSpot's native Deals object or to a custom object with deal-equivalent properties (amount, stage, close_date, contact_role). Your admin configures the pipeline and stage model before migration.

Customer.io

No equivalent (Customer.io lacks native tickets)

maps to

HubSpot

Ticket (custom object)

1:1
Fully supported

Customer.io has no native support-ticket model. If your team manages support case data, we can create a HubSpot Ticket object or custom object to receive that data. Ticket properties (subject, status, priority, pipeline) require HubSpot Service Hub configuration before data lands.

Customer.io

Workflow / Journey (automation logic)

maps to

HubSpot

Not migrated — export for rebuild

1:1
Fully supported

Customer.io workflows and journeys contain campaign logic, trigger conditions, and branching that cannot be exported in a runnable form. We extract your workflow definitions as documentation (trigger names, conditions, action steps) for your HubSpot admin to rebuild using HubSpot's automation tools (workflows, sequences, bots).

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.

Customer.io logo

Customer.io gotchas

High

Deleted profiles still count toward billing for the remainder of the cycle

High

Push migration requires a new app version with the Customer.io SDK

Medium

Broadcast API rate limit constrains high-volume re-imports

Medium

Inactive user profiles inflate monthly billing with no campaign benefit

Low

Transactional message content may be redacted in stored logs

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

  • Workflow and journey logic has no migration path — must be rebuilt in HubSpot

    Customer.io workflows and journeys encode trigger conditions, time delays, branching logic, and action steps that cannot be exported in a runnable format. HubSpot's workflow engine uses different trigger types (form submissions, list membership, property changes, deal stage changes) that don't accept imported logic. We export your workflow definitions as a documented reference (trigger names, conditions, action sequence) so your HubSpot admin can rebuild them in HubSpot's workflow builder. This is a manual step that must be planned as part of the migration timeline.

  • Event history maps to engagement logs, not native HubSpot event objects

    Customer.io's track() calls store arbitrary behavioral events (purchase, feature_used, page_viewed) as first-class event records. HubSpot's native event model is limited to engagement logs (emails, calls, meetings, notes) tied to contacts and companies. We categorize common Customer.io events to their closest HubSpot engagement equivalents, but arbitrary custom events without a semantic HubSpot counterpart become custom contact properties rather than native event records. This affects how you build HubSpot workflows based on historical event data.

  • Customer.io's profile-based billing doesn't map to HubSpot's contact model

    Customer.io bills by profile count — including profiles deleted within the billing cycle if your integrations re-add them. HubSpot's CRM-level pricing is per-user or per-seat (Sales Hub, Service Hub) or based on marketing contact count (Marketing Hub). There is no equivalent billing flag in HubSpot for the distinction Customer.io makes between engaged and non-engaged profiles. If you rely on Customer.io's profile count for billing reconciliation, you will need to establish new counting logic in HubSpot using marketing contact flags or list membership.

  • Segment membership is a point-in-time snapshot, not a migratable list

    Customer.io segments are dynamic filters that evaluate continuously — the segment result at migration time reflects current conditions. HubSpot's equivalent is static list membership or enrollment in HubSpot workflows. We capture segment membership as a custom contact property at migration time so you can recreate those segments as HubSpot lists. However, the dynamic refresh behavior of Customer.io segments does not carry over — HubSpot lists require manual or workflow-based maintenance to keep current.

  • HubSpot's marketing contact flag has no Customer.io equivalent

    HubSpot Marketing Hub bills based on the number of contacts designated as marketing contacts — contacts who receive marketing emails. Customer.io has no equivalent distinction; all profiles in the workspace are treated uniformly for billing and engagement purposes. When migrating to HubSpot with Marketing Hub, you must decide which migrated contacts should be designated as marketing contacts based on their engagement history. We preserve the original Customer.io engagement status as a custom property to inform this decision and provide a baseline count of potentially billable marketing contacts.

Migration approach

Six steps for a successful Customer.io to HubSpot data migration

  1. Extract Customer.io data via API and bulk export

    FlitStack connects to Customer.io via API using your workspace credentials and exports all people (with all attributes), companies, and event data. We run a preliminary scan to identify unique event names, custom object types, and attribute counts. The export runs in batches to handle large workspaces without rate-limit impact. All exports are stored in a staging environment with PII handling compliant with your data residency requirements.

  2. Map Customer.io schema to HubSpot objects and properties

    Based on the extraction results, we create the target HubSpot schema before migration. This includes creating custom properties on contacts and companies for each Customer.io attribute that has no direct HubSpot equivalent, configuring custom object types, and setting up association labels for custom objects. We deliver a schema plan document for your HubSpot admin to review and approve before the migration run.

  3. Resolve person-to-company associations and owner resolution

    Customer.io people may reference companies by name or ID. We resolve these references to HubSpot company IDs by matching on company name and domain. For owner resolution, we match Customer.io user identifiers (if present) to HubSpot user emails — unmatched owners are flagged for your team to assign to a fallback HubSpot owner before the migration commits. Association resolution ensures all contact-company relationships are established correctly in HubSpot upon migration.

  4. Run sample migration with field-level diff

    A representative slice (typically 100–500 records spanning people, companies, events, and custom objects) migrates to HubSpot first. We generate a field-level diff between the source Customer.io data and the destination HubSpot records so you can verify attribute mapping, event categorization, and association resolution before the full run commits. You approve the sample results before we proceed to ensure mapping accuracy across all data types.

  5. Execute full migration with delta-pickup window

    The full migration runs against HubSpot's native API and bulk import endpoints. A delta-pickup window (typically 24–48 hours after initial run completion) captures any new or modified records in Customer.io during the cutover period. Audit logs track every operation, and one-click rollback is available if reconciliation identifies data integrity issues. After delta-pickup, your HubSpot instance reflects Customer.io's final state at go-live.

Platform deep dives

Context on both ends of the pair

Customer.io logo

Customer.io

Source

Strengths

  • Event-driven automation engine purpose-built for triggering messages from real-time application events, well-suited to SaaS and product-led growth motions.
  • Multi-channel orchestration covers email, push, SMS, in-app, and webhooks (with RCS support added in 2026 updates) under a single workflow canvas.
  • Drag-and-drop visual workflow editor handles delays, branches, and multichannel steps without code, while still allowing Liquid templating for advanced personalization.
  • Behavior-based segmentation with real-time event ingestion means segments update as users act, not on a scheduled batch.
  • Strong developer ergonomics — REST API, robust webhooks, and a Data Pipelines product for warehouse-native ingestion appeal to engineering-led teams.

Weaknesses

  • Profile-based billing counts inactive and deleted (within billing cycle) profiles, inflating costs for large user bases.
  • Workflow and segmentation setup requires developer involvement; non-technical marketers hit a ceiling quickly.
  • No free plan and opaque Enterprise pricing make budget forecasting difficult for SMBs.
  • Push notification migration requires a full app SDK update — users must upgrade before they can receive messages from Customer.io.
  • Support tiers mean critical issues during migration may not get fast enough responses on Essentials.
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 Customer.io 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

    Customer.io: Not publicly documented for general API; transactional broadcast endpoint capped at 1 request per 10 seconds.

  • Data volume sensitivity

    A

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

Estimator

Estimate your Customer.io 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 Customer.io to HubSpot data migrations

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

Can't find your answer?

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

Book a free 30 minute consultation

Most Customer.io-to-HubSpot migrations complete in 24–72 hours of clock time for under 50,000 records. Large datasets exceeding 500,000 records or setups with extensive custom object schemas extend to 5–10 days. The longest planning step is configuring HubSpot's custom properties and custom object types to receive Customer.io's attribute and object definitions before migration data lands. Pre-migration preparation time varies based on schema complexity.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Customer.io.
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