CRM migration
Field-level mapping, validation, and rollback between Customer.io and Nutshell. We move data and schema; workflows are rebuilt natively in Nutshell.
Customer.io
Source
Nutshell
Destination
Compatibility
5 of 10
objects map 1:1 between Customer.io and Nutshell.
Complexity
BStandard
Timeline
2-3 weeks
Overview
Customer.io is an event-driven messaging platform built around Profiles, Traits, and Behavioral Events, while Nutshell is a sales CRM organized around Contacts, Companies, Leads, and Pipelines. These different architectural models mean the migration centers on transforming a userId-centric profile store into a Contact-Company relationship model. We extract all People records with their attributes and event history from Customer.io, map them into Nutshell Contacts, and link them to Accounts. Segments and behavioral attributes that drove campaign targeting in Customer.io become Nutshell Groups and custom fields. We flag Custom Objects for pre-creation in Nutshell before data import, and we deliver an inventory of all Campaigns and Journeys that require rebuild as Nutshell Pipelines and manual outreach sequences. Push notifications, transactional message templates, and broadcast logs have no direct Nutshell equivalent and are documented for post-migration handling.
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 Customer.io object lands in Nutshell, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
Customer.io
People (Profiles)
Nutshell
Contact
1:1Customer.io People records map to Nutshell Contacts. The userId maps to Contact email as the primary lookup key; anonymousId records with no email are flagged for identity resolution before import. All trait key-value pairs migrate as custom fields or mapped standard fields (email, name, phone, address) where the field name matches a Nutshell standard field. Nested JSON trait values flatten into separate custom fields. Profile created_at and last_seen timestamps migrate as custom date fields for audit and recency analysis.
Customer.io
Custom Objects (Companies, Accounts)
Nutshell
Account
1:1Customer.io Custom Objects with a company-like schema (name, domain, industry, employee_count) map to Nutshell Accounts. Each Custom Object type_id namespace becomes a distinct record set, and we pre-create the Nutshell custom field schema before import. If the Customer.io workspace has Companies linked to People via relationships, we resolve the link and attach the Contact to the Account during import. Custom Objects without a People relationship are imported as standalone Accounts.
Customer.io
Segments
Nutshell
Group
lossyCustomer.io Segments are dynamic audience definitions based on trait conditions and event triggers. Nutshell Groups are manually managed membership lists. We export each segment's criteria as a structured rule set and create a corresponding Nutshell Group with a documented membership criteria note. Full dynamic-segment behavior cannot be replicated in Nutshell; the Group is created with its current membership snapshot and maintained manually post-migration. If the customer uses segments as tags rather than dynamic lists, we map them to Nutshell Tags instead.
Customer.io
Custom Events
Nutshell
Activity (Note on Contact)
1:manyCustomer.io event history (track calls) is event-driven and stored as a first-class object with name, properties, sentAt, and receivedAt timestamps. Nutshell has no native event store. We transform the event history into Nutshell Activity records (type Note) on the Contact, with the event name in the activity subject, event properties as plain-text body, and the original timestamp preserved. High-volume event histories are batched via the Nutshell API with rate-limit handling to avoid throttling during import.
Customer.io
Traits and Attributes
Nutshell
Custom Field
lossyTrait key-value pairs on Customer.io People map to Nutshell custom fields. Standard Nutshell fields (name, email, phone, address) are used where schema alignment exists; non-standard traits create new custom fields in Nutshell before migration. Array and nested-object trait values are serialized as JSON strings in the corresponding custom field. We flag any traits that share a name with existing Nutshell standard fields to avoid collision during import.
Customer.io
Campaigns and Journeys
Nutshell
Pipeline + Template Inventory
1:1Customer.io Campaigns and Journeys are automated workflows with triggers, branching conditions, and multi-channel message actions. These do not migrate as automation code because Nutshell Pipelines track deal stages, not campaign logic. We export the campaign structure (name, trigger type, steps, channels, and wait conditions) as a structured document and deliver it to the customer's admin. The admin rebuilds outreach sequences as Nutshell email templates and manual or semi-automated follow-up tasks. Broadcast sends are documented separately for manual re-execution.
Customer.io
Broadcasts
Nutshell
Template Inventory (documented)
1:1Customer.io one-time broadcast sends are exported with target segment, content, and send timestamp. Nutshell does not support broadcast sending as a platform feature. We export the broadcast name, audience, content, and send timestamp as a written record so the customer can re-execute or adapt the send manually post-migration. If the broadcast targeted a Customer.io segment, we document the segment membership snapshot as a Nutshell Group for manual reference.
Customer.io
Deleted Profiles
Nutshell
Reconciliation Flag
lossyCustomer.io counts profiles deleted within the current billing cycle as billable. We flag any profiles deleted between the migration export date and the billing cycle close date so the customer can assess whether they need to act before month-end billing recalculates. We also flag active integrations that could re-import deleted profiles mid-migration, recommending the integration be suspended before the final export to prevent billing duplicates.
Customer.io
Custom Objects (generic type)
Nutshell
Custom Fields on Account or Contact
lossyCustomer.io Custom Object types beyond Companies that do not map to a standard Nutshell object (e.g., Products, Subscriptions, Projects) are handled as custom fields on the related Account or Contact record. We pre-create the Nutshell custom field schema before migration, defining the field type to match the source data (text, number, date, dropdown). Relationships between Custom Objects and People in Customer.io become cross-field references or linked Contact records in Nutshell.
Customer.io
Transactional Messages
Nutshell
Template Documentation (exported)
1:1Customer.io transactional messages (password resets, order receipts, shipping notifications) are exported with their content, trigger conditions, and delivery logs. Nutshell has no transactional message capability. We deliver the transactional message content as a structured export file so the customer's engineering team can route these sends through a dedicated transactional email service (such as SendGrid, Postmark, or AWS SES) post-migration. Any unsubscribe or preference flags migrate to Contact email opt-out status.
| Customer.io | Nutshell | Compatibility | |
|---|---|---|---|
| People (Profiles) | Contact1:1 | Fully supported | |
| Custom Objects (Companies, Accounts) | Account1:1 | Fully supported | |
| Segments | Grouplossy | Mapping required | |
| Custom Events | Activity (Note on Contact)1:many | Fully supported | |
| Traits and Attributes | Custom Fieldlossy | Fully supported | |
| Campaigns and Journeys | Pipeline + Template Inventory1:1 | Mapping required | |
| Broadcasts | Template Inventory (documented)1:1 | Mapping required | |
| Deleted Profiles | Reconciliation Flaglossy | Fully supported | |
| Custom Objects (generic type) | Custom Fields on Account or Contactlossy | Fully supported | |
| Transactional Messages | Template Documentation (exported)1:1 | Mapping required |
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.
Customer.io gotchas
Deleted profiles still count toward billing for the remainder of the cycle
Push migration requires a new app version with the Customer.io SDK
Broadcast API rate limit constrains high-volume re-imports
Inactive user profiles inflate monthly billing with no campaign benefit
Transactional message content may be redacted in stored logs
Nutshell gotchas
Contact tier limits enforced on import
No bulk API endpoint requires paginated extraction
Email sequences not exportable via API
Foundation plan disables key sales features
Pair-specific challenges
Migration approach
Discovery and migration scope definition
We audit the Customer.io workspace for profile count, event type inventory, segment definitions, custom object types and their schema, campaign and journey count, and any active API or SDK integrations that could re-import data mid-migration. We pair this with a review of the target Nutshell environment including existing fields, groups, and custom object readiness. The discovery output is a written migration scope that defines what migrates, what documents, and what the customer rebuilds manually post-migration.
Nutshell schema preparation
We pre-create all required custom fields in Nutshell to match the Customer.io trait schema before any data import. This includes mapping standard traits (name, email, phone, address) to Nutshell standard fields and creating custom fields for non-standard traits. We create Groups corresponding to Customer.io segments with documented membership criteria notes. If Customer.io Custom Objects require Account linkage, we pre-create the relationship structure. Any required Nutshell custom field types (dropdown, date, number, text) are defined with appropriate validation rules to prevent import errors.
Test migration in Nutshell sandbox
We run a migration of a representative data subset into a Nutshell test environment to validate field mapping, group assignment, and custom object linkage. The customer reviews the test output and spot-checks records for accuracy. Any field collisions, missing custom fields, or mapping corrections are resolved in this phase before production migration begins. The test migration also establishes the expected row counts and import duration for production planning.
Data export and transformation from Customer.io
We extract all People records with full trait data, event history, segment membership, and Custom Object records from Customer.io using the REST API. Anonymous profiles with no email address are flagged for identity resolution. We transform the profile data into a Nutshell-compatible import format, mapping traits to custom fields, segment membership to Groups, and event history to Activity records. Deleted profiles in scope are flagged with a deletion timestamp for billing reconciliation.
Production data import in dependency order
We import data into the production Nutshell environment in dependency order: Accounts first (from Customer.io Custom Objects with company-like attributes), then Contacts (with Account linkage resolved), then Groups (populated from Customer.io segment membership snapshots), then Activity records (event history as Notes on the relevant Contact). Each phase emits a row-count reconciliation report before the next phase begins. We handle Nutshell API rate limits with exponential backoff and chunked batch inserts to avoid throttling.
Cutover, delta sync, and handoff
We freeze Customer.io data writes during the cutover window, run a final delta migration of any records modified since the initial export, then hand off Nutshell as the system of record. We deliver the campaign and journey inventory document, transactional message export files, and a segment-to-group mapping reference to the customer's admin team. We provide a reconciliation report comparing migrated record counts against source record counts and flag any discrepancies for manual review.
Platform deep dives
Customer.io
Source
Strengths
Weaknesses
Nutshell
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 2 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 Customer.io and Nutshell.
Object compatibility
2 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
Customer.io: Not publicly documented for general API; transactional broadcast endpoint capped at 1 request per 10 seconds.
Data volume sensitivity
Customer.io 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 Customer.io to Nutshell migration scoping. Not seeing yours? Book a call.
Walk through your Customer.io to Nutshell migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave Customer.io
Other ways to arrive at Nutshell
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.