Helpdesk migration
Field-level mapping, validation, and rollback between Hesk and Zoho Desk. We move data and schema; workflows are rebuilt natively in Zoho Desk.
Hesk
Source
Zoho Desk
Destination
Compatibility
7 of 12
objects map 1:1 between Hesk and Zoho Desk.
Complexity
CModerate
Timeline
3-5 weeks
Overview
Moving from Hesk to Zoho Desk is a database-to-API migration rather than an API-to-API move, because Hesk exposes no public REST endpoint. We connect directly to the customer's MySQL instance, enumerate the full schema (tickets, KB articles, users, staff, custom fields, canned responses), and push records into Zoho Desk through its REST API with batch chunking and rate-limit handling. The migration resolves Hesk's flat user model against Zoho Desk's split Contacts and Agents model, re-maps attachment file paths after the data lands, and flags that Zoho Desk's native Zwitch tool does not support Hesk as a migration source — meaning a database-first or custom-engineering approach is mandatory. Custom fields, canned responses, and ticket history transfer as structured data; automations, SLAs, and email templates are documented for the customer's admin to rebuild in Zoho Desk's rule builder post-migration.
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 Hesk 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.
Hesk
Ticket
Zoho Desk
Ticket
1:1Hesk Ticket records (id, subject, message, status, priority, owner, category, custom field values) map to Zoho Desk Ticket records. We read the hesk_tickets table via direct MySQL query, transform each row to a Zoho Desk Ticket API payload (POST /api/tickets), and post via batched requests with rate-limit handling. The ticket history table (hesk_log) threads as separate Comment records in Zoho Desk under the same ticket ID. Priority and status values from Hesk map to Zoho Desk's enumerated picklist values (Open, Pending, On-Hold, Resolved, Closed and Low, Medium, High, Urgent).
Hesk
Customer (End User)
Zoho Desk
Contact
1:1Hesk end-user accounts (name, email, IP address, creation date) map to Zoho Desk Contacts. The email field is the dedupe key during import. IP addresses from Hesk store as a custom field on the Contact record for GDPR audit purposes if required. Hesk allows emailless users for phone-only contacts — these create Contacts without an email address in Zoho Desk, which is valid for the Contact object but requires downstream handling if email routing is needed.
Hesk
Staff Account
Zoho Desk
Agent
1:1Hesk Staff records (name, email, role: administrator/manager/agent, password hash, permission flags) require mapping to Zoho Desk Agents, which are Zoho user accounts scoped to specific Departments. We resolve Hesk staff by email match against the destination Zoho Desk agent list. If a matching Zoho Agent does not exist, we hold the record and flag it for provisioning before production migration. Role hierarchy (admin vs agent) maps to Zoho Desk permission profiles and department membership rather than a direct role translation.
Hesk
Ticket Category
Zoho Desk
Department
lossyHesk ticket categories (hesk_categories: id, name, description) map to Zoho Desk Departments because Zoho Desk routes tickets by Department rather than flat category IDs. We create a Zoho Desk Department for each Hesk category during the schema-setup phase, and re-map the foreign key reference on each ticket record during import so that tickets land in the correct department. The customer decides whether to merge multiple Hesk categories into a single Zoho Desk department or preserve a 1:1 mapping.
Hesk
Knowledge Base Article
Zoho Desk
Knowledge Base Article
1:1Hesk KB articles (title, content in HTML, category association, publication status) map to Zoho Desk KB articles via POST /api/articles. The Hesk category-to-department mapping applies here too. Publication status (published/draft) in Hesk maps to Zoho Desk's Published/Internal status. We preserve article content including embedded images as ContentDocument or image URL references where possible, noting that Hesk KB attachments may require path re-mapping after migration (see Gotcha on attachment re-mapping).
Hesk
Canned Response
Zoho Desk
Macro
1:1Hesk canned responses (title, HTML content) map to Zoho Desk Macros, which are pre-built action sequences that agents can trigger from a ticket. We import canned responses as Macro templates with the message body pre-populated. If the canned response references ticket fields via Hesk's variable syntax, we document those placeholders for the customer to re-configure in Zoho Desk's Macro editor using Zoho Desk's own variable syntax (${ticket.id}, ${contact.lastName}, etc.).
Hesk
Custom Field
Zoho Desk
Custom Field
lossyHesk custom field definitions (field label, type: text/date/dropdown/checkbox/radio) and their per-ticket values migrate to Zoho Desk custom fields scoped to the Ticket module. We read hesk_custom_fields for definitions and hesk_ticket_fields for values, then create equivalent Zoho Desk custom fields during schema setup using the Fields API before importing data. The field type must match: Hesk dropdown maps to Zoho Desk Picklist, checkbox maps to Multi-Select Picklist, date maps to Date field. We flag any Hesk custom field that exceeds Zoho Desk's field-name character limit (50 characters) for manual renaming before migration.
Hesk
Attachment (file-system)
Zoho Desk
Attachment (via Zoho Desk API)
1:1Hesk ticket and KB article attachments are files stored on disk with paths in MySQL (hesk_attachments table: file_key, article_id, ticket_id). We export the entire attachments directory alongside the database dump, re-upload each file via Zoho Desk's Attachments API (POST /api/tickets/{ticketId}/attachments or /api/articles/{articleId}/attachments), and update the file path reference in the imported records. If the destination Zoho Desk portal uses a different domain than the source Hesk instance, all embedded image URLs inside KB article HTML content are re-written to reflect the new portal URL.
Hesk
Ticket History / Audit Log
Zoho Desk
Ticket Comments
1:1Hesk's hesk_log table records ticket events (opened, replied, status changed, reassigned) as structured rows with timestamps and actor. We export the full history and import each log entry as a Zoho Desk Comment record on the parent Ticket, preserving the original timestamp and attributing the comment to the mapped Agent if the actor is a staff member, or to the Contact if the actor is the customer. Status-change log entries without a message body are imported as private internal notes in Zoho Desk to preserve the audit trail without creating spurious public comments.
Hesk
Hesk Settings / Configuration
Zoho Desk
Zoho Desk Configuration Bundle
lossyHesk stores configuration (email routing, ticket statuses, priority labels, branding) in hesk_settings as serialized rows. We export the full settings bundle as a written configuration inventory document, mapping each Hesk setting to its equivalent Zoho Desk setup location (Admin > Channels > Email > Email Configuration, Admin > Ticket Fields, Admin > Departments). We do not apply settings programmatically; the document guides the customer's Zoho Desk administrator through manual configuration after migration.
Hesk
User (IP Address / GDPR data)
Zoho Desk
Contact custom field
lossyHesk stores the creating IP address on every user record. For GDPR-aware migrations, we offer an optional anonymisation pass that strips IP addresses from imported Contacts before they land in Zoho Desk. We apply this as a pre-transform step. If full anonymisation is required (name, email, and message content stripped), ticket subjects and thread structure remain but message bodies are replaced with [Anonymised] — we confirm the customer's GDPR scope before applying this option because it permanently reduces migration fidelity.
Hesk
Hesk Mods (Community Add-ons)
Zoho Desk
Not applicable
lossyMods-for-HESK community add-ons extend Hesk's database schema with non-standard fields and tables. We discover any non-standard tables during the schema scan, document their structure, and flag them for the customer to review. These tables do not have a standard Zoho Desk equivalent and must be handled as custom objects or external references post-migration. We do not include them in the standard migration scope without explicit scope extension.
| Hesk | Zoho Desk | Compatibility | |
|---|---|---|---|
| Ticket | Ticket1:1 | Fully supported | |
| Customer (End User) | Contact1:1 | Fully supported | |
| Staff Account | Agent1:1 | Fully supported | |
| Ticket Category | Departmentlossy | Fully supported | |
| Knowledge Base Article | Knowledge Base Article1:1 | Fully supported | |
| Canned Response | Macro1:1 | Fully supported | |
| Custom Field | Custom Fieldlossy | Fully supported | |
| Attachment (file-system) | Attachment (via Zoho Desk API)1:1 | Fully supported | |
| Ticket History / Audit Log | Ticket Comments1:1 | Fully supported | |
| Hesk Settings / Configuration | Zoho Desk Configuration Bundlelossy | Fully supported | |
| User (IP Address / GDPR data) | Contact custom fieldlossy | Fully supported | |
| Hesk Mods (Community Add-ons) | Not applicablelossy | 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.
Hesk gotchas
No REST API means all migrations are database-first
Moving Hesk between servers requires version parity
GDPR anonymisation may conflict with ticket preservation
Attachments are file-system references, not database blobs
Custom field limits are undocumented but exist
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
Schema discovery and database inventory
We connect to the customer's MySQL instance via a secure, time-boxed connection, enumerate all Hesk tables (hesk_tickets, hesk_users, hesk_staff, hesk_categories, hesk_kb_articles, hesk_kb_categories, hesk_custom_fields, hesk_ticket_fields, hesk_attachments, hesk_log, hesk_settings, hesk_canned), record table and row counts, and scan for non-standard Mods-for-HESK schema extensions. We also export the attachments directory (naming convention and path structure). The discovery output is a written data inventory with record counts, schema map, and a GDPR scope questionnaire delivered to the customer for signature before any data extraction begins.
Zoho Desk schema design and department mapping
We configure the Zoho Desk destination before any data is pushed. This includes creating Departments that mirror Hesk's categories (one Department per category, or merged where the customer chooses consolidation), provisioning Agent accounts (matched to Hesk staff by email), creating custom fields on the Ticket module with correct field types, and setting up the KB structure with article categories. We also configure the customer's Zoho Desk timezone and date format to match Hesk's settings so that timestamps on imported records are accurate. The schema setup is validated in a pre-production Zoho Desk portal before migration begins.
Sandbox migration and reconciliation
We run a full test migration into the Zoho Desk sandbox environment using a representative data sample (typically the most recent 500 tickets, 50 KB articles, and 100 contacts). The customer's support operations lead spot-checks imported records against the source Hesk instance — verifying subject lines, ticket status, assigned agent, custom field values, and attachment presence. We correct any mapping errors identified during reconciliation and re-run the sandbox pass before scheduling production migration. This step typically takes three to five business days.
Agent and user provisioning reconciliation
We extract every distinct Hesk staff member referenced on tickets and in the log history, and match them against the Zoho Desk agent list by email address. Any Hesk staff member without a corresponding Zoho Agent account is placed in a provisioning queue. The customer's Zoho Desk administrator creates the missing agent accounts and assigns them to the correct Departments before production migration resumes. Migration cannot proceed past this step because ticket assignment (OwnerId) requires a valid Zoho Agent on every record.
Production migration in dependency order
We run the production migration in the correct dependency sequence: Departments (from Hesk categories), Agents (from Hesk staff, validated against the reconciliation queue), Contacts (from Hesk users), Knowledge Base Articles (with content and article-category mapping), Ticket records (with Department, Agent, and Contact lookups resolved), Ticket Comments (from hesk_log entries threaded under the correct parent ticket), Attachments (file-system export re-uploaded via the Zoho Desk Attachments API with URLs re-written), Custom field values (appended to ticket records after custom field creation is confirmed), and Canned Responses (imported as Macros). Each phase emits a row-count reconciliation report.
Cutover, validation, and automation handoff
We coordinate a cutover window with the customer's support team. During cutover, Hesk write access is suspended (or DNS is repointed if Hesk is self-hosted), a final delta migration captures any records modified during the migration window, and Zoho Desk is enabled as the system of record. We deliver a written automation inventory document listing every Hesk setting and workflow rule that has no equivalent in Zoho Desk — including email templates, ticket routing rules, and SLA configurations — with recommended Zoho Desk equivalents (Automation Rules, Macros, SLA Policies). The customer's Zoho Desk administrator rebuilds these post-migration. We support a five-business-day hypercare window for reconciliation issues raised during the first week of live operation.
Platform deep dives
Hesk
Source
Strengths
Weaknesses
Zoho Desk
Destination
Strengths
Weaknesses
Complexity grading
Moderate Helpdesk migration. 4 of 7 objects need a mapping; the rest are 1:1.
Overall complexity
Moderate migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Hesk 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
Hesk: Not documented.
Data volume sensitivity
Hesk doesn't expose a bulk API — REST + parallelization used for high-volume runs.
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 Hesk to Zoho Desk migration scoping. Not seeing yours? Book a call.
Walk through your Hesk 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 Hesk
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.