Helpdesk migration

Migrate from osTicket to Freshdesk

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

osTicket logo

osTicket

Source

Freshdesk

Destination

Freshdesk logo

Compatibility

70%

7 of 10

objects map 1:1 between osTicket and Freshdesk.

Complexity

BStandard

Timeline

2-4 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from osTicket to Freshdesk is a data-model translation that starts with a MySQL read rather than an API call. osTicket's HTTP API supports ticket creation only with no bulk export endpoint, so we connect directly to its documented MySQL schema to extract all records. Ticket threads are stored as a single merged rich-text blob per ticket in osTicket; we split each thread into discrete message entries with author, timestamp, and public-or-internal flag preserved in Freshdesk. Organizations are loosely linked to Users in osTicket, so we flag orphaned User records for explicit re-linking before migration. Freshdesk's Custom Objects API lets us map SLA plans and Help Topics from osTicket's first-class objects into Freshdesk's tag and custom-field structures. We do not migrate osTicket's file-based configuration, SLA plugin settings, or email routing rules as code — these require manual rebuild in Freshdesk's admin panel.

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

osTicket logo

osTicket

What's pushing teams away

  • No built-in live chat or real-time messaging channel, forcing teams to cobble together third-party chat integrations or manage chat separately from the ticketing workflow.
  • Limited scalability for high-volume environments — teams handling hundreds of tickets per day report performance degradation and lacking advanced routing or queue management.
  • Reporting and analytics are basic at best; there is no native dashboard with trend visualisation, SLA compliance charts, or agent performance metrics without third-party plugins.
  • Community-only support on the free tier means no guaranteed response time, and the commercial support package is priced as a separate annual subscription.
  • Teams outgrow the feature set as they scale — absence of built-in asset management, contract tracking, or advanced automation pushes organisations toward purpose-built ITSM platforms.

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 osTicket objects map to Freshdesk

Each row shows how a osTicket 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.

osTicket

Ticket

maps to

Freshdesk

Ticket

1:1
Fully supported

osTicket Tickets map directly to Freshdesk Tickets with Subject, status, priority, and requester_id preserved. osTicket's ticket ID is stored in a custom field src_ticket_id__c for audit traceability. SLA plan assignment from osTicket maps to Freshdesk SLA policy via a custom field if Freshdesk Omni is in scope; otherwise SLA times migrate as custom ticket fields. Department assignment maps to Freshdesk group_id lookup.

osTicket

Ticket Thread (Conversation)

maps to

Freshdesk

Conversation

1:many
Fully supported

osTicket stores the entire ticket conversation history as one merged Thread record per ticket — user replies, agent responses, and internal notes are not normalised at the storage layer. We split the thread into discrete Freshdesk Conversation records at migration time, preserving author type (user/agent), timestamp, message body, and the internal versus public flag for each segment. The splitting logic is derived from osTicket's rendered-thread HTML structure and is version-sensitive to osTicket release. This is the highest-risk transformation in the migration and is validated during the scoping demo.

osTicket

User (End User / Customer)

maps to

Freshdesk

Contact

1:1
Fully supported

osTicket Users map to Freshdesk Contacts with name, email, phone, and organisation linkage preserved. Email is the primary dedupe key. Users with no Organisation in osTicket migrate as Contacts without a Company association; we flag these in a reconciliation report and offer explicit re-linking during mapping if the Organisation relationship is needed in Freshdesk.

osTicket

Agent (Staff / Operator)

maps to

Freshdesk

Agent

1:1
Fully supported

osTicket Agents map to Freshdesk Agents. We resolve agents by email match against the destination Freshdesk subdomain. osTicket's per-department permission flags map to Freshdesk's agent role and group membership model. Any osTicket Agent without a matching Freshdesk Agent account goes to a provisioning queue before migration resumes.

osTicket

Organisation (Company)

maps to

Freshdesk

Company

1:1
Fully supported

osTicket Organisations map to Freshdesk Companies with name, website, and phone preserved. The Organisation-User relationship migrates as the Freshdesk Contact-to-Company lookup. Users orphaned from any Organisation in osTicket are flagged separately since Freshdesk's Contact model benefits from a Company association for full profile completeness.

osTicket

Department

maps to

Freshdesk

Group

1:1
Fully supported

osTicket Departments map to Freshdesk Groups. Department-level SLA plan associations migrate as Group-level defaults if Freshdesk Omni is in scope; otherwise SLA times are stored as custom fields on the ticket. Email routing addresses tied to Departments do not migrate — these require manual configuration in Freshdesk's inbox routing rules post-migration.

osTicket

Custom Fields

maps to

Freshdesk

Custom Fields

1:1
Mapping required

osTicket Custom Fields (text, boolean, date, list, and dropdown types) map to Freshdesk custom ticket fields. Field type conversion is applied at migration time — osTicket list fields become Freshdesk dropdowns, boolean fields become checkboxes. Visibility rules (agent-only vs user-visible) map to Freshdesk's agent-only field property.

osTicket

SLA Plan

maps to

Freshdesk

SLA Policy (Omni plan) or Custom Fields

lossy
Fully supported

osTicket SLA Plans define response and resolution deadlines tied to ticket priority and department. On Freshdesk Growth and Pro, SLA times migrate as custom ticket fields (first_response_due__c, resolution_due__c). On Freshdesk Omni, we create Freshdesk SLA Policies and link them to tickets via ticket_field_estimates. The customer chooses the tier during scoping.

osTicket

Help Topic

maps to

Freshdesk

Tag or Ticket Category

lossy
Fully supported

osTicket Help Topics are first-class objects used for ticket categorisation and routing. Freshdesk models Help Topics as Tags (Growth/Pro) or Ticket Categories (Omni). We map Help Topic names to Freshdesk tags on the ticket during migration. The customer chooses the tag strategy during scoping based on their Freshdesk plan tier.

osTicket

Attachment

maps to

Freshdesk

Attachment

1:1
Fully supported

osTicket stores attachments separately from the ticket thread record with a link by attachment ID. We extract attachment records alongside the ticket thread, download the file payload, and re-attach to the corresponding Freshdesk Conversation entry. Inline images embedded in thread HTML migrate as separate attachment records. Attachment files over 10 MB are noted for manual upload post-migration since Freshdesk API enforces a 10 MB per-file limit.

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.

osTicket logo

osTicket gotchas

High

API supports ticket creation only

Medium

Ticket threads are a single rich-text blob

Medium

Custom fields require optional setting for API

High

IP-restricted API keys block automated migration tooling

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

  • osTicket API cannot read bulk records

    osTicket's HTTP API is write-only for a single operation: creating a ticket. There is no endpoint to list, export, or update tickets, and no bulk import endpoint. We do not rely on the osTicket API for bulk data extraction. Instead, we connect directly to the osTicket MySQL database using the documented ERD schema to read all records. If direct database access is not available, we fall back to CSV export tooling with a note that Attachments and thread history require separate handling and may lose internal note vs public message discrimination.

  • Ticket threads stored as merged blob require splitting

    osTicket stores the entire ticket conversation history — user replies, agent responses, and internal notes — as one merged Thread record per ticket. This is not normalised into discrete message records at the storage layer. We split the thread into separate Freshdesk Conversation entries, preserving author, timestamp, and the internal versus public flag for each segment. The splitting logic parses osTicket's rendered-thread HTML structure and is version-sensitive to osTicket release. Incorrect thread splitting causes conversation order to be lost in Freshdesk.

  • IP-restricted API keys block automated tooling

    osTicket API keys are bound to a specific source IP address. If the migration tool runs from a dynamic or shared IP, requests are rejected with a 403 even for the write-only ticket creation endpoint. We handle this by scoping the migration tool's egress IP during onboarding and asking customers to add that IP to the allowed list in osTicket's admin panel before migration begins. If the customer cannot whitelist IPs, we fall back to direct MySQL read access with a read-only database user, which is our primary extraction path anyway.

  • Freshdesk API rate limits constrain import throughput

    Freshdesk's REST API enforces rate limits per subdomain (approximately 500 requests per minute on Growth/Pro, higher on Omni). High-volume migrations with tens of thousands of tickets and attachment downloads must pace requests accordingly. We implement exponential backoff and batch chunking for all Freshdesk API writes. Large attachment sets extend migration timelines proportionally and are disclosed during scoping.

Migration approach

Six steps for a successful osTicket to Freshdesk data migration

  1. Discovery and connection scoping

    We audit the source osTicket deployment: MySQL schema version, ticket volume, thread history length, attachment count and average size, custom field definitions, Organisation-User linkage health, and SLA plan configuration. We also confirm the destination Freshdesk subdomain, plan tier (Growth, Pro, or Omni), and whether Custom Objects or SLA Policies are in scope. If direct MySQL access is available, we map the osTicket ERD and validate read permissions. If MySQL is unavailable, we document the CSV export fallback with its known limitations for Attachments and thread splitting.

  2. Thread splitting logic and demo migration

    We run a scoping demo extracting a representative sample of 20-50 osTicket tickets including varied thread lengths, internal notes, and attachment references. The thread-splitting parser is applied and the output is reviewed by the customer's team against the source ticket. Any parsing edge cases (HTML entities, quoted replies, merged internal notes) are logged and the parser is adjusted before full migration begins. This demo typically runs within one week of project kickoff.

  3. Schema preparation and field mapping

    We map every osTicket object to its Freshdesk equivalent: Tickets to Tickets, Users to Contacts, Agents to Agents, Organisations to Companies, Departments to Groups, Custom Fields to custom ticket fields, and Help Topics to Tags or Ticket Categories. We also configure any required Freshdesk custom fields, SLA Policies (if Omni), or ticket categories before data import begins. The customer reviews and approves the mapping document before production migration.

  4. Sandbox migration and reconciliation

    We run a full migration into the customer's Freshdesk sandbox using production-equivalent data volume. The customer's admin reconciles record counts (Tickets in, Contacts in, Agents in, Conversations in), spot-checks 20-30 random tickets against the osTicket source, and reviews thread ordering on a sample of complex threads. Any mapping corrections happen here, not in production. Owner and Organisation reconciliation also completes at this stage.

  5. Production migration in dependency order

    We run production migration in record-dependency order: Contacts (with Company lookup resolved), Agents, Groups, SLA Policies if applicable, Tickets (with SLA field or policy link resolved), and Conversations (split from thread blobs and attached to ticket). Attachment downloads are chunked and rate-limited against the Freshdesk API. Each phase emits a row-count reconciliation report before the next phase begins. We freeze osTicket writes during the cutover window and run a final delta migration of any records modified during the window.

  6. Cutover, validation, and admin rebuild handoff

    We enable Freshdesk as the system of record, confirm delivery of all migrated tickets and conversation history, and deliver the written rebuild inventory covering email routing rules ( Departments map to Freshdesk inbox routing), SLA policy configuration, Help Topic-to-Tag assignments, and any automation (Freshdesk automations are documented but not migrated as code). We support a three-day hypercare window where we resolve reconciliation issues raised by the customer's support team. We do not rebuild osTicket's configuration, SLA plugin settings, or file-based customisations as part of the migration scope.

Platform deep dives

Context on both ends of the pair

osTicket logo

osTicket

Source

Strengths

  • Zero licensing cost for the core open-source edition with optional paid support.
  • Full data residency control on self-hosted infrastructure with no vendor data handling.
  • PHP/MySQL stack runs on commodity hosting with minimal hardware requirements.
  • Configurable ticket forms, SLA plans, and department routing without plugin dependencies.
  • Active open-source community provides plugins, themes, and third-party integrations.

Weaknesses

  • No live chat, real-time messaging, or unified communications channel built in.
  • API surface is narrow — only ticket creation is writable; there is no bulk export or import endpoint.
  • Reporting is minimal; no native trend analysis, SLA dashboards, or agent performance metrics.
  • Limited scalability for large ticket volumes or high agent counts without performance tuning.
  • Upgrade and migration tooling relies on file-based patching with a manual sequence — not designed for automated CI/CD pipelines.
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 osTicket 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

    osTicket: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

Estimate your osTicket 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 osTicket to Freshdesk data migrations

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

Can't find your answer?

Walk through your osTicket 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 four weeks for accounts under 5,000 tickets and 2,000 users with no complex thread history. Migrations exceeding 20,000 tickets, large attachment volumes, or Help Topic-to-Tag remapping move to four to eight weeks because of thread-splitting logic, orphaned Organisation reconciliation, and Freshdesk API rate-limit pacing. The scoping demo adds one to two weeks at the front of the project and is the most effective way to surface gotchas before production migration begins.

Adjacent paths

Related migrations to explore

Ready when you are

Move from osTicket.
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