CRM migration
Field-level mapping, validation, and rollback between HubSpot and Microsoft Dynamics 365 Sales . We move data and schema; workflows are rebuilt natively in Microsoft Dynamics 365 Sales .
HubSpot
Source
Microsoft Dynamics 365 Sales
Destination
Compatibility
12 of 14
objects map 1:1 between HubSpot and Microsoft Dynamics 365 Sales .
Complexity
BStandard
Timeline
4-6 weeks
Try the reverse
Overview
Moving from HubSpot Sales Hub to Microsoft Microsoft Dynamics 365 Sales is a schema transformation, not a straight record copy. HubSpot consolidates all people into a single Contact object with a Lifecycle Stage property; Dynamics 365 separates unqualified prospects into Leads and qualified buyers into Contacts attached to Accounts. We resolve that routing during discovery and apply it as a transform at migration time, preserving the original Lifecycle Stage in a custom field for audit. HubSpot Companies map directly to Dynamics Accounts, and Deals map to Opportunities with the pipeline re-expressed as a Business Process Flow. Activity history (calls, emails, meetings, tasks) migrates through the Dataverse Web API using batch operations with OData v4.0 pagination and parent-record GUID resolution. HubSpot Workflows, Sequences, and the Marketing Contacts billing flag do not migrate; we deliver a written automation inventory and a Dynamics workflow rebuild guide for the customer's admin team.
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
HubSpot platform overview
Scorecard, SWOT, gotchas, and pricing for HubSpot.
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.
Source platform guide
HubSpot migration guide
Understand the data you're exporting from HubSpot before mapping it.
Destination checklist
Microsoft Dynamics 365 Sales migration checklist
Pre- and post-cutover tasks for moving onto Microsoft Dynamics 365 Sales .
Source checklist
HubSpot migration checklist
Exit checklist for unwinding your HubSpot setup cleanly.
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
Each row shows how a HubSpot 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.
HubSpot
Contact
Microsoft Dynamics 365 Sales
Lead or Contact (routing required)
1:manyHubSpot Contacts with Lifecycle Stage of subscriber, lead, or marketing qualified lead route to Dynamics 365 Lead. Lifecycle Stage of SQL, customer, evangelist, or other qualified states route to Dynamics 365 Contact attached to an Account. We apply this split as a transform during migration using HubSpot's lifecyclestage property, and write the original Lifecycle Stage into a custom field hs_original_lifecycle on both Lead and Contact for reconciliation.
HubSpot
Company
Microsoft Dynamics 365 Sales
Account
1:1HubSpot Company records map directly to Dynamics 365 Account. The HubSpot company domain becomes the Account Website field and acts as a dedupe key during import. Account is provisioned before any Contact or Lead import so that the CustomerId (Account) lookup is satisfied at the moment of insert. Dynamics 365 does not have a separate Company entity; all organizational records land in Account.
HubSpot
Deal
Microsoft Dynamics 365 Sales
Opportunity
1:1HubSpot Deals map to Dynamics 365 Opportunity. The HubSpot dealstage property maps to the active Business Process Flow stage on Opportunity. We configure the Business Process Flow (BPF) during migration setup to match the HubSpot pipeline's stage names, step order, and category labels so that deal history reflects the correct progression.
HubSpot
Pipeline
Microsoft Dynamics 365 Sales
Business Process Flow
lossyEach HubSpot Deal pipeline becomes a Dynamics 365 Business Process Flow attached to the Opportunity entity. We define the BPF stages, step categories, and step labels during migration setup in the destination Dynamics environment, matching the HubSpot pipeline configuration. Multi-pipeline accounts require multiple BPFs, and we configure which BPF applies to each Opportunity at migration time via the Process field.
HubSpot
Product
Microsoft Dynamics 365 Sales
Product
1:1HubSpot Products map to Dynamics 365 Product records with Standard Price List entries created during import. ProductCode maps from HubSpot hs_sku. Dynamics Products carry a Product Type (Sales, Services) that we set based on HubSpot product categorization.
HubSpot
Line Item
Microsoft Dynamics 365 Sales
Opportunity Product
1:1HubSpot Line Items attach to Deals and map to Dynamics 365 Opportunity Product records linked to the parent Opportunity. We resolve the Product reference, Quantity, and Unit Price at migration time. Opportunity Product is inserted after the Opportunity and Product records exist in the destination.
HubSpot
Owner
Microsoft Dynamics 365 Sales
User
1:1HubSpot Owners map to Dynamics 365 User records by email match. Any HubSpot Owner without a matching Dynamics User enters a reconciliation queue; the customer's admin provisions missing Users before record import resumes because Owner (OwningUser) references are required on most standard entities in Dynamics.
HubSpot
Engagement: Email
Microsoft Dynamics 365 Sales
Email (EmailActivity)
1:1HubSpot email engagements migrate to Dynamics 365 Email records linked to the regarding record (Lead, Contact, or Opportunity) via the regardingobjectid GUID. Email body, subject, from, to, and cc fields transfer directly. We resolve the parent record GUID using the email-address-to-contact/lead cross-reference table created during scoping.
HubSpot
Engagement: Call
Microsoft Dynamics 365 Sales
Phone Call
1:1HubSpot call engagements map to Dynamics 365 Phone Call activity with Subject, Description, Direction (inbound/outbound), Duration, and Call Purpose preserved in custom fields. The Phone Call is linked to the Contact, Lead, or Opportunity via the Regarding lookup. Call recording URLs transfer as a text field for manual re-association post-migration.
HubSpot
Engagement: Meeting
Microsoft Dynamics 365 Sales
Appointment
1:1HubSpot meeting engagements map to Dynamics 365 Appointment records. Start Time, End Time, Location, and Subject migrate directly. Attendee records map to Dynamics ActivityParty entries linked to the Appointment, with the Party reference pointing to the corresponding Contact, Lead, or User record.
HubSpot
Engagement: Task
Microsoft Dynamics 365 Sales
Task
1:1HubSpot Task engagements migrate to Dynamics 365 Task records with Subject, Description, Priority, Status, and Due Date preserved. Assigned Owner resolves via the User mapping table. Tasks are linked to the parent record via Regarding lookup using the GUID cross-reference.
HubSpot
Engagement: Note
Microsoft Dynamics 365 Sales
Annotation (Note)
1:1HubSpot Notes (engagement type NOTE) migrate to Dynamics 365 Annotation records linked via the ObjectId and ObjectTypeCode to the parent record (Lead, Contact, Account, or Opportunity). Note body migrates as plain text or HTML depending on source format. File attachments on notes migrate as Dynamics 365 Note attachments linked via Annotation.
HubSpot
Ticket
Microsoft Dynamics 365 Sales
Case
1:1HubSpot Tickets migrate to Dynamics 365 Case if the destination environment includes the Customer Service management app. Ticket pipeline stages map to Case Status values, and ticket priority and owner migrate to the corresponding Case fields. Ticket conversations migrate as Email or Note annotations on the Case.
HubSpot
Custom Object
Microsoft Dynamics 365 Sales
Custom Entity
1:1HubSpot custom objects (Enterprise-only on source) migrate to Dynamics 365 custom entities created in Dataverse before migration begins. We define the custom entity schema, attributes, and lookup relationships to standard entities (Account, Contact, Opportunity) during the migration setup phase, matching the HubSpot custom object API name where possible and applying a __c-equivalent naming convention in Dataverse.
| HubSpot | Microsoft Dynamics 365 Sales | Compatibility | |
|---|---|---|---|
| Contact | Lead or Contact (routing required)1:many | Fully supported | |
| Company | Account1:1 | Fully supported | |
| Deal | Opportunity1:1 | Fully supported | |
| Pipeline | Business Process Flowlossy | Fully supported | |
| Product | Product1:1 | Fully supported | |
| Line Item | Opportunity Product1:1 | Fully supported | |
| Owner | User1:1 | Fully supported | |
| Engagement: Email | Email (EmailActivity)1:1 | Fully supported | |
| Engagement: Call | Phone Call1:1 | Fully supported | |
| Engagement: Meeting | Appointment1:1 | Fully supported | |
| Engagement: Task | Task1:1 | Fully supported | |
| Engagement: Note | Annotation (Note)1:1 | Fully supported | |
| Ticket | Case1:1 | Fully supported | |
| Custom Object | Custom Entity1: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.
HubSpot gotchas
Marketing Contacts billing model is migration-critical
Feature tier gating is not visible until onboarding
Mandatory onboarding fees inflate year-one cost
HubSpot CSV importer cannot migrate engagements or attachments
Custom objects require Enterprise and a pre-existing schema
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 Dynamics environment audit
We audit the source HubSpot portal across tier (Starter/Professional/Enterprise), all custom properties, custom objects, pipeline count, active workflows, active sequences, and engagement volume. We pair this with a Dynamics 365 environment audit: identifying the existing Dataverse environment, security roles, existing entities, and Business Process Flows already in place. The discovery output is a written migration scope, a Lead-Contact routing rule, and a list of custom fields to create in Dynamics before any data moves.
Schema design and custom entity provisioning
We design the destination schema in Dynamics 365. This includes creating custom fields on Account, Contact, Lead, and Opportunity to receive HubSpot custom properties; defining Business Process Flows to match each HubSpot pipeline; setting up Price Lists and Product records; and provisioning any custom entities for HubSpot custom objects. Custom entities in Dataverse are created before any data import. Schema is validated in a Dynamics Sandbox environment before production migration begins.
Sandbox migration and reconciliation
We run a full migration into a Dynamics 365 Sandbox using production-representative data volume. The customer's Dynamics admin and RevOps lead reconcile record counts (Accounts in, Leads in, Contacts in, Opportunities in, Activities in), spot-check 25-50 records against the HubSpot source, and validate that the Business Process Flow stages match the original deal history. Any mapping corrections are documented and applied to the production migration plan before cutover.
Owner reconciliation and User provisioning
We extract every distinct HubSpot Owner referenced on Contact, Company, Deal, and Engagement records and match by email against the Dynamics 365 destination User table. Owners without a matching Dynamics User enter a reconciliation queue. The customer's admin provisions any missing Users (active or inactive) before migration proceeds because Owner (OwningUser) is a required reference on most standard entities. This step is a hard gate before production migration begins.
Production migration in dependency order
We run production migration in record-dependency order: Accounts (from HubSpot Companies), Users (Owner resolution validated), Leads and Contacts (with AccountId resolved and the Lifecycle Stage routing applied as a transform), Opportunities (with AccountId, OwnerId, and Business Process Flow assigned), Products and Price Lists, Opportunity Products (Line Items), and Activity history (Emails, Phone Calls, Appointments, Tasks, Notes via Dataverse batch API). Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and automation rebuild handoff
We freeze HubSpot writes during cutover, run a final delta migration of any records modified during the migration window, then enable Dynamics 365 as the system of record. We deliver the Workflow, Sequence, and automation inventory document to the customer's admin team with a recommended Dynamics rebuild path for each automation. We support a one-week hypercare window where we resolve reconciliation issues raised by the customer's sales team. We do not rebuild HubSpot Workflows or Sequences as Power Automate flows or Business Rules inside the migration scope; that work is a separate engagement.
Platform deep dives
HubSpot
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 HubSpot 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
HubSpot: 110 requests per 10 seconds per installed account for OAuth apps on the latest platform versions (2025.2 / 2026.03). Free accounts: 100 req/10s and 250,000 daily requests. Professional and Enterprise: 190 req/10s. The CRM Search API has a separate ceiling of 4 requests per second per auth token. 429 is returned on exhaust..
Data volume sensitivity
HubSpot 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 HubSpot to Microsoft Dynamics 365 Sales migration scoping. Not seeing yours? Book a call.
Walk through your HubSpot 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 HubSpot
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.