Helpdesk migration
Field-level mapping, validation, and rollback between Hesk and Gorgias. We move data and schema; workflows are rebuilt natively in Gorgias.
Hesk
Source
Gorgias
Destination
Compatibility
8 of 12
objects map 1:1 between Hesk and Gorgias.
Complexity
CModerate
Timeline
3-5 weeks
Overview
Moving from Hesk to Gorgias is a structural upgrade for teams leaving a self-hosted PHP/MySQL help desk for a Shopify-native SaaS platform with REST API access, workflow automation, and multi-channel routing. Hesk has no public REST API, so every migration begins with a direct MySQL connection to extract Tickets, Knowledge Base articles, Categories, Users, Staff accounts, Custom fields, and Canned responses. We bundle the file-system attachments alongside database records to preserve the ticket-attachment linkage, handle GDPR anonymisation decisions before extraction, and manage version-parity checks across Hesk's schema. Gorgias's volume-based pricing (Starter $10/mo for 50 tickets, Pro $300-$1,360/mo for 2,000 tickets) introduces a cost structure that Hesk's zero-cost self-hosted model never had, so we surface the pricing delta during scoping. We do not migrate Hesk automations or canned-reply macros as code — Gorgias Macros require rebuilding in its editor and we deliver a written inventory to guide that work.
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 Hesk object lands in Gorgias, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
Hesk
Tickets
Gorgias
Ticket
1:1Hesk Tickets map to Gorgias Tickets via subject, message body, status, priority, owner (Staff), and category references. Hesk ticket ID is stored as external_id in Gorgias for reconciliation. Status values (New, Waiting, Replied, Resolved, Closed) map to Gorgias status labels. Priority values map to Gorgias priority (Low, Normal, High, Urgent). Custom field values stored in Hesk's hesk_ticket_custom_fields table are read per ticket and written to Gorgias custom fields by object type (Ticket or Customer) and field label match.
Hesk
Users (End Customers)
Gorgias
Customer
1:1Hesk Users (end customers) map to Gorgias Customers by name, email, and phone. Hesk stores IP address and creation date; these migrate to Gorgias as custom fields or metadata if needed for GDPR scope. Hesk allows emailless users for phone-only contacts; Gorgias Customer requires at least an email or phone, so phone-only Hesk users are created with a placeholder email and flagged for admin review.
Hesk
Staff Accounts
Gorgias
Agent
1:1Hesk Staff accounts (name, email, role: administrator/manager/agent) map to Gorgias Agents. Hesk password hashes (bcrypt) cannot be migrated to Gorgias because Gorgias uses its own authentication system; agents receive invitation emails to set passwords post-migration. Role mapping: Hesk administrator and manager map to Gorgias admin; Hesk agent maps to Gorgias agent. Owners without an email match in Gorgias are held in a reconciliation queue for the customer to provision.
Hesk
Categories
Gorgias
Team
lossyHesk ticket categories map to Gorgias Teams. Teams in Gorgias are used for routing and ticket assignment, not just grouping. We preserve Hesk category names and descriptions as Team names, and optionally create a separate Category label mapping if the customer needs both routing teams and subject-matter categories. Category assignment on tickets is preserved as a custom field if Teams are used for routing instead.
Hesk
Knowledge Base Articles
Gorgias
Knowledge Base Article
1:1Hesk KB articles (title, HTML content, category association, attachments) map to Gorgias Knowledge Base articles. HTML content migrates as article body. Hesk KB categories map to Gorgias article categories. Inline images are extracted from Hesk's file-system paths, uploaded to a temporary CDN or directly to Gorgias, and URL references are updated in the article body before import. Article publication status maps from Hesk's article visibility flag.
Hesk
Canned Responses
Gorgias
Macro
lossyHesk canned responses (title, HTML content) map to Gorgias Macros. Because Hesk stores canned responses as flat database rows without conditions or actions, they import as Gorgias macros with default conditions set to 'always applies' for the customer's admin to add conditions and ticket rules post-migration. We deliver a written inventory of all migrated macros with the original Hesk content so the admin can enrich them in Gorgias's macro editor.
Hesk
Custom Fields (per-ticket)
Gorgias
Custom Field (Ticket object)
1:1Hesk ticket custom fields are read from hesk_ticket_custom_fields and mapped to Gorgias Ticket custom fields by label match. Hesk field types (text, number, checkbox, dropdown, date) are matched to Gorgias field types (text, number, boolean, dropdown, date). If Hesk uses a type that Gorgias does not support natively, we store the value as a text custom field and flag it for the customer's admin. Custom field definitions must be created in Gorgias before ticket import begins because Gorgias requires the field to exist before values can be written.
Hesk
Custom Fields (per-user)
Gorgias
Custom Field (Customer object)
1:1Hesk user custom fields (hesk_user_custom_fields table) map to Gorgias Customer custom fields following the same type-matching logic as ticket custom fields. Customer custom fields are created in Gorgias during the schema phase before any customer records are imported. Values are written during the customer import phase.
Hesk
Ticket Attachments
Gorgias
Ticket Attachments (inline images and files)
1:1Hesk stores attachments on the file system with paths in MySQL (hesk_attachments table). We export the entire attachments directory alongside the database extract, upload files to a temporary storage endpoint, and write the corresponding URLs into the ticket message body and any inline image references before importing into Gorgias. Path remapping is required if the destination Gorgias domain differs from the Hesk hostname.
Hesk
Ticket History / Audit Trail
Gorgias
Ticket Events (replies, status changes, assignments)
1:1Hesk logs ticket events (opened, replied, status change, assignment) in hesk_ticket_history. We export the full history and merge it into Gorgias ticket events. Not all Hesk history event types have a direct Gorgias equivalent, so we collapse Hesk-specific internal log entries into a single 'Note' event on the ticket and flag the merged entries in the delivery report. Historical reply content migrates as additional messages on the Gorgias Ticket.
Hesk
Settings and Configuration
Gorgias
Configuration (email routing, branding, ticket fields)
lossyHesk settings (email routing, ticket field visibility, status labels, branding) are exported as a configuration bundle. We map equivalent settings to Gorgias (email integration settings, ticket field configuration, company branding). Settings that have no Gorgias equivalent (server-level mail configuration, PHP cron-based reminders) are documented as manual-configuration items for the admin to address post-migration.
Hesk
GDPR Anonymisation Flag
Gorgias
Customer (anonymised or retained)
lossyIf the customer requests GDPR anonymisation before migration, we apply Hesk's built-in anonymisation to strip PII (name, email, IP address) from selected records. This decision must be made before database extraction because anonymisation alters the source data. We clarify the GDPR scope with the customer upfront, document which records are anonymised, and flag any ticket subjects or thread content that may still contain indirect identifiers after anonymisation.
| Hesk | Gorgias | Compatibility | |
|---|---|---|---|
| Tickets | Ticket1:1 | Fully supported | |
| Users (End Customers) | Customer1:1 | Fully supported | |
| Staff Accounts | Agent1:1 | Fully supported | |
| Categories | Teamlossy | Fully supported | |
| Knowledge Base Articles | Knowledge Base Article1:1 | Fully supported | |
| Canned Responses | Macrolossy | Fully supported | |
| Custom Fields (per-ticket) | Custom Field (Ticket object)1:1 | Fully supported | |
| Custom Fields (per-user) | Custom Field (Customer object)1:1 | Fully supported | |
| Ticket Attachments | Ticket Attachments (inline images and files)1:1 | Fully supported | |
| Ticket History / Audit Trail | Ticket Events (replies, status changes, assignments)1:1 | Mapping required | |
| Settings and Configuration | Configuration (email routing, branding, ticket fields)lossy | Mapping required | |
| GDPR Anonymisation Flag | Customer (anonymised or retained)lossy | 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.
Hesk gotchas
No REST API means all migrations are database-first
Moving Hesk between servers requires version parity
GDPR anonymisation may conflict with ticket preservation
Attachments are file-system references, not database blobs
Custom field limits are undocumented but exist
Gorgias gotchas
AI Agent adds outcome-based fees on top of billable ticket costs
Overage billing for tickets scales nonlinearly
API rate limits restrict bulk export throughput
Agent data visibility cannot be restricted by role for GDPR use cases
Knowledge Base translations require separate API calls per locale
Pair-specific challenges
Migration approach
Discovery and schema audit
We connect to the Hesk MySQL database (or receive an XML/CSV export if direct access is unavailable) and enumerate the full schema: table versions, ticket count, user count, staff count, KB article count, custom field definitions and values, canned response count, attachment file list, and ticket history volume. We also scan for Hesk version number (to verify schema parity with any prior backup), GDPR anonymisation requests, and any Mods-for-HESK add-ons that may have extended the schema. The discovery output is a written migration scope with record counts, a list of Hesk custom fields requiring Gorgias equivalents, and a GDPR scope decision.
Gorgias schema provisioning
We create all required custom fields in Gorgias before any record import. Ticket custom fields are created via the Gorgias API with the correct field type (text, number, boolean, dropdown, date). Customer custom fields are created on the Customer object. We create Teams mapped from Hesk categories. KB article categories are provisioned in Gorgias's Knowledge Base structure. Macros are pre-created as default 'always applies' templates pending post-migration enrichment. Each schema object is validated via API before the import phase begins.
Attachment and file-system export
We export the entire Hesk attachments directory (hesk_attachments folder and any inline image directories) alongside the MySQL database extract. Files are verified against the MySQL attachment table (filename, ticket_id, article_id references) to confirm no orphaned files exist. If the customer is on Hesk Cloud without file-system access, we coordinate a zip export through their hosting provider. The file export is bundled with the database extract for step-order import.
Record import in dependency order
We import records into Gorgias in strict dependency order. First, Gorgias Agents (from Hesk Staff) — these are required for ticket owner resolution. Second, Gorgias Customers (from Hesk Users) with anonymisation applied if GDPR scope was defined. Third, KB articles with inline images uploaded and URL references remapped. Fourth, Gorgias Tickets with Hesk ticket ID stored as external_id, custom field values written per ticket, and ticket history merged as events or additional messages. Fifth, Canned responses as default macros. Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, delta sync, and macro handoff
We freeze Hesk writes during cutover, run a final delta migration of any tickets, users, or KB articles modified during the migration window, then point the customer's email routing to Gorgias. We deliver the canned response macro inventory document to the customer's admin team for enrichment in Gorgias's macro editor. We support a one-week hypercare window where we resolve any reconciliation issues. We do not rebuild Hesk automations as Gorgias automation rules inside the migration scope; that work is documented separately for the customer's admin to address with Gorgias's built-in rule editor.
Platform deep dives
Hesk
Source
Strengths
Weaknesses
Gorgias
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 Hesk and Gorgias.
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
Hesk: Not documented.
Data volume sensitivity
Hesk 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 Hesk to Gorgias migration scoping. Not seeing yours? Book a call.
Walk through your Hesk to Gorgias migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave Hesk
Other ways to arrive at Gorgias
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.