Skip to content

The Complete Guide to Migrating from Intercom to Enchant

Migrating from Intercom to Enchant? Our expert guide covers API mapping, ticket history transfers, and file attachment workarounds for a seamless transition

Tejas Mondeeri Tejas Mondeeri · · 10 min read
The Complete Guide to Migrating from Intercom to Enchant
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,500+ migrations completed
  • Zero downtime guaranteed
  • Transparent, fixed pricing
  • Project success responsibility
  • Post-migration support included

Making the switch from Intercom to Enchant is a significant step toward a more streamlined and shared inbox experience.

While Intercom offers a wide array of tools for marketing and engagement, Enchant focuses on providing a clean, omnichannel environment for support teams.

To ensure your transition is smooth, you need a clear roadmap that respects the data models of both platforms.

Info

This guide was written against the Intercom REST API v2.x and Enchant API v1. API surfaces change — verify endpoints and field names against the current docs before you start.

Define Your Migration Scope

Before you write a single line of code, you must decide what stays and what goes. Most of your core support data will move through the API.

This includes your teammates, known as Admins in Intercom, and your customer database, which includes both Users and Leads.

Your conversation history, including the individual replies and internal notes, along with any relevant tags and file attachments, is also a perfect candidate for API migration.

Some elements require a bit more hands-on attention. Help center content, such as Articles and Collections, does not have a direct 1:1 API path in the current documentation and should be recreated manually within Enchant to ensure the formatting remains intact.

Similarly, since Enchant does not have a dedicated Company object or a Segment API, you will handle these via manual workarounds or custom fields during the process.

Any marketing campaign data or transient visitor sessions that are no longer relevant should be archived in Intercom for your records rather than imported into your new live environment.

Core Field Mapping Reference

The table below shows how Intercom objects and fields map to Enchant. This is the reference you will use throughout the migration.

Intercom Object / Field Enchant Object / Field Transformation Notes
Admin User Map admin.name and admin.email directly. Create Users before importing any tickets so assignment references resolve.
User (Contact) Customer Consolidate name, email, and phone into the Enchant Customer record.
Lead (Contact) Customer Treated identically to Users in Enchant. Merge Leads and Users into a single Customer import pass.
Company Customer summary field No Company object in Enchant. Patch company name and details into the Customer's summary field.
Segment Label No Segment API in Enchant. Recreate segments as Labels and apply them to the relevant Customers or Tickets.
Tag Label Direct mapping. Pre-create all Labels in Enchant before import so they attach correctly.
Conversation Ticket Each Conversation becomes a Ticket. Ticket must reference an existing Customer and an Inbox.
Conversation Part (reply) Message (type: reply) Set direction to distinguish inbound (customer) from outbound (agent).
Conversation Part (note) Message (type: note) Internal notes. Not visible to the customer.
Attachment (on Conversation Part) Attachment → Message Two-step process: upload file as Base64 to get a file ID, then reference that ID when creating the Message. Each file ID can only be used once.
Article (Manual) No direct API import path. Recreate in Enchant's help center manually.
Collection (Manual) Recreate as help center categories in Enchant.

Prepare Enchant for Data Import

Preparation is the secret to a successful import. You cannot simply dump data into a blank slate.

First, you must install the API app within your Enchant settings to generate the necessary access tokens. This token is your key to the system and should be treated with the same level of security as a password.

Next, you need to define your communication channels. In Enchant, every ticket must belong to an inbox. You should set up your inboxes to match your current support structure, whether that is organized by email, chat, or social media.

This is also the best time to recreate your organizational structure by defining your labels. Since Intercom tags will become Enchant labels, having those labels ready in the system ensures they attach correctly when the data arrives.

Pre-Migration Checklist

  • Generate Enchant API token via Settings → API App
  • Create all inboxes that map to your current Intercom channels
  • Pre-create all Labels in Enchant that correspond to Intercom Tags and Segments
  • Export a full count of Intercom Admins, Contacts, Conversations, and Articles for reconciliation later
  • Confirm which Intercom data you are archiving vs. migrating (campaigns, visitor sessions, etc.)
  • Set up a staging/test Enchant environment if available, to validate the import before running against production

Migrate Objects

The order in which you move your data is vital because certain objects depend on others to exist first. The logical sequence begins with your team.

  1. Admins: Your first step is migrating your Intercom Admins into Enchant as Users. These are the people who will be answering the tickets.

By creating them first, you ensure that when you later import conversation history, you can accurately assign those conversations to the right person.

To export Admins, paginate through Intercom's GET /admins endpoint. Then create each User in Enchant via POST /users. Store a mapping of Intercom Admin IDs to Enchant User IDs — you will need it when assigning tickets.

  1. Contacts: Intercom differentiates between Leads and Users, but in Enchant, these are consolidated into Customer records.

You will map the names and contact information, such as email addresses or phone numbers, into the Enchant Customer model via POST /customers.

This creates the necessary identity that every ticket will eventually be linked to.

Warning

Deduplication: Before creating a Customer, query Enchant to check whether a record with that email already exists. Enchant does not enforce email uniqueness at the API level, so duplicate records are easy to create and painful to clean up. Build a lookup cache keyed on email during your import.

  1. Companies and Segments: Because there is no direct Company object in the Enchant sources, you must use a clever workaround.

You can take the company details from Intercom and patch them into the summary field of the relevant Customer record. This keeps the company context visible for your agents.

For Segments, the best approach is to use labels. You can manually apply specific labels to customers or tickets that belonged to a segment in Intercom to maintain that categorization.

  1. Attachments: Before moving messages, you must handle the files. Attachments in Enchant are a two-step process.

You have to upload the file data first to receive a unique identifier. This identifier is then used in the next step when you create the actual message.

Here is a simplified example of the two-step attachment flow:

# Step 1: Upload the file (Base64 encoded) to get a file ID
curl -X POST https://YOUR_DOMAIN.enchant.com/api/v1/attachments \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "filename": "screenshot.png",
    "content_type": "image/png",
    "data": "BASE64_ENCODED_FILE_DATA"
  }'
# Response includes a file ID, e.g. { "id": "att_abc123" }
 
# Step 2: Reference the file ID when creating the message
curl -X POST https://YOUR_DOMAIN.enchant.com/api/v1/tickets/TICKET_ID/messages \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "reply",
    "body": "Please see the attached screenshot.",
    "attachment_ids": ["att_abc123"]
  }'
Warning

A file ID in Enchant can only be associated with one single message. If a file appeared in multiple Intercom conversation parts, you must upload it again for each message to get a fresh ID.

  1. Conversations and Messages: This is the heart of your data. Intercom Conversations or Tickets map directly to Enchant Tickets.

To export conversations from Intercom, paginate through GET /conversations using cursor-based pagination. For each conversation, fetch its parts via GET /conversations/{id}/parts.

Here is a simplified example of paginating Intercom conversations:

# Fetch the first page of conversations from Intercom
curl -X GET "https://api.intercom.io/conversations?per_page=50" \
  -H "Authorization: Bearer INTERCOM_TOKEN" \
  -H "Accept: application/json"
# Use the "next" cursor from the response's "pages" object to fetch subsequent pages

Each ticket acts as a container for the history of that interaction. Within those tickets, you will migrate Intercom's conversation parts and notes as Enchant Messages.

It is essential to distinguish between a note, which is internal, and a reply, which is customer-facing.

You must also pay close attention to the direction of the message to ensure that inbound customer replies and outbound agent responses are displayed in the correct order.

Post-Migration Validation

Once the data is in Enchant, you need to prove the migration succeeded before you rebuild any automation on top of it.

Validation Checklist

  • Row-count reconciliation: Compare the total number of Admins, Contacts, and Conversations exported from Intercom against the number of Users, Customers, and Tickets now in Enchant. Any discrepancy needs investigation.
  • Spot-check tickets: Open 10–20 tickets at random across different date ranges. Verify that all messages appear in the correct order, internal notes are marked as notes (not visible to customers), and the assigned agent is correct.
  • Attachment verification: For each spot-checked ticket that had attachments, confirm the files open correctly and are associated with the right message.
  • Label verification: Confirm that Intercom Tags mapped correctly to Enchant Labels. Check a sample of customers and tickets.
  • Customer summary fields: For records where Company data was patched into the summary field, verify the company context is present and readable.
  • Timestamp integrity: Confirm that conversation timestamps reflect the original Intercom dates, not the import date.

Post-Migration Configuration

Once validation passes, you need to rebuild the logic that makes your help desk run. Intercom's automated workflows, such as bots or assignment rules, do not migrate through the API.

You will need to manually set up Enchant's internal automation to handle ticket routing and auto replies.

This is also the time to verify your help center. After manually moving your Articles and Collections, check that all internal links are functioning and that the content is organized in a way that is easy for your customers to navigate.

Finally, double-check your team's permissions to ensure everyone has access to the correct inboxes and labels.

Common Migration Errors and How to Resolve Them

Error Cause Resolution
429 Too Many Requests Exceeded Enchant's 100 credits per minute rate limit. Implement exponential backoff. Reduce request volume by using embedding (include labels or customer details in a single request instead of separate calls).
Duplicate Customer records No pre-import deduplication check on email. Query for existing Customers by email before each POST /customers call. Build a local lookup cache.
Attachment upload fails silently File data was not Base64 encoded, or the content type header was incorrect. Ensure all file data is Base64 encoded. Match the content_type field to the actual file MIME type.
File ID reused across messages Enchant file IDs are single-use. Reusing an ID attaches the file to neither message correctly. Upload the file once per message it needs to appear in. Each upload returns a fresh ID.
Messages appear out of order Timestamps were not preserved or were overwritten during import. Set the message timestamp explicitly to match the original Intercom conversation part timestamp.
Ticket missing customer association Customer record was not created before the Ticket was imported. Always create Customers before Tickets. Maintain an ID mapping table (Intercom Contact ID → Enchant Customer ID).
Internal notes visible to customers Message type was set to reply instead of note. Map Intercom conversation part type carefully: notenote, comment (agent reply) → reply.

Insider Secrets

One of the most important things to watch is the rate limit. Enchant allows 100 credits per minute. If you try to push your entire history at once, the system will pause your requests with a 429 response. A smart way to manage this is to use embedding when you fetch data.

By embedding labels or customer details within a single request, you reduce the number of round trips and save your credits for the actual data creation.

Another crucial tip involves file data. When you migrate attachments, you must convert the Intercom files into Base64 encoded strings before sending them over.

If you skip this step, the files will not upload correctly. Also, remember that a file ID in Enchant can only be associated with one single message.

If you have a file that was used multiple times in Intercom, you will need to upload it and get a new ID for each message it appears in.

Info

Webhook and event data: Intercom fires events (e.g., user actions, page views) that are not part of the conversation model. This event history does not have a corresponding object in Enchant and cannot be migrated via the API. If you need to retain it, export it from Intercom and archive it separately.

Summary

Migrating from Intercom to Enchant is a process of refinement. By moving your team and customers first, followed by attachments and then the conversation history, you maintain a clear and logical data trail.

While some elements like companies and help center articles require manual intervention or creative workarounds, the result is a clean and highly organized support system.

Take your time with the preparation and respect the sequence, and your team will be up and running in their new inbox without losing a single piece of valuable customer context.

Further Reading:

More from our Blog

Unthread to HappyFox Migration: A Technical Guide
Unthread/HappyFox/Migration Guide

Unthread to HappyFox Migration: A Technical Guide

A step-by-step technical guide for migrating from Unthread to HappyFox. Covers API extraction, data model mapping, rate limits, edge cases, and validation.

Raaj Raaj · · 22 min read