Helpdesk migration

Migrate from HelpDeskZ to Zendesk

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

HelpDeskZ logo

HelpDeskZ

Source

Zendesk

Destination

Zendesk logo

Compatibility

82%

9 of 11

objects map 1:1 between HelpDeskZ and Zendesk.

Complexity

BStandard

Timeline

2-3 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from HelpDeskZ to Zendesk is a migration from a no-API self-hosted PHP platform to a REST-API-powered SaaS help desk, which changes the entire technical approach. HelpDeskZ stores tickets, users, and custom fields in a MySQL/MariaDB database with no public HTTP interface, so we connect directly to the source database for extraction. Zendesk receives the data via its REST API with notification triggers disabled during import so customers do not receive automated emails about historical tickets being inserted. We unserialize PHP-encoded custom field arrays, resolve HelpDeskZ department assignments to Zendesk Groups, and upload attachment files from the HelpDeskZ uploads directory to Zendesk's comment attachments endpoint. Workflows, automations, and email pipeline configurations do not migrate; we deliver a written inventory of these for the customer's admin to rebuild in Zendesk.

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

Zendesk logo

Zendesk

What's pulling them in

  • Mature omnichannel routing across email, chat, phone, messaging, and social — one unified inbox for support teams regardless of size or complexity.
  • Deep automation with Triggers, Automations, and SLA Policies lets high-volume teams enforce consistent workflows without manual ticket handling.
  • Large ecosystem of third-party integrations and a public app marketplace reduce friction for teams already using Salesforce, Jira, or Slack.
  • Industry-leading brand recognition and trust signal — many enterprise buyers default to Zendesk as a known quantity in vendor procurement cycles.
  • Generous documentation library and community mean onboarding teams can self-configure without needing a services engagement to get started.

Object mapping

How HelpDeskZ objects map to Zendesk

Each row shows how a HelpDeskZ object lands in Zendesk, 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

Zendesk

Ticket

1:1
Fully supported

HelpDeskZ tickets map directly to Zendesk tickets. We extract ticket id, subject, status (integer code), priority (integer code), created date, updated date, and assigned agent id from the MySQL tickets table. The Zendesk API creates tickets via POST /tickets with the requester mapped from the ticket's client_id to a Zendesk user. Historical ticket IDs are preserved in a custom field hdz_original_id__c for cross-reference after cutover.

HelpDeskZ

Ticket Reply

maps to

Zendesk

Ticket Comment

1:1
Fully supported

HelpDeskZ stores each reply as a separate row in the ticket_replies table linked by ticket_id. We extract rows in chronological order by the created timestamp, distinguish agent replies from client replies using the role column, and insert them as Zendesk ticket comments via POST /tickets/{id}/comments. The Is-Public flag on each comment is set based on the HelpDeskZ reply visibility setting.

HelpDeskZ

User (Agent)

maps to

Zendesk

User (Agent)

1:1
Fully supported

HelpDeskZ agents from the users table with role=admin or role=agent map to Zendesk Users with the agent role. We match by email address and set the user name, email, and role. If a Zendesk user with the same email already exists, we link the HelpDeskZ agent to the existing Zendesk user rather than creating a duplicate. Agents without an email in HelpDeskZ receive a placeholder email during migration for the customer's admin to correct.

HelpDeskZ

User (Client)

maps to

Zendesk

End-User (Requester)

1:1
Fully supported

HelpDeskZ clients (role=client) map to Zendesk end-users. We extract name and email from the users table and create Zendesk users via POST /users. The hdz_client_id__c custom field stores the original HelpDeskZ user ID for reconciliation. If the email is blank or generic (e.g., noreply@), we flag the record and the customer decides whether to create a placeholder or skip the user.

HelpDeskZ

Department

maps to

Zendesk

Group

lossy
Fully supported

HelpDeskZ departments exist as a simple id-name lookup table. We map each HelpDeskZ department to a Zendesk Group via the Groups API. If Zendesk Groups do not yet exist at migration time, we create them first so that ticket assignments can reference valid group IDs during import. Teams that use Zendesk Groups for routing will need to reassign tickets to the correct groups post-migration if department-to-group mapping is not one-to-one.

HelpDeskZ

Attachment

maps to

Zendesk

Ticket Attachment

1:1
Fully supported

HelpDeskZ stores uploaded files on disk in the uploads/ directory with only filenames referenced in the tickets and replies tables. We locate the uploads directory via the uploads_path configuration value, validate that each referenced file exists, and upload files to Zendesk via POST /tickets/{id}/attachments for ticket-level attachments or POST /users/{id}/avatar for user avatars. Files that cannot be located are logged as warnings and skipped to allow migration to proceed without blocking on a single missing attachment.

HelpDeskZ

Custom Field (PHP Serialized)

maps to

Zendesk

Custom Field

lossy
Fully supported

HelpDeskZ custom fields are stored as a PHP serialized string in the custom_fields column of the tickets table. We detect the PHP version on the source server, apply the correct unserialize() call, extract each key-value pair, and map each to a corresponding Zendesk custom field created via POST /tickets/{id}/fields or POST /users/{id}/tags. Zendesk custom field IDs must exist in the destination before tickets are imported, so we create the Zendesk custom field schema first, then populate values during ticket import. Multi-select and checkbox values from HelpDeskZ migrate as Zendesk tags on the ticket.

HelpDeskZ

Ticket Status (Integer Code)

maps to

Zendesk

Ticket Status

1:1
Fully supported

HelpDeskZ stores status as integer codes (typically 0=Open, 1=Pending, 2=Resolved, 3=Closed) in the database. We map these integer codes to Zendesk ticket status values (open, pending, solved, closed). Customers who have added custom status values via the HelpDeskZ admin panel will have those integer codes flagged and remapped per a status mapping document agreed upon during scoping. Non-standard status values that cannot map to a Zendesk status default to open and are flagged for admin review.

HelpDeskZ

Ticket Priority (Integer Code)

maps to

Zendesk

Ticket Priority

1:1
Fully supported

HelpDeskZ stores priority as integer codes (typically 0=Low, 1=Normal, 2=High). We map these to Zendesk priority values (low, normal, high, urgent). If HelpDeskZ has fewer than four priority levels, the unused Zendesk priority values remain unmapped and the customer's admin sets a default priority during Zendesk configuration.

HelpDeskZ

Email Pipeline (POP3/IMAP)

maps to

Zendesk

Email Configuration

1:1
Fully supported

HelpDeskZ email-to-ticket routing is configured via POP3/IMAP mailbox settings stored in the database. We extract the source email address and mailbox configuration but do not migrate these settings to Zendesk because Zendesk's email routing is configured in the Zendesk Admin panel and involves domain verification and email forwarding rules. We deliver a written note identifying the HelpDeskZ source mailbox address so the customer's Zendesk admin can configure the corresponding Zendesk email endpoint. Message-ID and In-Reply-To threading references stored in HelpDeskZ are not valid in Zendesk and are not migrated; the raw email body content is preserved in the ticket comment.

HelpDeskZ

Knowledge Base

maps to

Zendesk

Zendesk Guide (Article, Section, Category)

1:1
Fully supported

HelpDeskZ does not include a built-in knowledge base module. If the customer has published help content elsewhere (a separate wiki, a document on the filesystem, or a third-party tool), that content does not migrate as part of the HelpDeskZ-to-Zendesk standard scope. We flag the absence of KB content during scoping and deliver a written recommendation that the customer export any external knowledge content and import it to Zendesk Guide separately using Zendesk's CSV article importer or API.

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

Zendesk logo

Zendesk gotchas

High

Data export requires API scripting on non-Enterprise plans

Medium

Automations cap at 500 active rules and 1,000 tickets per hour

Medium

Help Center has no native export feature

High

Custom Objects and full data export are Enterprise-only

Pair-specific challenges

  • No REST API on HelpDeskZ — direct database access required

    HelpDeskZ exposes no public HTTP API. All data extraction happens via direct MySQL/MariaDB queries against the source database. We require read credentials to the database server (host, port, username, password), the database name, and the table prefix during scoping. If the database is on a private network or behind a firewall, the customer must open network access or provide an SSH tunnel before migration begins. Any schema changes to the HelpDeskZ database after scoping (e.g., a plugin adding columns) can break the extraction queries and require a rescoping session.

  • PHP serialized custom fields must be unserialized before mapping

    HelpDeskZ stores custom field values as a PHP serialized string in the custom_fields column of the tickets table. PHP version differences between the source server (PHP 7.x vs PHP 8.x) can produce incompatible serialization formats that cause unserialize() to return false silently. We detect the PHP version on the source server before extraction, apply the correct unserialization method, and fall back to regex-based key extraction if the serialized data is corrupted. Custom field values that fail unserialization are logged and skipped, and the customer receives a list of affected tickets for manual remediation.

  • Email threading references do not migrate across platforms

    When HelpDeskZ converts incoming emails to tickets, it stores Message-ID and In-Reply-To email headers in the database. These references point to the HelpDeskZ mail system's internal identifiers and are not valid in Zendesk. We extract the raw email body content and attachment filenames from HelpDeskZ and insert them as Zendesk ticket comments, but Zendesk assigns its own thread identifiers at insert time. The email threading relationships (which Zendesk uses to group replies into a single conversation) will be based on the shared subject token and requester email, not the original HelpDeskZ Message-ID chain.

  • Attachment files on disk must be locatable and readable

    HelpDeskZ saves uploaded files to the uploads/ directory on the filesystem with only the filename stored in the tickets and replies tables. We verify the uploads directory path is accessible during extraction by cross-referencing the uploads_path configuration value. If the directory has been moved, symlinked, or symlinked outside the web root, we locate the actual file path and log the discrepancy. Files that are missing from disk are logged as warnings and skipped to prevent migration from blocking on a single lost attachment. The customer receives a list of missing attachment references after migration.

  • Zendesk notification triggers fire on imported historical tickets unless disabled

    Zendesk triggers and email notifications evaluate on every ticket create or update, including records inserted by the migration API. If triggers are enabled during migration, customers and agents receive email notifications about tickets that were closed months or years ago. We coordinate with the customer's Zendesk admin to disable triggers, notifications, and automations before migration begins, insert all tickets with the notify_trigger=false flag where supported, and re-enable the full automation suite after cutover validation. Any custom triggers the admin has created must also be reviewed and disabled manually; we cannot disable triggers created by the customer without their explicit action.

Migration approach

Six steps for a successful HelpDeskZ to Zendesk data migration

  1. Database access and schema discovery

    We establish a read-only MySQL/MariaDB connection to the HelpDeskZ database using credentials provided by the customer. We inspect the table prefix, extract the schema for tickets, ticket_replies, users, departments, and custom field structures, and confirm the uploads directory path. We detect the PHP version on the source server for unserialization compatibility. The output of this step is a written schema map identifying every source column we will extract and the transformation rule that applies to each.

  2. Zendesk environment preparation

    The customer provisions a Zendesk account at the appropriate Suite tier and provides an admin-level API token. We create the Zendesk custom fields, groups (mapped from HelpDeskZ departments), and user roles before any ticket data is imported. We coordinate with the Zendesk admin to disable all triggers, notification triggers, and email notification rules before migration begins. If the customer requires a staggered or delta migration strategy, we define the cutover date and the window during which HelpDeskZ remains read-only for the final export.

  3. Attachment extraction and staging

    We enumerate every attachment filename referenced in the HelpDeskZ tickets and replies tables, verify that each file exists in the uploads/ directory, and stage them for upload to Zendesk. Files are organized by their source ticket ID so they can be attached to the correct Zendesk comment at import time. Missing files are logged and excluded. We upload staged attachments to Zendesk via the API before ticket import begins so that attachment tokens are available during comment creation.

  4. User and agent extraction and import

    We extract all HelpDeskZ users (agents and clients) from the users table and import them to Zendesk via POST /users in batches. Agents are assigned the agent role; clients become end-users. We match by email address and link existing Zendesk users where applicable. Department assignments are resolved to Zendesk group IDs created during environment preparation. A user ID cross-reference table is maintained for ticket assignment resolution in the next step.

  5. Ticket and comment import via Zendesk API

    We extract HelpDeskZ tickets in dependency order (tickets first, then ticket_replies ordered by created timestamp), transform status codes, priority codes, and PHP-serialized custom fields, and insert records via Zendesk's tickets endpoint. The hdz_original_id__c custom field carries the HelpDeskZ ticket ID for cross-reference. Comments are inserted via POST /tickets/{id}/comments with the Is-Public flag set based on reply visibility. Attachment tokens from the staging step are embedded in each comment at insert time. We use exponential backoff and batch chunking to stay within Zendesk API rate limits.

  6. Cutover, delta sync, and trigger re-enablement

    If the migration uses a staggered or delta strategy, HelpDeskZ remains open for new tickets during migration. At cutover, we run a final delta export of any tickets or replies created or modified after the initial migration snapshot, apply the same transformation pipeline, and insert the delta records into Zendesk. We then re-enable Zendesk triggers, notification rules, and automations in coordination with the Zendesk admin. We deliver a post-migration reconciliation report comparing source record counts against Zendesk record counts and a list of skipped records with reasons for the customer's review.

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

Zendesk

Destination

Strengths

  • Well-documented REST API with broad endpoint coverage for Tickets, Users, Organizations, and Help Center.
  • Rich automation primitives: Triggers (event-driven), Automations (time-based), and Macros with variable substitution.
  • Multi-brand support enables large organizations to route and isolate support by product line or subsidiary.
  • Scalable from small teams on Team plan to global enterprises on Enterprise Plus with sandbox and disaster recovery options.
  • Large partner ecosystem and marketplace with hundreds of pre-built integrations reduces integration work at deployment.

Weaknesses

  • Per-agent pricing with aggressive feature gating makes lower tiers feel artificially limited.
  • No native full-KB export — Help Center content requires API scripting to extract.
  • AI features are add-on priced and behave inconsistently, not deeply embedded in core workflows.
  • Implementation timelines for complex multi-channel setups routinely exceed initial estimates by weeks or months.
  • Knowledge base and help center functionality are separate from core ticketing with their own permission model and versioning.

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 Zendesk.

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

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

Can't find your answer?

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

Book a free 30 minute consultation

Migrations under 5,000 tickets with a straightforward status and priority mapping typically complete in two to three weeks. Migrations above 5,000 tickets, with large attachment volumes (over 50,000 files), complex PHP-serialized custom field schemas, or a delta migration strategy to capture tickets created during the migration window move to five to eight weeks. The Zendesk environment preparation and trigger-disablement coordination with the Zendesk admin typically takes three to five business days before data extraction begins.

Adjacent paths

Related migrations to explore

Ready when you are

Move from HelpDeskZ.
Land in Zendesk, 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