Helpdesk migration
Field-level mapping, validation, and rollback between Dynamics 365 Customer Service and Zoho Desk. We move data and schema; workflows are rebuilt natively in Zoho Desk.
Dynamics 365 Customer Service
Source
Zoho Desk
Destination
Compatibility
11 of 14
objects map 1:1 between Dynamics 365 Customer Service and Zoho Desk.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from Dynamics 365 Customer Service to Zoho Desk is a structural migration from a Dataverse-backed enterprise platform to a SaaS helpdesk oriented toward SMBs. Dynamics 365 stores Cases as incident rows in Dataverse with full relational linkage to Accounts, Contacts, Entitlements, SLAs, and Knowledge Articles through OData v4; Zoho Desk organises around Tickets with a flatter department-based schema, a built-in Knowledge Base, and Zia AI for auto-triage. The migration requires us to resolve the dependency chain (Accounts and Contacts first, then Cases with resolved customer links), flatten SLA definitions into Zoho Desk's rule-based SLA engine, and flag Entitlement records that have no Zoho Desk equivalent. Power Automate cloud flows, Omnichannel conversation transcripts, and Customer Voice surveys do not migrate as data; we document them for the customer's admin to rebuild or re-link post-migration. Zoho Desk's department-scoped custom fields require pre-creation before import, and Teams must be provisioned separately from the migration process.
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.
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 Zoho Desk, 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)
Zoho Desk
Ticket
1:1Dynamics 365 Cases (incident table in Dataverse) map directly to Zoho Desk Tickets. The incident.title becomes Ticket Subject, incident.description becomes Ticket Description, incident.statecode maps to Zoho Desk Status (Open, Pending, On Hold, Closed), incident.prioritycode maps to Priority, and incident.customerid (the polymorphic customer reference) resolves to either the Zoho Desk Contact or Account record we created in the preceding phase. We preserve incident.createdon and incident.modifiedon as the ticket creation and modification timestamps. Incident resolution details (incident.resolution) migrate as an internal note on the ticket.
Dynamics 365 Customer Service
Contact
Zoho Desk
Contact
1:1Dynamics 365 CE Contact records map to Zoho Desk Contacts with full name, email address, phone, and address fields preserved. We use the contact.emailaddress1 field as the dedupe key. Parent Account linkage (contact.parentcustomerid) is resolved after the Account import phase so that Contact records are linked to the correct Zoho Desk Account on insert. Custom Dataverse contact columns migrate as Zoho Desk Contact custom fields scoped to the department receiving the ticket data.
Dynamics 365 Customer Service
Account
Zoho Desk
Account
1:1Dynamics 365 Account records map to Zoho Desk Accounts. account.name becomes Account Name, account.website becomes Website, and account.telephone1 becomes Phone. The Account-Contact hierarchy migrates as a flat Account in Zoho Desk with no hierarchical sub-account support; we flag this during scoping if the source uses multi-level Account hierarchies and advise whether to flatten or create multiple Accounts.
Dynamics 365 Customer Service
Knowledge Articles
Zoho Desk
Solutions
1:1Dynamics 365 Knowledge Articles (knowledgearticle table) map to Zoho Desk Solutions. We migrate article title, content (article.content as HTML), language, status (draft, published, archived), and article number as an internal reference field. Article version history flattens to the current published version unless the destination Zoho Desk department has the version-history feature enabled. Article categories map to Zoho Desk Solution categories; we run a pre-migration category inventory to avoid orphaning articles without a matching category.
Dynamics 365 Customer Service
Queue
Zoho Desk
Team
1:manyDynamics 365 Queues that hold Cases and Activities map to Zoho Desk Teams. Queue membership (queueitem) is translated into Team membership during import. Note that Zoho Desk's migration documentation explicitly states Teams cannot be transferred as records; we create the Team structure in Zoho Desk using the department and group data from Dynamics 365, then add agents to the relevant Teams as a post-import step. Queue routing rules (how Cases enter a queue) do not have a direct Zoho Desk equivalent and are documented for admin review.
Dynamics 365 Customer Service
Entitlement
Zoho Desk
Contract (custom field mapping)
1:1Dynamics 365 Entitlements (entitlement table) represent support contracts with allocated hours, case-count limits, channel restrictions, and SLA linkage. Zoho Desk has no native Entitlement object; we map entitlement terms (name, start/end dates, remaining case count) to Zoho Desk Contracts module if the customer is on Enterprise tier, or to Ticket custom fields on the relevant Account and Contact records. We flag any SLA linkage on the Entitlement so the customer's admin can bind the correct SLA policy after migration.
Dynamics 365 Customer Service
SLA (definition and instance)
Zoho Desk
SLA Policy
lossyDynamics 365 SLA definitions (slaid table) with KPI targets (first response, resolution) and business hours migrate to Zoho Desk SLA Policies under Setup > SLA Policies. We map the SLA name, applicable entity (Case), warning and failure thresholds, and business hours calendar. Paused SLA time (from incident's timezoneruleversionsnumber) does not transfer automatically; we calculate elapsed time and resume SLA timers in Zoho Desk on the correct date. If the source organisation is on Professional tier with no SLA capability, we document the absence so the customer understands that SLA features will be new post-migration.
Dynamics 365 Customer Service
Activity: Email
Zoho Desk
Ticket Comment (email thread)
1:1Dynamics 365 Email activities (email) linked to Cases migrate as ticket comments in Zoho Desk. The email.from (activityparty) becomes the ticket requester or a comment author; email.to becomes a CC list on the ticket comment. Email body (email.description) preserves HTML formatting; attachments migrate as file comments. Zoho Desk cannot import CC users as native fields; we migrate email CC addresses into a custom multi-line text field on the ticket for reference.
Dynamics 365 Customer Service
Activity: Phone Call
Zoho Desk
Ticket Comment (phone)
1:1Dynamics 365 Phone Call activities (phonecall) linked to Cases migrate as ticket comments with a phone call indicator. Call duration (phonecall.actualdurationminutes) and outcome (phonecall.directioncode) are captured in the comment body. Call recording URLs stored in custom fields migrate as a link in the comment. We flag call recording attachments separately because they often live in external storage (SharePoint or the original telephony provider) and require re-link or re-upload.
Dynamics 365 Customer Service
Activity: Task
Zoho Desk
Related Tasks
1:1Dynamics 365 Task activities linked to Cases migrate as Zoho Desk Tasks attached to the corresponding ticket. Task subject, description, due date, and status map directly. Task ownership resolves by matching the task's owning user to the Zoho Desk agent created during the User provisioning phase.
Dynamics 365 Customer Service
Activity: Appointment
Zoho Desk
Related Tasks
1:1Dynamics 365 Appointment activities (appointment) migrate as Zoho Desk Tasks with the meeting details in the task description. Start time, end time, and location are preserved. Attendees are noted in the description field; Zoho Desk has no native Event/calendar object for customer service tickets, so attendee tracking is informational rather than calendar-synced.
Dynamics 365 Customer Service
Custom Dataverse Tables
Zoho Desk
Custom Fields (per module)
lossyCustomers extending the data model with custom Dataverse tables and columns require pre-migration schema design in Zoho Desk. We inventory every source custom column (logical name, type, option-set values for picklists), map each to a Zoho Desk custom field of equivalent type (string, integer, decimal, date, picklist, checkbox) scoped to the relevant department, and flag any Dataverse lookup relationships that cannot be represented as a simple reference in Zoho Desk (Zoho Desk supports lookup fields within the same module or across Modules). Custom table-level relationships (one-to-many, many-to-many) are simplified to one-to-many with a foreign key field.
Dynamics 365 Customer Service
Conversations (Omnichannel)
Zoho Desk
Ticket Comment
1:1Dynamics 365 Omnichannel conversation sessions and messages (msdyn_ocliveworkitem, msdyn_ocsession, msdyn_ocmessage) linked to Cases migrate as ticket comments with a channel indicator (chat, voice, SMS, social). We export session start time, message timestamps, and full message transcript text. Channel-specific assets (voice recordings, social media attachments) are flagged separately because they often reference external storage or the original channel provider and require re-link after migration.
Dynamics 365 Customer Service
Customer Voice Survey Response
Zoho Desk
Ticket Comment (reference)
1:1Dynamics 365 Customer Voice survey responses tied to Cases via Activity records are exported with the response payload and linked survey metadata. Survey definitions themselves live in Customer Voice and are not portable to Zoho Desk; we document the survey list, the response data, and recommend Zoho Desk's native satisfaction ratings and reporting as the replacement mechanism.
| Dynamics 365 Customer Service | Zoho Desk | Compatibility | |
|---|---|---|---|
| Case (Incident) | Ticket1:1 | Fully supported | |
| Contact | Contact1:1 | Fully supported | |
| Account | Account1:1 | Fully supported | |
| Knowledge Articles | Solutions1:1 | Fully supported | |
| Queue | Team1:many | Fully supported | |
| Entitlement | Contract (custom field mapping)1:1 | Fully supported | |
| SLA (definition and instance) | SLA Policylossy | Fully supported | |
| Activity: Email | Ticket Comment (email thread)1:1 | Fully supported | |
| Activity: Phone Call | Ticket Comment (phone)1:1 | Fully supported | |
| Activity: Task | Related Tasks1:1 | Fully supported | |
| Activity: Appointment | Related Tasks1:1 | Fully supported | |
| Custom Dataverse Tables | Custom Fields (per module)lossy | Fully supported | |
| Conversations (Omnichannel) | Ticket Comment1:1 | Mapping required | |
| Customer Voice Survey Response | Ticket Comment (reference)1:1 | Fully supported |
Gotchas + challenges
Platform-specific issues from each side, plus the pair-specific challenges that don't show up on either platform's page on its own.
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
Zoho Desk gotchas
Agent email identity determines comment ownership after migration
Blueprints and SLA policies do not export via API
File upload capped at 10GB per migration batch
Tier-gated export and migration capabilities
Inbound migration is two-phase with a hard Phase 2 cutoff
Pair-specific challenges
Migration approach
Discovery and source audit
We audit the source Dynamics 365 organisation across tier (Professional/Enterprise/Premium), record volumes per entity (Cases, Contacts, Accounts, Knowledge Articles, Activities), active SLA definitions and KPI thresholds, Entitlement records with remaining balances, custom Dataverse tables and columns with type and option-set inventories, active Power Automate cloud flows triggering on Case lifecycle, and Omnichannel conversation volume. We pair this with a Zoho Desk edition assessment (department count, required SLA policies, Zia AI tier) and produce a written migration scope with a record-count estimate per entity.
Zoho Desk schema pre-creation
We create the destination Zoho Desk structure before any data import begins. This includes provisioning departments (mapped from Dynamics 365 business units), creating Teams for each Dynamics 365 Queue, creating custom fields in Zoho Desk Setup scoped to the relevant departments to match every source custom Dataverse column, and designing SLA Policies that approximate the source SLA definitions with the same business hours calendar and warning/failure thresholds. Entitlement term data is mapped to Zoho Desk Contracts (Enterprise) or Account-level custom fields (lower tiers) based on the customer's chosen Zoho Desk plan.
Agent provisioning and owner reconciliation
We extract every distinct Dynamics 365 User referenced as an Owner on Case, Activity, or Knowledge Article records and match by email against the Zoho Desk agent list. Agents must be pre-created in Zoho Desk with the same email addresses before migration; Zoho Desk sends invitation emails that agents accept. Any Dynamics 365 User without a matching Zoho Desk agent goes to a reconciliation queue. Teams are created in Zoho Desk during this phase, and agents are assigned to their Teams. This step blocks the record import because Case and Activity ownership references require a valid Zoho Desk agent ID.
Sandbox migration and reconciliation
We run a full migration into the Zoho Desk portal using a subset of source data (typically the last 90 days of Cases, full Contact and Account list, and a sample of Activity history). The customer's support operations lead spot-checks 30-50 random tickets against the Dynamics 365 source records: subject accuracy, status mapping correctness, customer linkage, SLA timer calculation, and custom field population. Custom field mapping corrections, SLA rule adjustments, and department assignments are finalized here before production migration begins.
Production migration in dependency order
We run production migration in record-dependency sequence: Accounts (from Dynamics 365 Accounts), Contacts (with parent AccountId resolved), Knowledge Articles (Solutions with category mapping), Entitlements (Contracts or custom fields), SLAs (Policies configured but not yet active), Cases (with AccountId and ContactId resolved, owner assigned, SLA bound), Activity history (Email comments, Phone call comments, Tasks, Appointments via batch API), and Omnichannel transcripts (as ticket comments with channel metadata). Each phase emits a row-count reconciliation report before the next phase begins. We throttle writes to respect the Dataverse Service Protection limit and handle 429 responses with exponential backoff.
Cutover, validation, and handoff
We freeze Dynamics 365 write access during cutover, run a final delta migration of records modified during the migration window, then enable Zoho Desk as the system of record. We deliver the Power Automate and routing rule inventory document, the SLA gap analysis, the Omnichannel asset re-link checklist, and the Customer Voice survey response export. We support a five-business-day hypercare window for reconciliation issues. Post-migration admin rebuild of workflows, automations, and SLA bindings is outside standard scope; we provide the written specification and the customer or a Zoho partner rebuilds these.
Platform deep dives
Dynamics 365 Customer Service
Source
Strengths
Weaknesses
Zoho Desk
Destination
Strengths
Weaknesses
Complexity grading
Standard Helpdesk migration. 4 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 Zoho Desk.
Object compatibility
4 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 Zoho Desk migration scoping. Not seeing yours? Book a call.
Walk through your Dynamics 365 Customer Service to Zoho Desk 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 Zoho Desk
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.