Skip to main content

Tejas Mondeeri

·9 min read

The Complete Guide to Migrating from Freshdesk to Zendesk

This guide walks you through everything you need to plan, map, move, and verify a Freshdesk-to-Zendesk migration with precision and structure.

ClonePartner Freshdesk to Zendesk

This guide walks you through everything you need to plan, map, move, and verify a Freshdesk-to-Zendesk migration with precision and structure. The goal is to help you replicate your Freshdesk environment inside Zendesk with minimal data loss, consistent relationships, and working automations. You will see which configurations need rebuilding, which data can be imported directly, and how to handle nuances like timestamps, satisfaction ratings, and attachments.

1. Define the scope and build your mapping plan

Before touching any APIs or exports, start by defining your scope. Separate what will move as data and what must be rebuilt as configuration.

  • Data to migrate: Tickets with all conversation history and attachments, contacts, companies, tags, custom fields, and knowledge base content.
  • Configuration to rebuild: Automations, triggers, SLAs, business hours, agent roles, and integrations.
  • Items to archive: Ticket audit trails, time logs, and analytics reports. Zendesk will not import those directly.

Once you have this list, create a mapping sheet. Each Freshdesk object should point to its equivalent Zendesk object. Include transformations, validation rules, and a crosswalk for IDs and statuses. Keep it open while you plan.

2. Prepare Zendesk before you start importing

Zendesk must be configured before you import anything. The system expects valid IDs for users, groups, fields, and forms referenced in tickets.

Create your Zendesk scaffolding in this order:

  • Set up agents, groups, and roles.
  • Configure business hours, holidays, and SLA policies.
  • Recreate ticket fields and ticket forms.
  • Add custom statuses if your Freshdesk account uses more granular ones.
  • Set up email channels, signatures, and templates.
  • Install required apps such as Jira, Slack, or Knowledge Capture.

Once this is done, your importer will be able to create tickets and link them correctly without orphaned references.

3. Migration flow: follow a sequence that preserves relationships

Tickets depend on contacts and companies, and conversations depend on tickets. To keep everything consistent, you must migrate objects in this order:
Companies → Contacts → Ticket schema → Tickets and conversations → CSAT → Knowledge base.

Each section below explains how to map the objects and handle the edge cases.

3.1 Companies

Start with companies. Zendesk calls them Organizations. They help group users and tickets.

Company → Organization mapping

Freshdesk Company

Zendesk Organization

Notes and caveats

id

external_id and custom field fd_company_id

Keep the Freshdesk ID for reference and deduplication.

name

name

Use consistent naming for search and automation rules.

domains[]

domain_names[]

Ensures auto-assignment of tickets to organizations.

custom_fields{}

custom fields

Create schema in advance with the same value types.

tags[]

tags

Tags import directly as strings.

After import, verify that domain associations work automatically when you create a test ticket for a user under that organization.

3.2 Contacts

Once organizations exist, migrate your users. Freshdesk contacts map directly to Zendesk Users.

Contact → User mapping

Freshdesk Contact

Zendesk User

Notes and caveats

id

external_id and custom field fd_contact_id

Keeps imports idempotent.

name

name

 

email

email

Required for requesters.

phone, mobile

phone

Combine both numbers if needed.

company_id

organization_id

Must reference an existing organization.

custom_fields{}

user_fields{}

Schema must exist first.

tags[]

tags[]

One-to-one mapping.

Agents should be created manually in Zendesk’s admin panel. If you want to preserve agent authorship in notes or comments but won’t provision them, prefix each comment with their name and email.

3.3 Ticket schema

Zendesk’s ticket structure is similar to Freshdesk’s, but the terminology changes slightly.

  • Ticket Forms in Zendesk replace Ticket Types in Freshdesk.
  • Custom Fields must be pre-created and have matching keys and value sets.
  • Status and Priority values must be mapped manually.

Build a crosswalk between Freshdesk’s statuses (Open, Pending, Resolved, Closed, and any custom ones) and Zendesk’s (New, Open, Pending, On-hold, Solved, Closed). Test it with sample tickets before full migration.

3.4 Tickets and their entire conversation history

This is the most detailed part of the migration.
You must create the ticket, attach custom fields, and then import each conversation in chronological order.

Ticket mapping

Freshdesk Ticket

Zendesk Ticket

Notes and caveats

id

external_id and custom field fd_ticket_id

Required to rerun safely and update existing tickets.

subject

subject

Keep it short; Zendesk truncates at 255 chars.

description (HTML)

initial comment

Preserve formatting; clean up HTML tags before import.

requester_id

requester_id

User must already exist.

responder_id

assignee_id

If missing, assign to a default group and update later.

group_id

group_id

Recreate groups first.

status

status

Use crosswalk table.

priority

priority

Direct map (Low, Normal, High, Urgent).

source (email/chat/api)

via.channel

Used in Zendesk analytics.

tags[]

tags[]

Direct map.

custom_fields{}

custom_fields{}

Schema must match.

created_at, updated_at

stored in custom fields original_created_at, original_updated_at

Zendesk does not allow backdating.

due_by

due_at

Recreate SLA-based due times if required.

Conversation mapping

Freshdesk Conversation

Zendesk Comment

Notes and caveats

body

body_html

Keep HTML safe and properly escaped.

incoming true

public true

Marks customer reply.

private true

public false

Internal note.

attachments[]

attachments[]

Re-upload files; store URLs temporarily if you hit limits.

Run the import in batches and test after each load. Verify comment order, author, and file integrity on a random ticket sample before scaling up.

3.5 Ticket CSAT

Zendesk supports per-ticket satisfaction ratings, similar to Freshdesk’s survey results.
If you want to preserve historical scores:

  • Create the rating via Zendesk’s CSAT API.
  • Store the original timestamp and rater inside a private note if you cannot backdate it.

CSAT mapping

Freshdesk CSAT

Zendesk CSAT

Notes and caveats

Rating value

score (good or bad)

Map numerical or emoji ratings into “good” or “bad”.

Feedback comment

comment

Attach text feedback.

Timestamp

note text or custom field

Include “Original CSAT at [datetime] by [user]”.

3.6 Knowledge base

Zendesk’s Help Center structure matches Freshdesk’s Solutions fairly well.
Import in hierarchy: Categories → Sections → Articles → Translations → Attachments.

Solutions → Help Center mapping

Freshdesk Solutions

Zendesk Help Center

Notes and caveats

Category

Category

Create first.

Folder

Section

Map parent-child properly.

Article

Article

Keep HTML, rewrite asset URLs to match new host.

Attachments

Article attachments

Upload and relink inside HTML.

Tags

Labels

1:1 mapping.

Translations

Translations

Match locale codes (en-US, fr-FR, etc.).

Redirects

Redirect rules

Recreate via API if you had SEO redirects.

After import, check article counts per category and language. Broken inline links and missing attachments are the two most common errors; fix those before cutover.

4. Rebuild workflows and automations

Once the data exists in Zendesk, the next task is to make it behave like Freshdesk.

  • Recreate Automations as Zendesk Triggers (event-based) and Automations (time-based).
  • Rebuild Views using filters for group, status, and tags to replicate agent queues.
  • Define SLA policies and apply your existing business hours.
  • Convert Scenarios from Freshdesk into Macros in Zendesk.
  • Reinstall integrations such as Jira and Slack, and reconfigure their credentials.

To reconnect Jira tickets, store the original key (e.g., JIRA-1234) as a custom field in each ticket and use Zendesk’s Jira integration to relink after migration.

5. Handle the gaps with clear documentation

A few data types from Freshdesk cannot be recreated exactly in Zendesk.

Gap

Workaround

Ticket audit logs

Export as JSON or CSV and store in external storage (S3, Drive). Add a “Legacy Audit Reference” field in Zendesk with a link.

Agent activity reports

Archive separately; Zendesk Explore will generate new reports moving forward.

Ticket backdating

Store original_created_at and original_updated_at in fields or notes.

Freshchat / Freshcaller logs

Include as attachments or text files on the linked ticket.

Portal themes

Rebuild manually in the Zendesk Help Center editor.

This approach keeps the new instance clean while preserving historical reference material.

6. Test thoroughly, run a delta import, then cut over

Select a golden batch of tickets that represent different combinations: long threads, multiple attachments, translated articles, and CSAT ratings. Import that first, compare side by side, and confirm data integrity.

When ready for go-live:

  • Freeze Freshdesk or mark it read-only.
  • Run a delta export for new or updated tickets using Freshdesk’s incremental export APIs.
  • Apply updates in Zendesk using the same external_id logic so no records duplicate.
  • Switch your mail channels and chat integrations to Zendesk.
  • Keep Freshdesk accessible in read-only mode for at least two weeks as a fallback.

After cutover, validate total counts for tickets, users, organizations, and articles. Run SLA timers on new tickets to confirm expected behavior.

7. Proven habits that keep migrations reliable

  • Use idempotent imports by setting external_id on every record.
  • Always respect rate limits and queue requests with exponential backoff.
  • Normalize HTML and fix image URLs immediately after upload.
  • Keep timestamps in UTC for consistency across systems.
  • Maintain a per-record import log with status, object type, and reason for failure.

Those five habits will save you hours of debugging later.

Quick Recap

Set up Zendesk’s foundation first. Import organizations, then users, then ticket schema, then tickets and comments with attachments, then CSAT, then Help Center content. Recreate automations, SLAs, and macros. Archive audits and reports externally. Test with a golden batch, run a delta, cut over, and verify everything.

 

At ClonePartner, we’ve done this numerous times. Each project has a dedicated engineer who tailors the mapping to fit your unique data structure. If you’d prefer to skip the technical complexity, ClonePartner can take care of everything for you, from planning and field mapping to final validation and go-live.

Further reading: