CRM migration
Field-level mapping, validation, and rollback between Customer.io and Salesforce Sales Cloud. We move data and schema; workflows are rebuilt natively in Salesforce Sales Cloud.
Customer.io
Source
Salesforce Sales Cloud
Destination
Compatibility
7 of 12
objects map 1:1 between Customer.io and Salesforce Sales Cloud.
Complexity
BStandard
Timeline
4-8 weeks
Overview
Moving from Customer.io to Salesforce is a schema transformation, not a record copy. Customer.io uses a flat identity-first data model where every profile carries a userId, anonymous traits, and a complete event history; Salesforce requires Leads and Contacts to be linked to Accounts, stores events as Activity records, and has no direct equivalent for Journeys or Broadcasts. We map People profiles to Salesforce Lead or Contact depending on lifecycle stage, resolve Account relationships from Customer.io company objects and email domain, and migrate custom event histories as Tasks with event names and properties preserved. The Salesforce Connected App deprecation in 2026 (which Customer.io's current data-in sync uses) is a migration urgency factor we flag during scoping. Push notification migration requires a new app SDK version before device tokens can register with Customer.io; we sequence push after the SDK rollout, typically over a 4-8 week window. We do not migrate Journeys, Campaigns, or Broadcasts as code; we deliver a written automation inventory for the customer's admin to rebuild in Salesforce Flow.
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 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.
Customer.io
People (Profiles)
Salesforce Sales Cloud
Lead or Contact (split required)
1:manyCustomer.io People profiles map to Salesforce Lead or Contact based on lifecycle stage. Profiles with lifecycle_stage of subscriber, lead, or marketingqualifiedlead map to Salesforce Lead; those with salesqualifiedlead, customer, or evangelist map to Salesforce Contact attached to an Account. We resolve Account relationships by grouping profiles by email domain and existing Customer.io company traits, creating Salesforce Accounts from Customer.io Custom Objects (Companies) or domain-derived company records. The original Customer.io userId is preserved in a custom field on both Lead and Contact for identity continuity.
Customer.io
Custom Events
Salesforce Sales Cloud
Task
1:1Customer.io track() events migrate as Salesforce Task records with a custom field capturing the event name and a JSON properties field. We export the full event name and properties object, flatten or preserve nested structure depending on the customer's reporting needs, and set Task Subject to the event name for timeline readability. sentAt and receivedAt timestamps are preserved on the Task. We discuss with the customer whether to use Salesforce custom fields or the Activity Logging feature for high-volume event reporting.
Customer.io
Custom Objects (Companies, Accounts)
Salesforce Sales Cloud
Account or Custom Object
1:1Customer.io Custom Objects stored as object_type_id namespaces (Companies, Accounts, etc.) map to Salesforce Accounts or Salesforce custom objects depending on the namespace. We export the object type definition, all custom field schemas, and the relationship links between Custom Objects and People, then pre-create the destination schema in Salesforce before any data import. Note that Salesforce Professional ($75/user) supports custom objects without additional setup fees, removing the tier constraint that Customer.io imposes on custom object namespaces.
Customer.io
Traits and Attributes
Salesforce Sales Cloud
Standard or Custom Fields on Lead/Contact
lossyCustomer.io traits are key-value pairs of any JSON type including arrays and nested objects. Standard Salesforce fields (Email, Phone, Title, Industry) receive mapped traits directly. Non-standard traits migrate as custom fields on Lead and Contact. Nested arrays are flattened with a naming convention (e.g., preferences_email_marketing becomes preferences_email_marketing__c) or preserved as a JSON text field depending on the customer's reporting needs.
Customer.io
Campaigns and Journeys
Salesforce Sales Cloud
Campaign (rebuild inventory)
lossyCustomer.io Campaigns and Journeys are automated workflows with entry triggers, branching conditions, and message actions that have no direct Salesforce equivalent. We export the campaign structure including trigger type, wait steps, branching conditions, and channel assignments as a structured rule set. We deliver a written inventory of every active Journey and Campaign with its trigger conditions and actions, and a recommended Salesforce Flow equivalent for each. The customer's admin or a Salesforce partner rebuilds Journeys post-migration; the workflow itself is not migrated as code.
Customer.io
Broadcasts
Salesforce Sales Cloud
Campaign (re-send inventory)
1:1Customer.io one-time Broadcast sends are exported with name, target segment criteria, content, and send timestamp. API-triggered Broadcasts have a rate limit of 1 request per 10 seconds that we document for sequencing and planning. We deliver a broadcast re-send plan with content and audience criteria, and the customer's team resends from Salesforce manually or through a Salesforce email tool post-migration. The broadcast target segment criteria export as structured rule sets for the customer's admin to rebuild as Salesforce Campaigns or audience lists.
Customer.io
Transactional Messages
Salesforce Sales Cloud
EmailTemplate
1:1Customer.io transactional message templates and delivery logs migrate as Salesforce EmailTemplate records. We export template content, subject, and recipient-specific delivery logs. If message retention is disabled in Customer.io, transactional message bodies may be redacted in stored logs; we check the retention setting before export and flag any redacted payloads so compliance records in Salesforce are marked accordingly. Transactional message behavior (single recipient, bypasses unsubscribe) has no direct Salesforce equivalent and is documented for admin awareness.
Customer.io
Segments
Salesforce Sales Cloud
Campaign or List
1:1Customer.io dynamic Segments are defined by trait values and event conditions. We export segment criteria as structured rule sets and document the equivalent Salesforce Campaign or List membership criteria. Static segments migrate as Salesforce Campaign Members with their original membership date. Dynamic segments require rebuilding in Salesforce as Campaign audience filters or as Salesforce Marketing Cloud Account Engagement (Pardot) Dynamic Lists if marketing automation continues in a separate tool.
Customer.io
Message Delivery Logs
Salesforce Sales Cloud
Task (Activity)
1:1We export Customer.io message delivery status (sent, delivered, undeliverable, bounced) as Salesforce Task records with a custom delivery_status__c field. Delivery event timestamps and message IDs are preserved for audit continuity. Undeliverable statuses are flagged in the migration report for the customer's deliverability team to review. Email engagement events (opens, clicks, unsubscribes) migrate as additional Task records linked to the same Contact or Lead for a complete activity timeline.
Customer.io
Workspaces and Account Settings
Salesforce Sales Cloud
None (excluded)
1:1Customer.io Workspaces contain billing, SSO, IP allowlists, and region settings (US/EU). These are account-level and not migratable across platforms. We exclude workspace configuration from the migration scope and flag SSO and IP allowlist settings that the customer's admin must reconfigure manually in Salesforce or through their identity provider post-migration.
Customer.io
Deleted Profiles (within billing cycle)
Salesforce Sales Cloud
Flagged for billing reconciliation
lossyCustomer.io includes profiles deleted within the current billing period in the billable profile count. We extract all deleted profile records in scope and cross-reference them against active integrations that could re-import them mid-migration. Deleted profiles that could be re-added are flagged in the migration report with their original userId and deletion timestamp so the customer's team can confirm whether to include or exclude them from the migration payload and billing reconciliation.
Customer.io
Push Notification Configuration
Salesforce Sales Cloud
Prerequisite flagged
lossyPush notification delivery via Customer.io requires users to install a version of the app integrated with the Customer.io SDK. Device tokens are provider-specific and cannot be imported from a previous push provider. We flag push migration as a prerequisite in the migration plan and sequence it after the new app version with the Customer.io SDK is live. The customer plans a 4-8 week audience upgrade rollout before push messaging can resume, and we coordinate the delta profile export after the SDK is live to capture any net-new profiles.
| Customer.io | Salesforce Sales Cloud | Compatibility | |
|---|---|---|---|
| People (Profiles) | Lead or Contact (split required)1:many | Fully supported | |
| Custom Events | Task1:1 | Fully supported | |
| Custom Objects (Companies, Accounts) | Account or Custom Object1:1 | Fully supported | |
| Traits and Attributes | Standard or Custom Fields on Lead/Contactlossy | Fully supported | |
| Campaigns and Journeys | Campaign (rebuild inventory)lossy | Mapping required | |
| Broadcasts | Campaign (re-send inventory)1:1 | Mapping required | |
| Transactional Messages | EmailTemplate1:1 | Mapping required | |
| Segments | Campaign or List1:1 | Mapping required | |
| Message Delivery Logs | Task (Activity)1:1 | Mapping required | |
| Workspaces and Account Settings | None (excluded)1:1 | Not supported | |
| Deleted Profiles (within billing cycle) | Flagged for billing reconciliationlossy | Fully supported | |
| Push Notification Configuration | Prerequisite flaggedlossy | 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.
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
Salesforce Sales Cloud gotchas
Workflow Rules and Process Builder are retired
Bulk API batch quota exhaustion during large imports
Storage overage billing is non-obvious
Account-Contact many-to-many relationship mapping
Territory and team member import ordering dependencies
Pair-specific challenges
Migration approach
Migration scoping and Account resolution strategy
We audit the Customer.io workspace: profile count, event history volume and date range, active Journeys and Campaigns, Custom Object types and record counts, Segment definitions, and any transactional message templates. We also review the Salesforce destination org for existing schema, record types, and custom objects. We define the Account resolution strategy for Customer.io profiles (domain grouping, existing company traits, or Customer.io Custom Object linking) and agree on the Lead-Contact split rule based on the customer's lifecycle stage matrix. The scoping output is a written migration scope, Account resolution plan, and Salesforce edition recommendation.
Schema pre-creation and Salesforce configuration
We configure the Salesforce destination org: pre-create any custom objects matching the Customer.io object_type_id namespaces, add custom fields on Lead and Contact for Customer.io identifiers and lifecycle stage, configure Record Types and page layouts, and set up the Campaign object structure. If the customer plans to use Salesforce Flow or Marketing Cloud Account Engagement for automation rebuild, we document the recommended Flow structure alongside the migration. All schema work is validated in a Salesforce Sandbox before production migration begins.
Sandbox migration and reconciliation
We run a full migration into a Salesforce Sandbox using production-like data volume. The customer's RevOps lead reconciles record counts (Leads, Contacts, Accounts, Activities), spot-checks 25-50 random records against the Customer.io source for field-level accuracy, and reviews the Account resolution results. Any mapping corrections, missing custom field additions, or Account resolution refinements happen in the Sandbox before production migration begins. Sign-off on the Sandbox reconciliation is required before we proceed to production.
Production migration in dependency order
We run production migration in record-dependency order: Accounts (from Customer.io Custom Objects and domain-derived company records), Contacts (with AccountId resolved), Leads (for early-stage profiles), then Activity history (Events as Tasks via Bulk API 2.0). Custom Objects are migrated after standard objects because they often have lookups to Account and Contact. Segments are documented as rule sets rather than migrated as live audiences. Each phase emits a row-count reconciliation report before the next phase begins. The Salesforce Connected App retirement deadline is factored into the production scheduling for urgency migrations.
Cutover, delta validation, and automation inventory handoff
We freeze writes to Customer.io during cutover, run a final delta export of any records created or updated since the migration window opened, and validate the delta in Salesforce. We then deliver the written Journey and Campaign automation inventory with recommended Salesforce Flow equivalents, the transactional message template inventory with redaction flags, and the broadcast re-send plan. We do not rebuild Journeys as Salesforce Flow inside the migration scope; that work is a separate engagement or an internal admin task. We offer a one-week hypercare window to resolve reconciliation issues raised by the customer's team after cutover.
Push migration sequencing post-SDK rollout
Push notification migration is sequenced after the customer releases a new app version with the Customer.io SDK integrated. We coordinate with the customer's mobile team to identify the SDK release date and plan a post-SDK delta export that captures any net-new profiles registered during the SDK rollout window. Push device tokens are not migratable between providers; the Customer.io SDK re-registers tokens from the new app version. The customer manages the in-app messaging prompting users to update to the new app version during the rollout period.
Platform deep dives
Customer.io
Source
Strengths
Weaknesses
Salesforce Sales Cloud
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 Customer.io and Salesforce Sales Cloud.
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
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 Salesforce Sales Cloud migration scoping. Not seeing yours? Book a call.
Walk through your Customer.io to Salesforce Sales Cloud 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 Salesforce Sales Cloud
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.