Helpdesk migration
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
Source
HubSpot Service Hub
Destination
Compatibility
9 of 14
objects map 1:1 between Dynamics 365 Customer Service and HubSpot Service Hub.
Complexity
BStandard
Timeline
3-5 weeks
Overview
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.
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
Dynamics 365 Customer Service platform overview
Scorecard, SWOT, gotchas, and pricing for Dynamics 365 Customer Service.
Destination platform
HubSpot Service Hub platform overview
Scorecard, SWOT, gotchas, and pricing for HubSpot Service Hub.
Data migration guide
The complete HubSpot Service Hub migration guide
Data model, import mechanisms, field mapping strategy, pitfalls, and cutover — by the engineers running it.
Destination checklist
HubSpot Service Hub migration checklist
Pre- and post-cutover tasks for moving onto HubSpot Service Hub.
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
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)
HubSpot Service Hub
Ticket
1:1Dynamics 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
HubSpot Service Hub
Contact
1:1Dynamics 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
HubSpot Service Hub
Company
1:1Dynamics 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
HubSpot Service Hub
Knowledge Base Article
1:1Dynamics 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)
HubSpot Service Hub
SLA Documentation Spec
lossyDynamics 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
HubSpot Service Hub
Ticket Custom Properties
lossyDynamics 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)
HubSpot Service Hub
Conversation (Email Thread)
1:1Dynamics 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
HubSpot Service Hub
Conversation (Call) or Ticket Engagements
1:1Dynamics 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
HubSpot Service Hub
Task
1:1Dynamics 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
HubSpot Service Hub
Meeting Engagement
1:1Dynamics 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
HubSpot Service Hub
Custom HubSpot Property or Custom Object
lossyCustomers 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)
HubSpot Service Hub
HubSpot File Attachments on Ticket or Contact
1:1Dynamics 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)
HubSpot Service Hub
Workflow Documentation Inventory
lossyPower 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
HubSpot Service Hub
Ticket Custom Properties
lossyCustomer 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.
| Dynamics 365 Customer Service | HubSpot Service Hub | Compatibility | |
|---|---|---|---|
| Case (Incident) | Ticket1:1 | Fully supported | |
| Contact | Contact1:1 | Fully supported | |
| Account | Company1:1 | Fully supported | |
| Knowledge Article | Knowledge Base Article1:1 | Fully supported | |
| SLA (SLA Definition and SLA Item) | SLA Documentation Speclossy | Fully supported | |
| Entitlement and Entitlement Template | Ticket Custom Propertieslossy | Fully supported | |
| Email Activity (Email) | Conversation (Email Thread)1:1 | Fully supported | |
| Phone Call Activity | Conversation (Call) or Ticket Engagements1:1 | Fully supported | |
| Task Activity | Task1:1 | Fully supported | |
| Appointment Activity | Meeting Engagement1:1 | Fully supported | |
| Custom Dataverse Table and Column | Custom HubSpot Property or Custom Objectlossy | Fully supported | |
| Note and File Attachment (Annotation Table) | HubSpot File Attachments on Ticket or Contact1:1 | Fully supported | |
| Power Automate Cloud Flows (Case-triggered) | Workflow Documentation Inventorylossy | Fully supported | |
| Customer Voice Survey Response | Ticket Custom Propertieslossy | 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.
Dynamics 365 Customer Service gotchas
Service Protection API limits will throttle bulk migration loads
OData v4 paging caps reads at 5,000 records per page
Power Automate flows do not migrate as data
Licensing tier gates which capabilities migrate cleanly
Omnichannel conversation history is fragmented across channels
HubSpot Service Hub gotchas
Rate limits throttle large migration API calls
Side conversations and Zendesk macros have no HubSpot equivalent
HubSpot stores ticket history as fragmented engagement objects
Custom Objects require Enterprise tier in HubSpot
Ticket pipeline stage probability values do not export cleanly
Pair-specific challenges
Migration approach
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.
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.
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.
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.
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.
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
Dynamics 365 Customer Service
Source
Strengths
Weaknesses
HubSpot Service Hub
Destination
Strengths
Weaknesses
Complexity grading
Standard Helpdesk migration. 2 of 7 objects need a mapping; the rest are 1:1.
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
2 of 7 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
7-object category — typical timelines run 2–7 days end-to-end.
API constraints
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
Dynamics 365 Customer Service 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 Dynamics 365 Customer Service to HubSpot Service Hub migration scoping. Not seeing yours? Book a call.
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 consultationAdjacent paths
Other ways to leave Dynamics 365 Customer Service
Other ways to arrive at HubSpot Service Hub
Same-Helpdesk migrations
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.