The Complete Guide to Migrating from Enchant to Intercom
A technical guide to migrating from Enchant to Intercom — covering field mapping, API rate limits, object sequencing, common failure modes, and what data does not survive the transition.
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
This guide covers the technical process of migrating support data from Enchant to Intercom — including object sequencing, field mapping, API constraints, and the failure modes that catch teams off guard.
Enchant is a streamlined shared inbox. Intercom is a comprehensive customer platform. They model data differently, and the migration requires understanding those differences at the field level before writing a single line of code.
Define Your Migration Scope
Before you begin the technical heavy lifting, you need to decide what goes where. Most of your historical data, including your tickets, the messages within them, your customer records, and your organizational tags, will be moved via the Intercom API.
This ensures that the depth of your support history remains intact and searchable.
However, not everything can be handled by a script. Your structural elements, such as your internal team members (Admins) and your departmental groupings (Inboxes), need to be configured manually within the Intercom interface.
There is no direct programmatic way to recreate these administrative settings.
Finally, consider what needs to be archived. If you have thousands of contacts who have not interacted with you in years, Intercom provides a dedicated archive feature to keep your workspace clean while retaining their data for future reference.
What Does Not Survive the Migration
Not everything in Enchant has a direct equivalent in Intercom. Before you start, review this list of data that is lost or degraded during migration:
- Conversation ratings / CSAT scores — Enchant's satisfaction data has no direct import path into Intercom's CSAT model. You can store historical scores as conversation note metadata, but they will not populate Intercom's native reporting.
- SLA policy configurations — These must be rebuilt manually in Intercom. Historical SLA breach/meet data from Enchant does not transfer.
- Webhook subscriptions and event history — Enchant webhook configurations are platform-specific and cannot be ported. Event logs are not part of the migration payload.
- Custom workflow rules — Enchant routing rules do not map to Intercom workflows. These must be recreated from scratch in Intercom's workflow builder.
- Closed vs. open ticket handling — Intercom treats closed conversations differently from open ones during import. Closed tickets imported via API will not trigger automations or appear in active queues, which is usually the desired behavior, but you should verify that your reporting captures them correctly.
Knowing what you will lose upfront is more valuable than discovering it after cutover.
Enchant → Intercom Field Mapping
The table below maps Enchant objects and fields to their Intercom equivalents. Review this before building any migration scripts — it defines what transforms cleanly, what requires transformation, and where data loss occurs.
| Enchant Object | Enchant Field | Intercom Object | Intercom Field | Data Type | Transformation | Data Loss? |
|---|---|---|---|---|---|---|
| Customer | name |
Contact | name |
String | Direct map | No |
| Customer | email |
Contact | email |
String | Direct map | No |
| Customer | phone |
Contact | phone |
String | Direct map | No |
| Customer | (parent entity) | Contact | (unified model) | — | Enchant's Customer → Contact hierarchy flattens into a single Contact record | Hierarchy lost |
| Contact | email |
Contact | email |
String | Direct map; deduplicate against Customer emails | No |
| User | name, email |
Admin | name, email |
String | Manual creation required; no API import | No |
| Inbox | name |
Team | name |
String | Manual creation required | No |
| Ticket | subject |
Ticket / Conversation | title |
String | Direct map | No |
| Ticket | state |
Ticket / Conversation | state |
Enum | Map Enchant states to Intercom states (open, closed, snoozed) | Review mapping |
| Ticket | assigned_user |
Ticket / Conversation | admin_assignee_id |
ID reference | Look up Admin ID created during manual setup | No |
| Ticket | inbox_id |
Ticket / Conversation | team_assignee_id |
ID reference | Look up Team ID created during manual setup | No |
| Ticket | labels |
Ticket / Conversation | Tags | String array | Create tags in Intercom first, then associate | No |
| Reply | body |
Conversation Part | body |
HTML/String | Sanitize HTML; strip unsupported tags | Formatting may degrade |
| Note | body |
Conversation Part (internal) | body |
HTML/String | Map as internal note type | No |
| Reply/Note | created_at |
Conversation Part | created_at |
Timestamp | Preserve original timestamp | No |
| Attachment | file_url, file_id |
Conversation Part / Ticket | Inline URL in body | URL string | Embed Enchant-hosted URL in message body (see Attachments section) | Native attachment metadata lost |
| Custom Attributes | Varies | Contact / Conversation custom attributes | Varies | Varies | Must pre-create custom data attributes in Intercom; map by key name | Attributes not pre-created will be silently dropped |
Custom attributes that exist in Enchant but are not pre-created in Intercom will be silently dropped during import. There is no error, no warning — the data simply disappears. Audit your Enchant custom fields and create matching attributes in Intercom before running any migration script.
Prepare Intercom for Data Import
Preparation defines whether the migration succeeds or fails silently. You must rebuild your help desk framework before importing any records.
Start by adding your team members. In Enchant, these are your users; in Intercom, they are Admins. You will need to invite them manually so they have active accounts to which tickets can be assigned.
Once your people are in, set up your Teams. Enchant uses Inboxes to separate different communication streams, such as sales or support. You should create corresponding Teams in Intercom to mirror this structure.
This step is vital because when you eventually import your tickets, you will want to tell Intercom which team owns which ticket.
Recreate your labeling system by setting up Tags. This allows your imported data to be categorized exactly as it was in your previous system.
Finally, pre-create any custom data attributes in Intercom that you need to receive data from Enchant's custom fields. This step is easy to skip and impossible to fix retroactively without re-running the migration.
Migrate Objects
The order in which you move your data is the most critical part of the process. If you move tickets before customers, those tickets will have no owners. Follow this logical sequence to keep your data integrity high.
- Customers and Contacts:
In Enchant, a customer is a high-level entity that contains specific contact information, such as email addresses or phone numbers. Intercom uses a unified Contact model.
When you migrate these, you are creating the foundation for everything else. You will move the names and contact details first so that every ticket migrated later has a person to attach to.
- Tickets:
With your customers and teams ready, you can move the tickets. Enchant tickets are containers for conversations.
In Intercom, the Ticket object serves a similar purpose. During this phase, you will recreate the ticket shells, ensuring they are linked to the correct customer and assigned to the right team or admin.
- Messages, Notes, and Replies:
This is where the actual conversation lives. Enchant separates internal communication (notes) from customer-facing communication (replies).
Intercom treats these as conversation parts. You will migrate these one by one into the newly created tickets.
It is important to maintain the original timestamps so the conversation flow makes sense to anyone reading it later.
- Attachments:
Attachments require a specific workaround. In Enchant, files are uploaded separately to generate a unique identifier before being added to a message.
Since Intercom handles attachments differently in its ticket creation, the most reliable method is to include the direct URL of the Enchant attachment within the body of the message or the ticket description.
This ensures your team can still access vital files without needing to rebuild a complex file hosting logic. The trade-off: native attachment metadata (file size, upload date, thumbnail previews) is lost. The file itself remains accessible via the URL as long as Enchant hosting persists.
If your Enchant account is decommissioned after migration, those attachment URLs will break. Download and re-host critical files before canceling your Enchant subscription.
Rate Limits and Retry Logic
Enchant limits API requests to one hundred per minute. Intercom's API enforces its own rate limits that vary by endpoint and plan tier. Both APIs return HTTP 429 Too Many Requests when you exceed the limit.
Your migration script must handle this. At minimum:
- Check for
429responses on every API call. - Read the
Retry-Afterheader (if present) to determine how long to wait before retrying. - Implement exponential backoff as a fallback if no
Retry-Afterheader is returned. - Log every throttled request so you can identify bottlenecks and estimate total migration time.
For context: at 100 requests/minute on the Enchant side, exporting 10,000 tickets with an average of 5 messages each requires roughly 850 minutes (~14 hours) of API time for export alone, assuming no retries. Plan accordingly.
Search Indexing Delay
Intercom has a delay between when a contact is created via API and when that contact becomes searchable. If your script creates a contact and immediately queries for it to link a ticket, the lookup may fail.
The fix: after creating a contact, store the returned id in your local mapping rather than searching for the contact by email. If you must search, add a wait of several seconds before the lookup. This single issue is the most common cause of ticket-contact mismatches in Intercom migrations.
Common Failure Modes
Migrations fail in predictable ways. Here are the ones that apply to Enchant → Intercom specifically:
| Failure Mode | What Happens | How to Detect | How to Prevent |
|---|---|---|---|
| Duplicate contacts | Same email imported from both Customer and Contact objects in Enchant | Post-migration contact count exceeds expected count; duplicate email search in Intercom | Deduplicate by email before import; merge Customer and Contact records in your ETL layer |
| Ticket-contact mismatch | Ticket linked to wrong contact or orphaned | Spot-check tickets; compare contact_id on ticket vs. expected customer email |
Use returned id from contact creation, not search-based lookup |
| Silent custom attribute drop | Custom fields sent to Intercom without pre-created attributes | Compare field counts between source and destination per record | Pre-create all custom data attributes in Intercom before migration |
| HTML rendering errors | Message bodies display broken formatting in Intercom | Visual inspection of migrated conversations | Sanitize HTML before import: strip unsupported tags, fix unclosed elements |
| Attachment URL rot | Embedded Enchant URLs break after account decommission | Broken image/file indicators in conversation history | Download and re-host files before canceling Enchant |
| Timestamp ordering errors | Conversation parts appear out of order | Read through migrated ticket threads | Ensure created_at is set explicitly on every conversation part; import parts in chronological order |
Post Migration Configuration
After the data is successfully in Intercom, you must rebuild the automation that makes your support efficient. Workflows are the primary example.
Any rules you had in Enchant for routing tickets based on keywords or customer types will need to be recreated using Intercom's workflow builder.
This is also the time to configure your AI settings. If you use Intercom's Fin AI agent, you should begin importing your external help pages as content sources so the agent can learn how to answer your customers based on your existing documentation.
Summary
Migrating from Enchant to Intercom requires manual setup of admins and teams first, followed by automated migration of contacts, tickets, messages, and attachments in that order. The process is sequential and order-dependent — skip a step and downstream records will be orphaned or mislinked.
The primary technical risks are rate limiting on both APIs, search indexing delays causing ticket-contact mismatches, silent dropping of unmapped custom attributes, and attachment URL rot after Enchant account decommission.
Take it one object at a time, respect the rate limits, validate with spot checks after each phase, and document every transformation decision.
If you'd rather focus on your revenue instead of wrestling with mapping sheets and pagination loops, ClonePartner can handle the full migration for you. Every project gets a dedicated engineer who understands the nuances of both APIs and ensures zero downtime.
Further Reading:
Frequently Asked Questions
- What data is lost when migrating from Enchant to Intercom?
- CSAT scores, SLA policy configurations, webhook subscriptions, event history, and workflow rules do not transfer. Custom attributes that are not pre-created in Intercom are silently dropped. Attachment metadata is lost when files are embedded as URLs.
- How long does an Enchant to Intercom migration take?
- It depends on volume. At Enchant's rate limit of 100 API requests per minute, exporting 10,000 tickets with an average of 5 messages each requires roughly 14 hours of API time for export alone, before accounting for retries or Intercom import time.
- How do you handle attachments in an Enchant to Intercom migration?
- The most reliable method is embedding the direct Enchant-hosted URL in the Intercom message body. Native attachment metadata is lost. If you plan to decommission your Enchant account, download and re-host all files before cancellation or the URLs will break.
- What causes duplicate contacts during an Enchant to Intercom migration?
- Enchant uses a two-level model (Customer and Contact objects) that flattens into Intercom's single Contact model. If the same email exists in both Enchant objects, it can be imported twice. Deduplicate by email before import.