Helpdesk migration

Migrate from Dynamics 365 Customer Service to HubSpot Service Hub

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

Dynamics 365 Customer Service logo

Dynamics 365 Customer Service

Source

HubSpot Service Hub

Destination

HubSpot Service Hub logo

Compatibility

64%

9 of 14

objects map 1:1 between Dynamics 365 Customer Service and HubSpot Service Hub.

Complexity

BStandard

Timeline

3-5 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from Dynamics 365 Customer Service to HubSpot Service Hub is a migration from a Dataverse-backed enterprise helpdesk to a CRM-native service platform. Dynamics 365 stores Cases as Dataverse incident rows with entitlements, SLAs, and Omnichannel session transcripts; HubSpot Service Hub uses a Ticket object with pipelines, a built-in Knowledge Base, and conversation threads that replace the separate Omnichannel session model. We resolve the Case-to-Ticket mapping first, preserve Contacts and Accounts with their parent-child hierarchy intact, and migrate Knowledge Articles with their content and versioning. SLA definitions and Entitlement contracts require documentation as the customer rebuilds them inside HubSpot because HubSpot does not ship a native SLA engine. Power Automate cloud flows cannot migrate as data; we deliver a written flow inventory with recommended HubSpot Workflow equivalents for the customer's admin to rebuild post-migration. Omnichannel voice recordings, chat transcripts, and channel-specific attachments are migrated as conversation text and metadata, with a separate report flagging channel assets that need re-upload in HubSpot.

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

Dynamics 365 Customer Service logo

Dynamics 365 Customer Service

What's pushing teams away

  • Total cost of ownership escalates quickly: Premium sits at $195/user/month with annual increases, and most organisations also pay for Power Platform requests, Dataverse storage, and partner implementation fees on top.
  • The customer service hub UI is cluttered for new agents, the mobile app is feature-limited, and meaningful customisation requires JavaScript and Power Fx skills rather than the click-to-configure experience the marketing implies.
  • Microsoft support quality is reportedly inconsistent — resolution times vary widely by channel and region, which becomes painful when production Cases stall on a platform issue rather than an agent issue.
  • Setup and go-live timelines run long because the platform's breadth (queues, routing rules, entitlements, SLAs, knowledge taxonomy, Copilot prompts, Power Automate flows) requires deliberate configuration rather than out-of-the-box defaults.

Choosing

HubSpot Service Hub logo

HubSpot Service Hub

What's pulling them in

  • Unified CRM context means every support ticket links directly to the Contact and Company record without a separate integration
  • Free tier provides unlimited support seat access with basic ticketing and a shared inbox for small teams to validate fit before committing
  • Omnichannel routing consolidates email, live chat, Facebook Messenger, WhatsApp, and Instagram DM into one queue
  • Built-in customer success workspace gives health scores and portfolio views that other standalone helpdesks cannot match
  • AI-powered Breeze agent automates common resolutions and surfaces knowledge base articles without agent intervention

Object mapping

How Dynamics 365 Customer Service objects map to HubSpot Service Hub

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

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

Dynamics 365 Customer Service

Case (Incident)

maps to

HubSpot Service Hub

Ticket

1:1
Fully supported

Dynamics 365 Case records map to HubSpot Service Hub Tickets with the incident ID preserved in hs_alliance_vendor_code or an equivalent custom property, ticket subject from title, and description from the Case body. Case status (Active, Resolved, Cancelled) maps to HubSpot Ticket status (Open, Closed, Deleted) with a custom hs_case_status__c field preserving the original Dynamics state. Dynamics 365 priority (Normal, High, Critical) maps to HubSpot priority. HubSpot does not have a native SLA timer on Tickets; SLA breach times migrate as a custom datetime property and the SLA definition migrates as a separate JSON spec document for the customer to implement manually or via a marketplace SLA app.

Dynamics 365 Customer Service

Contact

maps to

HubSpot Service Hub

Contact

1:1
Fully supported

Dynamics 365 CE Contact records migrate to HubSpot Contacts. The primary email address is used as the dedupe key. Communication preferences (emailoptout, donotpostalmail) map to HubSpot's hs_email_optout and associated subscription properties. Contact hierarchy (reports-to relationships) migrates as a custom hs_reports_to__c field since HubSpot does not have a native contact hierarchy object.

Dynamics 365 Customer Service

Account

maps to

HubSpot Service Hub

Company

1:1
Fully supported

Dynamics 365 Account records map to HubSpot Companies. The account domain name becomes the Company website field. Account-Customer and Account-Partner relationship types from Dynamics do not have a direct HubSpot equivalent and migrate as a custom hs_relationship_type__c property on the Company record. Parent Account hierarchy (Account hierarchies with a top-level root) migrates to HubSpot Company parent-company linkage with a custom hs_parent_account_id__c field for the original Dataverse parent reference.

Dynamics 365 Customer Service

Knowledge Article

maps to

HubSpot Service Hub

Knowledge Base Article

1:1
Fully supported

Dynamics 365 Knowledge Articles migrate to HubSpot Knowledge Base articles with title, body content, language, status (Draft, Published, Archived), and version number preserved. Dynamics article category taxonomy (hierarchical knowledge categories in Dataverse) flattens to HubSpot Knowledge Base categories because HubSpot does not support nested category hierarchies. We export the original category path as a custom property hs_article_category_path__c so the customer can reconstruct the taxonomy manually if needed. Article attachments migrate as HubSpot Knowledge Base file attachments.

Dynamics 365 Customer Service

SLA (SLA Definition and SLA Item)

maps to

HubSpot Service Hub

SLA Documentation Spec

lossy
Fully supported

Dynamics 365 SLA definitions (first response time, resolution time, business hours, pause conditions, warning thresholds) are exported as a structured JSON specification document per active SLA. HubSpot Service Hub does not include a native SLA engine at any tier; SLA enforcement cannot migrate as live data. We deliver a written spec for each SLA that the customer uses to configure manual SLA tracking, a third-party SLA app from the HubSpot marketplace, or a custom HubSpot Workflow to send deadline reminders. The active SLA instance on each open Case migrates as a custom property on the Ticket holding the SLA name and breach datetime.

Dynamics 365 Customer Service

Entitlement and Entitlement Template

maps to

HubSpot Service Hub

Ticket Custom Properties

lossy
Fully supported

Dynamics 365 Entitlements represent support contracts with allocated hours or case counts, channel restrictions (email, phone, chat), and remaining balance. The entitlement name, terms, and remaining balance migrate as custom properties on the HubSpot Ticket (hs_entitlement_name__c, hs_entitlement_hours__c, hs_entitlement_channel__c). The contractual enforcement logic (restricting channel access when hours are exhausted) does not migrate because HubSpot does not have a native entitlement enforcement engine. We document each Entitlement as a written record for the customer to rebuild inside HubSpot via Workflows or a marketplace entitlement app.

Dynamics 365 Customer Service

Email Activity (Email)

maps to

HubSpot Service Hub

Conversation (Email Thread)

1:1
Fully supported

Dynamics 365 Email activities linked to Cases migrate to HubSpot Conversations with email type. The email body, subject, from, to, cc, and timestamp migrate. Activity parties (from, to, cc) resolve to HubSpot Contact or Company records by email match. For Emails linked to Cases, the Conversation attaches to the corresponding migrated Ticket via hs_ticket_id__c. Large email volumes use HubSpot's Conversations API with batch operations and retry on rate limit responses.

Dynamics 365 Customer Service

Phone Call Activity

maps to

HubSpot Service Hub

Conversation (Call) or Ticket Engagements

1:1
Fully supported

Dynamics 365 Phone Call activities map to HubSpot Conversation records with type call. Call duration (durationinminutes) and disposition (callpoutcome) migrate to HubSpot call duration and disposition properties. Call recording URLs from Dynamics do not link automatically in HubSpot; we migrate the recording URL as a custom property and flag that the customer needs to re-host or re-link recordings in HubSpot's supported storage if the source URL is not externally resolvable after migration.

Dynamics 365 Customer Service

Task Activity

maps to

HubSpot Service Hub

Task

1:1
Fully supported

Dynamics 365 Task activities linked to Cases migrate to HubSpot Engagements as Tasks attached to the migrated Ticket or Contact. Task subject, description, priority, due date, and status map directly. Task owner resolves to a HubSpot User by email match. Activities with no parent Case link directly to the Contact.

Dynamics 365 Customer Service

Appointment Activity

maps to

HubSpot Service Hub

Meeting Engagement

1:1
Fully supported

Dynamics 365 Appointment activities (meeting records with start time, end time, location, required and optional attendees) migrate to HubSpot Meeting engagements. Start and end timestamps preserve the original scheduling data. Required attendees resolve by email to HubSpot Contacts; optional attendees migrate with an indicator flag. HubSpot Meeting engagements attach to the Contact or Ticket record using the hs_meeting_target_id__c property carrying the original regardingobjectid.

Dynamics 365 Customer Service

Custom Dataverse Table and Column

maps to

HubSpot Service Hub

Custom HubSpot Property or Custom Object

lossy
Fully supported

Customers extending Dynamics 365 Customer Service with custom Dataverse tables and columns require a schema inventory before migration. We document every custom table, its columns, and data types, then map each to a HubSpot equivalent: text fields to single-line text, option sets to dropdown or radio selection, decimal numbers to number properties, and booleans to checkboxes. Lookup relationships from custom Dataverse tables that reference standard tables (Contact, Account, Case) resolve to HubSpot association properties. Multi-select option sets require a value translation table since HubSpot does not have a native multi-select property type without Data Hub. We pre-create the destination custom properties in HubSpot before record migration begins.

Dynamics 365 Customer Service

Note and File Attachment (Annotation Table)

maps to

HubSpot Service Hub

HubSpot File Attachments on Ticket or Contact

1:1
Fully supported

Dynamics 365 Notes stored on the annotation table attached to Cases, Contacts, or Accounts migrate as HubSpot attachments on the corresponding Ticket or Contact. Note text and title preserve. Large file attachments are chunked through the Dataverse Web API within the per-request size limit and uploaded to HubSpot via the Files API. Each attachment maintains its parent record linkage (regardingobjectid) so that the correct Ticket or Contact in HubSpot carries the attachment. Annotations stored in SharePoint or external blob storage via Dynamics' document management integration require a separate re-upload step because the external URL references will not resolve post-migration.

Dynamics 365 Customer Service

Power Automate Cloud Flows (Case-triggered)

maps to

HubSpot Service Hub

Workflow Documentation Inventory

lossy
Fully supported

Power Automate cloud flows that trigger on Case create, update, or status change cannot be exported as migration data. We inventory every active cloud flow, document its trigger conditions, actions, branches, and downstream dependencies, and deliver the inventory as a structured spreadsheet. The customer uses this to rebuild the equivalent logic in HubSpot Workflows or with a HubSpot partner. Flows that interact with external systems (SharePoint, Dataverse tables, Microsoft 365 services) may require a third-party integration or webhook rebuild.

Dynamics 365 Customer Service

Customer Voice Survey Response

maps to

HubSpot Service Hub

Ticket Custom Properties

lossy
Fully supported

Customer Voice survey responses linked to Cases via Activity records migrate as ticket properties (hs_survey_score__c, hs_survey_responses__c JSON payload) on the corresponding HubSpot Ticket. The survey response timestamp and respondent contact migrate. Survey definitions themselves reside in Customer Voice and are not portable to HubSpot; the Help Desk Migration connector lists Customer Voice as a non-migratable entity. We document the source Customer Voice survey URLs so the customer can recreate equivalent surveys in HubSpot's built-in surveys tool or a third-party alternative.

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.

Dynamics 365 Customer Service logo

Dynamics 365 Customer Service gotchas

High

Service Protection API limits will throttle bulk migration loads

Medium

OData v4 paging caps reads at 5,000 records per page

High

Power Automate flows do not migrate as data

Medium

Licensing tier gates which capabilities migrate cleanly

Medium

Omnichannel conversation history is fragmented across channels

HubSpot Service Hub logo

HubSpot Service Hub gotchas

High

Rate limits throttle large migration API calls

High

Side conversations and Zendesk macros have no HubSpot equivalent

High

HubSpot stores ticket history as fragmented engagement objects

Medium

Custom Objects require Enterprise tier in HubSpot

Medium

Ticket pipeline stage probability values do not export cleanly

Pair-specific challenges

  • The HubSpot-Dynamics native connector skips complex field types and custom entities

    HubSpot's built-in Microsoft Dynamics 365 connector supports basic field types and standard objects only. Lookup (reference) fields, multi-select option sets, and custom Dataverse tables are not mapped out of the box and require manual field mapping configuration per entity. If your Dynamics 365 Customer Service organisation uses custom tables to store contract terms, product configurations, or regulatory classifications, the native connector will not carry them without significant custom setup. We bypass the connector for the migration and use the Dataverse Web API directly to read all objects including custom tables, apply transformation logic, and write to HubSpot via the HubSpot CRM API.

  • Dataverse Service Protection API limits throttle bulk reads from Dynamics 365

    The Dynamics 365 Web API enforces a Service Protection threshold of roughly 6,000 requests per user within any rolling 5-minute window. Bulk exports of Cases, Activities, and Knowledge Articles from a populated tenant can exceed this threshold and receive HTTP 429 responses mid-run. We use a dedicated application user with the Bulk Data Loader pattern, batch reads to 5,000 records per OData page, throttle write operations, and honour the Retry-After header so the migration does not stall. We also pause between object types to let the rolling window reset.

  • Omnichannel session transcripts and channel attachments require manual re-upload

    Dynamics 365 Omnichannel stores chat sessions, voice call metadata, SMS threads, and social messages as a separate session and message table tree linked to Cases. Channel-specific assets (voice recordings stored in Azure, chat file attachments, social media payloads) often reference external storage URLs from the original Microsoft cloud environment. We export conversation transcript text and metadata as Ticket engagement records in HubSpot. Channel-side attachments and voice recordings that reference external Microsoft URLs do not migrate automatically; we produce a separate manifest of these assets that the customer re-uploads or re-links in HubSpot.

  • Power Automate flows, Unified Routing rules, and Copilot prompts do not migrate

    Cloud flows that trigger on Case state changes are business logic, not data, and cannot be exported as part of a standard record migration. Unified Routing decision tables and skill-based assignment logic live in the Dynamics 365 routing engine and have no equivalent in HubSpot Service Hub. Copilot Service Agent prompts and AI summarisation settings are Microsoft 365 Copilot entitlements that do not transfer to HubSpot. We document every active Power Automate flow and routing rule in a written inventory spreadsheet so the customer's admin can rebuild the automation in HubSpot Workflows or through a partner implementation. This work is outside standard migration scope.

  • HTML email templates with verbatim href attributes lose link values post-migration

    Microsoft documented a known issue in Dynamics 365 Customer Service where verbatim HTML tags, such as href attributes in email templates that are not properly encoded, have their values stripped by the content sanitation library. If the source organisation uses email templates with raw href links that were never encoded, the href values will be absent in the migrated template. We scan for unencoded href tags in template bodies during the discovery audit and flag affected templates. These must be repaired in Dynamics 365 before export or corrected post-migration in HubSpot before the template is used in a live workflow.

Migration approach

Six steps for a successful Dynamics 365 Customer Service to HubSpot Service Hub data migration

  1. Discovery and scoping

    We audit the source Dynamics 365 Customer Service organisation across tier (Professional, Enterprise, Premium), custom Dataverse tables and columns, active Power Automate cloud flows, Unified Routing configuration, Omnichannel channel inventory, Knowledge Article taxonomy and version count, SLA definitions, Entitlement count and remaining balances, and engagement volume per activity type. We pair this with a HubSpot Service Hub tier recommendation: Starter for small teams, Professional ($90/seat) for knowledge base and customer portal needs, Enterprise ($150/seat) for advanced reporting and Salesforce-tier custom objects. The discovery output is a written migration scope document, a feature delta report if tier changes, and a Power Automate flow inventory spreadsheet.

  2. Schema design and HubSpot property creation

    We pre-create every custom HubSpot property, custom object, and team in HubSpot before any record data moves. This includes mapping Dynamics custom columns to typed HubSpot properties, creating custom picklist option sets for option-set values from Dynamics, provisioning Knowledge Base categories mapped to the Dynamics article taxonomy, and configuring Ticket pipelines and stages matched to the Dynamics Case statuses. Schema is validated in a HubSpot test portal before production migration begins. We also create a reconciliation spreadsheet for mapping Dynamics Queue names to HubSpot Teams.

  3. Parent-record migration sequence

    We run production migration in strict dependency order: Contacts first (with email as dedupe key), then Accounts mapped to Companies (with parent-account linkage resolved), then Cases mapped to Tickets (with Contact and Company lookups satisfied). SLA breach times and Entitlement terms are written as custom properties on each Ticket during the Case migration phase. Knowledge Articles migrate after Cases so that article linking from Cases can reference the correct Knowledge Base article IDs in HubSpot.

  4. Activity history and engagement migration

    Email, Phone Call, Task, and Appointment activities linked to Cases migrate to HubSpot Engagements (Conversations and Tasks) attached to the corresponding Tickets and Contacts. We resolve HubSpot Owner IDs by matching Dynamics User emails to HubSpot Users. Omnichannel session transcripts and channel metadata migrate as Ticket engagement records with a custom hs_channel_type__c property; voice recording URLs and chat file attachments are flagged in a separate manifest for manual re-upload. Large activity volumes use HubSpot's batch API with pagination and retry on 429 responses.

  5. Sandbox validation and delta migration

    We run a full migration into a HubSpot test portal before the production cutover. The customer's support operations lead spot-checks 30-50 Tickets against the source Cases, validates that Knowledge Article content is intact, confirms that activity timestamps match, and signs off the mapping before the production window opens. Any corrections happen in the test portal, not in production. A final delta migration captures any Cases, Contacts, or activities modified during the migration window.

  6. Cutover, validation, and handoff

    We freeze writes to the Dynamics 365 Customer Service organisation during the cutover window. A final delta of any new or updated records runs into HubSpot. We deliver the Power Automate flow inventory, the SLA JSON specification documents, the Omnichannel asset manifest, and the Entitlements rebuild guide. We resolve reconciliation issues raised by the customer's support team during a one-week hypercare window. We do not rebuild Power Automate flows as HubSpot Workflows, re-create Customer Voice surveys, or configure HubSpot SLA enforcement apps; these are separate engagements.

Platform deep dives

Context on both ends of the pair

Dynamics 365 Customer Service logo

Dynamics 365 Customer Service

Source

Strengths

  • Dataverse-backed model gives Cases a real relational schema and a full Web API for migration and BI.
  • Unified Routing handles skill-based, capacity-aware case distribution across Omnichannel without bolt-ons.
  • Native Outlook, Teams, SharePoint, and Power BI integration for organisations already on Microsoft 365.
  • Copilot Service Agent and AI summarisation are bundled with Microsoft 365 Copilot at no incremental cost.
  • Configurable SLAs with business hours, pause conditions, and KPI rollups for tiered support contracts.

Weaknesses

  • Licensing stack adds up fast: per-user, Power Platform requests, Dataverse storage, and capacity entitlements.
  • Customisation beyond out-of-the-box configuration requires JavaScript, Power Fx, and partner expertise.
  • Customer service hub UI is dense and the mobile app trails the web experience in functionality.
  • Microsoft support resolution times are inconsistent; partner support is often necessary for production issues.
  • Implementation timeline runs months, not weeks, due to the platform's configurable surface area.
HubSpot Service Hub logo

HubSpot Service Hub

Destination

Strengths

  • Unified CRM object model means support context is always linked to sales and marketing data
  • Generous free tier with unlimited tickets and a shared inbox for small teams
  • Omnichannel inbox consolidates email, live chat, and major messaging platforms natively
  • Customer Success Workspace provides portfolio-level health scores without a separate tool
  • AI agent (Breeze) handles Tier-1 resolutions and knowledge base deflection automatically

Weaknesses

  • Per-seat pricing with mandatory onboarding fees inflates year-one cost significantly
  • Ticket history stored as fragmented engagement objects across APIs complicates export and migration
  • Custom Objects locked behind Enterprise tier limits portability for mid-market teams
  • Help desk depth—routing rules, SLA management, advanced reporting—trails dedicated tools like Zendesk
  • Setup and configuration requires real time investment; out-of-box defaults rarely fit existing workflows

Complexity grading

How hard is this migration?

Standard Helpdesk migration. 2 of 7 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 Dynamics 365 Customer Service and HubSpot Service Hub.

  • Object compatibility

    B

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

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

  • API constraints

    B

    Dynamics 365 Customer Service: Service Protection API limits — roughly 6,000 requests per user per rolling 5-minute window per web server; 429 responses include Retry-After header.

  • Data volume sensitivity

    A

    Dynamics 365 Customer Service exposes a bulk API — large-volume migrations stream efficiently.

Estimator

Estimate your Dynamics 365 Customer Service to HubSpot Service Hub 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 Dynamics 365 Customer Service to HubSpot Service Hub data migrations

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

Can't find your answer?

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

Book a free 30 minute consultation

Most migrations land between three and five weeks for straightforward Case, Contact, and Company sets under 20,000 records with no custom Dataverse tables or SLA rebuild scope. Migrations with custom Dataverse tables, large activity histories (over 300,000 activity records), Omnichannel transcript volume, or a significant Entitlement-to-property mapping scope extend to eight to fourteen weeks. The discovery and scoping phase adds one to two weeks regardless of data volume.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Dynamics 365 Customer Service.
Land in HubSpot Service Hub, 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