CRM migration
Field-level mapping, validation, and rollback between Attio and Microsoft Dynamics 365 Sales . We move data and schema; workflows are rebuilt natively in Microsoft Dynamics 365 Sales .
Attio
Source
Microsoft Dynamics 365 Sales
Destination
Compatibility
7 of 8
objects map 1:1 between Attio and Microsoft Dynamics 365 Sales .
Complexity
BStandard
Timeline
3-5 weeks
Overview
Attio's flat CSV export does not include relationship join keys, so Deals arrive in Microsoft Dynamics 365 Sales orphaned from their parent Accounts unless we query relationship attributes via the Attio API before migration. We handle this by building the parent-child chain during the transform phase so that every Opportunity receives its AccountId at insert time. Attio's flexible object model (People, Companies, Deals, Custom Objects) maps to Dynamics 365's relational schema (Contacts, Accounts, Opportunities, custom entities) with the same sequencing constraints: Accounts must exist before Contacts, and Accounts must exist before Opportunities. Notes, Tasks, and historical email and calendar sync data attach to the correct Contact and Account records in Dynamics with parent-record references preserved. Attio Workflows and List memberships do not migrate as automation; Workflows require a rebuild inventory for the customer's admin to recreate in Dynamics Flow, and List memberships are denormalized into custom fields since Microsoft Dynamics 365 Sales has no native List object equivalent.
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.
Source platform
Attio platform overview
Scorecard, SWOT, gotchas, and pricing for Attio.
Destination platform
Microsoft Dynamics 365 Sales platform overview
Scorecard, SWOT, gotchas, and pricing for Microsoft Dynamics 365 Sales .
Data migration guide
The complete Microsoft Dynamics 365 Sales migration guide
Data model, import mechanisms, field mapping strategy, pitfalls, and cutover — by the engineers running it.
Destination checklist
Microsoft Dynamics 365 Sales migration checklist
Pre- and post-cutover tasks for moving onto Microsoft Dynamics 365 Sales .
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 Microsoft Dynamics 365 Sales , including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
Attio
People
Microsoft Dynamics 365 Sales
Contact (and optionally Lead)
1:1Attio People records map to Dynamics 365 Contact with all native and custom attributes preserved. We deduplicate by email address before import to avoid duplicate Contact creation. Role attributes on People (e.g., Primary Contact, Billing Contact) that have no direct Dynamics field migrate to custom Contact fields. If the Attio workspace uses People records for both qualified and unqualified prospects, we can split them into Lead and Contact objects by evaluating a lifecycle or status attribute during scoping, creating a custom field attio_original_type__c for audit trail.
Attio
Company
Microsoft Dynamics 365 Sales
Account
1:1Attio Company records map to Dynamics 365 Account. Domain from the Company record becomes the Account Website field and is used as the deduplication key. Company must be inserted before any Contact import so that the AccountId reference is satisfied at Contact insert time. If the Attio workspace has Companies linked to other Companies as parent-child, we replicate that as the Account.ParentId lookup chain.
Attio
Deal
Microsoft Dynamics 365 Sales
Opportunity
1:1Attio Deals map to Dynamics 365 Opportunity. We resolve the parent Company relationship via Attio's API relationship attributes and write the resulting AccountId on each Opportunity at insert time. Pipeline stages from Attio map to a Dynamics Sales Process and Record Type that we configure before migration. Deal amount, close date, and status (Open, Won, Lost) migrate directly with closedate preserved as a date field rather than text.
Attio
Custom Object
Microsoft Dynamics 365 Sales
Custom Entity (customizeable entity)
1:1Attio custom objects (3 on Free, 5 on Plus, 12 on Pro, unlimited on Enterprise) migrate to Microsoft Dynamics 365 Sales custom entities. We pre-create the destination schema including all custom fields, field types, and lookup relationships during the schema design phase. Attio relationship attributes linking custom objects to standard objects (Companies, People, Deals) become Dynamics lookup fields on the custom entity. Plan tier validation happens during scoping: if the source has more custom objects than the destination plan supports, we flag an upgrade requirement or consolidate objects before migration.
Attio
Notes
Microsoft Dynamics 365 Sales
Note (annotation)
1:1Attio Notes attached to People, Companies, and Deals migrate to Dynamics Note records (annotation entity) linked via ContentDocumentLink to the parent Contact, Account, or Opportunity. Note body, author, and timestamp preserve. Notes on custom object records link to the custom entity using the custom entity's primary key as the objectid reference.
Attio
Task
Microsoft Dynamics 365 Sales
Task
1:1Attio Tasks with assignee, due date, status, and description migrate to Dynamics Task records with Owner resolved via email match to the Dynamics User table. Tasks without a matching Dynamics User enter a reconciliation queue for the customer admin to provision before migration resumes. Status and priority values map directly to Dynamics Task State and Priority picklist values.
Attio
List
Microsoft Dynamics 365 Sales
Custom Field (denormalized)
lossyAttio Lists are workflow-context record collections with no direct Microsoft Dynamics 365 Sales equivalent. We extract list memberships from the Attio API and denormalize them into a custom multi-select picklist field on the relevant object (Contact or Account). For example, a Contact appearing on the High-Value Prospects list receives the picklist value 'High-Value Prospects'. Dynamics admins can use this field for segmentation, filtered views, and targeted workflows after migration.
Attio
Activities (Email Sync, Calendar Sync)
Microsoft Dynamics 365 Sales
EmailMessage + Event
1:1Attio's two-way Gmail and Outlook sync for People and Company records generates email and calendar entries that migrate to Dynamics EmailMessage and Event records attached to the parent Contact and Account. We query the sync history via the Attio API, reconstruct the Contact and Account references, and insert via the Dynamics Web API with WhoId (Contact) and Regarding (Account) resolved before each write. Email body, timestamp, and direction (sent/received) preserve. Note that email and calendar sync in Attio only covers People and Company records; custom object activity timelines must be reconstructed from notes or external integrations.
| Attio | Microsoft Dynamics 365 Sales | Compatibility | |
|---|---|---|---|
| People | Contact (and optionally Lead)1:1 | Fully supported | |
| Company | Account1:1 | Fully supported | |
| Deal | Opportunity1:1 | Fully supported | |
| Custom Object | Custom Entity (customizeable entity)1:1 | Fully supported | |
| Notes | Note (annotation)1:1 | Fully supported | |
| Task | Task1:1 | Fully supported | |
| List | Custom Field (denormalized)lossy | Fully supported | |
| Activities (Email Sync, Calendar Sync) | EmailMessage + Event1:1 | 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
Microsoft Dynamics 365 Sales gotchas
Professional tier 15-table custom table limit blocks migrations
October 2024 pricing increase applies at renewal for all customers
Custom fields must be created in the UI before API writes
Power Platform request limits apply to bulk migrations
Activity records orphaned to inactive owners fail silently
Pair-specific challenges
Migration approach
Discovery and scoping
We audit the Attio workspace via API across all plan tiers, custom objects, relationship attributes, List memberships, and email/calendar sync volume. We validate the custom object count against plan tier to flag any Enterprise-gated objects and recommend consolidation if needed. We produce a written migration scope document listing every object, record count estimate, relationship chain count, and a Dynamics 365 Professional versus Premium edition recommendation based on object count, custom entity volume, and whether Copilot AI is in scope. This phase establishes the migration baseline and pricing fixed-fee quote.
Schema design in Dynamics 365
We create the destination schema in Microsoft Dynamics 365 Sales before any data moves. This includes custom entities for each Attio custom object, custom fields typed to match Attio attribute types (with picklist normalization), and lookup fields resolving the relationship chain to standard entities (Account, Contact, Opportunity). If the customer chooses a Lead-Contact split strategy, we add a custom field on Lead and Contact to carry the original Attio object type for audit. We also create custom fields on Contact and Account to receive denormalized List membership values. Schema deploys into a Dynamics Sandbox first for validation.
Sandbox migration and reconciliation
We run a full migration into the Dynamics Sandbox using production-equivalent data volumes. The customer's admin or RevOps lead reconciles record counts against the Attio source (Contacts in, Accounts in, Opportunities in, Notes in, Tasks in), spot-checks 20-30 records per object for attribute accuracy, and validates that relationship chains are intact (every Opportunity has an AccountId, every Contact has an AccountId where applicable). Sign-off on the sandbox run authorizes the production migration date.
Relationship chain extraction and transform
We query every relationship attribute via the Attio API to build the full parent-child chain map. This produces a lookup table of Deal-to-Company IDs and Contact-to-Company IDs that we apply as AccountId on each Opportunity and Contact insert in Dynamics. We validate all field types against Dynamics constraints, normalize date formats, and resolve Owner references by email match to the Dynamics User table. Owners without a matching User enter a queue for admin provisioning before record insertion resumes.
Production migration in dependency order
We run production migration in the correct dependency sequence: Accounts (from Companies) first, then Contacts (with AccountId resolved), then Opportunities (with AccountId resolved from the relationship chain map), then Notes and Tasks (with owner references resolved), then custom entities (with their lookup fields pointing to the parent standard records), and finally activity history from Attio's email and calendar sync API. Each phase emits a row-count reconciliation report before the next phase begins. We use the Dynamics Web API with batch operations, rate-limit handling, and exponential backoff.
Cutover, validation, and workflow handoff
We freeze writes in Attio during the cutover window, migrate any records modified since the last sync, then enable Microsoft Dynamics 365 Sales as the system of record. We validate record counts and relationship chains one final time against the Attio source. We deliver the Workflow inventory document to the customer's admin team for Dynamics Flow rebuild. We support a one-week hypercare window for reconciliation issues raised by the sales team. We do not rebuild Attio Workflows, Lists as active segmentation, or Sequences as Salesforce Sales Engagement cadences inside the migration scope.
Platform deep dives
Attio
Source
Strengths
Weaknesses
Microsoft Dynamics 365 Sales
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 Microsoft Dynamics 365 Sales .
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 Microsoft Dynamics 365 Sales migration scoping. Not seeing yours? Book a call.
Walk through your Attio to Microsoft Dynamics 365 Sales 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 Microsoft Dynamics 365 Sales
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.