CRM migration

Migrate from HubSpot to Microsoft Dynamics 365 Sales

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 logo

HubSpot

Source

Microsoft Dynamics 365 Sales

Destination

Microsoft Dynamics 365 Sales  logo

Compatibility

86%

12 of 14

objects map 1:1 between HubSpot and Microsoft Dynamics 365 Sales .

Complexity

BStandard

Timeline

4-6 weeks

Rollback included Accuracy guarantee Field-level validation

Try the reverse

Microsoft Dynamics 365 Sales
HubSpot

Overview

What this migration involves

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.

Field-level fidelity

Every standard and custom field arrives verified.

Schema-aware mapping

AI proposes the map; you confirm before any record moves.

Relationships preserved

Parent–child, lookups, and ownership stay linked.

Full activity history

Calls, emails, meetings — with original timestamps.

Attachments & notes

Documents, uploads, and inline notes move with the record.

Why teams make this switch

Two sides of the same decision

Leaving

HubSpot logo

HubSpot

What's pushing teams away

  • Feature tier surprises drive churn — sequences, calling, quoting, and advanced automation are locked behind Professional at $100/seat, causing sticker shock when teams outgrow Starter.
  • Workflow configuration complexity increases at scale — multiple reviewers on Capterra and G2 note that HubSpot experts or significant admin time are required to maintain advanced automation.
  • Cost scales linearly with seats and marketing contacts, creating large bills for teams that grow quickly or inherit high contact counts from a previous CRM.
  • Frequent product updates and UI changes force ongoing re-training — Reddit reviewers in r/hubspot cite difficulty keeping up with constant new features and interface shifts.
  • Multi-brand, multi-region, and complex permission structures expose friction that Enterprise pricing cannot fully resolve, according to RevOps feedback in HubSpot community discussions.

Choosing

Microsoft Dynamics 365 Sales  logo

Microsoft Dynamics 365 Sales

What's pulling them in

  • Deep Microsoft 365, Teams, and Outlook integration makes Microsoft Dynamics 365 Sales a natural fit for Microsoft-first organizations already invested in that ecosystem
  • Sales Enterprise and Premium tiers offer unlimited custom tables and advanced AI-driven forecasting and predictive analytics not available in lower tiers
  • Professional tier pricing at $65 per user per month offers a lower entry cost than Salesforce for SMB teams with straightforward CRM needs
  • Flexible customization options allow businesses to build bespoke apps, tailor forms and views, and integrate with other Dynamics 365 modules
  • Microsoft Copilot AI tools are embedded directly into the sales workflow on Enterprise and Premium, automating routine tasks and providing deal intelligence

Object mapping

How HubSpot objects map to Microsoft Dynamics 365 Sales

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

maps to

Microsoft Dynamics 365 Sales

Lead or Contact (routing required)

1:many
Fully supported

HubSpot 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

maps to

Microsoft Dynamics 365 Sales

Account

1:1
Fully supported

HubSpot 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

maps to

Microsoft Dynamics 365 Sales

Opportunity

1:1
Fully supported

HubSpot 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

maps to

Microsoft Dynamics 365 Sales

Business Process Flow

lossy
Fully supported

Each 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

maps to

Microsoft Dynamics 365 Sales

Product

1:1
Fully supported

HubSpot 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

maps to

Microsoft Dynamics 365 Sales

Opportunity Product

1:1
Fully supported

HubSpot 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

maps to

Microsoft Dynamics 365 Sales

User

1:1
Fully supported

HubSpot 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

maps to

Microsoft Dynamics 365 Sales

Email (EmailActivity)

1:1
Fully supported

HubSpot 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

maps to

Microsoft Dynamics 365 Sales

Phone Call

1:1
Fully supported

HubSpot 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

maps to

Microsoft Dynamics 365 Sales

Appointment

1:1
Fully supported

HubSpot 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

maps to

Microsoft Dynamics 365 Sales

Task

1:1
Fully supported

HubSpot 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

maps to

Microsoft Dynamics 365 Sales

Annotation (Note)

1:1
Fully supported

HubSpot 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

maps to

Microsoft Dynamics 365 Sales

Case

1:1
Fully supported

HubSpot 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

maps to

Microsoft Dynamics 365 Sales

Custom Entity

1:1
Fully supported

HubSpot 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.

Gotchas + challenges

What specifically takes care here

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 logo

HubSpot gotchas

High

Marketing Contacts billing model is migration-critical

High

Feature tier gating is not visible until onboarding

Medium

Mandatory onboarding fees inflate year-one cost

Medium

HubSpot CSV importer cannot migrate engagements or attachments

Medium

Custom objects require Enterprise and a pre-existing schema

Microsoft Dynamics 365 Sales  logo

Microsoft Dynamics 365 Sales gotchas

High

Professional tier 15-table custom table limit blocks migrations

High

October 2024 pricing increase applies at renewal for all customers

Medium

Custom fields must be created in the UI before API writes

Medium

Power Platform request limits apply to bulk migrations

Medium

Activity records orphaned to inactive owners fail silently

Pair-specific challenges

  • Lead-Contact routing has no automated default in Dynamics

    HubSpot collapses all people records into a single Contact object with a Lifecycle Stage property; Dynamics 365 separates unqualified prospects into Lead records and qualified buyers into Contact records attached to Account. We design the routing rule during scoping using the customer's Lifecycle Stage matrix (lead maps to Lead; SQL and beyond map to Contact), apply it as a transform at migration time, and preserve the original Lifecycle Stage in a custom field on both the Lead and Contact for audit. Teams that skip this step end up with Contacts that have no Account (orphaned) or Leads that should have been qualified on day one, requiring manual rework in Dynamics.

  • HubSpot Workflows and Sequences do not migrate to Dynamics 365

    HubSpot Workflows use property-triggered branching with built-in delays and CRM actions that do not map to any Dynamics 365 automation primitive. Dynamics 365 uses Business Rules, Power Automate flows, and classic Workflows for automation — each with different triggers, action types, and scoping rules. Sequences (sales engagement cadences) are a HubSpot-specific sales engagement feature that has no direct Dynamics 365 equivalent. We do not migrate automations as code. We deliver a written inventory of every active HubSpot Workflow and Sequence with its trigger, conditions, actions, and a recommended Dynamics rebuild guide for the customer's admin team.

  • HubSpot Company is not a Dynamics Company object — it is an Account

    HubSpot has a standalone Company object; Dynamics 365 does not. All organizational records in Dynamics 365 live as Account (for organizations) or Contact (for people) — there is no Company entity. The HubSpot Company-to-Account mapping is straightforward for standard fields (name, domain, industry), but any Company-specific custom properties must map to Account custom fields that we create before migration. Teams that assume a Company object exists in Dynamics will create duplicate records if they try to create a Company entity that does not exist.

  • Dataverse batch operations require careful GUID sequencing

    Dynamics 365 requires parent records to exist before child records can reference them. HubSpot allows forward-referencing (a Deal can reference a Contact that does not yet exist). We sequence migrations as: Accounts (from Companies) first, then Users (Owners), then Leads and Contacts with AccountId resolved, then Opportunities with AccountId and OwnerId resolved, then Products and Price Lists, then Line Items, then Activity history. Skipping this sequencing results in referential integrity failures and batch rejection by the Dataverse Web API.

  • HubSpot Marketing Contacts billing flag has no Dynamics equivalent

    HubSpot's Marketing Contacts flag (which determines whether a contact is billed at the marketing contact tier) has no direct Dynamics 365 analog because Microsoft Dynamics 365 Sales uses per-user licensing. We preserve the flag value in a custom field hs_marketing_contact on the migrated Lead or Contact so that if the customer later connects a marketing automation tool (Dynamics 365 Marketing, Customer Insights, or a third-party platform), they can re-segment based on the original billing classification. Email opt-in and opt-out preferences migrate to Dynamics 365 Contact's Email Opt In field.

Migration approach

Six steps for a successful HubSpot to Microsoft Dynamics 365 Sales data migration

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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

Context on both ends of the pair

HubSpot logo

HubSpot

Source

Strengths

  • Genuinely useful free CRM tier with no seat limit on contact records.
  • All-in-one sales engagement layer (sequences, email tracking, calling, dialer) embedded natively in the CRM, eliminating a separate integration.
  • Intuitive interface and fast onboarding for individual reps, per G2 and Capterra reviews.
  • Workflow automation triggers across contacts, deals, and tickets with a visual builder.
  • API coverage for all standard objects including custom objects at Enterprise tier.

Weaknesses

  • Pricing model is contact-based at the marketing layer — importing all records as marketing contacts can multiply the monthly bill by 4×.
  • Feature tier cliffs are frequent surprises: sequences, calling, advanced reporting, and quoting are all gated, often requiring plan upgrades mid-implementation.
  • Mandatory onboarding fees at Professional ($1,500) and Enterprise ($3,500) are not prominently disclosed on the pricing page.
  • API rate limits are restrictive for bulk migration — burst limits of 100-200 req/10sec and search endpoint limits of 4 req/sec require careful job queuing.
  • Custom objects, additional pipelines, and advanced forecasting are Enterprise-only, making cost projections difficult for growing teams.
Microsoft Dynamics 365 Sales  logo

Microsoft Dynamics 365 Sales

Destination

Strengths

  • Native integration with Microsoft 365, Teams, Outlook, and SharePoint for unified productivity workflow
  • Unlimited custom tables and complex workflows on Enterprise tier enable deep customization for complex sales processes
  • AI-driven predictive analytics and deal intelligence on Enterprise and Premium tiers help sales teams prioritize pipeline
  • Dataverse unified data layer provides a consistent API and data model across all Dynamics 365 and Power Platform apps
  • Strong security model with Field-Level Security and Record Ownership rules for governance-conscious enterprises

Weaknesses

  • Sales Professional tier caps custom tables at 15, creating a migration ceiling for highly customized SMB environments
  • October 2024 pricing increases of $15 per user across all tiers apply to existing customers upon renewal
  • Implementation typically requires costly certified partners, adding 30–50% to total project cost
  • Updates and platform releases can disrupt customizations and plugins, requiring regression testing after each wave
  • Non-Microsoft integrations require additional configuration or middleware, limiting flexibility for heterogeneous tech stacks

Complexity grading

How hard is this migration?

Standard CRM migration. 1 of 8 objects need a mapping; the rest are 1:1.

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across HubSpot and Microsoft Dynamics 365 Sales .

  • Object compatibility

    B

    1 of 8 objects need a mapping; the rest are 1:1.

  • Field mapping clarity

    C

    Field mapping is derived from defaults — final spec confirmed during the sample migration.

  • Timeline complexity

    B

    8-object category — typical timelines run 2–7 days end-to-end.

  • API constraints

    B

    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

    A

    HubSpot exposes a bulk API — large-volume migrations stream efficiently.

Estimator

Estimate your HubSpot to Microsoft Dynamics 365 Sales migration cost

Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.

Step 1

What are you migrating?

Pick a category, then your source and destination platforms.

Category

FAQ

Frequently asked questions about HubSpot to Microsoft Dynamics 365 Sales data migrations

Answers to the questions buyers ask most during HubSpot to Microsoft Dynamics 365 Sales migration scoping. Not seeing yours? Book a call.

Can't find your answer?

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 consultation

Most migrations land between four and six weeks for accounts under 20,000 Contacts and 4,000 Deals with no custom objects and a straightforward Lifecycle Stage matrix. Migrations with custom objects, multi-pipeline Deal structures, large engagement histories (over 300,000 activity records), or HubSpot Marketing Hub co-existence requirements move to ten to fourteen weeks because of Business Process Flow design, custom entity schema setup, and Owner-to-User reconciliation. Dynamics 365 implementations broadly (not just data migration) typically require 3-6 months with a certified partner, but the data migration scope alone is shorter.

Adjacent paths

Related migrations to explore

Ready when you are

Move from HubSpot.
Land in Microsoft Dynamics 365 Sales , intact.

Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.

Accuracy guarantee Rollback included Quote in 1 business day