CRM migration
Field-level mapping, validation, and rollback between Attio and Salesforce Sales Cloud. We move data and schema; workflows are rebuilt natively in Salesforce Sales Cloud.
Attio
Source
Salesforce Sales Cloud
Destination
Compatibility
10 of 13
objects map 1:1 between Attio and Salesforce Sales Cloud.
Complexity
BStandard
Timeline
4-6 weeks
Overview
Moving from Attio to Salesforce Sales Cloud is a schema-translation migration. Attio's flexible object model treats records as rows across configurable tables, while Salesforce enforces a fixed Account-Contact-Opportunity hierarchy with a separate Lead object for unqualified prospects. We resolve that structural split during scoping, reconstruct relationship chains that Attio's flat CSV exports discard, and validate that the destination Salesforce plan supports the full object count before migration begins. We migrate People (split by lifecycle), Companies (1:1 to Account), Deals (1:1 to Opportunity with stage mapping), Custom Objects, Notes, Tasks, and engagement history via the Bulk API 2.0. Attio Lists become segmentation logic in Salesforce; we do not migrate Attio Workflows, Sequences, or automations as code and instead deliver a written 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 Attio 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.
Attio
People
Salesforce Sales Cloud
Lead or Contact (split required)
1:manyAttio People with no associated Deal or Company relationship, or with lifecycle_status set to unqualified, map to Salesforce Lead. People linked to Deals or Companies map to Salesforce Contact attached to the corresponding Account. We compute the split using Attio's relationship attributes and lifecycle_status at migration time, and preserve the original lifecycle_status in a custom field attio_lifecycle_stage__c on both Lead and Contact for audit and reporting continuity.
Attio
Companies
Salesforce Sales Cloud
Account
1:1Attio Company records map 1:1 to Salesforce Account. The company domain becomes the Account Website field and serves as the dedupe key during import. Account is created before any Contact import so the AccountId Lookup is satisfied at the moment of Contact insert, preventing orphaned Contact records.
Attio
Deals
Salesforce Sales Cloud
Opportunity
1:1Attio Deal records map 1:1 to Salesforce Opportunity. The Attio deal pipeline and stage attributes map to a Salesforce Record Type and Sales Process we configure before migration. Closed-Won and Closed-Lost reason attributes from Attio become Salesforce Loss Reason and custom Win Reason fields. We set CloseDate from the Attio expected_close_date attribute, defaulting to 30 days if the field is null.
Attio
Relationship Attributes (Deal → Company)
Salesforce Sales Cloud
Opportunity AccountId Lookup
1:1Attio relationship attributes encode foreign-key links (e.g., a Deal linked to a Company). CSV exports flatten these links. We query relationship attributes via the Attio API to reconstruct the Deal-to-Company chain before migration, then write the resolved AccountId to the Opportunity during import. Without this step, Opportunities arrive orphaned from Accounts.
Attio
Relationship Attributes (Deal → People)
Salesforce Sales Cloud
OpportunityContactRole
1:1Attio Deals linked to multiple People records use relationship attributes to define a many-to-many chain. We resolve each linked Person to a Salesforce Contact via the Lead-Contact split, then create OpportunityContactRole junction records during migration to preserve the deal-to-contact association. Null Contact references (unresolved People) are held in a reconciliation queue.
Attio
Custom Objects
Salesforce Sales Cloud
Custom Object (__c)
1:1Attio custom objects (Gated: Free 3, Plus 5, Pro 12, Enterprise unlimited) migrate to Salesforce custom objects of matching API name with __c suffix. We pre-create the destination schema in Salesforce before any data import, including all custom fields, picklist values, and lookup relationships. If the source workspace uses more custom objects than the destination Salesforce plan supports, we flag the excess during scoping and either recommend a Salesforce edition upgrade or consolidate objects.
Attio
Custom Object Relationships
Salesforce Sales Cloud
Custom Object Lookup fields
1:1Attio relationship attributes between two custom objects map to Salesforce custom Lookup fields on the child object. We resolve the parent custom object record ID via the Attio API before writing the foreign key. Cross-object relationships spanning more than two hops require multi-pass import sequencing to ensure parent records exist before children are inserted.
Attio
Notes
Salesforce Sales Cloud
Note
1:1Attio Notes are first-class API objects with timestamps and author attribution. They migrate to Salesforce Note records linked via ContentDocumentLink to the parent record (Lead, Contact, Account, or Opportunity). Rich text formatting is preserved as Salesforce-compatible HTML. Note body and created-at timestamps migrate directly.
Attio
Tasks
Salesforce Sales Cloud
Task
1:1Attio Tasks attach to records and have assignee, due date, and status attributes. We map assignee by email to Salesforce User records via the Owner reconciliation step, then write Task with OwnerId, Status, Priority, and ActivityDate preserved. Tasks attached to Attio custom objects migrate as Salesforce Tasks linked via WhatId to the custom object record.
Attio
Lists
Salesforce Sales Cloud
Campaign + CampaignMember or Static List
lossyAttio Lists are workflow-context collections of record entries, not standalone records. We extract list memberships during scoping, map each Attio List to a Salesforce Campaign (for behavioral or segmentation lists) or a static List View, and create CampaignMember records linking the constituent Leads or Contacts. The customer's admin chooses the strategy during scoping.
Attio
User (Owner assignments)
Salesforce Sales Cloud
User
1:1Attio workspace Users can be enabled as objects with owner assignments across records. We resolve Attio owner references by email match against the destination Salesforce org's User table. Any Attio Owner without a matching Salesforce User goes to a reconciliation queue for the customer's admin to provision before record import resumes. OwnerId is a required reference on most standard object inserts.
Attio
Activities (Email + Calendar sync from People/Companies)
Salesforce Sales Cloud
EmailMessage + Task + Event
1:1Attio's automatic email and calendar sync covers People and Company records only. Email history migrates to Salesforce EmailMessage records linked to the resolved Contact or Lead; calendar events migrate to Salesforce Event with StartDateTime, EndDateTime, and Location preserved. Attende mappings create EventRelation records. Activity records are loaded via Salesforce Bulk API 2.0 with batch chunking and parent-record lookup resolution.
Attio
Activities on Custom Objects
Salesforce Sales Cloud
Not migrated (data loss risk)
lossyAttio email and calendar sync does not attach to custom object records such as Subscriptions, Projects, or Partnerships. Any activity history scoped to custom object records cannot be imported directly and is not recoverable via API. We flag this as a data-loss risk during scoping and recommend documenting the affected records manually before migration cutover. Notes attached to custom objects do migrate; automatic activity history does not.
| Attio | Salesforce Sales Cloud | Compatibility | |
|---|---|---|---|
| People | Lead or Contact (split required)1:many | Fully supported | |
| Companies | Account1:1 | Fully supported | |
| Deals | Opportunity1:1 | Fully supported | |
| Relationship Attributes (Deal → Company) | Opportunity AccountId Lookup1:1 | Fully supported | |
| Relationship Attributes (Deal → People) | OpportunityContactRole1:1 | Fully supported | |
| Custom Objects | Custom Object (__c)1:1 | Mapping required | |
| Custom Object Relationships | Custom Object Lookup fields1:1 | Fully supported | |
| Notes | Note1:1 | Fully supported | |
| Tasks | Task1:1 | Fully supported | |
| Lists | Campaign + CampaignMember or Static Listlossy | Mapping required | |
| User (Owner assignments) | User1:1 | Fully supported | |
| Activities (Email + Calendar sync from People/Companies) | EmailMessage + Task + Event1:1 | Fully supported | |
| Activities on Custom Objects | Not migrated (data loss risk)lossy | 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.
Attio gotchas
CSV exports flatten relationship chains
Credit consumption burns budget faster than seat price suggests
Custom objects gated by plan tier during migration
Email sync only for People and Company records
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
Discovery and plan audit
We audit the source Attio workspace across plan tier (Free/Plus/Pro/Enterprise), total object count, custom object names and attribute types, relationship attribute chains, People lifecycle status distribution, active Deals with stage values, Notes volume, Tasks, and engagement history. We validate the workspace credit balance and flag any API-gated exports that require plan upgrades. We pair this with a Salesforce edition assessment: Professional ($80/user) covers most migrations; Enterprise ($165/user) is required for advanced Flow, multi-org, or territory management. Discovery output is a written migration scope with object inventory, plan comparison, and a Salesforce edition recommendation.
Relationship chain reconstruction via API
We query Attio's relationship attributes via the API for every object pair that has cross-references (Deal → Company, Deal → People, custom object → custom object). We build a relationship index that maps each Attio record ID to its parent and child record IDs. This index is the critical input to the Salesforce import step; without it, CSV exports alone produce orphaned records in Salesforce's Lookup-heavy model. We validate the relationship chain completeness and flag any records with broken references before the first Salesforce insert.
Salesforce schema design and tier validation
We design the destination Salesforce schema: custom objects (with __c API names matched to Attio names), custom fields, Record Types per Attio pipeline, Sales Processes per Record Type, Page Layouts, and the Lead-Contact split rule based on the customer's Attio lifecycle_status distribution. We validate that the destination Salesforce plan supports the full object count and custom field count before schema deployment. Schema is deployed into a Salesforce Sandbox first for validation; production deployment follows after sign-off.
Sandbox migration and reconciliation
We run a full migration into a Salesforce Sandbox (Full Copy or Partial Copy) using production-like data volume. The customer's RevOps lead reconciles record counts across all objects, spot-checks 25-50 random records against the Attio source for field-level accuracy, and verifies that relationship chains are intact (e.g., Opportunities have AccountIds, Contacts have AccountIds, Deal-to-Contact roles are present). Any mapping corrections happen in the sandbox, not in production. Owner reconciliation also completes here with admin provisioning missing Users.
Production migration in dependency order
We run production migration in record-dependency order: Accounts (from Attio Companies), Leads and Contacts (with lifecycle split applied and AccountId resolved), Opportunities (with AccountId, OwnerId, RecordTypeId, and CloseDate resolved), Products and Pricebook entries (if migrating quoting), OpportunityLineItems, Notes (via ContentDocumentLink), Tasks, Activity history (EmailMessage, Task with subtype, Event via Bulk API 2.0), Custom Objects (with custom field lookups resolved from the relationship index), and Campaign members (from Attio Lists). Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, delta sync, and handoff documentation
We freeze writes in Attio during cutover, run a final delta migration of any records created or modified during the migration window, then enable Salesforce as the system of record. We deliver a written inventory of every Attio Workflow and Sequence with its trigger, conditions, and recommended Salesforce Flow equivalent. We support a one-week hypercare window for reconciliation issues. We do not rebuild Attio Workflows or Sequences as Salesforce Flow within the migration scope; that is a separate engagement or an internal admin task. We do not migrate Attio Forms; Salesforce Web-to-Lead or Experience Cloud forms are the recommended replacement.
Platform deep dives
Attio
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 Attio 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
Attio: 100 requests/sec for reads, 25 requests/sec for writes; sliding window algorithm with 10-second window. 429 responses include a Retry-After header.
Data volume sensitivity
Attio 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 Attio to Salesforce Sales Cloud migration scoping. Not seeing yours? Book a call.
Walk through your Attio 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 Attio
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.