Helpdesk migration
Field-level mapping, validation, and rollback between HelpDeskZ and HubSpot Service Hub. We move data and schema; workflows are rebuilt natively in HubSpot Service Hub.
HelpDeskZ
Source
HubSpot Service Hub
Destination
Compatibility
6 of 12
objects map 1:1 between HelpDeskZ and HubSpot Service Hub.
Complexity
CModerate
Timeline
2-4 weeks
Overview
Moving from HelpDeskZ to HubSpot Service Hub means replacing a self-hosted PHP ticket system with a SaaS help desk that is part of a unified CRM. HelpDeskZ has no REST API — migration runs entirely through direct MySQL queries against the source database, extracting ticket threads, user records, department assignments, and files from the filesystem. We unserialize the PHP-serialized custom_fields column on each ticket, map HelpDeskZ status integers to HubSpot ticket pipeline status values, and upload attachment files into HubSpot's file storage with ticket associations. Agents and clients from HelpDeskZ become HubSpot users and contacts respectively. We do not migrate email pipeline threading (Message-ID and In-Reply-To references), knowledge base articles (HelpDeskZ has none built-in), or any HelpDeskZ email-to-ticket routing configuration — these are flagged in the inventory delivered alongside migration. SLA policies, ticket pipelines, help desk views, and team structures must be configured in HubSpot before or after migration, not during it.
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.
Source platform
HelpDeskZ platform overview
Scorecard, SWOT, gotchas, and pricing for HelpDeskZ.
Destination platform
HubSpot Service Hub platform overview
Scorecard, SWOT, gotchas, and pricing for HubSpot Service Hub.
Data migration guide
The complete HubSpot Service Hub migration guide
Data model, import mechanisms, field mapping strategy, pitfalls, and cutover — by the engineers running it.
Destination checklist
HubSpot Service Hub migration checklist
Pre- and post-cutover tasks for moving onto HubSpot Service Hub.
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 HubSpot Service Hub, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
HelpDeskZ
Ticket
HubSpot Service Hub
Ticket
1:1HelpDeskZ tickets map directly to HubSpot Ticket objects. We extract the ticket subject, body, status (integer), priority (integer), created date, and updated date from the tickets table. The conversation feed in HubSpot is populated from the replies table, inserted in chronological order so the thread reads correctly. Custom fields stored in the serialized PHP column are decoded, extracted as key-value pairs, and written to HubSpot custom ticket properties that we pre-create during schema setup.
HelpDeskZ
Ticket Reply
HubSpot Service Hub
Ticket Conversation (Comment)
1:1Each HelpDeskZ replies table row becomes a HubSpot Ticket comment. We map the reply body, author type (agent vs client), and timestamp. The author email resolves to a HubSpot Contact or User by email lookup. Private agent notes in HelpDeskZ (distinguished by a dedicated column or is_agent flag) map to HubSpot's internal notes on the Ticket rather than public comments. Original Message-ID and In-Reply-To headers are not transferred; HubSpot assigns its own thread identifiers at insert time.
HelpDeskZ
User (Agent)
HubSpot Service Hub
User
1:1HelpDeskZ users with role Admin or Agent map to HubSpot Users. We extract name, email, role, and created date from the users table. The user's hashed password is not migrated — agents must set a HubSpot password at onboarding. Agents who previously had admin privileges in HelpDeskZ should be granted Super Admin or standard user access in HubSpot based on the customer's org design.
HelpDeskZ
User (Client)
HubSpot Service Hub
Contact
1:manyHelpDeskZ users with role Client map to HubSpot Contacts. We extract name, email, phone, and created date. If a Contact with the same email already exists in HubSpot (from sales or marketing records), we match on email and update rather than create a duplicate. The original HelpDeskZ client ID is preserved in a custom field hd_client_id__c for audit and cross-reference.
HelpDeskZ
Department
HubSpot Service Hub
Team
1:1HelpDeskZ departments are a flat id-name lookup table. We map each department to a HubSpot Team. Ticket assignments in HelpDeskZ that reference a department ID are translated to HubSpot team membership at migration time. If the customer has hierarchical departments, we flatten them to HubSpot Teams since HubSpot does not support nested team hierarchies natively.
HelpDeskZ
Ticket Attachment
HubSpot Service Hub
File + Ticket Association
1:1HelpDeskZ stores file attachments on disk in the uploads/ directory, with only the filename stored in the tickets and replies tables. We read each filename, locate the corresponding file on the source filesystem, upload it to HubSpot's file manager API, and associate it with the target Ticket record. Missing files are logged as warnings and skipped to allow migration to proceed. Files exceeding HubSpot's attachment size limits are flagged for the customer to handle manually or host externally.
HelpDeskZ
Ticket Status
HubSpot Service Hub
Ticket Pipeline Status
lossyHelpDeskZ stores ticket status as integer codes (typically: 1=Open, 2=Pending, 3=Resolved, 4=Closed). We map these integers to HubSpot ticket pipeline status values during extraction. Customers who have added custom status values or renamed statuses via database edits must provide the full status code table during scoping so we can build the correct mapping before migration begins.
HelpDeskZ
Ticket Priority
HubSpot Service Hub
Ticket Priority
lossyHelpDeskZ stores priority as an integer (1=Low, 2=Normal, 3=High, 4=Urgent). We map these to HubSpot ticket priority values (LOW, MEDIUM, HIGH, URGENT). If the customer has non-standard priority mappings, we document the custom mapping during scoping.
HelpDeskZ
Custom Field
HubSpot Service Hub
Custom Ticket Property
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 unserialization method (handling PHP 7 vs PHP 8 serialization differences), and extract each key-value pair. Each custom field becomes a HubSpot custom ticket property with a type determined during scoping (text, number, date, dropdown). We pre-create all HubSpot custom properties before migration so that ticket inserts do not fail on unknown property errors.
HelpDeskZ
Email-to-Ticket (POP3/IMAP)
HubSpot Service Hub
Connected Email Channel Configuration
lossyHelpDeskZ email-to-ticket routing stores POP3/IMAP credentials and mailbox settings in the database. We extract these settings and flag them in the migration inventory. The actual email pipeline cannot migrate because HubSpot's connected email channel uses OAuth2 authentication and its own mailbox routing, not POP3/IMAP polling. We deliver the mailbox settings to the customer's HubSpot admin to reconfigure as a HubSpot connected email channel post-migration.
HelpDeskZ
Ticket Timestamp
HubSpot Service Hub
Ticket Createdate + hs_lastModifiedDate
1:1HelpDeskZ created_date and updated_date timestamps on each ticket are preserved as HubSpot ticket createdate and hs_last_modified_date. These timestamps are critical for reporting on historical ticket volume and agent response times. We set these via the HubSpot Tickets API at insert time rather than relying on HubSpot's default server-side timestamp.
HelpDeskZ
HelpDeskZ Configuration (Statuses, Priorities, Departments)
HubSpot Service Hub
HubSpot Pipeline + Teams Configuration
lossyThe complete HelpDeskZ configuration schema — ticket statuses, priorities, departments, and any custom ticket type flags — is documented in the migration inventory. This document is the reference for rebuilding the equivalent configuration in HubSpot Service Hub. We deliver this before migration begins so that the customer can configure HubSpot pipelines and teams while data extraction is underway.
| HelpDeskZ | HubSpot Service Hub | Compatibility | |
|---|---|---|---|
| Ticket | Ticket1:1 | Fully supported | |
| Ticket Reply | Ticket Conversation (Comment)1:1 | Fully supported | |
| User (Agent) | User1:1 | Fully supported | |
| User (Client) | Contact1:many | Fully supported | |
| Department | Team1:1 | Fully supported | |
| Ticket Attachment | File + Ticket Association1:1 | Fully supported | |
| Ticket Status | Ticket Pipeline Statuslossy | Fully supported | |
| Ticket Priority | Ticket Prioritylossy | Fully supported | |
| Custom Field | Custom Ticket Propertylossy | Fully supported | |
| Email-to-Ticket (POP3/IMAP) | Connected Email Channel Configurationlossy | Fully supported | |
| Ticket Timestamp | Ticket Createdate + hs_lastModifiedDate1:1 | Fully supported | |
| HelpDeskZ Configuration (Statuses, Priorities, Departments) | HubSpot Pipeline + Teams Configurationlossy | 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
HubSpot Service Hub gotchas
Rate limits throttle large migration API calls
Side conversations and Zendesk macros have no HubSpot equivalent
HubSpot stores ticket history as fragmented engagement objects
Custom Objects require Enterprise tier in HubSpot
Ticket pipeline stage probability values do not export cleanly
Pair-specific challenges
Migration approach
Scoping and database access verification
We audit the HelpDeskZ database schema, table prefix, and PHP version. We confirm database read credentials, verify the uploads/ filesystem path is accessible via the same or a linked server, and extract the full status and priority code tables. We also confirm the HelpDeskZ version (EvolutionScript original vs ViktorNova fork) because the table schema and custom field storage can differ. The output is a written scoping document with record counts (tickets, users, attachments) and the confirmed database access path. This gates the migration start date.
HubSpot destination configuration
We guide the customer through HubSpot Service Hub configuration before migration begins. This includes creating the ticket pipeline and status values that match the HelpDeskZ status codes, setting up Teams that correspond to HelpDeskZ departments, and creating any custom ticket properties to receive HelpDeskZ custom field values. We pre-create all HubSpot custom properties via the CRM Properties API so that ticket inserts do not fail on unknown property errors. If the customer is on Starter tier and wants help desk features, we flag the tier upgrade requirement here.
Data extraction and transformation
We extract tickets, replies, users, and department records from the MySQL database via direct queries. For each ticket, we unserialize the custom_fields column, extract the conversation thread from the replies table in chronological order, and collect attachment filenames. We transform HelpDeskZ status and priority integer codes to the HubSpot-equivalent values using the mapping table agreed during scoping. We build a contact dedupe map by email so that HelpDeskZ clients matching existing HubSpot contacts are updated rather than duplicated.
Attachment file extraction and upload
We iterate over the attachment filename list per ticket, locate each file in the HelpDeskZ uploads/ directory, validate the file exists and is under the size limit, upload it to HubSpot's file manager API, and store the returned HubSpot file ID for association with the target ticket. Files that are missing or exceed HubSpot's attachment size limit are logged as warnings. We group attachments by ticket so that ticket insertion failures do not orphan uploaded files.
HubSpot API insertion in dependency order
We insert into HubSpot in dependency order: Teams (from departments), Users (from agents), Contacts (from clients with dedupe by email), then Tickets with conversation comments. Attachment associations are set after both the ticket and the file exist in HubSpot. We use HubSpot's Tickets API with batch upsert where the HelpDeskZ ticket ID is the external ID. Ticket timestamps (createdate, hs_last_modified_date) are set explicitly at insert to preserve the original HelpDeskZ creation date. We apply rate-limit handling with exponential backoff on 429 responses.
Reconciliation report and automation handoff
We generate a row-count reconciliation report comparing HelpDeskZ source record counts against HubSpot destination record counts for each object type. We log skipped records with reason codes (missing attachment, corrupted custom field, dedupe match) for customer review. We deliver the HelpDeskZ configuration inventory documenting email pipeline settings, custom statuses, and any non-standard department structures for the customer's HubSpot admin to reconfigure in HubSpot's connected email and help desk settings. We do not rebuild automations, SLAs, or ticket routing rules — these require HubSpot admin configuration post-migration.
Platform deep dives
HelpDeskZ
Source
Strengths
Weaknesses
HubSpot Service Hub
Destination
Strengths
Weaknesses
Complexity grading
Moderate Helpdesk migration. 3 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 HubSpot Service Hub.
Object compatibility
3 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 HubSpot Service Hub migration scoping. Not seeing yours? Book a call.
Walk through your HelpDeskZ to HubSpot Service Hub 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 HubSpot Service Hub
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.