Helpdesk migration
Field-level mapping, validation, and rollback between Request Tracker and Freshdesk. We move data and schema; workflows are rebuilt natively in Freshdesk.
Request Tracker
Source
Freshdesk
Destination
Compatibility
6 of 10
objects map 1:1 between Request Tracker and Freshdesk.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from Request Tracker to Freshdesk is a platform migration from a Perl-based, self-hosted ticketing system to a managed SaaS helpdesk. RT has no bulk REST API, so data extraction relies on tab-delimited spreadsheet exports and direct database queries for attachments. We sanitize the tab-delimited output into RFC 4180 CSV, decode attachment blobs from the RT Attachments table, map RT Queues to Freshdesk Groups, and thread transaction history into Freshdesk conversations. RT Scrips (Perl automation rules) do not migrate; we deliver a written inventory of every active Scrip and Template for the customer's admin to rebuild as Freshdesk Scenario Automations. RT Articles export as structured JSON and are rebuilt as Freshdesk Knowledge Base articles. Freshdesk's Sprout free tier does not include API access, so any migration requires a paid plan at Blossom ($21/agent/month) or above.
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 Request Tracker 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.
Request Tracker
Ticket
Freshdesk
Ticket
1:1RT Tickets map directly to Freshdesk Tickets. We extract Subject, Status, Priority, Requestor email, Owner (resolved to Freshdesk agent by email), Queue name, Created date, LastUpdated, and all Custom Field values. Transaction history (replies, comments, status changes, field updates) threads into Freshdesk conversation entries ordered by RT Created date. RT's open/resolved/new/stalled/custom statuses map to Freshdesk ticket statuses, which the customer configures before migration.
Request Tracker
Queue
Freshdesk
Group
1:1RT Queues define organizational silos and ticket routing. Each RT Queue maps to a Freshdesk Group. We preserve the queue name as the group name and queue description as the group description. RT's per-queue SLA and lifecycle configuration does not have a direct Freshdesk equivalent—SLA policies in Freshdesk are org-level, not queue-level—so we flag queue-specific SLA values for mapping to Freshdesk SLA Policies with a note that the customer reconciles SLA scope post-migration.
Request Tracker
User (Privileged)
Freshdesk
Agent
1:1RT Privileged users (staff with login access) map to Freshdesk Agents. We extract Name, Email, Phone, and disabled status from the RT Users table. Active RT Privileged users become Freshdesk Agents; inactive users become inactive Freshdesk agents with their tickets reassigned to an active agent during migration. Role mapping (Super User, Requestor, Commenter) in RT translates to Freshdesk agent permission levels that we set during provisioning.
Request Tracker
User (Unprivileged)
Freshdesk
Contact
1:1RT Unprivileged users (requestors without login) map to Freshdesk Contacts. Email, Name, Phone, and Organization fields transfer directly. RT's User-custom fields attached to requestors become Freshdesk Contact custom fields, pre-created in Freshdesk before migration. If an RT requestor also appears as a Privileged user (rare), we deduplicate by email and create one Contact record with agent status.
Request Tracker
Custom Field Definition
Freshdesk
Custom Field
lossyRT Custom Fields (Select-Box, Freeform text, Date, IP Address, and others) map to Freshdesk Custom Fields of equivalent type. We pre-create Freshdesk custom fields before migration with matching names and types. RT's global vs queue-specific scoping maps to Freshdesk's ticket-level custom fields; queue-specific RT CFs become ticket-level Freshdesk CFs accessible in the relevant group context. This is configuration, not data migration, and must be completed before ticket import begins.
Request Tracker
Article
Freshdesk
Knowledge Base Article
1:1RT Articles in named Classes (e.g., General) export as structured JSON via RT::Extension::Import::CSV using the --article-class flag. We extract Name, Summary, Content (with embedded comma handling), and Custom Field values. Freshdesk Knowledge Base Articles require manual recreation of the folder and category structure (RT Article Classes map to Freshdesk Categories). Article content migrates as article body text; RT Synopsis becomes the Freshdesk article Summary. Large RT Articles with complex HTML content may require manual formatting review post-migration.
Request Tracker
Attachment
Freshdesk
Attachment
lossyRT stores attachments as base64-encoded blobs in the Attachments database table linked to Transactions by ID. We run a targeted SQL export per ticket's attachment IDs, decode the base64 blob, reconstruct the original filename and MIME type from RT metadata, then re-attach the decoded file to the destination Freshdesk ticket's conversation thread via the Freshdesk Attachments API. Attachment filename and size are preserved; original RT attachment IDs are logged in a migration audit table for reconciliation.
Request Tracker
Group and Role
Freshdesk
Team
lossyRT Groups (AdminCc, Cc, OwnerDelegated) organize users for queue-level or ticket-level permission grants. RT GroupMembers table exports group membership as a separate dataset that we reconstruct post-migration. Freshdesk uses Teams to organize agents, but ticket-level CC and AdminCc roles do not map natively—these migrate as Freshdesk ticket-level collaborator email addresses or as Notes in the conversation thread for audit trail. Group name and membership list are preserved in the migration audit output.
Request Tracker
Transaction
Freshdesk
Conversation Entry
1:1Every RT ticket action (reply, comment, status change, field update) creates a Transaction record ordered by Created date. We export the full transaction log per ticket and thread it back into Freshdesk as conversation entries: RT reply-type transactions become Freshdesk reply entries visible to the customer; RT comment-type transactions become Freshdesk internal notes. Status change and field update transactions are captured as note entries with the original RT transaction type labeled. Original RT Created timestamps are preserved on all conversation entries.
Request Tracker
Template
Freshdesk
Not Migratable
lossyRT Templates define email and notification text with token placeholders and conditional logic used by Scrips. Templates are text artifacts tied to RT's Perl automation engine and have no direct Freshdesk equivalent. We export Template names and full content as a structured document and deliver it to the customer's admin for recreation as Freshdesk Mailbox Templates or Scenario Automations. This is documentation, not automated migration.
| Request Tracker | Freshdesk | Compatibility | |
|---|---|---|---|
| Ticket | Ticket1:1 | Fully supported | |
| Queue | Group1:1 | Fully supported | |
| User (Privileged) | Agent1:1 | Fully supported | |
| User (Unprivileged) | Contact1:1 | Fully supported | |
| Custom Field Definition | Custom Fieldlossy | Fully supported | |
| Article | Knowledge Base Article1:1 | Fully supported | |
| Attachment | Attachmentlossy | Fully supported | |
| Group and Role | Teamlossy | Fully supported | |
| Transaction | Conversation Entry1:1 | Fully supported | |
| Template | Not Migratablelossy | 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.
Request Tracker gotchas
Tab-delimited export instead of CSV
Attachments stored as database blobs
RT-to-RT upgrades require original RT directory
No native bulk REST API
Comma-heavy article content breaks CSV imports
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
RT access audit and data extraction planning
We audit the source RT instance: version (RT 4.2, RT 5.0, or RTx extension), deployment type (self-hosted on customer Linux server or RT cloud-hosted), database engine (MySQL or PostgreSQL), and attachment storage method. We determine whether direct database access is available (preferred for blob extraction) or whether the migration relies on tab-delimited spreadsheet export plus targeted REST API calls. We extract the full list of Queues, Custom Fields (global and per-queue), active Scrips, Templates, and Article Classes. This audit output is the migration scope document that defines extraction method, row counts, and which RT objects can migrate programmatically versus which require manual handoff.
Freshdesk environment setup and API provisioning
We confirm the customer's Freshdesk plan includes API access (Blossom or higher). We provision the Freshdesk API key and test connectivity. We pre-create Freshdesk custom fields to match RT's Custom Field definitions, configure Group names mapped from RT Queues, set up Freshdesk Ticket Status values that reflect the RT lifecycle states (open, new, resolved, stalled, and any custom RT statuses), and configure SLA Policies mapped from RT queue-level SLA definitions. This step must complete before any ticket data is written to Freshdesk because custom field IDs are referenced during ticket creation.
Tab-delimited export pre-processing and database extraction
We run the RT tab-delimited spreadsheet export from each relevant search result set and feed it through our sanitizer to produce RFC 4180 CSV. For self-hosted RT, we run targeted SQL queries against the Attachments table to extract blob IDs per ticket, decode base64, and reconstruct filenames and MIME types. We parallelize attachment extraction where database access permits and use RT REST API calls for cloud-hosted RT where it does not. The pre-processing step produces two artifacts: a clean CSV of all ticket and user records, and a file store of decoded attachments with ticket-ID metadata for Freshdesk attachment API upload.
User and agent reconciliation
We extract RT Privileged users (agents) and Unprivileged users (requestors) from the RT Users table, deduplicate by email, and resolve to Freshdesk Agents by email match. Any RT agent without a matching Freshdesk Agent account goes to a reconciliation queue for the customer's admin to provision before record import resumes. We set Freshdesk agent permission levels (Group membership, Agent type) based on the RT Privileged user role. Contact custom fields are pre-created in Freshdesk before this step so that user-level custom field values from RT can be written during import.
Ticket migration in dependency order
We run ticket migration in dependency order: Agents first (validated), then Contacts (from RT Unprivileged users), then Groups (from RT Queues), then Tickets (with Queue resolved to Group ID, Owner resolved to Freshdesk Agent ID, and all Custom Field values populated). Transaction history threads into Freshdesk conversation entries after each ticket is created, with RT reply-type transactions as public replies and comment-type transactions as internal notes. Attachment files upload via the Freshdesk Attachments API after the parent ticket and conversation are committed. Each batch emits a row-count reconciliation report before the next batch begins.
Article migration and handoff documentation
We export RT Articles as structured JSON per Article Class and recreate them as Freshdesk Knowledge Base articles grouped by Freshdesk Categories. We deliver the full Template inventory (names and full content) and Scrip inventory (names, descriptions, conditions, and template references) in a written handoff document that maps each RT automation artifact to a Freshdesk Scenario Automation configuration step. The customer's admin uses this document to rebuild email templates and automation rules post-migration. We do not rebuild RT Scrips as Freshdesk automation code inside the migration scope.
Platform deep dives
Request Tracker
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 Request Tracker 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
Request Tracker: Not publicly documented.
Data volume sensitivity
Request Tracker 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 Request Tracker to Freshdesk migration scoping. Not seeing yours? Book a call.
Walk through your Request Tracker 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 Request Tracker
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.