HubSpot Service Hub Migration Checklist
A technical guide on migrating conversation history from Front to HubSpot Service Hub, covering API extraction, data mapping, attachment handling, and thread reconstruction.
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
Migrating from Front to HubSpot Service Hub is a strategic move toward unifying your CRM and support operations. If you are tasked with a front to hubspot service hub migrate conversation history project, you already know that moving data between two fundamentally different platforms is complex. As someone who has engineered these data pipelines, I can tell you that success relies on a strict, API-driven approach.
This technical guide explains exactly how to extract full conversation threads from Front via its API, transform them into HubSpot tickets and associated engagements, and preserve your metadata, attachments, and timestamps.
TL;DR: When to choose API migration vs CSV
If you only need to move basic contact data or flat ticket headers, a CSV import works. However, to execute a true front to hubspot service hub migrate conversation history import conversations process, you must use the APIs.
CSV imports cannot reconstruct threaded conversations, preserve internal comments, backdate historical timestamps on individual messages, or migrate attachments. For a complete front app export conversation history hubspot service hub migration conversations workflow, the API is mandatory.
Front data model overview: conversations, messages, attachments, metadata
Before writing any code, you need to understand how Front structures its data:
- Conversations: The parent object. It holds metadata like tags, assignees, and the current status (Open, Archived, Spam).
- Messages: The actual inbound and outbound communications (emails, SMS, chat) nested inside a conversation.
- Comments: Internal notes left by agents, also nested within the conversation.
- Attachments: Files tied to specific messages or comments.
HubSpot data model recap: tickets, engagements, associations
HubSpot handles support data differently. There is no single "Conversation" object that holds everything in the CRM view. Instead, you have:
- Tickets: The parent object representing the issue. It holds custom properties, statuses (Pipelines/Stages), and owner IDs.
- Engagements: The timeline activities. These are broken down into specific types:
Emails,Notes(for internal comments),Calls, andMeetings. - Associations: The critical link. A Ticket must be associated with a Contact, a Company, and multiple Engagements to reconstruct the thread.
Field-by-field mapping: Front → HubSpot (examples)
Mapping your legacy data requires translating Front's schema into HubSpot's CRM objects.
- Front Conversation ID → Store this in a custom HubSpot Ticket property (e.g.,
legacy_front_id). This is vital for delta syncs and deduplication. - Front Subject → HubSpot Ticket
subject. - Front Status (Archived) → HubSpot Ticket Stage (e.g.,
Closed). - Front Assignee → HubSpot
hubspot_owner_id(requires mapping Front user emails to HubSpot Owner IDs). - Front Tags → HubSpot Custom Ticket Property (Multi-select dropdown).
- Front Message (Inbound/Outbound) → HubSpot Email Engagement (mapped to the Ticket and Contact).
- Front Comment → HubSpot Note Engagement.
Attachment handling and re-upload strategy
Attachments do not migrate automatically. Front provides a download URL for attachments in its API payload. Your migration script must:
- Download the file from the Front API into memory or temporary storage.
- Upload the file to HubSpot using the HubSpot Files API.
- Capture the new HubSpot
fileIdreturned in the response. - Inject that
fileIdinto the HubSpot Engagement payload when creating the associated Email or Note.
Ordering and timestamp preservation (thread reconstruction)
If you simply push messages into HubSpot, they will all appear with today's date, ruining the timeline.
To preserve the historical order of the thread, you must extract the created_at timestamp from each Front message and comment, convert it to a Unix timestamp (in milliseconds), and map it to the hs_timestamp field in the HubSpot Engagement API payload. This forces HubSpot to backdate the activity and render the conversation chronologically.
Rate limits and batching strategies
Both APIs will throttle you if you aren't careful.
- Front API: Typically limits you to 50–120 requests per minute depending on your plan. You must implement exponential backoff and respect the
429 Too Many Requestsheaders. - HubSpot API: Allows 100–150 requests per 10 seconds.
To optimize throughput, use HubSpot's batch endpoints (e.g., /crm/v3/objects/tickets/batch/create). Group your tickets and associations into batches of 100 to drastically reduce the number of API calls.
Zero-downtime cutover plan and delta sync
Never attempt to migrate years of history over a single weekend. Use a phased approach:
- Historical Sync: Migrate all closed conversations and historical data while your team is still working in Front.
- Delta Sync: Write your script to query Front for conversations where
updated_atis greater than your last sync timestamp. - Cutover: On Friday night, change your DNS/MX records to route new mail to HubSpot. Run the Delta Sync one final time to catch any replies that came in during the week. On Monday, your team logs into HubSpot with zero data loss.
Verification steps and post-migration QA
After the data lands in HubSpot, validate the integrity of the migration:
- Thread Integrity: Spot-check complex, multi-reply threads to ensure inbound and outbound messages are ordered correctly.
- Orphaned Records: Query HubSpot for tickets with no associated contacts or engagements.
- Attachment Links: Click through migrated attachments to ensure the files open correctly and aren't corrupted.
- Owner Mapping: Verify that legacy tickets are assigned to the correct historical agents, not just a default admin account.
Sample timeline and sizing estimates
A standard Front to HubSpot migration takes roughly 3 to 5 weeks:
- Week 1: Scope definition, user mapping, and API script configuration.
- Week 2: Sandbox testing and data validation on a small subset of records.
- Week 3: Historical data extraction and insertion (duration depends on volume; 100k tickets usually takes a few days due to rate limits).
- Week 4: UAT (User Acceptance Testing) and final adjustments.
- Week 5: Final delta sync and production cutover.