Helpdesk migration
Field-level mapping, validation, and rollback between HelpDeskZ and Zoho Desk. We move data and schema; workflows are rebuilt natively in Zoho Desk.
HelpDeskZ
Source
Zoho Desk
Destination
Compatibility
10 of 12
objects map 1:1 between HelpDeskZ and Zoho Desk.
Complexity
CModerate
Timeline
3-5 weeks
Overview
Moving from HelpDeskZ to Zoho Desk is a structural migration from a stalled open-source self-hosted system to a cloud-native SaaS help desk with department hierarchy, multi-channel support, and built-in SLA management. HelpDeskZ exposes no public REST API, so we connect directly to the MySQL/MariaDB database, extract tickets and reply threads from the flat conversation table, decode PHP serialized custom field columns, and resolve filesystem paths for attachment uploads before inserting into Zoho Desk via its REST API. The Zoho Desk department-centric hierarchy requires HelpDeskZ departments to be mapped to Zoho Teams or sub-departments, and HelpDeskZ ticket statuses must be remapped to Zoho's status vocabulary. Email threading relationships do not survive the migration because HelpDeskZ stores Message-ID references pointing to its own mail system. Workflows, canned responses, and knowledge base articles from HelpDeskZ (where they exist via the ViktorNova fork) do not migrate as code; we deliver a written inventory for the customer's admin to rebuild inside Zoho Desk.
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 HelpDeskZ 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.
HelpDeskZ
User (agents, admins, clients)
Zoho Desk
Agent
1:1HelpDeskZ users table (name, email, role, hashed password) maps to Zoho Desk Agents. Role mapping: HelpDeskZ admin maps to Zoho Desk Administrator profile; HelpDeskZ agent maps to Zoho Desk Agent profile; HelpDeskZ client role maps to a Zoho Desk Contact if the customer uses Zoho's contact-facing portal, or is flagged for admin decision. We extract email as the primary match key and resolve against Zoho's Agent email field during import. HelpDeskZ password hashes do not transfer; agents receive Zoho Desk onboarding invitations at insert time.
HelpDeskZ
Department
Zoho Desk
Department / Team
1:1HelpDeskZ departments table (id, name) maps to Zoho Desk Departments. Zoho Desk supports hierarchical sub-departments; if the HelpDeskZ instance uses a flat department list, we create top-level Departments in Zoho. If the ViktorNova fork has been used to create nested departments, we map to Zoho's sub-department hierarchy by parsing the parent_id column. Department-specific SLAs in Zoho Desk are flagged for the customer to configure post-migration as SLA policies require ZohoDesk Enterprise or the Service Plus bundle.
HelpDeskZ
Ticket
Zoho Desk
Ticket
1:1HelpDeskZ tickets table maps to Zoho Desk Tickets. The ticket subject maps to Subject, ticket content maps to Description, status (Open/Pending/Resolved/Closed as integer codes) maps to Zoho Desk Status using a remapping table defined at scoping, priority maps to Priority, and the ticket created timestamp maps to Created Time. We extract the department_id foreign key and map it to the corresponding Zoho Department via the department lookup established in the previous step.
HelpDeskZ
Ticket Reply / Thread
Zoho Desk
Ticket Comment / Thread
1:1HelpDeskZ stores ticket conversation history as sequential rows in a separate replies table linked by ticket_id. Each row has a type field (customer reply, agent response) and a message field. We extract these rows in chronological order and insert them into Zoho Desk as Ticket Comments with the author resolved to the corresponding Agent or Contact by email match. The direction (incoming/outgoing) is preserved using the type field mapped to Zoho's Comment direction. Thread ordering is preserved by setting the comment timestamp to the original HelpDeskZ reply timestamp.
HelpDeskZ
Custom Fields
Zoho Desk
Custom Fields
lossyHelpDeskZ stores custom fields as a PHP serialized string in a single column on the tickets table. We detect the PHP version on the source server (PHP 7 vs PHP 8) and apply the correct unserialization method, falling back to regex extraction for corrupted serialization. Each key-value pair is extracted, the field type is inferred from the value format (string, integer, date), and a corresponding custom field is pre-created in the Zoho Desk layout via the Custom Fields API before the ticket insert phase. Non-standard field names are normalized to Zoho's field naming constraints.
HelpDeskZ
File Attachment
Zoho Desk
Ticket Attachment
1:1HelpDeskZ stores attachments on disk in the uploads/ directory with filenames referenced in the tickets and replies tables. We verify the uploads directory path via the uploads_path configuration value, extract file paths for each attachment reference, validate file existence, and upload each file to Zoho Desk via the Attachments API linked to the corresponding Ticket Comment. Missing files are logged as warnings and skipped to allow migration to proceed without blocking on a single lost file. Inline images within ticket content are extracted and re-uploaded separately.
HelpDeskZ
Email-to-Ticket Pipeline
Zoho Desk
Email Channels
1:1HelpDeskZ email-to-ticket via POP3/IMAP is stored as mailbox configuration in the database. We extract the source email address and IMAP/POP3 settings and flag them for the customer to reconfigure as Zoho Desk Email Channels (Setup > Channels > Email > Add Email Account). The Message-ID and In-Reply-To threading relationships stored in HelpDeskZ tickets are not valid in Zoho Desk and are not preserved; the raw email content and attachment filenames are migrated but the email threading context is re-established by Zoho Desk's own thread assignment.
HelpDeskZ
Ticket Status
Zoho Desk
Ticket Status
lossyHelpDeskZ ships default statuses as integer codes (0=Open, 1=Pending, 2=Resolved, 3=Closed) stored in the status column. We build a remapping table at scoping: HelpDeskZ Open maps to Zoho Open, Pending maps to Pending, Resolved maps to Resolved, and Closed maps from both Resolved and Closed (combined in the remap). Customers who have added custom status values via ViktorNova fork or database patches have those statuses flagged for manual Zoho Desk status creation before the ticket insert phase.
HelpDeskZ
Account / Company
Zoho Desk
Account
1:1The upstream HelpDeskZ does not have a native Account or Company object. If the customer has been using ViktorNova fork with account support or has extended the database schema with a companies table, we map that to Zoho Desk Accounts. Accounts in Zoho Desk link to Contacts and Tickets, providing the organizational context that HelpDeskZ lacks. We flag this as a lookup mapping: if no companies table exists, we skip the Account object and link Tickets directly to Contacts.
HelpDeskZ
Contact
Zoho Desk
Contact
1:1HelpDeskZ client-role users map to Zoho Desk Contacts when ticket submitter records exist. We extract the client email, name, and phone (if populated) from the HelpDeskZ users table for users who have submitted tickets, and create Zoho Desk Contact records. Contacts are resolved as parent records for Tickets before the ticket insert phase begins. If the customer also uses Zoho CRM, Contacts are looked up against the CRM API to avoid duplication.
HelpDeskZ
Knowledge Base
Zoho Desk
Knowledge Base Article
1:1The upstream HelpDeskZ distribution does not include a knowledge base module. Customers running the ViktorNova fork who have built KB content in a separate table must provide the schema details during scoping. We flag Knowledge Base migration as out-of-scope for the standard migration unless the customer supplies the exact table structure and we can verify the data model is stable. Zoho Desk Knowledge Base attachments do not migrate via any available method (Zoho's own Zwitch notes this limitation explicitly).
HelpDeskZ
Reports and Dashboard Configuration
Zoho Desk
Reports
1:1HelpDeskZ does not have a built-in reporting dashboard. Any custom reports the customer has constructed via direct SQL queries against the HelpDeskZ database must be translated to Zoho Desk's report builder (available from Standard tier) or Zoho Analytics. We do not migrate reports as code or SQL queries. We deliver a written inventory of all identified custom SQL reports with the equivalent Zoho Desk report type and field references for the customer's admin to rebuild.
| HelpDeskZ | Zoho Desk | Compatibility | |
|---|---|---|---|
| User (agents, admins, clients) | Agent1:1 | Fully supported | |
| Department | Department / Team1:1 | Fully supported | |
| Ticket | Ticket1:1 | Fully supported | |
| Ticket Reply / Thread | Ticket Comment / Thread1:1 | Fully supported | |
| Custom Fields | Custom Fieldslossy | Mapping required | |
| File Attachment | Ticket Attachment1:1 | Fully supported | |
| Email-to-Ticket Pipeline | Email Channels1:1 | Fully supported | |
| Ticket Status | Ticket Statuslossy | Fully supported | |
| Account / Company | Account1:1 | Fully supported | |
| Contact | Contact1:1 | Fully supported | |
| Knowledge Base | Knowledge Base Article1:1 | Fully supported | |
| Reports and Dashboard Configuration | Reports1: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.
HelpDeskZ gotchas
No REST API — migration requires direct database reads
Custom fields are stored as serialized PHP arrays
Email-to-ticket threading does not migrate cleanly
Attachment files are stored on disk, not in the database
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
Database access and source audit
We establish a read-only MySQL/MariaDB connection to the HelpDeskZ database using credentials provided by the customer. We audit the database schema across all tables (tickets, replies, users, departments, attachments reference columns, custom field serialized column), identify the table prefix if non-standard, detect the PHP version running on the source server, and verify the uploads/ directory path via the helpdesk configuration. We also identify any ViktorNova fork extensions that add tables (accounts, knowledge base) and flag them for scope confirmation.
Scope confirmation and mapping specification
We deliver a written migration scope document covering record counts per object (tickets, replies, agents, departments, attachments), the custom field unserialization plan, the status remapping table, the department-to-team hierarchy mapping, and the email threading flag. The customer reviews and signs off before extraction begins. Any ViktorNova-specific schema extensions are confirmed here. Zoho Desk subscription tier is verified (Standard minimum for custom fields API access; Enterprise or Service Plus for SLA policies).
Extraction from HelpDeskZ MySQL database
We run a structured extraction script against the HelpDeskZ database in read-only mode. Tickets are extracted in full including status, priority, department_id, created timestamp, and last-modified timestamp. Replies are extracted with ticket_id linkage and type field (customer/agent). Users are extracted with role and email. Custom fields are extracted, unserialized per PHP version, and normalized to key-value pairs. Attachment filenames are extracted with ticket and reply linkage. All extracted data is validated against row counts before transformation begins.
Transformation and Zoho Desk schema pre-creation
We transform extracted data into Zoho Desk API-compatible JSON payloads. Status integers are remapped to Zoho Desk status vocabulary. Department IDs are resolved to Zoho Department IDs via the department mapping. Custom field key-value pairs are validated against Zoho Desk field types and pre-created via the Custom Fields API before ticket inserts. Agent email addresses are resolved to Zoho Agent IDs via the Agents API. Attachment filenames are validated against the filesystem and queued for upload. The customer provisions any missing Zoho Agents that were identified in the owner reconciliation step.
Sandbox migration and reconciliation
We run a full migration into the customer's Zoho Desk sandbox (or a trial account provisioned for validation) using production data volume. The customer reconciles record counts (Tickets in, Comments in, Attachments in, Agents in, Custom Fields in), spot-checks 25-50 random tickets against the HelpDeskZ source for content accuracy, custom field fidelity, and comment ordering, and signs off the mapping before production migration. Any corrections to the status remapping, department mapping, or custom field type definitions are applied here.
Production migration in dependency order
We run production migration in object dependency order: Agents first (Users must exist for ticket assignment), Departments and Teams second, Custom Fields third, Contacts fourth, Tickets fifth (with Comments inserted in thread order), Attachments last (uploaded and linked to Comments). Each phase emits a row-count reconciliation report. We implement delta migration of any tickets modified during the production migration window before final cutover. Zoho Desk API rate limits (credit-based) are managed with exponential backoff and batch chunking throughout.
Cutover, validation, and workflow handoff
We freeze HelpDeskZ to read-only during final cutover, run the last delta migration, then deliver the completion report including migrated record counts, skipped records with reasons, and a list of any emails that could not be threaded in Zoho Desk. We deliver a written inventory of HelpDeskZ email pipeline settings (POP3/IMAP) and knowledge base articles (where ViktorNova fork exists) for the customer's admin to reconfigure inside Zoho Desk. We do not rebuild HelpDeskZ automations or ViktorNova cron jobs as Zoho Desk Workflow Rules; that is a separate rebuild scope.
Platform deep dives
HelpDeskZ
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 HelpDeskZ 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
HelpDeskZ: Not publicly documented.
Data volume sensitivity
HelpDeskZ 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 HelpDeskZ to Zoho Desk migration scoping. Not seeing yours? Book a call.
Walk through your HelpDeskZ 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 HelpDeskZ
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.