Helpdesk migration

Migrate from Frappe Helpdesk to Freshdesk

Field-level mapping, validation, and rollback between Frappe Helpdesk and Freshdesk. We move data and schema; workflows are rebuilt natively in Freshdesk.

Frappe Helpdesk logo

Frappe Helpdesk

Source

Freshdesk

Destination

Freshdesk logo

Compatibility

100%

10 of 10

objects map 1:1 between Frappe Helpdesk and Freshdesk.

Complexity

BStandard

Timeline

2-3 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

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.

Field-level fidelity

Every standard and custom field arrives verified.

Schema-aware mapping

AI proposes the map; you confirm before any record moves.

Relationships preserved

Parent–child, lookups, and ownership stay linked.

Full activity history

Calls, emails, meetings — with original timestamps.

Attachments & notes

Documents, uploads, and inline notes move with the record.

Why teams make this switch

Two sides of the same decision

Leaving

Frappe Helpdesk logo

Frappe Helpdesk

What's pushing teams away

  • The agent count and ticket volume that Frappe Helpdesk was designed for caps out around mid-market; large enterprise teams hit scaling limits in self-hosted deployments.
  • Custom field rendering requires manual template configuration in HD Ticket Template, which frustrates non-technical admins who expect standard form behavior.
  • Rate limiting on the Frappe Framework is based on cumulative request time rather than request count, making API-heavy automations unpredictable without load testing.
  • Workflow resets after minor version upgrades, forcing admins to reconfigure assignment rules and triggers after routine system maintenance.
  • Limited third-party integrations outside the Frappe ecosystem means teams using Salesforce or Zendesk on other functions end up maintaining parallel tooling.

Choosing

Freshdesk logo

Freshdesk

What's pulling them in

  • Free tier for 1-2 agents with no credit card makes initial evaluation risk-free and appeals to startups and small support teams.
  • Per-agent pricing is predictable and scales cleanly as teams grow from Growth at $15/agent/month to Enterprise at $89/agent/month.
  • Freddy AI Copilot and Email AI Agent bring AI assistance without forcing a full platform switch, appealing to teams already embedded in Freshdesk.
  • Multilingual help desk and customer portal features serve global SMB teams without requiring enterprise-level investment.
  • Collaborators up to 5,000 included in paid plans allow non-agent stakeholders to view tickets without additional licensing cost.

Object mapping

How Frappe Helpdesk objects map to Freshdesk

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

maps to

Freshdesk

Ticket

1:1
Fully supported

HD 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

maps to

Freshdesk

Contact

1:1
Fully supported

HD 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

maps to

Freshdesk

Company

1:1
Fully supported

Frappe 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)

maps to

Freshdesk

Conversation

1:1
Fully supported

Every 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

maps to

Freshdesk

Group

1:1
Fully supported

Frappe 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

maps to

Freshdesk

Agent

1:1
Fully supported

Frappe 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

maps to

Freshdesk

SLA Policy

1:1
Fully supported

Frappe 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

maps to

Freshdesk

Ticket Field Rules / Dispatcher Rules

1:1
Fully supported

Frappe 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

maps to

Freshdesk

Article

1:1
Fully supported

Frappe 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

maps to

Freshdesk

Tag

1:1
Fully supported

Tags 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.

Gotchas + challenges

What specifically takes care here

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 logo

Frappe Helpdesk gotchas

Medium

HD Ticket custom fields require HD Ticket Template configuration

Medium

Workflow resets after Frappe version upgrades

High

Errors when Helpdesk is installed on existing ERPNext + HR sites

Low

Rate limiting is time-based, not request-count based

Low

Private file attachments require authentication to re-download

Freshdesk logo

Freshdesk gotchas

High

API access is blocked on the free plan

High

Per-minute rate limits are account-wide and endpoint-specific

Medium

Multi-channel source types do not map 1:1 to all destinations

Medium

Custom objects created in-product cannot be accessed by other apps

Low

Contact import requires at least 10 existing tickets in the account

Pair-specific challenges

  • Custom fields on HD Ticket require HD Ticket Template entry to render

    Frappe Helpdesk custom fields on HD Ticket do not automatically appear in the agent form view. They must be explicitly added to the HD Ticket Template doctype under the Default template section. During migration, custom field definitions and values are portable, but the Template configuration is not. We flag missing template entries during discovery validation and advise customers to add the corresponding fields to Freshdesk under Admin > Support Operations > Customer Fields before import, otherwise agents will see empty values in Freshdesk even though data exists. This is a high-severity gotcha because it silently corrupts the perceived data quality at the destination.

  • Private file attachments require Frappe session authentication to re-download

    Frappe Helpdesk stores some attachments as private files that require an authenticated session (site session cookie or API access token) to access via the file download URL. During migration, we may be unable to re-download private files without the site's active session. We flag inaccessible attachments during the inventory phase, and advise customers to temporarily make files public or export them manually via direct database export alongside the structured data export. We do not suspend migration for inaccessible files; we document them and proceed with the rest of the ticket and communication data.

  • Freshdesk requires custom fields to exist before CSV or API import

    Freshdesk enforces a field-exists-first rule for custom field imports via CSV and most API endpoints. If a CSV row contains a value in a custom field column and that field does not exist in Freshdesk under Admin > Support Operations > Customer Fields, the import fails for that row. We audit all HD Ticket and HD Customer custom fields during discovery, pre-create the corresponding Freshdesk custom fields (matching field type and label), and only then run the import. This adds a pre-import configuration step that must be completed before any record data is loaded.

  • Freshdesk contact import requires at least 10 existing tickets

    Freshdesk enforces a prerequisite that the destination account must contain at least 10 tickets before a CSV contact import can succeed. This is a known Freshdesk validation that affects the migration sequence: we must import tickets (even as empty placeholders) before importing contacts, or we must use the Freshdesk API directly rather than CSV import for contacts. We sequence the migration as Tickets first, then Contacts, then Companies to satisfy this prerequisite and avoid import failures.

  • Workflow resets after Frappe version upgrades break migration timing

    Frappe Helpdesk workflows, assignment rules, and SLA triggers have been documented to reset to default states after routine Frappe Framework version upgrades. If the source Frappe Helpdesk instance has been upgraded recently during the migration planning window, some automation rules may already be in a default state rather than the intended configuration. We export workflow definitions as separate configuration records during discovery and advise customers to back up their automation rules before any further upgrades. Post-migration, workflows must be re-enabled in Freshdesk as Ticket Field Rules or Dispatcher Rules by the customer's admin.

Migration approach

Six steps for a successful Frappe Helpdesk to Freshdesk data migration

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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

Context on both ends of the pair

Frappe Helpdesk logo

Frappe Helpdesk

Source

Strengths

  • Open-source with AGPL-3.0 license, no per-agent or per-ticket billing
  • Deep ERPNext integration connecting support tickets to financial transactions
  • Full SLA configuration with response and resolution deadline tracking
  • Customizable agent portal and customer portal with white-label branding
  • Built-in knowledge base, canned responses, and customer rating collection

Weaknesses

  • Smaller community and plugin ecosystem compared to Zendesk or Freshdesk
  • Self-hosted deployments require server administration and backup management
  • API documentation is sparse; integrations often require custom Frappe scripting
  • Version upgrade path can break custom apps and custom field configurations
  • Limited native AI or advanced automation capabilities compared to newer SaaS competitors
Freshdesk logo

Freshdesk

Destination

Strengths

  • Generous free tier with no credit card required for 1-2 agents for 6 months.
  • Per-agent pricing model is transparent and scales linearly with team growth.
  • Freddy AI Copilot integrates assistance directly into the agent workspace without requiring separate tooling.
  • Multilingual help desk and customer portal serve global teams on Pro and Enterprise plans.
  • Shared inbox, threads, and tasks keep ticket context unified across multi-channel conversations.

Weaknesses

  • Freddy AI is a separate paid add-on charged per session, making AI costs unpredictable and hard to budget.
  • Performance issues including delayed loading and duplicate tickets are recurring user complaints during high-volume periods.
  • Customization is more limited than Zendesk, with fewer workflow options and reporting flexibility.
  • Add-ons for chat, advanced routing, and custom reporting are gated behind higher tiers or separate module purchases.
  • API access is completely disabled on the free plan, blocking any programmatic data export or migration tooling.

Complexity grading

How hard is this migration?

Standard Helpdesk migration. 2 of 7 objects need a mapping; the rest are 1:1.

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across Frappe Helpdesk and Freshdesk.

  • Object compatibility

    B

    2 of 7 objects need a mapping; the rest are 1:1.

  • Field mapping clarity

    C

    Field mapping is derived from defaults — final spec confirmed during the sample migration.

  • Timeline complexity

    B

    7-object category — typical timelines run 2–7 days end-to-end.

  • API constraints

    B

    Frappe Helpdesk: Fixed-window rate limiting based on cumulative request time; no public per-endpoint limit documented.

  • Data volume sensitivity

    B

    Frappe Helpdesk doesn't expose a bulk API — REST + parallelization used for high-volume runs.

Estimator

Estimate your Frappe Helpdesk to Freshdesk migration cost

Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.

Step 1

What are you migrating?

Pick a category, then your source and destination platforms.

Category

FAQ

Frequently asked questions about Frappe Helpdesk to Freshdesk data migrations

Answers to the questions buyers ask most during Frappe Helpdesk to Freshdesk migration scoping. Not seeing yours? Book a call.

Can't find your answer?

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 consultation

Most migrations land between two and three weeks for accounts under 10,000 tickets with no complex custom field schemas and clean data. Migrations exceeding 50,000 tickets, with multiple HD Ticket and HD Customer custom fields, large conversation histories, or requiring private file re-downloads and SLA policy recreation, move to five to eight weeks because of extraction time, field pre-creation, and Freshdesk import reconciliation.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Frappe Helpdesk.
Land in Freshdesk, intact.

Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.

Accuracy guarantee Rollback included Quote in 1 business day