The Complete Guide to Migrating from Freshdesk to Tidio
Planning a Freshdesk to Tidio migration? This guide explains data mapping, ticket history, custom fields, API limits, and common pitfalls.
Planning a migration?
Get a free 30-min call with our engineers. We'll review your setup and map out a custom migration plan — no obligation.
Schedule a free call- 1,500+ migrations completed
- Zero downtime guaranteed
- Transparent, fixed pricing
- Project success responsibility
- Post-migration support included
Migrating your customer service infrastructure from Freshdesk to Tidio requires careful planning. This guide covers the technical strategy for moving your core support assets, what transfers cleanly, what doesn't, and what you'll lose permanently.
Define Your Migration Scope
The success of your migration relies on understanding which data assets can be moved via API and which must be rebuilt manually.
Data Migrated Via API
The core transactional data can be programmatically migrated using Tidio's API:
- Contacts (Users): Customer records from Freshdesk can be bulk-created in Tidio.
- Tickets: The main support cases and issues recorded in Freshdesk.
- Conversations/Replies: The message history, replies, and notes associated with each ticket.
- Contact Custom Fields (Data): While the field structure itself is manual, the data stored in these fields can be populated via an API workaround (see Step 2 below).
Manual Configuration
Objects relating to internal organization, configuration, knowledge management, or performance metrics cannot be migrated via the Tidio API and must be manually rebuilt:
- Agents/Operators and Groups/Departments: Must be reestablished manually within Tidio's operator and department settings.
- Companies: Client organization structures in Freshdesk must be recreated manually in Tidio — no direct API migration route exists.
- Custom Fields (Schema & Data for Tickets): The structure and definition of custom fields related to tickets must be set up manually in Tidio prior to importing ticket data.
- Canned Responses: Predefined reply templates need manual creation.
- Solutions/Knowledge Base: The entire structure of Categories, Folders, and Articles must be recreated manually.
- Other Ancillary Objects: Roles, SLA Policies, Business Hours, Surveys, Discussions, and Time Entries require manual configuration.
What You Permanently Lose
Some Freshdesk data has no equivalent in Tidio and cannot be migrated at all:
- Time Entries: Agent time tracking data per ticket is not supported in Tidio.
- Surveys (CSAT): Customer satisfaction survey responses and scores are not transferable.
- Discussions: Community forum threads do not have a Tidio equivalent.
- SLA History: Historical SLA breach/compliance records are lost — only future SLA rules can be configured.
- Reporting/Analytics Data: Freshdesk's historical reporting metrics do not carry over.
If any of these are subject to compliance or audit requirements, export and archive them from Freshdesk before decommissioning.
Object Mapping Reference
| Freshdesk Object | Tidio Equivalent | Migration Method | Notes |
|---|---|---|---|
| Contact | Contact (Visitor) | API (bulk create) | Identified by email, name, or phone |
| Contact Custom Field (schema) | Custom Property | Manual | Must create before data import |
| Contact Custom Field (data) | Custom Property (value) | API (bulk update) | Requires schema to exist first |
| Ticket | Ticket | API (create) | Must reference Tidio Contact ID |
| Ticket Reply / Note | Ticket Message | API (add message) | Reconstructed per-ticket, chronologically |
| Agent | Operator | Manual | API is read-only for operators |
| Group | Department | Manual | API is read-only for departments |
| Company | — | Manual | No direct equivalent; recreate manually |
| Custom Field (Ticket) | — | Manual | Schema and data both manual |
| Canned Response | — | Manual | No API migration path |
| Knowledge Base (Category/Folder/Article) | Knowledge Base | Manual | Full manual rebuild required |
| SLA Policy | SLA Policy | Manual | Historical compliance data lost |
| Business Hours | Business Hours | Manual | — |
| Time Entry | — | Not migratable | Archive from Freshdesk |
| Survey (CSAT) | — | Not migratable | Archive from Freshdesk |
| Discussion | — | Not migratable | Archive from Freshdesk |
Archiving Strategy
For data that holds purely historical value and is not critical for day-to-day operations in Tidio — older closed tickets, Time Entries, Surveys, Discussions, or complex Custom Objects — generate a secure export from Freshdesk for archival purposes. This keeps your new Tidio instance clean while preserving compliance history.
Prepare Tidio for Data Import
Before transferring any transactional data, Tidio's framework must mirror your Freshdesk environment. This phase involves setting up foundational dependencies manually.
- Define Staff and Structure: Manually create your Operators (Tidio's term for agents) and set up the relevant Departments (Tidio's term for groups/teams). The Tidio API only supports retrieving lists of existing operators and departments — creation must be done in the Tidio administration panel.
- Replicate Custom Data Structures: Examine the custom fields defined on Freshdesk Contacts. Manually replicate these as custom properties in Tidio. These properties have predefined types: text, email, number, phone, or URL.
- Map Ticket Statuses and Priorities: Freshdesk and Tidio use different internal representations for status and priority values. Map these before import to prevent miscategorization.
Status and Priority Mapping
| Freshdesk Status | Numeric Value | Tidio Equivalent |
|---|---|---|
| Open | 2 |
Map to Tidio's open status |
| Pending | 3 |
Map to Tidio's pending status |
| Resolved | 4 |
Map to Tidio's resolved status |
| Closed | 5 |
Map to Tidio's closed status |
| Freshdesk Priority | Numeric Value | Tidio Equivalent |
|---|---|---|
| Low | 1 |
Map to Tidio's low priority |
| Medium | 2 |
Map to Tidio's medium priority |
| High | 3 |
Map to Tidio's high priority |
| Urgent | 4 |
Map to Tidio's urgent priority |
Verify Tidio's internal representations in their API docs before running the import — these values may differ from what the UI displays.
Migrate Objects
The data transfer relies on moving transactional records in a specific order to satisfy data dependencies.
1. Migrate Contacts
This is the foundational step. Freshdesk Contacts map to Tidio Contacts (visitors identified by email, name, or phone number).
Use Tidio's bulk creation endpoint to onboard your customer base. Store the returned Tidio Contact IDs — every subsequent step depends on them.
Duplicate handling: Test what happens when you submit a contact with an email that already exists in Tidio. Depending on the API behavior, the request may fail the entire batch, skip the duplicate, or upsert. Validate this before running the full import.
2. Populate Contact Custom Field Data (Workaround)
Immediately after base contact creation, enrich the customer records.
Since you defined the custom properties in Tidio during preparation, retrieve the corresponding custom field data from Freshdesk Contacts and push it to Tidio using the bulk contact update endpoint.
This allows non-standard data fields to travel across platforms.
3. Migrate Tickets
With Tidio Contact IDs established, import your core support records.
A Freshdesk Ticket maps to a Tidio Ticket (a record for complex conversations requiring additional interactions). Use the ticket creation endpoint to create a ticket associated with a Contact.
Map metadata including the original subject, priority, and current status using the numerical value mappings from the preparation phase.
4. Reconstruct Conversation History (Workaround)
The historical correspondence within Freshdesk (Replies and Notes) needs to be associated with the newly created Tidio tickets.
Tidio provides a dedicated endpoint to add a reply message to an existing ticket. Iterate through the chronological conversations for each Freshdesk ticket and add them as messages to the matching Tidio ticket, noting whether the message originated from a customer or an operator.
Preserve original timestamps: Pass the original created_at timestamp from Freshdesk during each creation call. Without this, all records will show the migration date instead of the actual historical date. Freshdesk stores all timestamps in UTC.
Post Migration Configuration
Once the core data is transferred, configure the remaining structural elements to make the helpdesk operational.
- Rebuild Knowledge Assets: Freshdesk Solutions (Categories, Folders, Articles) must be recreated manually in Tidio's knowledge base tools.
- Replicate Business Logic: Scenario Automations, SLA Policies, and Business Hours must be redefined and activated within Tidio. These rules govern ticket prioritization, assignment, and escalation — validate them carefully.
- Finalize Internal Structure: Establish Companies, Canned Responses, Roles, and permissions. Ensure groups adhere to any necessary communication or staffing requirements.
Technical Constraints and Edge Cases
These constraints aren't immediately obvious and will break your migration if ignored:
- Freshdesk API Rate Limits: Freshdesk enforces per-minute rate limits that vary by plan tier. Hitting these limits halts your export. Queue API calls carefully and cache non-volatile data (like agent IDs and group mappings) to reduce unnecessary requests.
- Tidio API Rate Limits: Tidio also enforces rate limits on its API. Check the current limits in their developer documentation before designing your import pipeline — exceeding them will result in
429responses and dropped records if not handled. - The Contact ID is King: The linking mechanism between tickets and conversations relies on the Tidio Contact ID. Every ticket must be correctly associated with its Tidio Contact ID. If this mapping breaks, you lose relational integrity between contacts and their ticket history.
- Timestamp Handling: Pass the original
created_attimestamp during creation calls to preserve historical context. Freshdesk stores timestamps in UTC. If any Freshdesk records have null or missingcreated_atvalues, decide on a fallback strategy (e.g., useupdated_ator a sentinel date) before running the import. - Status and Priority Mapping: Freshdesk uses numerical values for Status (e.g.,
2for Open,4for Resolved) and Priority (e.g.,1for Low,4for Urgent). Tidio may use different internal representations. Verify the mapping against Tidio's current API documentation before running the import. - Volume Considerations: For large Freshdesk instances (tens of thousands of tickets or more), a sequential ticket-by-ticket approach may take hours or days. Consider parallelizing API calls within rate limit bounds, or implementing a job queue to manage throughput.
- Partial Migration Rollback: If the migration fails midway — for example, tickets imported without correct contact associations — you need a rollback plan. Before starting, document how you would identify and delete partially imported records in Tidio to allow a clean re-run.