Skip to content

The Complete Guide to Migrating from Intercom to Freshdesk

Intercom to Freshdesk migration made simple. Learn how to move contacts, companies, conversations, tickets, help center content, and workflows.

Tejas Mondeeri Tejas Mondeeri · · 9 min read
The Complete Guide to Migrating from Intercom to Freshdesk
TALK TO AN ENGINEER

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,200+ migrations completed
  • Zero downtime guaranteed
  • Transparent, fixed pricing
  • Project success responsibility
  • Post-migration support included

This guide walks you through how to migrate from Intercom to Freshdesk step by step, with complete coverage of planning, mapping, moving, and validating your data. You will learn what can be directly imported through the Freshdesk API, what requires transformation, and what needs to be rebuilt inside Freshdesk. Every section includes detailed field mappings, caveats, and practical tactics to ensure a clean, accurate migration.

1. Define your migration scope and prepare your mapping plan

Start by defining the boundaries of your migration. Separate data objects that you can export from Intercom and import into Freshdesk, configuration items that must be recreated manually, and archival-only data that cannot be migrated as structured records.

  • Data to migrate: Conversations (including messages and attachments), contacts, companies, tags, and custom attributes. These represent the transactional and relational data that define your customer interactions.

  • Configuration to rebuild: Workflows, assignment rules, SLAs, agent groups, roles, and automations. These are platform-specific and need to be recreated in Freshdesk.

  • Data to archive: Intercom events, leads, and in-app engagement metrics. These can be exported to a CSV or stored as a JSON archive for reference, but they do not have 1:1 objects in Freshdesk.

Once you have identified what you are migrating, create a mapping sheet that tracks how each Intercom object maps to its Freshdesk equivalent, along with field names, data types, transformation rules, and validation checks.

2. Prepare Freshdesk for data import

Before you import anything, you must prepare Freshdesk so your imported data has valid relationships. Intercom and Freshdesk share a similar core model: contacts, companies, and conversations, but Freshdesk enforces stricter ID references and schemas.

Set up Freshdesk in this order:

  • Create all agents, groups, and roles.

  • Define business hours and SLA policies.

  • Create ticket fields, contact fields, and company fields matching your Intercom custom attributes.

  • Configure mailboxes, signatures, and email templates.

  • Install integrations like Jira or Slack if you plan to keep them active.

After this setup, you’ll have a stable environment to receive the migrated records.

3. Migrate objects in a logical sequence

Because Freshdesk tickets reference contacts and companies, and messages reference tickets, the import must follow this order: Companies → Contacts → Ticket schema → Conversations (tickets)

3.1 Companies

Intercom’s “Companies” object corresponds directly to “Companies” in Freshdesk.

Company mapping

Intercom Company Freshdesk Company Notes and caveats
id unique_external_id + custom field intercom_company_id Required to re-run imports safely.
name name Use the same company name.
domain domains[] Enables auto-association for users sharing a domain.
company_id (custom) custom_fields{} Precreate schema for any Intercom custom attributes.
created_at read-only custom field original_created_at Timestamps cannot be backdated; store them for reference.

After importing, verify that the same company appears once and is automatically linked to relevant contacts via email domain.

3.2 Contacts

Intercom’s “Contacts” (users) map cleanly to Freshdesk “Contacts.” Each contact can belong to one company and have multiple identifiers like emails or phone numbers.

Contact mapping

Intercom Contact Freshdesk Contact Notes and caveats
id unique_external_id + intercom_contact_id Keeps imports idempotent.
name name Combine first and last names if separate.
email email Required for requesters.
phone phone Normalize format to E.164 for consistency.
companies[] company_id Links to imported company.
custom_attributes{} custom_fields{} Create schema before import.
tags[] tags[] One-to-one mapping.
created_at original_created_at Stored as read-only field or note.

Contacts in Intercom can represent both users and leads. Leads that have never converted into active users can be excluded or imported as inactive contacts tagged as lead.

3.3 Ticket schema

Before creating tickets, align Freshdesk ticket fields with Intercom’s conversation properties. Intercom conversations have flexible attributes like conversation type (chat, email, in-app), open/closed state, and assignment details. Freshdesk requires explicit schema fields for these.

Create the following in Freshdesk:

  • Custom field “intercom_conversation_id” to preserve the source ID.

  • Custom dropdown for “source_channel” (e.g., chat, messenger, email).

  • Custom date field for “first_response_time” if you want to retain metric data from Intercom reports.

3.4 Conversations (Tickets)

Intercom’s “Conversations” are the equivalent of Freshdesk's “Tickets.” Each conversation can contain multiple parts (messages), which you’ll migrate as the ticket’s conversation history.

Conversation mapping

Intercom Conversation Freshdesk Ticket Notes and caveats
id unique_external_id + custom field intercom_conversation_id Critical for deduplication and delta sync.
title or subject subject Intercom may not have subjects for messenger threads; derive from first message.
created_at stored in original_created_at Freshdesk does not allow backdating.
state (open, closed, snoozed) status Map to Freshdesk statuses: Open, Pending, Resolved, Closed.
priority priority Intercom doesn’t always expose priority; set default “Medium.”
assignee.id responder_id Recreate agents and map accordingly.
tags[] tags[] Direct import.
custom_attributes{} custom_fields{} Schema must pre-exist.
source via.channel Helps in reporting (e.g., chat, email, in-app).

Each conversation has multiple “parts,” which map to Freshdesk conversation notes or replies depending on whether they were public or internal.

Message mapping

Intercom Part Freshdesk Conversation Notes and caveats
author requester or agent on note Ensure user exists.
body (HTML) body_html Clean inline styles and images.
attachments[] uploaded file on note Re-upload; maintain original filenames.
created_at note header or original_created_at field Freshdesk sets current time on import.

Run imports in small batches, verify chronological order and attachments, then scale up.

3.5 CSAT (Customer Satisfaction)

Intercom offers post-conversation surveys similar to Freshdesk’s CSAT. You can recreate these ratings in Freshdesk as satisfaction ratings attached to tickets.

CSAT mapping

Intercom Survey Freshdesk Satisfaction Notes and caveats
rating rating value Map “positive/neutral/negative” to “good/bad.”
feedback_text satisfaction comment Store as rating comment.
submitted_at note text Include “Original CSAT at [datetime] by [user].”

If Intercom responses cannot be backdated, include the timestamp in a private note attached to the ticket.

3.6 Help Center

Intercom’s Articles and Collections translate directly to Freshdesk’s Solutions Categories and Folders.

Article mapping

Intercom Article Freshdesk Solution Article Notes and caveats
id unique_external_id Use for re-runs.
title title
body (HTML) description Retain formatting; rewrite image URLs after upload.
author_id author Must exist as agent.
tags[] labels[] 1:1 mapping.
attachments[] attachments[] Re-upload files.
translations[] translations[] Add per language.

After migration, verify category hierarchy and translation completeness.

3.7 Tickets (Intercom Tickets → Freshdesk Tickets)

Intercom now provides a dedicated Tickets API, separate from Conversations. These Tickets are used for structured workflows, often created by bots, forms, or back-office automations. Unlike Conversations, which represent customer-facing threads, Intercom Tickets represent internal tasks or requests that can still link back to Conversations or Contacts.

Ticket mapping

Intercom Ticket Freshdesk Ticket Notes and caveats
id unique_external_id + custom field intercom_ticket_id Required to support idempotent imports and delta re-runs.
title subject If missing, derive from category or ticket_type_id.
description description_html Clean HTML before import; replace embedded image URLs.
category ticket_type or a custom dropdown field Freshdesk uses “Ticket Type.” Create custom values if needed.
ticket_type_id custom_fields.ticket_type_ref Optional – store reference for reporting.
state (open, snoozed, closed) status Map to Open, Pending, Resolved, Closed.
priority priority Direct mapping. Default “Medium” if null.
contact_ids[] requester_id Ensure contact exists; create if missing.
teammate_ids[] responder_id or group association Re-map agent IDs to existing Freshdesk agents.
tags[] tags[] One-to-one tag import.
created_at original_created_at (custom field) Store original timestamp since Freshdesk cannot backdate.
updated_at updated_at Use for sync and delta comparison.
custom_attributes{} custom_fields{} Pre-create schema for all Intercom ticket attributes.

3.8 Ticket Replies and Notes

Each Intercom Ticket can include admin replies, contact replies, and internal notes. These are retrieved through the /tickets/{id}/reply and related endpoints and map to Freshdesk ticket conversations.

Intercom Reply / Note Freshdesk Conversation Notes and caveats
Admin reply Public reply by agent Author → agent.
Contact reply Public reply by requester Author → contact.
Internal note Private note Create note type conversation.
Attachments Attached files on note or reply Upload separately using multipart API; maintain filenames.
Created time Not backdatable in Freshdesk Add as text note header: “Original created at [datetime]”.

3.9 Linking Tickets and Conversations

Intercom allows linking Tickets to Conversations (via /conversations/{id}/convert or /tickets/{ticket_id}/conversation_id). You can preserve these relationships in Freshdesk using one of these approaches:

Relationship Type Freshdesk Workaround
Conversation → Ticket link Add a private note on the ticket: “Linked Conversation ID: xxx”.
Multiple tickets from one conversation Maintain a custom field linked_conversation_ids[] as comma-separated IDs.
Backlink from conversation to ticket Add a private note in the corresponding ticket with the Freshdesk Ticket URL.

4) Rebuild automations, SLAs, and workflows

Once your data is in Freshdesk, the goal is to recreate your operational logic.

  • Convert Intercom’s Inbox rules into Freshdesk Automations.

  • Recreate assignment logic for teams and agents.

  • Define Views based on status, tags, or priorities.

  • Configure SLAs using business hours you recreated earlier.

  • Convert Saved Replies in Intercom into Canned Responses in Freshdesk.

For integrations, replicate them using Freshdesk’s apps marketplace.

5. Manage gaps and historical data

Intercom stores large amounts of context data (events, lead scoring, product tours) that don’t map into Freshdesk. Export these as CSVs or JSON and store them externally. Add a Legacy Reference custom field in Freshdesk tickets linking to the archive location.

Other known limitations and workarounds:

Missing feature Workaround
Lead data Store as tagged inactive contacts.
Event data Archive as JSON for analytics.
Backdated timestamps Record original date in note or field.
Bot conversations Export transcripts and attach to tickets as files.

6. Insider Secrets

1. Use unique_external_id everywhere

Always set this field when importing to ensure idempotency. It lets you safely rerun partial batches or deltas without duplicates.

2. HTML cleanup is not optional

Intercom’s message body often contains embedded inline styles and base64 images. Clean them before import or you’ll end up with broken formatting and bloat. Use a sanitizer that converts base64 to file uploads and rewrites image URLs.

3. Preserve chronology

Freshdesk doesn’t allow backdated timestamps. Add an original_created_at field or prepend timestamps in note headers for historical accuracy.

4. Run a sample migration first

Select ~100 representative tickets covering different edge cases: multi-company contacts, multilingual articles, tagged threads, long message chains, and CSAT data. Validate everything here before scaling up. This sample becomes your migration baseline.

5. Delta sync

Before the final cutover freeze, new ticket creation in Intercom and run a delta migration of new/updated records.

Quick Recap

Prepare Freshdesk first, ensuring your agents, groups, and fields are in place. Migrate companies, contacts, ticket schema, tickets with full history and attachments, CSAT ratings, and knowledge base content. Rebuild automations and SLAs. Archive Intercom-specific metrics externally. Test on a golden batch, perform a delta, and then cut over confidently.

At ClonePartner, we’ve completed numerous Intercom to Freshdesk migrations. Each project is handled by a dedicated engineer who customizes the data mapping to match your setup. If you want to avoid the technical complexity, ClonePartner can manage the entire migration for you, from planning and field mapping to validation and go-live.

Further reading:

More from our Blog