Helpdesk migration
Field-level mapping, validation, and rollback between Frappe Helpdesk and Freshdesk. We move data and schema; workflows are rebuilt natively in Freshdesk.
Frappe Helpdesk
Source
Freshdesk
Destination
Compatibility
10 of 10
objects map 1:1 between Frappe Helpdesk and Freshdesk.
Complexity
BStandard
Timeline
2-3 weeks
Overview
Moving from Frappe Helpdesk to Freshdesk is a data-model translation that spans two fundamentally different architectures. Frappe Helpdesk stores everything in a PostgreSQL DocType structure with HD Ticket as the primary object and HD Customer as the contact entity, while Freshdesk uses a REST-based API with Contacts, Companies, and Tickets as distinct objects. We extract from the Frappe database at the DocType level, preserving SLA breach timestamps and conversation thread chronology, then map custom field definitions against HD Ticket Template to ensure migrated values render in Freshdesk agent views. Freshdesk workflows, SLA policies, and canned responses do not migrate as code; we deliver written inventories for the customer's admin to rebuild in Freshdesk. Freshdesk's Growth plan starts at $15 per agent per month, with AI Copilot and omnichannel as separate paid add-ons, making the total cost more predictable than Frappe Cloud hosting at scale.
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 Freshdesk, 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
Freshdesk
Ticket
1:1HD Ticket records map to Freshdesk Ticket objects. We extract ticket status, priority, type, creation and modification timestamps, SLA deadline fields (first_response_and_resolution deadlines from the SLA linked to the ticket), and description HTML. The Frappe ticket raised_on (creation datetime) becomes Freshdesk created_at; modified maps to updated_at. Resolution status (Open, Pending, Resolved, Closed) maps directly to Freshdesk ticket status values. Priority and ticket type migrate as typed picklist values in Freshdesk. Conversation threads migrate as separate outbound communication records linked to the ticket.
Frappe Helpdesk
HD Customer
Freshdesk
Contact
1:1HD Customer records (name, email, phone, organization link) map to Freshdesk Contact. The Frappe customer_type distinction between Individual and Organization maps to Freshdesk's contact_type field. Custom fields on HD Customer require explicit mapping against Freshdesk's custom field definitions during scoping; we flag any HD Customer custom field that lacks a Freshdesk equivalent and document the gap for the customer's admin to resolve. Email address serves as the primary dedupe key during Freshdesk import.
Frappe Helpdesk
HD Customer Organization Link
Freshdesk
Company
1:1Frappe HD Customer records that reference an Organization (via the organization_name field or a linked HD Organization DocType) generate Freshdesk Company records. Freshdesk Companies are created before Contact import so that the company_id reference resolves at Contact insert time. If the source Frappe site has no organization link on the customer record, the Contact is imported without a company association and the relationship is flagged for manual cleanup.
Frappe Helpdesk
Communication (Conversations)
Freshdesk
Conversation
1:1Every HD Ticket has linked Communication records representing agent replies and customer messages. We preserve chronological order and thread structure by setting Freshdesk conversation timestamps to match the original Communication creation datetime. The author field maps to the agent or contact name; message body (HTML) migrates as-is. If the author is a named agent whose Freshdesk agent account has not yet been provisioned, we hold those conversation records in a pending queue until User mapping is resolved.
Frappe Helpdesk
Team
Freshdesk
Group
1:1Frappe Helpdesk Teams define agent groupings and email inbox routing scope. We map team names to Freshdesk Group names, preserving team-level SLA assignments where the destination Group inherits the migrated SLA policy. Email inbox routing maps to Freshdesk inbox email addresses configured under Admin > Email > Email Settings. If the destination Freshdesk plan includes shared inboxes, we recreate the routing configuration as Freshdesk group email addresses and ticketing rules.
Frappe Helpdesk
Agent
Freshdesk
Agent
1:1Frappe Agent records include user accounts, roles, and permissions. We match Frappe agent email addresses against Freshdesk agent accounts by email. Agents without a matching Freshdesk account are held in a reconciliation queue for the customer's admin to provision before record import resumes, because Freshdesk requires a valid agent_id on Ticket assignment. Agent workload history and assignment counts are not transactional data and are not migrated; Freshdesk rebuilds activity metrics from the import date forward.
Frappe Helpdesk
SLA Policy
Freshdesk
SLA Policy
1:1Frappe SLA policies define response and resolution time windows by priority or ticket type. We export policy definitions as structured records and create Freshdesk SLA policies with matching response and resolution time configurations under Admin > SLA. SLA breach timestamps stored on HD Ticket records are preserved as metadata fields on the migrated Freshdesk ticket for reporting continuity. Complex SLA escalation rules (such as server-script-driven escalations in Frappe) do not have a direct Freshdesk equivalent and are documented for manual rebuild.
Frappe Helpdesk
Assignment Rule
Freshdesk
Ticket Field Rules / Dispatcher Rules
1:1Frappe Assignment Rules automate ticket routing based on conditions (subject keywords, customer tier, ticket type). Freshdesk's equivalent is Ticket Field Rules (under Admin > Workflows) or Dispatcher Rules (available on Pro and higher tiers). We export assignment rule definitions as a written inventory with condition logic, rule actions, and recommended Freshdesk rule configuration. Complex rule logic with nested conditions or server-script triggers may require simplification in Freshdesk. We do not migrate assignment rules as code; the admin rebuilds them post-migration.
Frappe Helpdesk
Knowledge Base Article
Freshdesk
Article
1:1Frappe KB Articles are DocTypes with category assignments and HTML content. We migrate articles and category hierarchy to Freshdesk Articles and Categories under Admin > Knowledge Base. Article view counts and feedback ratings are not always transferable (Frappe stores these as separate analytics records), so we migrate the content and structure and note that view/feedback history is archived rather than imported. Canned responses migrate as Freshdesk预设回复 templates under Admin >预设回复 Templates.
Frappe Helpdesk
Tag
Freshdesk
Tag
1:1Tags on HD Ticket are stored as Tag entries linked to the ticket. We extract all distinct tag names and map them to Freshdesk ticket tags during import. If the destination Freshdesk plan does not include tagging, tags are migrated as a custom text field on the ticket for reference. Tag-based ticket filtering rules require manual rebuild in Freshdesk as Ticket Field Rules.
| Frappe Helpdesk | Freshdesk | Compatibility | |
|---|---|---|---|
| HD Ticket | Ticket1:1 | Fully supported | |
| HD Customer | Contact1:1 | Fully supported | |
| HD Customer Organization Link | Company1:1 | Fully supported | |
| Communication (Conversations) | Conversation1:1 | Fully supported | |
| Team | Group1:1 | Fully supported | |
| Agent | Agent1:1 | Fully supported | |
| SLA Policy | SLA Policy1:1 | Fully supported | |
| Assignment Rule | Ticket Field Rules / Dispatcher Rules1:1 | Fully supported | |
| Knowledge Base Article | Article1:1 | Fully supported | |
| Tag | Tag1: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.
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
Freshdesk gotchas
API access is blocked on the free plan
Per-minute rate limits are account-wide and endpoint-specific
Multi-channel source types do not map 1:1 to all destinations
Custom objects created in-product cannot be accessed by other apps
Contact import requires at least 10 existing tickets in the account
Pair-specific challenges
Migration approach
Discovery and source health assessment
We audit the source Frappe Helpdesk instance via direct PostgreSQL connection to the DocType tables. We inventory HD Ticket, HD Customer, HD Organization, Communication, HD Team, HD Agent, HD SLA Policy, and HD Assignment Rule record counts. We identify custom fields on HD Ticket and HD Customer by querying the Custom Field DocType and cross-referencing HD Ticket Template for visible fields. We assess whether the Frappe site has any known site-configuration conflicts (GitHub issue #3003 scenario: Helpdesk installed on existing ERPNext + HR site causing invisibility). We export workflow definitions and SLA policy records as JSON for later reference. The discovery output is a written migration scope with record counts, field inventory, and any identified blockers.
Destination schema pre-creation in Freshdesk
Before any record data is loaded, we pre-create the Freshdesk destination structure to satisfy field-exists-first constraints. This includes provisioning custom fields under Admin > Support Operations > Customer Fields (matching HD Ticket and HD Customer custom field names and types), creating Freshdesk Groups that mirror Frappe Teams, configuring SLA policies under Admin > SLA with response and resolution time windows matched to the Frappe source policies, and setting up ticket statuses that match the Frappe status vocabulary. We configure Freshdesk email inboxes and group routing rules in parallel with schema creation. This step ensures that the Freshdesk API and CSV import endpoints accept all incoming field values without rejection.
Data extraction from Frappe PostgreSQL
We connect directly to the Frappe PostgreSQL database to extract records at the DocType level. This bypasses the Frappe application API (and its time-based rate limiting) for high-volume extraction. We extract HD Ticket records with their SLA deadline fields, HD Customer records with organization links, Communication records in chronological order, HD Team and HD Agent records, and any KB Article content. For attachments, we attempt re-download via the Frappe file URL with the customer's provided session token, and flag any private files that return authentication errors. We validate record counts against the discovery inventory and emit a pre-flight reconciliation report before beginning Freshdesk import.
Freshdesk import in dependency order
We load data into Freshdesk in a sequence that respects referential integrity. Freshdesk requires at least 10 tickets before contact import succeeds, so we load a small batch of placeholder tickets first if needed. The full sequence is: Companies (from HD Organization or organization link on HD Customer), then Contacts (from HD Customer with company_id resolved), then Groups (from HD Team with email routing configured), then Agents (with group assignments linked), then Tickets (with contact_id, company_id, group_id, and agent_id resolved; SLA deadline metadata preserved as custom fields), then Conversations (Communication records linked to ticket_id and agent/contact author), then Tags. Each phase emits a row-count reconciliation report against the extraction counts.
Validation and gap closure
We run a validation pass against a sample of migrated records. We compare HD Ticket field values against Freshdesk ticket field values for 25-50 randomly selected records, check conversation thread chronology by verifying that message timestamps are in ascending order, confirm that custom field values from HD Ticket are present and populated in Freshdesk (if the HD Ticket Template was configured correctly), and verify agent assignment by matching agent email to Freshdesk user. Any gaps, missing custom fields, or orphaned conversations are resolved in this phase before the final cutover delta.
Cutover, delta migration, and automation handoff
We freeze HD Ticket writes in Frappe Helpdesk during the cutover window, run a final delta migration of any records created or modified since the initial extraction, then enable Freshdesk as the system of record. We deliver the written inventory of SLA policies, assignment rules, and canned responses that require rebuild in Freshdesk, with recommended Freshdesk equivalents for each. We do not rebuild Frappe workflows or assignment rules as Freshdesk Ticket Field Rules within the migration scope; that is a separate configuration engagement for the customer's admin. We support a 48-hour post-cutover window for reconciliation issues raised during the first business day in Freshdesk.
Platform deep dives
Frappe Helpdesk
Source
Strengths
Weaknesses
Freshdesk
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 Freshdesk.
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 Freshdesk migration scoping. Not seeing yours? Book a call.
Walk through your Frappe Helpdesk to Freshdesk 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 Freshdesk
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.