Helpdesk migration

Migrate from Dynamics 365 Customer Service to Freshdesk

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

Dynamics 365 Customer Service logo

Dynamics 365 Customer Service

Source

Freshdesk

Destination

Freshdesk logo

Compatibility

60%

6 of 10

objects map 1:1 between Dynamics 365 Customer Service and Freshdesk.

Complexity

BStandard

Timeline

3-5 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Migrating from Dynamics 365 Customer Service to Freshdesk reduces per-seat licensing from a $50-$195/month Microsoft stack to Freshdesk's $0-$79/month model and eliminates the Power Platform overhead that drives implementation costs. The migration is a data move, not a platform lift: Cases become Tickets, Accounts and Contacts migrate as Companies and Contacts, Knowledge Articles transfer with their category taxonomy, and Activities attach to their parent Ticket conversation thread. We read from the Dataverse OData v4 API with 5,000-record pagination pages, throttle against Microsoft's Service Protection limits, and write into Freshdesk through its REST API with field-type mapping. Power Automate flows, routing rules, entitlements, and SLA KPI definitions do not migrate as code; we inventory every active flow and SLA configuration and deliver a written handoff so your team can rebuild them in Freshdesk's automation engine post-migration.

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

Freshdesk logo

Freshdesk

What's pulling them in

  • Free tier for 1-2 agents with no credit card makes initial evaluation risk-free and appeals to startups and small support teams.
  • Per-agent pricing is predictable and scales cleanly as teams grow from Growth at $15/agent/month to Enterprise at $89/agent/month.
  • Freddy AI Copilot and Email AI Agent bring AI assistance without forcing a full platform switch, appealing to teams already embedded in Freshdesk.
  • Multilingual help desk and customer portal features serve global SMB teams without requiring enterprise-level investment.
  • Collaborators up to 5,000 included in paid plans allow non-agent stakeholders to view tickets without additional licensing cost.

Object mapping

How Dynamics 365 Customer Service objects map to Freshdesk

Each row shows how a Dynamics 365 Customer Service object lands in Freshdesk, 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

Freshdesk

Ticket

1:1
Fully supported

Cases from the incident table in Dataverse map to Freshdesk Tickets. title becomes subject, incidentid becomes external_id for reconciliation, statecode and statuscode map to Freshdesk status values (Open, Pending, Resolved, Closed) via a status crosswalk, and priority maps directly. The regardingobjectid Contact reference resolves to a Freshdesk requester lookup. Resolution fields (resolvebyslaset, resolvedon) migrate as custom ticket fields since Freshdesk tracks SLA status separately in the SLA policy engine.

Dynamics 365 Customer Service

Contact

maps to

Freshdesk

Contact (Requester)

1:1
Fully supported

Dataverse Contact records map to Freshdesk Contact objects. email address is the dedupe key for upsert. We migrate full name, email, phone, job title, address, and language preference. The original incidentid linkage is preserved by cross-referencing the Case mapping so that Ticket creation references an already-created Contact. Active and inactive status migrates with a custom active flag so that reassignment to an active agent can happen in Freshdesk if the original Contact is a former employee.

Dynamics 365 Customer Service

Account

maps to

Freshdesk

Company

1:1
Fully supported

Dataverse Account records map to Freshdesk Company objects. accountid becomes external_id, name becomes company_name, and address fields map to Freshdesk address fields. Account-Contact relationships preserve via Freshdesk's company_id field on Contact so agents see the full account context inside a Ticket. Parent Account hierarchies flatten to top-level companies with child accounts noted in a custom field since Freshdesk's Company model is flat.

Dynamics 365 Customer Service

Knowledge Articles

maps to

Freshdesk

Articles

1:1
Fully supported

Knowledge Articles stored in Dataverse (article table with title, body, language, status, and category linkage) map to Freshdesk Articles. Article body migrates as HTML content. The Dataverse article category taxonomy maps to Freshdesk's folder structure and tags. Published articles migrate to Freshdesk Published status; draft articles migrate as Draft. Version history is collapsed to the latest published version for the initial migration unless the customer requests version preservation. The Freshdesk Article portal URL is stored back on the Dataverse article record as a reference field for post-migration admin linking.

Dynamics 365 Customer Service

Queue

maps to

Freshdesk

Group

1:1
Fully supported

Dataverse Queue records map to Freshdesk Groups. queueid becomes external_id, and the queuename maps to group_name. Unified Routing decision tables and skill-based assignment rules that govern how Cases enter queues are documented as a routing logic inventory rather than migrated as code, because Freshdesk's routing model (product-based, group-based, or round-robin) is configured within the platform. Queue members migrate as Group members by matching Dataverse systemuser email to Freshdesk agent email.

Dynamics 365 Customer Service

Activities (Email, Phone Call, Task, Appointment)

maps to

Freshdesk

Ticket Conversations

1:many
Fully supported

Dataverse Activities linked to a Case via regardingobjectid — Email, Phone Call, Task, and Appointment records — merge into Freshdesk Ticket conversations. Each Activity type maps to a conversation note with a type indicator (Incoming Email, Outgoing Email, Phone Call, Note, Meeting). activityid is preserved as external_id on the conversation record. The Activity's actualtime or scheduledstart and scheduledend timestamps preserve the original timeline ordering. Because Freshdesk represents conversations as a flat list per Ticket, we collapse multiple Activity types into a unified chronological thread rather than preserving the Activity type as a separate object.

Dynamics 365 Customer Service

Entitlements and Entitlement Templates

maps to

Freshdesk

Custom Ticket Fields

lossy
Mapping required

Entitlements represent support contract terms with allocated hours, case count limits, and channel restrictions. Freshdesk does not have a native Entitlement object, so we migrate entitlement terms as custom fields on the Ticket: contract_type, allocated_hours_remaining, and channel_restriction flags. The customer's admin creates these custom fields in Freshdesk before migration. A written entitlement inventory report is delivered separately for the admin to configure as SLA policy conditions in Freshdesk if the team uses contract-based SLA policies.

Dynamics 365 Customer Service

SLA Definitions and SLA Instances

maps to

Freshdesk

SLA Policies

lossy
Mapping required

Dataverse SLA definitions (first response time, resolution time, business hours, pause conditions, warning thresholds) map to Freshdesk SLA Policies at the group and ticket priority level. We export the SLA definition and active SLA instances on open Cases; the target mapping depends on whether Freshdesk's SLA Policy engine (available on Pro and Enterprise plans) covers the same pause and business-hour logic. Many customers find that Freshdesk's SLA Policy model requires reconfiguration of business hours calendars and pause conditions, so we deliver a written SLA inventory rather than automating the rebuild inside Freshdesk.

Dynamics 365 Customer Service

Custom Dataverse Tables and Columns

maps to

Freshdesk

Custom Objects or Custom Ticket Fields

lossy
Fully supported

Custom tables extended on the incident, contact, or account Dataverse tables migrate as Freshdesk Custom Objects (Forest/Enterprise plan) or as custom ticket fields on the Ticket object. We inventory the full source schema, classify each custom column by type (string, integer, datetime, option-set, lookup), and pre-create the destination field before migration. Option-set values in Dataverse map to Freshdesk dropdown fields. Lookup relationships that reference other Dataverse tables are mapped as custom fields in Freshdesk with a text representation of the referenced record name; the migration user resolves the target object before import.

Dynamics 365 Customer Service

Omnichannel Conversations

maps to

Freshdesk

Ticket Conversations

1:1
Fully supported

Omnichannel chat, voice, SMS, and social session transcripts from the msdyn_ocliveworkitem and msdyn_ocsession tables in Dataverse migrate as conversation entries on the linked Ticket. The session transcript text and metadata (channel type, agent, start time, end time) append to the Freshdesk Ticket conversation thread. Channel-specific assets — voice recordings, chat file attachments, social media media URLs — are flagged in a separate report because Freshdesk supports file attachments but channel-specific media URLs require manual re-linking or re-upload to the destination's storage.

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

Freshdesk logo

Freshdesk gotchas

High

API access is blocked on the free plan

High

Per-minute rate limits are account-wide and endpoint-specific

Medium

Multi-channel source types do not map 1:1 to all destinations

Medium

Custom objects created in-product cannot be accessed by other apps

Low

Contact import requires at least 10 existing tickets in the account

Pair-specific challenges

  • Dataverse Service Protection API limits throttle bulk Case reads

    The Dataverse Web API enforces a rolling 5-minute Service Protection threshold of approximately 6,000 requests per user. Our extraction runs under a dedicated application user with Bulk Data Loader pattern credentials and uses OData $batch with up to 1,000 operations per request. We throttle writes against Freshdesk's rate limits, handle 429 responses with exponential backoff, and checkpoint pagination progress between pages so that a mid-run interruption resumes from the correct offset rather than duplicating records.

  • Dynamics SLA definitions require manual rebuild in Freshdesk

    Dynamics 365 Customer Service SLA definitions — with their pause conditions, business-hour calendars, warning thresholds, and KPI rollup logic — are configuration records that do not export as data. Freshdesk's SLA Policy engine covers first-response and resolution targets but implements business hours and pause logic differently. We inventory every SLA definition and active SLA instance on open Cases and deliver a written SLA configuration guide so the customer's Freshdesk admin can recreate equivalent policies. SLA KPI rollup reporting migrates as historical data in custom fields, not as active monitoring rules.

  • Power Automate flows do not migrate as automation logic

    Cloud flows that trigger on Case create, update, or status change live in Power Automate, not in Dataverse rows. They cannot be exported as part of a normal record migration. We document every active flow that references Case lifecycle events, identify which trigger Condition branches the organisation relies on, and deliver a written automation inventory with recommended Freshdesk Scenario rule equivalents. The customer's admin rebuilds the automation logic inside Freshdesk post-migration; FlitStack AI does not rebuild Power Automate flows as part of the migration scope.

  • Omnichannel conversation attachments require manual re-link

    Omnichannel transcripts (chat sessions, voice call recordings, social media payloads) store channel-specific file references in external storage tied to Microsoft's CDN or the original channel provider. We migrate the transcript text and session metadata as conversation entries, but the file attachments — voice recordings in Azure, chat file uploads in the Omnichannel session store, social media media URLs — require manual re-upload or re-linking in Freshdesk. We produce a separate attachment inventory report listing every channel-side asset that needs post-migration attention.

  • Entitlements have no direct Freshdesk equivalent

    Entitlements with allocated hours, case-count limits, and channel restrictions represent a support-contract tiering model that Freshdesk does not replicate as a native object. We migrate the entitlement terms as custom fields on the Ticket and deliver a written entitlement inventory. The customer's admin maps these terms to Freshdesk SLA Policies and service tier configurations, but the remaining balance tracking and channel restriction enforcement requires admin-level configuration in Freshdesk after migration.

Migration approach

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

  1. Discovery and source audit

    We audit the Dynamics 365 Customer Service organisation: Dataverse tier (Professional, Enterprise, or Premium), active incident table schema including any custom columns, Knowledge Article library size and taxonomy depth, active Queue definitions, Entitlement and SLA configurations, Power Automate cloud flow inventory, and Omnichannel session volume. We also identify the Dataverse application user credentials and confirm that the Service Protection API will permit a bulk extraction run. The discovery output is a written migration scope, a custom field inventory, and an SLA and automation handoff template.

  2. Freshdesk destination setup

    We create the Freshdesk destination schema before any data moves. This includes provisioning custom fields on the Ticket object (status crosswalk fields, SLA reminder fields, entitlement contract fields), creating Custom Objects (Forest/Enterprise plan) to mirror any Dataverse custom tables, setting up the Knowledge Article folder taxonomy, configuring Groups from the Dataverse Queue definitions, and defining SLA Policies based on the documented SLA inventory. We work from a Freshdesk sandbox or trial environment first for validation, then replicate the configuration in the production account. Freshdesk admin credentials and an API key are required at this stage.

  3. Sandbox migration and field mapping validation

    We run a sandbox migration with production-like record volumes to validate field mapping, status crosswalk logic, parent record resolution (Account-Contact-Ticket chain), and Knowledge Article taxonomy mapping. The customer's helpdesk lead spot-checks 25-50 Tickets against the Dataverse source, confirms that conversation threads render in the correct chronological order, and reviews Knowledge Article content. Mapping corrections and any Freshdesk field creation that was missed in Step 2 are resolved before the production migration window opens.

  4. Parent record migration (Accounts and Contacts first)

    We migrate in strict dependency order. Accounts (from the account table) import first as Freshdesk Companies. Contacts (from the contact table) follow, with the resolved company_id linking each Contact to its Company. We use email as the dedupe key for upsert so that re-migration runs do not create duplicates. Any Contact without a resolved Company receives a default company association and a reconciliation flag. Owner resolution matches Dataverse systemuser email to Freshdesk agent email for group assignment.

  5. Case migration with conversation threading

    Cases (incidents) migrate as Tickets in dependency order after Accounts and Contacts are confirmed. The Case's Customer (Contact) lookup resolves to the migrated Freshdesk Contact ID. Activities attached to the Case via regardingobjectid — emails, phone calls, tasks, appointments — append to the Ticket conversation thread in chronological order. The Dataverse statuscode crosswalk maps each Case state to the equivalent Freshdesk status. External IDs from Dataverse incidentid and activityid are stored on the migrated records for reconciliation and re-run capability.

  6. Knowledge Articles and custom object migration

    Knowledge Articles migrate after Ticket migration completes, with the taxonomy mapping from Dataverse article categories to Freshdesk folder structure and tags. Custom Dataverse tables migrate as Freshdesk Custom Objects (or custom fields if the destination is on a plan below Forest). We resolve lookup references between custom tables by ordering the migrations so that parent objects import before their dependent child records. Each custom object import emits a row-count reconciliation report.

  7. Cutover, validation, and automation handoff

    We freeze Dataverse writes during the cutover window, run a final delta migration of any Cases modified during the migration run, then hand Freshdesk as the active system of record. We deliver the Power Automate flow inventory, SLA definition documentation, Entitlement inventory, and Omnichannel attachment report to the customer's admin team with Freshdesk Scenario rule and SLA Policy configuration guidance. We support a five-business-day hypercare window for reconciliation issues raised by the support team. Rebuilding Power Automate flows, routing rules, and SLA monitoring inside Freshdesk is outside the migration scope.

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.
Freshdesk logo

Freshdesk

Destination

Strengths

  • Generous free tier with no credit card required for 1-2 agents for 6 months.
  • Per-agent pricing model is transparent and scales linearly with team growth.
  • Freddy AI Copilot integrates assistance directly into the agent workspace without requiring separate tooling.
  • Multilingual help desk and customer portal serve global teams on Pro and Enterprise plans.
  • Shared inbox, threads, and tasks keep ticket context unified across multi-channel conversations.

Weaknesses

  • Freddy AI is a separate paid add-on charged per session, making AI costs unpredictable and hard to budget.
  • Performance issues including delayed loading and duplicate tickets are recurring user complaints during high-volume periods.
  • Customization is more limited than Zendesk, with fewer workflow options and reporting flexibility.
  • Add-ons for chat, advanced routing, and custom reporting are gated behind higher tiers or separate module purchases.
  • API access is completely disabled on the free plan, blocking any programmatic data export or migration tooling.

Complexity grading

How hard is this migration?

Standard Helpdesk migration. All 7 core objects map 1:1 between Dynamics 365 Customer Service and Freshdesk.

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across Dynamics 365 Customer Service and Freshdesk.

  • Object compatibility

    A

    All 7 core objects map 1:1 between Dynamics 365 Customer Service and Freshdesk.

  • 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 Freshdesk 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 Freshdesk data migrations

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

Can't find your answer?

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

Book a free 30 minute consultation

Migrations with under 10,000 Cases, no custom Dataverse tables, and a straightforward Accounts-Contacts-Cases hierarchy land in three to five weeks. Migrations with custom Dataverse tables, large Knowledge Article libraries, active Entitlement and SLA configurations to document, and Omnichannel transcript histories move to eight to twelve weeks because of schema pre-creation, taxonomy mapping, SLA rule documentation, and the additional validation passes required for complex parent-child relationships.

Adjacent paths

Related migrations to explore

Ready when you are

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