Helpdesk migration
Field-level mapping, validation, and rollback between Crisp and HubSpot Service Hub. We move data and schema; workflows are rebuilt natively in HubSpot Service Hub.
Crisp
Source
HubSpot Service Hub
Destination
Compatibility
7 of 12
objects map 1:1 between Crisp and HubSpot Service Hub.
Complexity
BStandard
Timeline
2-3 weeks
Overview
The structural difference between Crisp and HubSpot Service Hub shapes every migration decision. Crisp treats Conversations as the primary record with Messages nested inside; HubSpot reverses this with Tickets as the primary record and Messages attached as a conversation feed. We map each Crisp Conversation to a HubSpot Ticket, preserving the channel metadata (chat, email, WhatsApp), the created timestamp, and the assigned operator. Crisp Operators map to HubSpot Users with their display name and email carried over and role-based permissions documented for manual reassignment in HubSpot. We do not migrate Crisp chatbot rules, automation rules, e-commerce integrations, or the chat widget configuration — these have no structural equivalent in HubSpot and are delivered as written configuration notes for your admin. Attachment URLs are re-uploaded to HubSpot Files and linked to the parent Ticket. Teams on Free or Mini Crisp tiers should confirm API key availability before scoping begins because the CRM module is gated behind Essentials and above.
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.
Source platform
Crisp platform overview
Scorecard, SWOT, gotchas, and pricing for Crisp.
Destination platform
HubSpot Service Hub platform overview
Scorecard, SWOT, gotchas, and pricing for HubSpot Service Hub.
Data migration guide
The complete HubSpot Service Hub migration guide
Data model, import mechanisms, field mapping strategy, pitfalls, and cutover — by the engineers running it.
Destination checklist
HubSpot Service Hub migration checklist
Pre- and post-cutover tasks for moving onto HubSpot Service Hub.
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
Each row shows how a Crisp object lands in HubSpot Service Hub, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
Crisp
Conversation
HubSpot Service Hub
Ticket
1:1Each Crisp Conversation maps to one HubSpot Ticket. The Crisp conversation_id becomes the HubSpot hs_ticket_id for deduplication. We map Crisp's conversation state (active, pending, resolved) to HubSpot Ticket status values (OPEN, PENDING, CLOSED), and the Crisp website_id becomes a HubSpot custom property for multi-site attribution. The channel metadata (chat, email, WhatsApp, SMS) from Crisp's channel property migrates to a HubSpot custom property capturing the original channel, since HubSpot's native ticket channel field is populated by the Conversations Inbox rather than at import time. Operator assignments resolve through the User mapping.
Crisp
Contact
HubSpot Service Hub
Contact
1:1Crisp Contacts map directly to HubSpot Contacts with all standard fields (email, name, phone, city) and custom properties carried over as HubSpot custom contact properties. Crisp's dynamic Segments defined on Contacts are preserved as structured rule metadata and surfaced in a written inventory for the admin to rebuild as HubSpot static or dynamic lists. If the source account is on Free or Mini tier with no UI-based CRM access, we extract Contacts via the Crisp REST API /contacts endpoint which is accessible with an API key regardless of plan. Contacts exceeding 200,000 records require multiple sequential API passes.
Crisp
Message
HubSpot Service Hub
Ticket Conversation Reply
1:1Crisp Messages are nested inside Conversations and map to HubSpot Ticket conversation replies. We preserve the message body, author type (operator vs. visitor), timestamp, and any inline images. Author attribution resolves through the User mapping for operator messages and the Contact mapping for visitor messages. Internal notes from Crisp (operator-only visibility) map to HubSpot internal ticket comments. The message ordering is preserved by timestamp so the conversation reads chronologically in HubSpot. Attachment URLs on messages are re-uploaded to HubSpot Files and linked to the ticket.
Crisp
Website
HubSpot Service Hub
Company
1:1Crisp Websites (configured chat widgets tied to domains) map to HubSpot Companies, with the domain name from website.domain populating the Company Website field. This provides the dedupe key during import. Websites with multiple configured channels carry that channel configuration into a HubSpot custom property as metadata for the admin to use when configuring HubSpot's Conversations Inbox routing rules. Widget settings (theme, greeting message, operating hours, routing behavior) are exported as a configuration snapshot and flagged for manual reassignment in HubSpot.
Crisp
Operator
HubSpot Service Hub
User
1:1Crisp Operators map to HubSpot Users by email match. We preserve display name and email. Role-based permissions (admin vs. operator vs. member) are documented in the migration inventory with their Crisp equivalents mapped to HubSpot's built-in roles (Super Admin, Sales Manager, Sales, Service, and Viewer). Any Crisp operator with no matching HubSpot User is held in a reconciliation queue for the admin to provision before record import resumes. Seat limits are checked against the destination HubSpot plan's user count allowance.
Crisp
Tag
HubSpot Service Hub
Ticket Custom Property (multi-select picklist)
lossyCrisp Tags applied to Conversations have no native equivalent in HubSpot Service Hub's standard schema. We map all distinct Tags to a HubSpot custom ticket property defined as a multi-select picklist. During migration, each Ticket receives the Tags from its source Conversation as selected values in this property. If the distinct tag count exceeds HubSpot's picklist limit, we store tags as a comma-separated text property. The customer chooses the property type during scoping.
Crisp
Segment
HubSpot Service Hub
Contact List (static or dynamic)
lossyCrisp Segments are dynamic Contact filter rules defined in the CRM module (Essentials+). These cannot migrate as live active segments because Crisp's rule-based segment engine has no direct HubSpot equivalent. We export the segment rule definitions as structured JSON metadata and deliver them in a written inventory. The admin rebuilds each segment in HubSpot using HubSpot's Lists (static or dynamic) or Smart Lists depending on HubSpot plan. The inventory includes the rule logic, associated contact count, and recommended HubSpot list type.
Crisp
Canned Response
HubSpot Service Hub
Saved Reply
1:1Crisp Canned Responses are pre-written message templates used by operators. We export them as a structured list of text templates with Crisp's %placeholder% variable syntax preserved in plain text. These map to HubSpot Saved Replies in the Conversations Inbox. The variable syntax requires manual adaptation because Crisp uses %session.nickname% style placeholders while HubSpot Saved Replies support a simpler variable model. The migration inventory flags each Canned Response with its variables so the admin can adapt them to HubSpot's format during configuration.
Crisp
Chat Widget Settings
HubSpot Service Hub
Conversations Settings Configuration
lossyCrisp's chat widget has theme colors, greeting messages, operating hours, proactive chat triggers, and routing rules configured per Website. These settings are tied to Crisp's proprietary widget and cannot transfer to HubSpot's chat widget as a configuration export. We extract the behavior and appearance settings as a structured JSON snapshot and deliver them as a written configuration note. The admin recreates the widget experience in HubSpot's Conversations Settings using HubSpot's chat widget builder, with the snapshot as a reference for colors, greeting text, and routing logic.
Crisp
Attachment
HubSpot Service Hub
File
1:1File attachments uploaded to Crisp Messages are stored as URLs referencing Crisp's file storage. We preserve the attachment URL, download the file, and re-upload it to HubSpot Files (Files Home or the CRM Files tool). Each file is linked to the parent HubSpot Ticket via a ContentDocumentLink record. Inline images in message bodies are re-uploaded and the URLs are updated in the message body so images render correctly in HubSpot. This two-step process (download from Crisp, upload to HubSpot) is required because Crisp and HubSpot maintain separate file storage systems.
Crisp
Conversation State
HubSpot Service Hub
Ticket Status
lossyCrisp's conversation states (active, pending, resolved, archived) map to HubSpot Ticket status values (OPEN, PENDING, CLOSED, or custom statuses configured in the destination pipeline). We use a HubSpot ticket_pipeline with a configured Ticket Status field that the admin defines before migration, mapping each Crisp state to the chosen HubSpot equivalent. This mapping is set during the schema configuration phase so all Tickets are created with the correct status at migration time.
Crisp
Operator Role
HubSpot Service Hub
User Role
lossyCrisp role levels (admin, operator, member) are exported as structured permission metadata and mapped to HubSpot's built-in role hierarchy. Crisp admin permissions map to HubSpot Super Admin; Crisp operators map to HubSpot Sales or Service roles depending on the destination team's function. The role mapping is delivered as a configuration inventory rather than a direct migration, since HubSpot's permission model (object-level, property-level, and action-level access) is more granular than Crisp's three-tier model and requires the admin to assign final permissions in HubSpot Settings.
| Crisp | HubSpot Service Hub | Compatibility | |
|---|---|---|---|
| Conversation | Ticket1:1 | Fully supported | |
| Contact | Contact1:1 | Fully supported | |
| Message | Ticket Conversation Reply1:1 | Fully supported | |
| Website | Company1:1 | Fully supported | |
| Operator | User1:1 | Fully supported | |
| Tag | Ticket Custom Property (multi-select picklist)lossy | Fully supported | |
| Segment | Contact List (static or dynamic)lossy | Fully supported | |
| Canned Response | Saved Reply1:1 | Fully supported | |
| Chat Widget Settings | Conversations Settings Configurationlossy | Mapping required | |
| Attachment | File1:1 | Fully supported | |
| Conversation State | Ticket Statuslossy | Fully supported | |
| Operator Role | User Rolelossy | 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.
Crisp gotchas
Contact export is gated behind the Essentials tier
Contact export ceiling of 200K records
Multi-level rate limits on the REST API
Seat limits constrain operator record exports
Canned Responses have Crisp-specific variable syntax
HubSpot Service Hub gotchas
Rate limits throttle large migration API calls
Side conversations and Zendesk macros have no HubSpot equivalent
HubSpot stores ticket history as fragmented engagement objects
Custom Objects require Enterprise tier in HubSpot
Ticket pipeline stage probability values do not export cleanly
Pair-specific challenges
Migration approach
Discovery and destination tier selection
We audit the source Crisp workspace across plan tier (Free/Mini/Essentials/Plus), API key availability, total conversation and message volume, CRM module usage (Contact properties, Segments), active operator count, tag taxonomy, and attachment storage volume. We confirm the destination HubSpot Service Hub tier: Starter ($15/seat) for shared inbox and live chat only, Professional ($90/seat) for ticketing, the customer portal, and advanced routing, or Enterprise ($150/seat) for custom objects and full workflow capabilities. The discovery output is a written migration scope document that identifies all objects, flags any tier-gated source features, and recommends the HubSpot plan required to receive them.
Schema configuration in HubSpot
Before any data moves, we configure the HubSpot destination schema. We create custom Contact properties matching Crisp's custom Contact properties (by name, type, and format), define a Ticket pipeline and status field that maps to Crisp's conversation states (active, pending, resolved), create a custom multi-select picklist property for Crisp Tags, provision HubSpot Teams mapped to Crisp operator groups, and configure the Conversations Inbox if multi-channel routing (WhatsApp, SMS) is in scope. All custom properties are created before the first record is imported so field mapping resolves at insert time.
Data extraction from Crisp API
We extract data directly from the Crisp REST API regardless of the source plan tier, because the UI-based export is gated behind Essentials. Contacts are extracted in chunked batches of up to 200,000 records per pass using paginated requests, with date-range or ID filters on subsequent passes to avoid ceiling hits. Conversations and Messages are pulled using cursor-based pagination, with exponential backoff on 429 responses and Retry-After headers respected at each step. We throttle reads below the global API limit to avoid disrupting the customer's live Crisp operations during the migration window. All extractions produce a row-count manifest for reconciliation.
Sandbox test migration
We run a full migration into a HubSpot Sandbox environment (available on Professional and Enterprise tiers) using production-like data volume. The customer reconciles record counts in HubSpot against the Crisp source manifest across Contacts, Companies, Tickets, Messages, and Attachments. We spot-check 25-50 randomly selected Tickets in HubSpot against their Crisp source records to verify thread integrity, operator attribution, and timestamp ordering. Any field mapping corrections, property type mismatches, or missing custom properties are identified and resolved before the sandbox sign-off, which gates the production migration.
Production migration in dependency order
We execute the production migration in record-dependency order: Users first (provisioned by the admin, validated by email match), then Companies (from Crisp Websites), then Contacts (with CompanyId resolved), then Tickets (with ContactId, OwnerId, and pipeline resolved), then Messages (nested in tickets by conversation_id), then Attachments (re-uploaded to HubSpot Files and linked to tickets). Tags are written to the custom multi-select property on each Ticket. Saved Replies are delivered as a structured list in the migration inventory rather than a bulk import. Each phase emits a row-count reconciliation report. We run at 70 percent of HubSpot's API rate limit to preserve headroom for the customer's live operations.
Cutover, delta pass, and automation rebuild handoff
We freeze writes in Crisp during cutover. Any new records created in Crisp during the migration window are captured in a delta pass and imported into HubSpot before cutover completes. We then enable HubSpot Service Hub as the system of record. We deliver the full migration inventory, including the Chatbot Rules and Automation inventory, the Saved Replies list with variable syntax flagged for adaptation, the Segment rule definitions for manual rebuild as HubSpot Lists, and the Widget Configuration snapshot for the admin to reference when setting up HubSpot's chat widget. We provide a one-week hypercare window for reconciliation issues raised by the support team. We do not rebuild Crisp automations as HubSpot Workflows inside the migration scope.
Platform deep dives
Crisp
Source
Strengths
Weaknesses
HubSpot Service Hub
Destination
Strengths
Weaknesses
Complexity grading
Standard Helpdesk migration. 2 of 7 objects need a mapping; the rest are 1:1.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Crisp and HubSpot Service Hub.
Object compatibility
2 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
Crisp: Multi-tier: load balancer (permissive), API global (per IP+user), API route (per IP+user, more restrictive), plugin quota (daily for permanent tokens). No exact published numbers — 429 responses with Retry-After header indicate exhaustion..
Data volume sensitivity
Crisp 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 Crisp to HubSpot Service Hub migration scoping. Not seeing yours? Book a call.
Walk through your Crisp to HubSpot Service Hub migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave Crisp
Other ways to arrive at HubSpot Service Hub
Same-Helpdesk migrations
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.