CRM migration

Migrate from Microsoft Dynamics 365 Sales to HubSpot

Field-level mapping, validation, and rollback between Microsoft Dynamics 365 Sales and HubSpot. We move data and schema; workflows are rebuilt natively in HubSpot.

Microsoft Dynamics 365 Sales  logo

Microsoft Dynamics 365 Sales

Source

HubSpot

Destination

HubSpot logo

Compatibility

93%

14 of 15

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

Complexity

BStandard

Timeline

24–72 hours

Rollback included Accuracy guarantee Field-level validation

Try the reverse

HubSpot
Microsoft Dynamics 365 Sales

Overview

What this migration involves

Dynamics 365 Sales stores accounts, contacts, and leads in separate tables with a business-process-flow field (stepname) that has no native HubSpot equivalent. HubSpot uses a single contact object with lifecycle_stage as the unifying property — a contact that never converted in Dynamics becomes a HubSpot contact at the appropriate lifecycle stage, not a separate lead record. We extract Dynamics data via the Dataverse API (accounts, contacts, leads, opportunities, tasks, emails, notes, and custom entities) and map each record into HubSpot's contact, company, deal, and custom object model. Dynamics business process flows — including pipeline stage names, probabilities, and forecast categories — become HubSpot deal pipelines with stage-level mapping. Custom entities in Dynamics migrate as HubSpot custom objects. Dynamics workflows, plugins, and SLA configurations do not migrate and must be rebuilt in HubSpot's automation tools. The migration runs in a staged sequence: accounts first, then contacts with owner resolution by email match, then opportunities, then activities. A delta-pickup window (24–48 hours) captures any records modified in Dynamics during the cutover. We deliver a field-level diff of the sample migration before the full run commits.

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

Microsoft Dynamics 365 Sales  logo

Microsoft Dynamics 365 Sales

What's pushing teams away

  • Steep learning curve and complex role hierarchies make user adoption difficult, especially for teams without dedicated IT support
  • Poor implementation partner experiences leave organizations stuck with misconfigured systems and no clear path to remediation
  • Performance degrades noticeably with large datasets and complex customer journeys, particularly in marketing and multi-module environments
  • Integration with non-Microsoft products requires additional configuration or third-party middleware, limiting flexibility
  • Mandatory implementation partner involvement to properly configure the system adds significant upfront cost beyond licensing fees

Choosing

HubSpot logo

HubSpot

What's pulling them in

  • Lowest barrier to entry of any major CRM — the free tier with unlimited contacts lets teams validate fit before committing to a paid plan, according to G2 and Capterra reviewers.
  • Native integration between the CRM and sales engagement tools (sequences, email tracking, dialer) means no separate sync configuration, a theme across G2 Sales Hub reviews.
  • Pipeline visualization, deal tracking, and automated workflows are consistently praised as intuitive and easy to set up without developer involvement.
  • Strong onboarding for new team members — reviewers on Capterra and G2 highlight how quickly new reps become productive without formal training.
  • The HubSpot platform ecosystem (Marketing, Sales, Service, CMS hubs) allows growing companies to consolidate tools without building new integrations.

Object mapping

How Microsoft Dynamics 365 Sales objects map to HubSpot

Each row shows how a Microsoft Dynamics 365 Sales object lands in HubSpot, including any object-level transformations, lookup resolution, or schema-design dependencies.

Typical mapping — final map is confirmed during the sample migration step.

Microsoft Dynamics 365 Sales

Account

maps to

HubSpot

Company

1:1
Fully supported

Dynamics Account maps directly to HubSpot Company. Company name, website, address fields, industry, employee count, and annual revenue transfer as-is. HubSpot does not have a separate parent-account hierarchy in the same way as Dynamics — parent-child relationships map via HubSpot association labels.

Microsoft Dynamics 365 Sales

Contact

maps to

HubSpot

Contact

1:1
Fully supported

Dynamics Contact maps one‑to‑one to HubSpot Contact, preserving standard fields such as full name, email, phone, job title, and address. Owner resolution matches Dynamics OwnerId email to an existing HubSpot user; unmatched records are flagged for manual assignment before migration. Dynamics StateCode (active/inactive) translates to the corresponding HubSpot lifecycle stage, ensuring active contacts land in the correct lifecycle state.

Microsoft Dynamics 365 Sales

Lead

maps to

HubSpot

Contact

1:1
Fully supported

Dynamics Lead maps to HubSpot Contact, not a separate lead object. Unconverted Leads land in HubSpot at the lifecycle stage you specify (typically 'lead' or 'MQL'). Dynamics StateCode=1 (Qualified) routes to lifecycle stage 'SQL'. We preserve the original Lead creation date as a custom datetime field.

Microsoft Dynamics 365 Sales

Lead (unqualified)

maps to

HubSpot

Contact with lifecycle stage = lead

1:many
Fully supported

Dynamics Leads that were never converted split into HubSpot contacts at the 'lead' lifecycle stage. We apply a configurable routing rule based on Lead StateCode and StatusCode so your HubSpot lifecycle distribution reflects your original Dynamics pipeline state at migration time.

Microsoft Dynamics 365 Sales

Opportunity

maps to

HubSpot

Deal

1:1
Fully supported

Dynamics Opportunity maps to HubSpot Deal. Deal name, amount, close date, probability, and owner transfer directly. Dynamics stepname (business process flow stage) maps to a HubSpot deal pipeline stage — each Dynamics pipeline with its own business process flow becomes a separate HubSpot deal pipeline.

Microsoft Dynamics 365 Sales

Business Process Flow (stepname field)

maps to

HubSpot

Deal Pipeline Stage

1:1
Fully supported

Dynamics stores pipeline stage as stepname within a business process flow, not on the Opportunity itself. We extract stepname per Opportunity and map it to the corresponding HubSpot deal stage in the target pipeline. Stage entry dates map to HubSpot deal stage history timestamps.

Microsoft Dynamics 365 Sales

Task

maps to

HubSpot

Engagement (Task/Email/Call)

1:1
Fully supported

Dynamics tasks (phone calls, follow-up tasks) map to HubSpot engagements on the contact timeline. Original timestamps, owners, and subject lines transfer. Task Regarding (linked record) maps to HubSpot's association model so the activity appears on the correct contact or deal.

Microsoft Dynamics 365 Sales

Email (EmailSendProfile / EmailActivity)

maps to

HubSpot

Engagement Email

1:1
Fully supported

Dynamics email activities map directly to HubSpot email engagements, preserving sender, recipient, subject, body (plain text or HTML), and sent timestamp. Direction (inbound or outbound) is recorded using HubSpot's email direction property. Tracking events such as opens and clicks from Dynamics appear as HubSpot email events on the contact timeline, maintaining engagement history. Attachments in Dynamics emails are stored as HubSpot file links on the engagement record.

Microsoft Dynamics 365 Sales

PhoneCall

maps to

HubSpot

Engagement Call

1:1
Fully supported

Dynamics phone call records map to HubSpot call engagements, preserving the call subject, duration, direction (inbound or outbound), and the CallOutcome field. Call duration and direction are displayed on the HubSpot contact timeline for accurate activity reporting. If Dynamics stores a call recording URL, it is transferred as a custom property on the HubSpot engagement so users can replay the conversation directly from the record.

Microsoft Dynamics 365 Sales

Note (Annotation)

maps to

HubSpot

Engagement Note

1:1
Fully supported

Dynamics notes attached to any record such as Account, Contact, or Opportunity are mapped to HubSpot notes on the corresponding contact or deal, preserving note body, author, and file links. The note-created and note-modified timestamps transfer to HubSpot as datetime properties, maintaining an audit trail for compliance. Attachments referenced in Dynamics notes are linked as HubSpot file references so users can access the original documents from the HubSpot record.

Microsoft Dynamics 365 Sales

Custom Entity (Dataverse table)

maps to

HubSpot

Custom Object

1:1
Fully supported

Dynamics custom tables in Dataverse map 1:1 to HubSpot custom objects. All custom fields transfer as HubSpot custom properties. Lookup relationships from custom entities to Account or Contact map to HubSpot association labels — many-to-many junction tables become HubSpot many-to-many association types.

Microsoft Dynamics 365 Sales

Product

maps to

HubSpot

Product (HubSpot line items)

1:1
Fully supported

Dynamics Product catalog entries — including product name, product number, default unit price, and quantity — map to HubSpot products, where they become available for line items on deals. Each HubSpot product can be associated with deals via line items, allowing revenue calculations. When Dynamics contains price lists, we create a value‑mapping table that translates each Dynamics price list price to the HubSpot product price, ensuring pricing is applied during migration.

Microsoft Dynamics 365 Sales

User / Owner

maps to

HubSpot

User

1:1
Fully supported

Dynamics OwnerId (user or team) resolves by email match to HubSpot users. Records owned by Teams route to a designated HubSpot user or queue. Unmatched owners are flagged before migration — your team either creates HubSpot users or reassigns records before the full run.

Microsoft Dynamics 365 Sales

Competitor

maps to

HubSpot

Custom Property on Deal

1:1
Fully supported

Dynamics Opportunity Competitors lack a native HubSpot counterpart, so we capture each competitor name as a multi-select custom property on the HubSpot Deal. The property stores the list of competitors associated with the opportunity, preserving competitive intelligence context for the deal. If Dynamics stores competitor details such as website or revenue, those can be added as separate custom properties on the deal record to keep richer context.

Microsoft Dynamics 365 Sales

Territory

maps to

HubSpot

Custom Property on Contact/Deal

1:1
Fully supported

Dynamics territory assignment (Territory object) stores region or district on the Opportunity, and may include levels such as region, district, and zone. HubSpot lacks a native territory field, so we create a custom pick-list property (Territory__c) and map each Dynamics territory value to a HubSpot pick-list entry. If Dynamics uses territory fields, we replicate them as custom properties on the deal or contact record, preserving the territorial hierarchy for reporting.

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.

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

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

Pair-specific challenges

  • Dynamics business process flows have no native HubSpot equivalent and must be rebuilt

    Dynamics stores pipeline stage as stepname within a business process flow — a separate metadata object linked to the Opportunity. HubSpot deal pipelines handle stage sequencing differently: each stage has a default probability and optional automation triggers, but there is no concept of a named 'business process flow' that controls which fields are visible per stage. We extract stepname values and map them to HubSpot deal stage names in the correct order, but the process flow logic (required fields per stage, branching, and SLA timers) does not transfer. Your HubSpot admin will need to configure stage-specific required fields and any automation triggers inside the HubSpot workflow builder after migration. This is the highest-severity gotcha for Dynamics-to-HubSpot migrations because it directly impacts sales process consistency post-switch.

  • Dynamics StateCode and StatusCode routing to HubSpot lifecycle stage requires explicit mapping rules

    Dynamics Lead StateCode (New, Qualified, Converted) and StatusCode (the reason underneath StateCode) do not map directly to HubSpot's lifecycle_stage pick-list values. An unqualified Lead with StateCode=0 could mean 'subscriber' or 'lead' depending on your Dynamics configuration. We ask your team to define the StateCode-to-lifecycle-stage routing table before migration runs — this prevents mis-routing where, for example, a dead Lead lands in HubSpot as a 'customer'. Once the routing table is confirmed, we apply it consistently across all unconverted Leads. Custom StatusCode values require value-by-value mapping.

  • Dynamics opportunity contact roles (OpportunityContactRole) need explicit association rebuilding

    Dynamics links Contacts to Opportunities through the OpportunityContactRelation entity with a RoleName field (Decision Maker, Evaluator, etc.). HubSpot's deal-contact association uses a flat contact list with optional association labels rather than a dedicated junction object with role names. We migrate the primary contact as the default association on the HubSpot Deal. Additional contacts from OpportunityContactRelation are added as associated contacts — their RoleName is preserved as a custom property (Contact_Role__c) on the deal-contact link so the role context is not lost, but HubSpot's native UI will not surface it in the standard deal card.

  • Dynamics attachments stored in SharePoint require re-hosting to HubSpot Files or connected storage

    Dynamics 365 Sales can store file attachments on notes and emails in SharePoint Online via the-notes-(images)-and-attachments pathway. HubSpot Files stores attachments natively within the platform up to the file-size limit (250MB per file). Files stored in the Dynamics/SharePoint linked storage do not automatically transfer — they must be downloaded from SharePoint and re-uploaded to HubSpot Files or re-linked to a connected SharePoint library. Large attachment sets (hundreds of files) extend the migration timeline because each file requires a separate download-and-upload operation.

  • Dynamics custom entities with Dataverse lookup relationships need HubSpot association-label planning

    Custom Dataverse tables in Dynamics often have lookup fields pointing to Account, Contact, or other custom entities. HubSpot's custom objects support associations via labels, but the label vocabulary (e.g., 'belongs_to', 'associated_with') needs to be designed per relationship type. N-to-N junction tables in Dynamics map cleanly to HubSpot many-to-many associations. However, if your Dynamics custom entity uses multiple lookup fields to the same entity type (e.g., Primary_Customer__c and Secondary_Customer__c both pointing to Account), you need to decide how to name each association label in HubSpot so the two relationships remain distinguishable. We surface these multi-lookup cases in the pre-migration schema plan.

Migration approach

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

  1. Audit Dynamics data model and build the field mapping specification

    FlitStack AI connects to your Dynamics 365 instance via the Dataverse API and inventories all active tables — accounts, contacts, leads, opportunities, tasks, emails, notes, and custom entities. We extract the business process flow definitions (stepname sequences per pipeline) and the StateCode/StatusCode pick-list values. We then produce a field mapping specification that documents exactly how each Dynamics field translates to a HubSpot property, including value mappings for pick-lists and routing rules for lead-to-lifecycle-stage assignment. Your team reviews and approves the specification before any data moves.

  2. Create HubSpot properties and deal pipelines for the migration target

    Before data lands, we create all required HubSpot custom properties (custom fields) referenced in the field mapping — for example, Original_Create_Date__c, Dynamics_Contact_ID__c, Dynamics_Lead_ID__c, and Territory__c. We also create the HubSpot deal pipelines that correspond to your Dynamics business process flows, defining each stage name and probability matching the Dynamics stepname sequence. HubSpot's pipeline stage order must be configured manually in HubSpot's pipeline settings, so we deliver step-by-step setup instructions as part of the pre-migration plan.

  3. Resolve owners and map Dynamics users to HubSpot users by email

    Dynamics OwnerId (on every record) resolves by email match to HubSpot users. FlitStack AI generates an owner-resolution report listing matched pairs and any Dynamics owners without a corresponding HubSpot user account. Unmatched owners are flagged before the migration — your team either creates HubSpot users for them or designates a fallback HubSpot owner. No record migrates with an unresolved owner. Team-owned records (Dynamics team sharing) are assigned to a designated HubSpot user or a HubSpot Sales team as you specify.

  4. Migrate accounts and contacts first, then leads and opportunities

    We sequence the migration to respect HubSpot's foreign-key requirements: accounts (companies) migrate first so contact associations resolve, then contacts and unconverted leads land with their company links intact, then opportunities (deals) attach to their associated contacts and companies, then activities (tasks, emails, notes) attach to their parent records. This ordering ensures that every deal in HubSpot has at least one associated contact and company when the migration completes — the minimum required for deal reporting to function correctly.

  5. Run a sample migration with field-level diff and verify routing rules

    A representative sample — typically 200–500 records spanning each major entity type — migrates first. We generate a field-level diff showing the source value in Dynamics, the mapped value in HubSpot, and any transformation notes. You verify the lifecycle-stage routing for converted vs. unconverted leads, the deal-stage mapping for each pipeline, and owner resolution. Any discrepancies in the sample are corrected in the mapping specification before the full migration runs.

  6. Execute full migration with delta-pickup and one-click rollback

    The full migration runs against your HubSpot instance. A delta-pickup window (24–48 hours after the initial run) captures any records created or modified in Dynamics during the cutover so HubSpot reflects the final state of Dynamics at go-live. FlitStack AI audit log records every operation — record count per entity, field-level mapping applied, and owner resolution summary. If reconciliation reveals unexpected gaps, one-click rollback reverts the HubSpot environment to its pre-migration state so your team can investigate without data loss.

Platform deep dives

Context on both ends of the pair

Microsoft Dynamics 365 Sales  logo

Microsoft Dynamics 365 Sales

Source

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

HubSpot

Destination

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.

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 Microsoft Dynamics 365 Sales and HubSpot.

  • 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

    Microsoft Dynamics 365 Sales : Per-user and per-environment request limits enforced across Power Platform; exact limits vary by license tier and environment capacity.

  • Data volume sensitivity

    A

    Microsoft Dynamics 365 Sales exposes a bulk API — large-volume migrations stream efficiently.

Estimator

Estimate your Microsoft Dynamics 365 Sales to HubSpot 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 Microsoft Dynamics 365 Sales to HubSpot data migrations

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

Can't find your answer?

Walk through your Microsoft Dynamics 365 Sales to HubSpot migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Most Dynamics-to-HubSpot migrations complete within 24–72 hours of clock time for under 50,000 records. Complex setups with 500,000+ records or multiple custom Dataverse entities extend to 5–10 days. The pre-migration planning phase — mapping business process flows to HubSpot pipelines and defining StateCode-to-lifecycle-stage routing rules — typically adds 3–5 business days and is the longest dependency before data moves. Field-level diff validation on the sample migration run adds 4–8 hours.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Microsoft Dynamics 365 Sales .
Land in HubSpot, 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