Helpdesk migration

Migrate from HelpDeskZ to Freshdesk

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

HelpDeskZ logo

HelpDeskZ

Source

Freshdesk

Destination

Freshdesk logo

Compatibility

88%

7 of 8

objects map 1:1 between HelpDeskZ and Freshdesk.

Complexity

BStandard

Timeline

1-2 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Migrating from HelpDeskZ to Freshdesk means moving from a self-hosted PHP/MySQL help desk with no public API to a cloud-native platform with a documented REST API. The core technical challenge on the source side is that HelpDeskZ stores ticket data in flat MySQL tables with PHP-serialized custom fields and filesystem-attached files, requiring direct database reads rather than an HTTP export. We handle the serialized-to-JSON conversion, resolve the flat ticket-to-reply thread ordering, and verify every attachment file exists on disk before upload. On the Freshdesk side, we insert contacts before tickets so the requester_id lookup succeeds, create groups and agents before ticket assignment, and use the Freshdesk API with rate-limit handling and batch chunking. Automations, SLA policies, macros, and email-to-ticket mailboxes do not migrate as configuration; we deliver a written inventory of these for your admin to rebuild in Freshdesk.

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

HelpDeskZ logo

HelpDeskZ

What's pushing teams away

  • The feature set has stagnated — without active development, teams outgrow the platform as support volume and complexity increase.
  • Limited to no native integrations with modern tools like Slack, Salesforce, or Zapier, forcing teams to manually bridge workflows or abandon the platform.
  • No public REST API means third-party automation, reporting, and data extraction all require direct database queries, which most non-technical teams cannot maintain.
  • As the vendor (EvolutionScript) has scaled to other products, documentation and community support for HelpDeskZ have thinned, leaving self-hosted customers without guidance for troubleshooting.

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 HelpDeskZ objects map to Freshdesk

Each row shows how a HelpDeskZ 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.

HelpDeskZ

Ticket

maps to

Freshdesk

Ticket

1:1
Fully supported

HelpDeskZ tickets map to Freshdesk Ticket records. We extract the ticket id, subject, priority code, status code, created timestamp, and updated timestamp directly from the source MySQL table. The flat ticket-to-reply thread is reconstructed by ordering all replies by their timestamp column within each ticket. Status integer codes from HelpDeskZ (e.g., 1=Open, 2=Pending, 3=Resolved, 4=Closed) are mapped to Freshdesk ticket_status values (2=Open, 3=Pending, 4=Resolved, 5=Closed). Priority codes (low, medium, high, urgent) map to Freshdesk priority values (1=Low, 2=Medium, 3=High, 4=Urgent). Tickets are inserted after contacts so that the requester_id lookup succeeds.

HelpDeskZ

Ticket Reply

maps to

Freshdesk

Conversation (Ticket Conversation)

1:1
Fully supported

HelpDeskZ stores each ticket reply as a separate row in the replies table with a ticket_id foreign key, an author type (customer or agent), body text, and a timestamp. We group these by ticket_id and insert them in ascending timestamp order as Freshdesk Conversation records attached to the corresponding Freshdesk Ticket. The user_type field determines whether the conversation is incoming (customer) or outgoing (agent). Email threading Message-ID and In-Reply-To references are not transferred; Freshdesk assigns its own thread identifiers.

HelpDeskZ

User

maps to

Freshdesk

Contact

1:1
Fully supported

HelpDeskZ users with role=client map to Freshdesk Contact records. We extract name, email, and created_at. HelpDeskZ user id is preserved in a custom field hd_user_id__c for cross-reference. Users with role=admin or role=agent map to Freshdesk Agent records, created before any ticket import so that ticket assignment by agent id can be resolved at insert time. If a HelpDeskZ user appears as both a ticket requester and an agent, the Contact takes precedence and a separate Agent record is created with the same email.

HelpDeskZ

User (admin/agent)

maps to

Freshdesk

Agent

1:1
Fully supported

HelpDeskZ users with role=admin or role=agent are extracted and mapped to Freshdesk Agent profiles. We use the Freshdesk Agents API to provision agents with the same email, name, and role designation (admin=group_admin, agent=agent). If the Freshdesk destination account has fewer agent seats than the number of HelpDeskZ agent records, we flag the overage before migration begins so the customer can adjust their Freshdesk plan or deactivate unused accounts.

HelpDeskZ

Department

maps to

Freshdesk

Group

1:1
Fully supported

HelpDeskZ departments are stored as a simple id-name lookup table. We map each department to a Freshdesk Group via the Groups API. Department assignment on HelpDeskZ tickets is preserved by setting the Freshdesk group_id on the migrated Ticket. HelpDeskZ does not support nested departments, so there are no hierarchical relationships to resolve.

HelpDeskZ

Attachment

maps to

Freshdesk

Ticket Attachment

1:1
Fully supported

HelpDeskZ stores uploaded files on disk in the uploads/ directory with only the filename stored in the tickets and replies tables. We read the hd_ticket_attachments table to get the full path, verify each file exists, and upload to Freshdesk via the /tickets/{id}/attachments endpoint. Files are associated with the correct conversation entry by matching the parent ticket_id and reply_id foreign keys. Missing files are logged as warnings and skipped so that the migration completes without blocking on a single lost attachment.

HelpDeskZ

Custom Fields (ticket)

maps to

Freshdesk

Custom Fields (ticket)

lossy
Fully supported

HelpDeskZ stores custom field values as a PHP serialized string in a single column on the tickets table. We detect the PHP version on the source server, unserialize the column using the appropriate method, and extract each key-value pair. Before migration begins, we ask the customer to pre-create matching custom fields in Freshdesk Admin > Ticket Fields so that field IDs are available for the mapping. Unsupported field types (binary blobs, PHP objects) are skipped and logged. Custom field values are inserted as part of the ticket creation payload.

HelpDeskZ

Email-to-Ticket (POP3/IMAP)

maps to

Freshdesk

Email Mailbox Configuration

1:1
Fully supported

HelpDeskZ email-to-ticket stores the source POP3/IMAP server settings in the database. We extract the mailbox host, port, username, and email address but do not transfer these credentials because they are not portable and the destination Freshdesk account will have its own email routing configuration. We flag whether the HelpDeskZ instance used email-to-ticket and note this in the delivered inventory so the admin knows to configure a Freshdesk email mailbox at the same domain post-migration. Email threading Message-ID and In-Reply-To headers stored in HelpDeskZ are not migrated.

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.

HelpDeskZ logo

HelpDeskZ gotchas

High

No REST API — migration requires direct database reads

Medium

Custom fields are stored as serialized PHP arrays

Medium

Email-to-ticket threading does not migrate cleanly

Low

Attachment files are stored on disk, not in the database

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

  • PHP serialized custom fields require version-aware decoding

    HelpDeskZ stores custom field values in a single database column using PHP serialize(), which is not compatible across PHP major versions. PHP 7 serialized data may fail to unserialize correctly on a system running PHP 8 due to changes in object serialization format. We detect the source server PHP version during scoping and apply the matching unserialization method. If unserialization fails, we fall back to regex-based key extraction and flag any corrupted fields for the customer to handle manually. This step must complete before field mapping can be finalized.

  • Missing attachment files break the migration silently if not checked

    HelpDeskZ saves uploaded files to the uploads/ directory on disk, but only the filename is stored in the database. If the uploads directory has been moved, symlinked to a different path, or if files were deleted manually from disk, the migration will attempt to reference files that no longer exist. We verify the uploads_path configuration value, locate each referenced file, and log missing files as warnings with the ticket ID so the customer can decide whether to restore the file from a backup or skip it. Migration does not halt on a missing file but will halt if the uploads directory itself is inaccessible.

  • Freshdesk API is not available on the Sprout (free) plan

    Freshdesk's REST API is only available on paid plans — Blossom and above. If the destination Freshdesk account is on the Sprout free tier, API-based migration will fail with a 403 response. We verify the destination plan tier during scoping and recommend upgrading to Blossom or Growth before migration begins. As of mid-2025, the Sprout free plan has been limited in scope; teams migrating away from a free tool should budget for a paid Freshdesk plan as part of the migration cost.

  • Freshdesk requires contacts to exist before ticket insert for requester_id

    Freshdesk's Ticket API requires a valid requester_id pointing to an existing Contact record. If we attempt to insert a ticket before the corresponding Contact has been created, the API returns a 400 error. We sequence the migration to extract and insert all HelpDeskZ users as Freshdesk Contacts and Agents first, resolve the user_id-to-contact_id mapping table, then insert all tickets with resolved requester_id references. This dependency adds a validation step but prevents orphaned tickets with invalid requesters.

  • Email threading identifiers from HelpDeskZ are not portable

    When HelpDeskZ converts incoming emails to tickets, it stores the Message-ID and In-Reply-To headers in the database. These references point to the HelpDeskZ local mail system and are not valid email threading identifiers in Freshdesk. We extract the raw email content and attachment filenames but do not preserve email threading relationships, since Freshdesk assigns its own Message-ID values at insert time. The migrated tickets will appear as standalone tickets rather than threaded replies in the original email conversation chain.

Migration approach

Six steps for a successful HelpDeskZ to Freshdesk data migration

  1. Database connectivity and source audit

    We require read credentials to the HelpDeskZ MySQL/MariaDB database (host, port, database name, table prefix, and credentials). If the database is on a private network or behind a firewall, the customer opens access or provides an SSH tunnel before scoping begins. We run a discovery query that inventories ticket count, user count, department count, attachment file count, and a sample of the custom field serialized column across multiple PHP versions to detect any decoding edge cases. We also verify the uploads directory path and confirm that the filesystem is accessible from the migration environment.

  2. Destination Freshdesk plan verification and schema pre-creation

    We confirm the destination Freshdesk plan is Blossom or above (API-enabled) and document the plan tier in the scope. We ask the customer to pre-create custom fields in Freshdesk Admin > Ticket Fields that correspond to the HelpDeskZ custom field keys so that field IDs are available for mapping before any tickets are inserted. We also create Freshdesk Groups matching HelpDeskZ departments, and provision Freshdesk Agents matching the HelpDeskZ admin and agent user records so that all lookups are resolved before ticket import begins.

  3. Users and agents extraction and insertion

    We extract HelpDeskZ users (role=client) and insert them as Freshdesk Contacts via the Contacts API. We extract HelpDeskZ users (role=admin or agent) and insert them as Freshdesk Agents via the Agents API. We build a lookup table mapping each HelpDeskZ user id to the corresponding Freshdesk contact_id or agent_id. This lookup table is required for resolving requester_id and agent_id on every ticket before insertion. Any HelpDeskZ user without a valid email is flagged and skipped, with a reconciliation list delivered for the customer's admin to handle.

  4. Tickets and conversations extraction and insertion

    We extract HelpDeskZ tickets in batches ordered by id, decode PHP-serialized custom fields, and insert into Freshdesk using the Tickets API with the resolved requester_id, group_id, and agent_id from the lookup tables. Replies are extracted per ticket in timestamp order and inserted as Freshdesk Conversation records via the Conversations API. Status and priority integer codes are transformed to Freshdesk enumerations at insert time. Freshdesk API rate limits are handled with exponential backoff and batch chunking (50 tickets per request).

  5. Attachment extraction and upload

    We iterate over each ticket's attachment references, resolve the full file path from the uploads directory, verify the file exists, and upload to Freshdesk via the /tickets/{id}/attachments endpoint. We associate each uploaded file with the correct conversation entry using the reply_id foreign key. Missing files are logged as warnings with ticket ID and filename. Once all attachments are uploaded, we update the conversation record to reference the correct attachment IDs returned by the Freshdesk API.

  6. Validation, cutover, and configuration inventory delivery

    We run a reconciliation report comparing source and destination record counts by type (tickets, contacts, agents, groups, conversations, attachments) and spot-check 25-50 random ticket records for field-level accuracy. We deliver the automation and configuration inventory: a written list of HelpDeskZ automations (if any custom configurations exist), email-to-ticket mailbox settings, and any custom workflows the customer built outside the base product. We do not rebuild these in Freshdesk as part of the migration scope. Cutover is coordinated with the customer on a low-ticket-volume window.

Platform deep dives

Context on both ends of the pair

HelpDeskZ logo

HelpDeskZ

Source

Strengths

  • Zero licensing cost — GPL-licensed PHP software with no subscription or per-seat fees.
  • Complete data ownership via self-hosting — the database and uploads live on your own server.
  • Email-to-ticket via POP3/IMAP allows support teams to operate from existing mailboxes without a separate portal interface.
  • Lightweight and fast on modest hardware — designed for low-traffic environments where simplicity matters more than enterprise features.

Weaknesses

  • No documented public REST API, which blocks programmatic integrations and makes migration tooling development a custom database exercise.
  • Open-source community is small and fragmented — few plugins, no active forum, and the official vendor focuses on paid products instead.
  • Lacks built-in SLA tracking, canned responses, reporting dashboards, and multi-channel support that are standard in modern SaaS help desk platforms.
  • Self-hosting places server maintenance, security patching, and backup management entirely on the customer, with no managed hosting option from the vendor.
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. 2 of 7 objects need a mapping; the rest are 1:1.

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across HelpDeskZ and Freshdesk.

  • Object compatibility

    B

    2 of 7 objects need a mapping; the rest are 1:1.

  • 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

    HelpDeskZ: Not publicly documented.

  • Data volume sensitivity

    B

    HelpDeskZ doesn't expose a bulk API — REST + parallelization used for high-volume runs.

Estimator

Estimate your HelpDeskZ 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 HelpDeskZ to Freshdesk data migrations

Answers to the questions buyers ask most during HelpDeskZ to Freshdesk migration scoping. Not seeing yours? Book a call.

Can't find your answer?

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

Book a free 30 minute consultation

Most HelpDeskZ to Freshdesk migrations complete in one to two weeks for accounts with up to 5,000 tickets, clean user records, and a simple custom field schema. Complexity increases with large attachment volumes (over 10,000 files), numerous custom fields with corrupted serialization, or a large number of missing attachment files that require manual reconciliation. These scenarios extend the timeline to three to five weeks. The Freshdesk API insertion phase runs in batched requests and is constrained by Freshdesk's rate limits (700 requests per minute on Growth), which adds predictable per-record overhead on large migrations.

Adjacent paths

Related migrations to explore

Ready when you are

Move from HelpDeskZ.
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