TL;DR
Moving the ticket list is easy. Moving the conversations behind each ticket, with the right customer, status, and dates, is where a Freshdesk migration succeeds or fails. Freshdesk's standard ticket export leaves conversations out, so choosing the extraction route is the first decision.
Use the account export or the API to get replies and notes, then decide whether each becomes an email activity, a note, or one combined note for older tickets. Map statuses by meaning rather than label, keep the Freshdesk ID on every ticket, and switch support channels to HubSpot on the same day as the final delta migration.
At a glance
|
Area |
What to consider |
|
Export route |
Use the account export or the API for conversations, since the ticket export does not include them. |
|
Statuses |
Map Open, Pending, Resolved, and Closed by who owes the next action, and add a Resolved status if the team relies on it. |
|
Conversations |
Choose between email activities, notes, or one combined note per ticket, and agree how far back full detail goes. |
|
Agents and groups |
Create agents as HubSpot users and map groups to teams before importing tickets, so every ticket keeps an owner. |
|
Channels |
Connect support email, forms, and chat to the HubSpot help desk before cutover, so new requests do not land in both systems. |
|
SLAs |
Set up SLAs for new tickets, since Freshdesk timers do not carry over. |
A help desk is only as useful as its history. When an agent opens a ticket, they need to see what the customer asked last month, what was promised and who handled it. That is why a Freshdesk to HubSpot migration is harder than it looks. Moving the ticket list is easy. Moving the conversations behind each ticket, with the right customer, status and dates, takes a plan.
This guide covers why support teams move from Freshdesk to HubSpot, what Freshdesk data can be migrated, how to map tickets and contacts, how to keep ticket statuses and priorities consistent, how to migrate conversations and historical support data, and how to test the migrated records before agents rely on them.
Why Migrate from Freshdesk to HubSpot?
Most teams do not leave Freshdesk because it fails as a ticketing tool. They leave because support data sits in a separate system from sales and marketing. An agent in Freshdesk cannot easily see the customer's open deal, renewal date or recent marketing activity. A sales rep in the CRM cannot see that the account has three urgent tickets open.
HubSpot puts tickets on the same CRM as contacts, companies and deals. A ticket is associated with the customer record, so anyone with access sees the full relationship in one place. For many teams, that alone justifies the move.
Common reasons for a Freshdesk HubSpot migration include:
- One customer record: Support, sales and success teams work from the same contact and company records.
- Fewer integrations: Teams already using HubSpot for marketing or sales remove a sync that needed constant maintenance.
- Shared reporting: Ticket volume, resolution time and customer value can be reported together.
- Service features in one place: HubSpot's help desk, SLAs, knowledge base and feedback tools sit on the same platform.
Plan the channels as well as the data. Customers reach Freshdesk through support email addresses, portal forms, chat and sometimes phone. Each of those channels has to be connected to HubSpot's help desk before cutover, so new requests arrive in the right place on day one. The data migration and the channel switch should be scheduled together, otherwise tickets land in both systems during the overlap.
The move is also a chance to clean up. Old ticket types, unused custom fields and groups that no longer exist do not need to come across.
What Freshdesk Data Can Be Migrated?
Freshdesk offers more than one way to get data out, and each covers different things. Choosing the right one is the first decision in a Freshdesk ticket migration.
- Ticket export: Freshdesk's support documentation explains that admins and supervisors can export tickets from the ticket list as CSV or Excel, choosing the fields to include. The description can be added through the multiline text fields option. Freshdesk is clear that this export will not include the entire conversation from the ticket.
- Contact and company export: Freshdesk notes that you can export customer data as a CSV file at any time, including custom fields, from the Contacts and Companies pages.
- Account export: For full conversation history, Freshdesk points to the account export, run by the account administrator from Admin, Account, Account Details. Freshdesk says it covers tickets, solutions, forums and the customer list, and arrives in XML format, which usually needs a developer to convert.
- API: Freshdesk's API includes an endpoint to list all conversations of a ticket. Freshdesk notes that API calls are limited per account based on the plan, so large histories need to be extracted in batches.
|
Freshdesk data |
HubSpot destination |
Notes |
|---|---|---|
|
Contacts |
Contacts |
Email is HubSpot's main deduplication key |
|
Companies |
Companies |
Domain is HubSpot's deduplication key |
|
Tickets |
Tickets |
Map statuses to a ticket pipeline first |
|
Ticket fields (type, source, product) |
Ticket properties |
Create dropdown options before import |
|
Replies and notes |
Emails or notes on the ticket |
Needs the account export or API |
|
Agents |
HubSpot users |
Create users before importing owners |
|
Groups |
Teams, or a ticket property |
Decide how routing will work |
|
Solutions articles |
Knowledge base articles |
Usually a separate content move |
|
Attachments |
Files on the record or ticket |
Check size limits |
H2: How to Map Tickets and Contacts
Contacts and companies come first, because every ticket needs a customer to attach to. For the Freshdesk contacts migration, map each contact field to a HubSpot contact property and confirm that every contact has a unique email where possible. HubSpot uses email to deduplicate contacts, so contacts without one need another unique identifier, such as the Freshdesk contact ID stored in a unique-value property.
Companies follow the same pattern. Freshdesk maps requesters to a company, and HubSpot uses the company domain to deduplicate. Import companies, then contacts with their company association, so each customer lands on the right account.
Tickets come next. Freshdesk's default ticket fields include subject, type, source, status, priority, group, agent, product, description and company. Map them as follows:
|
Freshdesk field |
HubSpot ticket property |
Notes |
|---|---|---|
|
Subject |
Ticket name |
Required to create the ticket |
|
Description |
Ticket description |
Plain text or HTML, check formatting |
|
Status |
Ticket status (pipeline stage) |
See the next section |
|
Priority |
Priority |
Check that every Freshdesk value has an option |
|
Type |
Category or a custom dropdown |
Create options before import |
|
Source |
Source, or a custom property |
Keep the original channel for reporting |
|
Agent |
Ticket owner |
Agent must exist as a HubSpot user |
|
Group |
Team or a custom property |
Supports routing and reporting |
|
Requester |
Contact association |
Match on email or Freshdesk ID |
|
Company |
Company association |
Match on domain or Freshdesk ID |
|
Created and resolved dates |
Create date and custom date properties |
Keep the original timeline |
Store the Freshdesk ticket ID on every HubSpot ticket in a unique-value property. It is the key that links conversations to tickets later, and it lets you reimport failed rows without creating duplicates.
Agents and groups need a decision before any ticket is imported. Every Freshdesk agent who owns tickets should exist as a HubSpot user, or their tickets will import without an owner. Agents who have left the company can be mapped to a placeholder user or to their team lead, so historical tickets still have an owner for reporting. Freshdesk groups usually become HubSpot teams, which keeps routing and team reports working.
Custom fields need the same care. Freshdesk supports custom single-line text, multi-line text, checkbox, dropdown, dependent, date, number and decimal fields. Most map directly to HubSpot property types. Dependent fields, which nest up to three levels in Freshdesk, usually become separate dropdown properties in HubSpot, with conditional options if you want to keep the dependency.
H2: Preserving Ticket Statuses and Priorities
Statuses drive queues, SLAs and reports, so they must be mapped deliberately. Freshdesk's default statuses are Open, Pending, Resolved and Closed, and Freshdesk notes that these four cannot be deleted, though teams on higher plans often add custom statuses. HubSpot's default support pipeline has four statuses: New, Waiting on contact, Waiting on us and Closed.
The names do not line up, so map by meaning, not by label:
|
Freshdesk status |
Suggested HubSpot status |
Reasoning |
|---|---|---|
|
Open |
New or Waiting on us |
The team owes the next action |
|
Pending |
Waiting on contact |
The customer owes the next action |
|
Resolved |
Closed, or a custom Resolved status |
Decide if resolved tickets can reopen |
|
Closed |
Closed |
Final state |
|
Custom statuses |
Custom pipeline statuses |
Recreate only those still in use |
If the team relies on the difference between Resolved and Closed, add a Resolved status to the HubSpot pipeline. HubSpot lets you mark each ticket status as open or closed when you set up a pipeline, and its close date is set automatically when a ticket moves from an open status to a closed one. Import historical close dates into a custom property as well, so reports on resolution time reflect the original dates rather than the import date.
Priorities are simpler. Freshdesk's priority field has four values: Low, Medium, High and Urgent. Check the options on HubSpot's priority property before import and add any value that is missing, so no ticket lands blank.
Groups and SLA policies need a decision too. HubSpot offers SLAs in its help desk on Service Hub Professional and Enterprise, with goals for time to first reply, time to next reply and time to close. SLA timers do not carry over from Freshdesk, so set them up for new tickets and treat historical SLA results as report data.
Migrating Conversations and Historical Support Data
Conversations are the part of the support history that agents value most and the part that takes the most work. As covered above, Freshdesk's ticket export does not include them. You need the account export or the API to extract each ticket's replies and notes.
Once extracted, decide how they will appear in HubSpot. HubSpot's import tool can create emails and notes as activities, and HubSpot notes that emails, meetings and notes must be associated with an object. That gives three common patterns:
- Each reply as an email activity: Customer messages and agent replies become separate email activities on the ticket, with their original timestamps. This gives the most faithful timeline.
- Each note as a note activity: Freshdesk internal notes become HubSpot notes on the ticket, so they stay visible to the team.
- Full thread as one note: For very old tickets, the whole conversation can be combined into a single note. It takes less effort and keeps the history readable, at the cost of detail.
Many teams combine these: full detail for tickets from the last year or two, and a single combined note for older ones. Agree on the cut-off with the support lead before extraction starts.
To migrate support history accurately, keep three things on every activity:
- Original timestamp: So the timeline reads in the right order.
- Direction and author: Whether the message came from the customer or an agent, and which agent.
- Associations: The ticket, and the contact and company it belongs to.
Formatting needs a check too. Freshdesk replies often contain HTML, inline images, signatures and quoted text from earlier messages. Decide whether to keep the HTML or convert it to plain text, and test a handful of long threads so the result is readable in HubSpot. Quoted history in every reply can make threads several times longer than they need to be, so stripping it is often worth the effort.
Attachments add volume. Decide which attachments matter, such as contracts or screenshots on recent tickets, and check HubSpot's file limits before planning a bulk upload.
Testing the Migrated Records
Test on a sample before the full move, then test again after it. Choose a sample that stresses the mapping: tickets in every status and priority, tickets with long conversations and attachments, contacts without email and companies with many contacts.
|
Check |
How to run it |
Pass condition |
|---|---|---|
|
Record counts |
Compare Freshdesk exports to HubSpot counts for contacts, companies and tickets |
Counts match, minus agreed exclusions |
|
Duplicates |
Search on email, domain and Freshdesk IDs |
No unexpected duplicates |
|
Ticket associations |
Sample tickets for contact and company links |
Every ticket is on the right customer |
|
Statuses and priorities |
Count tickets per status and priority in both systems |
Distributions match the mapping |
|
Conversations |
Open sampled tickets and compare threads |
All replies and notes present, in order |
|
Dates |
Compare created and resolved dates |
Original dates preserved |
|
Owners and teams |
Count tickets per agent and group |
Counts match |
|
Help desk behavior |
Create test tickets and reply from HubSpot |
Routing and SLAs work for new tickets |
Ask two or three agents to review tickets they handled themselves. They will notice a missing reply or a wrong customer faster than any count. Fix problems in the mapping, not on individual records, then rerun the import for affected rows using the Freshdesk ID as the identifier.
Plan the cutover with open tickets in mind. A common approach is to migrate closed tickets first, while the team keeps working in Freshdesk. Then, on cutover day, switch the support channels to HubSpot, run a final delta migration of tickets that were open or updated since the first run, and freeze Freshdesk as read-only. Agents pick up the open tickets in HubSpot with their full history, and customers see no gap in service.
If you would rather hand this work to a team that has done it before, our Freshdesk to HubSpot migration services cover extraction, mapping, conversation import and testing.
Conclusion
A clean Freshdesk move depends on a few decisions: which export method gives you the conversations you need, how Freshdesk statuses and priorities map to a HubSpot ticket pipeline, how replies and notes will appear on HubSpot tickets, and how far back full history should go. Get contacts and companies right first, keep the Freshdesk ID on every record, and test with the agents who know the tickets best.
Start with a sample of your busiest tickets and prove the mapping before the full import. If you are planning a wider HubSpot Service Hub migration, OneMetric can help you plan the help desk setup alongside the data move. To talk through your own Freshdesk data, get in touch with OneMetric.
Need confidence in your numbers after a CRM move?
About the author
Himanshi Gaur Himanshi is a CS - Engineer, working across business operations, Revenue Operations, CRM strategy, and growth systems. She writes about HubSpot, Salesforce, CRM migrations, marketing operations, and the processes that help businesses streamline workflows and scale efficiently. Read more articles by Himanshi Gaur.
