Helpdesk migration
Field-level mapping, validation, and rollback between Frappe Helpdesk and Zendesk. We move data and schema; workflows are rebuilt natively in Zendesk.
Frappe Helpdesk
Source
Zendesk
Destination
Compatibility
11 of 12
objects map 1:1 between Frappe Helpdesk and Zendesk.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Frappe Helpdesk stores every object as a PostgreSQL DocType, which means we extract at the database level rather than through a documented REST API. That gives us full access to SLA deadline fields, assignment rule conditions, and custom field definitions, but it also means private file attachments require an authenticated session to re-download. We migrate HD Tickets directly to Zendesk Tickets, HD Customer contacts to Zendesk End Users and Contacts, Teams to Zendesk Groups, and Conversations to Ticket Comments in chronological order. SLA Policies and Assignment Rules are migrated as written configuration records so the customer's admin can rebuild their equivalents in Zendesk Triggers and Macros. Knowledge Base Articles from Frappe categories become Zendesk Help Center Sections and Articles with a restructured hierarchy. We do not migrate workflows, server scripts, or Frappe custom apps as code; these are delivered as written inventories for manual rebuild.
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 Frappe Helpdesk 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.
Frappe Helpdesk
HD Ticket
Zendesk
Ticket
1:1HD Ticket maps directly to Zendesk Ticket. We preserve ticket status, priority, type, creation and modification timestamps, SLA deadline fields (response_by and resolution_by), and description HTML. The Frappe HD Ticket Template configuration does not transfer; we flag every HD Ticket custom field during discovery and create equivalent Zendesk custom ticket fields in Admin before import. Ticket ID from Frappe is stored in a custom field frappe_ticket_id__c for cross-reference.
Frappe Helpdesk
HD Customer
Zendesk
End User / Contact
1:1HD Customer records map to Zendesk End Users (requesters) with name, email, phone, and organization link preserved. If the Frappe instance links HD Customer to a Contact DocType outside Helpdesk, we migrate that record as a Zendesk Contact and link it to the End User organization. Custom fields on HD Customer require field-level mapping during scoping; Zendesk custom fields are created before contact import so values land on day one.
Frappe Helpdesk
Communication (Conversations)
Zendesk
Ticket Comments
1:1Every HD Ticket has linked Communication records representing agent replies and customer messages. These include timestamp, author, and message body. We preserve chronological order and thread structure by inserting comments in creation-date sequence. The Frappe author reference resolves to the Zendesk agent or end user by email match. Internal notes (communication via is Internal) map to Zendesk private comments; external replies map to public comments.
Frappe Helpdesk
Team
Zendesk
Group
1:1Frappe Helpdesk Teams define agent groupings and routing scope. We preserve team structure, team-level SLA assignments, and email inbox routing rules. Zendesk Groups serve the same organizational purpose. Team names migrate as Group names, and agent-to-team membership resolves via the Agent-to-Group assignment during user provisioning. Email inbox routing rules become Zendesk email routing configurations post-migration.
Frappe Helpdesk
Agent
Zendesk
Agent (User)
1:1Agent records include user accounts, roles, and permissions. We match agents by email against the Zendesk destination User table. Any Frappe agent without a matching Zendesk user goes to a reconciliation queue for the customer's admin to provision before record import. Agent workload history and assignment counts migrate as activity metadata in a custom field if the customer requires it for reporting continuity.
Frappe Helpdesk
SLA Policy
Zendesk
SLA Policy
1:1SLA Policies define response and resolution time windows by priority or ticket type. We migrate policy definitions as Zendesk SLA Policies created in Admin before ticket import. Frappe's response_by and resolution_by timestamps are preserved as custom fields on the Zendesk Ticket so historical SLA performance is visible without recalculation. Zendesk SLA Policies link via schedules; we create the matching schedule during policy migration.
Frappe Helpdesk
Assignment Rule
Zendesk
Triggers / Macros (manual rebuild)
1:1Assignment Rules automate ticket routing based on conditions (subject keywords, customer tier, ticket type). These are configuration records stored in Frappe Desk. We do not migrate them as code because Frappe Assignment Rules use DocType conditions that have no direct Zendesk Trigger equivalent. We deliver a written inventory of every active Assignment Rule with its trigger conditions, target team, and recommended Zendesk Trigger or Macro configuration. The customer's admin rebuilds these post-migration.
Frappe Helpdesk
Knowledge Base Article
Zendesk
Help Center Article
lossyKB Articles are DocTypes with category assignments and article content in HTML. We migrate articles and category hierarchy into Zendesk Help Center Categories and Sections. Frappe KB categories map to Zendesk Sections; articles map to Zendesk Articles with HTML body preserved. Zendesk's Section nesting depth (up to five levels) accommodates most Frappe category hierarchies. Article view counts and feedback ratings are not always transferable and are documented separately for manual re-entry if required.
Frappe Helpdesk
Canned Response
Zendesk
Macro
1:1Pre-written response templates are stored as DocTypes with subject and content fields. They migrate as Zendesk Macros with subject as Macro title and content as Macro body. Dynamic variable substitution syntax in Frappe templates (such as ticket.customer_name or {{ticket.subject}}) does not map directly; we document the variable mapping and advise the customer's admin to update Macro placeholders post-import.
Frappe Helpdesk
Tag
Zendesk
Tag
1:1Tags on HD Tickets are stored as Tag entries linked to the ticket. We map tag names to Zendesk Tags on the corresponding Ticket record. Zendesk Tags are flat and managed in Admin; there is no tag hierarchy in Zendesk Support. Tags that represent ticket categories in Frappe may need to be converted to Zendesk custom fields or Topics depending on the customer's reporting needs.
Frappe Helpdesk
Attachment
Zendesk
Ticket Attachment
1:1Ticket and communication attachments are stored in Frappe's private files directory or as File records linked to the DocType. We migrate file URLs and re-download attachments where the file is publicly accessible or we have a valid session token. Private files requiring authentication are flagged during the inventory phase; we advise the customer to temporarily make files public or export them manually alongside the structured data export. Zendesk's attachment size limit for API imports is 50 MB per file.
Frappe Helpdesk
Customer Portal Settings
Zendesk
Support Settings (manual)
1:1Portal branding, allowed ticket creation types, and visibility settings are Frappe configuration records rather than transactional data. We do not migrate these as configuration artifacts. We deliver a written inventory of current portal settings (portal name, branding, allowed channels, ticket type restrictions, SLA visibility) so the customer's Zendesk admin can configure Zendesk's equivalent Support settings (brand, channels, request form configuration) post-migration.
| Frappe Helpdesk | Zendesk | Compatibility | |
|---|---|---|---|
| HD Ticket | Ticket1:1 | Fully supported | |
| HD Customer | End User / Contact1:1 | Fully supported | |
| Communication (Conversations) | Ticket Comments1:1 | Fully supported | |
| Team | Group1:1 | Fully supported | |
| Agent | Agent (User)1:1 | Fully supported | |
| SLA Policy | SLA Policy1:1 | Fully supported | |
| Assignment Rule | Triggers / Macros (manual rebuild)1:1 | Fully supported | |
| Knowledge Base Article | Help Center Articlelossy | Fully supported | |
| Canned Response | Macro1:1 | Fully supported | |
| Tag | Tag1:1 | Fully supported | |
| Attachment | Ticket Attachment1:1 | Fully supported | |
| Customer Portal Settings | Support Settings (manual)1:1 | Mapping required |
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.
Frappe Helpdesk gotchas
HD Ticket custom fields require HD Ticket Template configuration
Workflow resets after Frappe version upgrades
Errors when Helpdesk is installed on existing ERPNext + HR sites
Rate limiting is time-based, not request-count based
Private file attachments require authentication to re-download
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
Discovery and source audit
We audit the Frappe Helpdesk PostgreSQL database to inventory HD Ticket records, HD Customer contacts, Communication threads, SLA Policy definitions, Assignment Rules, Knowledge Base articles and categories, canned responses, Tags, and attachment file references. We assess site health for known conflicts (GitHub #3003), identify private file attachments requiring authentication tokens, and extract the Frappe HD Ticket Template to enumerate all custom fields. We pair this with a Zendesk destination audit to confirm the Support plan tier, Help Center availability, existing custom fields, and active trigger/macro inventory. The discovery output is a written migration scope with object counts, a field-level mapping draft, and a ticket freeze recommendation.
Schema preparation and custom field creation in Zendesk
We create all equivalent Zendesk custom fields in Admin before any data import. This includes custom fields for HD Ticket extended attributes, HD Customer custom fields, and a frappe_ticket_id__c field for cross-reference. We create Zendesk SLA Policies using the migrated Frappe SLA Policy definitions, configure Zendesk Groups matching the Frappe team structure, and create Help Center Categories and Sections matching the Frappe KB category hierarchy. Triggers and Macros are not created in this step; we inventory the existing Zendesk triggers and advise the admin to disable them before import. We verify Zendesk plan features (Help Center, SLA Policies, custom fields) match the migration scope before proceeding.
Data extraction from Frappe PostgreSQL
We connect to the Frappe database at the DocType level to extract HD Ticket, HD Customer, Communication, SLA Policy, Assignment Rule, KB Article, Canned Response, and Tag records. We extract attachment file URLs and attempt re-download for each. Private file attachments requiring authentication are flagged for customer remediation (temporary public access or manual export). We use Frappe API calls where available and direct database queries where the API is insufficient (custom fields not in the public API, attachment metadata). Rate limiting is time-based on Frappe, so we implement exponential backoff and request throttling to stay within the cumulative-time budget.
Transformation, deduplication, and sandbox import
We transform extracted records to Zendesk format: HD Customer becomes End User, Communication becomes Ticket Comments in chronological order, SLA deadlines become custom date fields on Ticket, and Tags map to Zendesk Tags. We deduplicate by email for End Users and by ticket reference for Tickets. We run a full import into a Zendesk Sandbox or staging environment first. The customer reconciles record counts, spot-checks 25-50 records for field accuracy and thread integrity, and signs off the mapping before production migration begins. Any mapping corrections happen here.
Production migration in dependency order
We run production migration in record-dependency order: End Users and Organizations first (from HD Customer), then Groups (from Teams), then Tickets with Comments last so the full thread lands on the correct requester and group. SLA Policies are created before Tickets so they are available for linking. Custom fields are populated during ticket import using the pre-created Zendesk field IDs. We disable Zendesk triggers and macros before import begins and re-enable after validation. We tag migrated tickets for post-migration automation exclusion. Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, delta migration, and handoff
We freeze HD Ticket writes during cutover, run a final delta export of any records modified during the migration window, then enable Zendesk as the system of record. We deliver the Assignment Rule and Server Script inventory document to the customer's admin team with recommended Zendesk Trigger and Macro configurations. We support a one-week hypercare window where we resolve any reconciliation issues. We do not rebuild Frappe workflows as Zendesk Triggers or custom apps as Zendesk apps within the migration scope; those are separate engagements or admin tasks.
Platform deep dives
Frappe Helpdesk
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 Frappe Helpdesk 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
Frappe Helpdesk: Fixed-window rate limiting based on cumulative request time; no public per-endpoint limit documented.
Data volume sensitivity
Frappe Helpdesk 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 Frappe Helpdesk to Zendesk migration scoping. Not seeing yours? Book a call.
Walk through your Frappe Helpdesk 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 Frappe Helpdesk
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.