Helpdesk migration
Field-level mapping, validation, and rollback between Keeping and Intercom. We move data and schema; workflows are rebuilt natively in Intercom.
Keeping
Source
Intercom
Destination
Compatibility
6 of 10
objects map 1:1 between Keeping and Intercom.
Complexity
CModerate
Timeline
2-4 weeks
Overview
Moving from Keeping to Intercom is a structural shift from a Slack-native ticketing layer to a standalone customer communications platform. Keeping operates entirely within Slack — tickets are threads, customers are the requesters, and Slack Channels serve as team routing. There is no Keeping database export; we reconstruct the customer record from ticket metadata during scoping. We migrate tickets as Intercom Conversations, ticket requesters as Contacts, and Keeping Slack Channels as Intercom Teams or assignment rules. Intercom's object model (Contacts, Companies, Conversations, Custom Objects) is richer but requires schema design decisions before any data moves. We do not migrate Keeping automations, Slack rules, or channel-based routing logic as code; we deliver a written inventory of these for the customer's admin to rebuild in Intercom Workflows.
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 Keeping object lands in Intercom, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
Keeping
Ticket
Intercom
Conversation
1:1Keeping Tickets map directly to Intercom Conversations. The Slack thread timestamp becomes the Intercom created_at on the Conversation. Thread messages migrate as Conversation Parts, with the message body, author (agent or customer), and timestamp preserved. Internal notes in Keeping (visible only to agents) migrate as internal Conversation Parts. Closed ticket status maps to Intercom Conversation state with the original close timestamp preserved. We extract the Slack thread ID as an external reference for audit purposes.
Keeping
Customer
Intercom
Contact
1:1Keeping does not store a standalone customer record — the customer is inferred from the Slack thread requester. We reconstruct the Contact by extracting the requester's email, name, and any metadata (company name, plan tier, user ID) from every ticket they opened. Email becomes the Contact email field and dedupe key. Company name, if present in ticket metadata, becomes an Account in Intercom with a Contact-to-Account link. If no company data is present, contacts are created without an Account link and flagged for the customer to enrich post-migration.
Keeping
Slack Channel
Intercom
Inbox Team
lossyKeeping Slack Channels map to Intercom Inbox Teams. We extract the full list of Keeping Slack Channels during scoping and map each to a corresponding Intercom Team. Channel membership (who has access to which channel in Slack) maps to Inbox Team membership in Intercom. If Keeping used channel naming conventions for routing (e.g., #support-tier1, #support-tier2), we create corresponding Teams and configure routing rules in Intercom during schema setup.
Keeping
Ticket Assignee
Intercom
Admin (Teammate)
1:1Keeping assigns tickets by Slack user (who responded in the thread). We extract the assignee from the first agent response in each thread and map to an Intercom Admin by email lookup. If the assignee has no Intercom account, they go to a reconciliation queue for the customer to provision before migration. Slack bots and automated responders (e.g., Slackbot) without a human owner are flagged as unmapped and excluded from assignee mapping.
Keeping
Ticket Status
Intercom
Conversation State + Snoozed Until
1:1Keeping ticket open/closed state maps to Intercom Conversation state (open, closed, snoozed). If Keeping used a multi-status workflow (e.g., pending customer, resolved, escalated), we map those to Intercom Conversation states and create a custom conversation attribute to carry the original Keeping status label for audit. Snooze timestamps from any snooze feature in Keeping migrate as Intercom Snoozed Until timestamps.
Keeping
Customer Tags
Intercom
Contact Tags
1:1If Keeping tickets contained tags (applied manually or by automation), these migrate as Intercom Contact Tags. We extract unique tags across all tickets, create the corresponding tags in Intercom, and apply them to the relevant Contact records. Tags that are purely ticket-level (not customer-level) are applied to the Conversation as tags. The customer chooses during scoping whether to apply tags to Contacts, Conversations, or both.
Keeping
Slack Message Attachments
Intercom
Conversation Part Attachments
lossySlack message attachments (images, PDFs, files) within Keeping threads migrate as Intercom Conversation Part attachments. We flag unsupported file types (.exe, .sys, .scr, .shb, .wsf and others restricted by Intercom) as unmapped and excluded. If Keeping used Slack message reactions as a proxy for satisfaction voting, we do not migrate reactions — satisfaction ratings require Intercom CSAT configuration post-migration. Image attachments within the thread migrate if under Intercom's supported size limits.
Keeping
Ticket Priority
Intercom
Custom Conversation Attribute
lossyIf Keeping used priority labels (urgent, high, normal, low) as part of ticket metadata or Slack thread subject prefixes, we create a custom conversation attribute in Intercom called keeping_original_priority__c and populate it from the ticket data. This preserves the original priority for reporting without forcing a priority system redesign during migration.
Keeping
Custom Ticket Fields
Intercom
Custom Contact or Conversation Attributes
lossyKeeping supports custom fields on tickets (e.g., product area, plan tier, bug severity). We audit all custom fields during scoping, create matching custom attributes in Intercom (as Contact attributes if the field is customer-scoped, or Conversation attributes if ticket-scoped), and populate them during migration. Field type mapping follows Intercom's supported attribute types: text, number, boolean, date, single-select, and multi-select.
Keeping
Company Data
Intercom
Account
1:1Keeping has no native Company object; company data, if present, lives in ticket metadata (e.g., the customer's company name in a Slack thread or a custom field). We extract unique company names from ticket records, create Intercom Accounts for each, and link the corresponding Contacts. Accounts without a company name in ticket metadata are created as placeholder records or left unlinked based on the customer's preference during scoping. Account creation must precede Contact creation to satisfy the Account-Contact lookup relationship.
| Keeping | Intercom | Compatibility | |
|---|---|---|---|
| Ticket | Conversation1:1 | Fully supported | |
| Customer | Contact1:1 | Fully supported | |
| Slack Channel | Inbox Teamlossy | Fully supported | |
| Ticket Assignee | Admin (Teammate)1:1 | Fully supported | |
| Ticket Status | Conversation State + Snoozed Until1:1 | Fully supported | |
| Customer Tags | Contact Tags1:1 | Fully supported | |
| Slack Message Attachments | Conversation Part Attachmentslossy | Fully supported | |
| Ticket Priority | Custom Conversation Attributelossy | Fully supported | |
| Custom Ticket Fields | Custom Contact or Conversation Attributeslossy | Fully supported | |
| Company Data | Account1:1 | 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.
Keeping gotchas
Data lives in Gmail, not Keeping — extraction needs Gmail API
Internal notes do not appear in Gmail
Enterprise tier has a 10-user minimum at $49/user/month
No public API surface beyond the Chrome extension
Intercom gotchas
S3 JSON export omits conversation transcripts
Workspace isolation prevents workflow migration
Fin AI resolution fees compound with automation success
Two-year conversation history limit on historical export
Private app rate limits share workspace quota
Pair-specific challenges
Migration approach
Slack workspace audit and channel inventory
We audit the source Slack workspace to identify every channel used for Keeping ticket queues. We capture channel names, member lists, creation dates, and message retention status. We run a sample extraction from three representative channels (one low-volume, one medium-volume, one high-volume) to validate extraction methodology, estimate record counts, and identify any data quality issues (deleted messages, truncated threads, missing requester emails). The audit output is a written scope document with record count estimates, channel-to-team mapping recommendations, and a data quality report flagging any Slack messages beyond retention.
Customer and ticket reconstruction from Slack threads
We parse the extracted Slack thread data to identify the first customer message in each thread (the ticket opener), capture all subsequent agent and customer messages, extract the assignee from the first agent response, and reconstruct timestamps from Slack message metadata. We deduplicate customers by email and group their tickets. Any tickets without an identifiable requester email (anonymous Slack users or threads started by a bot) are flagged as unmapped and escalated to the customer for resolution before migration. This step produces a structured dataset ready for Intercom API import.
Intercom schema design and team mapping
We design the destination Intercom workspace schema before any data moves. This includes creating Inbox Teams mapped from Keeping Slack Channels, provisioning Admins matched to Keeping agents by email, creating custom Contact attributes for any customer metadata extracted from tickets (plan tier, company name, original ticket priority), and creating custom Conversation attributes for ticket-level custom fields. We create a test workspace in Intercom (or use an existing sandbox if available on the customer's plan) to validate schema before production migration.
Data mapping and transformation
We define the field-level mapping between the reconstructed Keeping dataset and Intercom objects: Contacts from ticket requesters, Accounts from company names in ticket metadata, Conversations from ticket threads, Conversation Parts from individual messages, and Tags from any labels used in Keeping. We apply the Customer and Ticket status split (open/closed) to Intercom Conversation state. We validate the mapping with a 50-record sample migration into the Intercom test workspace and reconcile against the source data before proceeding to full migration.
Production migration with reconciliation
We run production migration in dependency order: Accounts first (if any), then Contacts, then Conversations with Conversation Parts attached. Team assignment migrates from the channel-to-team mapping defined during scoping. We run row-count reconciliation at each phase and a 25-record spot-check comparing migrated Intercom records against the source Slack thread data. Any records that fail validation (missing required fields, unmapped assignees, attachment failures) go to a fix queue. We disable Intercom workflows and automations before migration to prevent pre-populated rules from altering migrated conversation states.
Cutover, handoff, and automation inventory delivery
We freeze the Keeping workspace (no new ticket creation or Slack routing) during cutover. We run a final delta migration of any tickets created or modified during the migration window. We then enable Intercom as the system of record and deliver the Automation Inventory document to the customer's admin, listing every Keeping automation and Slack rule with a recommended Intercom Workflow equivalent. We support a 72-hour hypercare window to resolve reconciliation issues. We do not rebuild Keeping automations or Slack rules in Intercom as part of the migration scope.
Platform deep dives
Keeping
Source
Strengths
Weaknesses
Intercom
Destination
Strengths
Weaknesses
Complexity grading
Moderate Helpdesk migration. 5 of 7 objects need a mapping; the rest are 1:1.
Overall complexity
Moderate migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Keeping and Intercom.
Object compatibility
5 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
Keeping: Not publicly documented.
Data volume sensitivity
Keeping 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 Keeping to Intercom migration scoping. Not seeing yours? Book a call.
Walk through your Keeping to Intercom migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave Keeping
Other ways to arrive at Intercom
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.