Helpdesk migration
Field-level mapping, validation, and rollback between HelpDeskZ and Zendesk. We move data and schema; workflows are rebuilt natively in Zendesk.
HelpDeskZ
Source
Zendesk
Destination
Compatibility
9 of 11
objects map 1:1 between HelpDeskZ and Zendesk.
Complexity
BStandard
Timeline
2-3 weeks
Overview
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.
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 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
Zendesk
Ticket
1:1HelpDeskZ 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
Zendesk
Ticket Comment
1:1HelpDeskZ 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)
Zendesk
User (Agent)
1:1HelpDeskZ 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)
Zendesk
End-User (Requester)
1:1HelpDeskZ 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
Zendesk
Group
lossyHelpDeskZ 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
Zendesk
Ticket Attachment
1:1HelpDeskZ 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)
Zendesk
Custom Field
lossyHelpDeskZ 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)
Zendesk
Ticket Status
1:1HelpDeskZ 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)
Zendesk
Ticket Priority
1:1HelpDeskZ 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)
Zendesk
Email Configuration
1:1HelpDeskZ 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
Zendesk
Zendesk Guide (Article, Section, Category)
1:1HelpDeskZ 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.
| HelpDeskZ | Zendesk | Compatibility | |
|---|---|---|---|
| Ticket | Ticket1:1 | Fully supported | |
| Ticket Reply | Ticket Comment1:1 | Fully supported | |
| User (Agent) | User (Agent)1:1 | Fully supported | |
| User (Client) | End-User (Requester)1:1 | Fully supported | |
| Department | Grouplossy | Fully supported | |
| Attachment | Ticket Attachment1:1 | Fully supported | |
| Custom Field (PHP Serialized) | Custom Fieldlossy | Fully supported | |
| Ticket Status (Integer Code) | Ticket Status1:1 | Fully supported | |
| Ticket Priority (Integer Code) | Ticket Priority1:1 | Fully supported | |
| Email Pipeline (POP3/IMAP) | Email Configuration1:1 | Fully supported | |
| Knowledge Base | Zendesk Guide (Article, Section, Category)1: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
Zendesk gotchas
Data export requires API scripting on non-Enterprise plans
Automations cap at 500 active rules and 1,000 tickets per hour
Help Center has no native export feature
Custom Objects and full data export are Enterprise-only
Pair-specific challenges
Migration approach
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.
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.
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.
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.
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.
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
HelpDeskZ
Source
Strengths
Weaknesses
Zendesk
Destination
Strengths
Weaknesses
Complexity grading
Standard Helpdesk migration. 2 of 7 objects need a mapping; the rest are 1:1.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across HelpDeskZ and Zendesk.
Object compatibility
2 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 Zendesk migration scoping. Not seeing yours? Book a call.
Walk through your HelpDeskZ to Zendesk 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 Zendesk
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.