← All playbooks
Customer support migration

Help Scout → Freshdesk

Load Help Scout customers with Freshdesk's contact CSV, then create tickets through the API. Help Scout will not export thread text from the report screens, and Freshdesk's ticket create rate depends on the plan.

Typical timeline2 to 4 weeks20 to 40 hours active work
Statusneeds review
Source profileHelp Scout export options and List Conversations reviewed 2026-11-04
Destination profileFreshdesk contact import and ticket API reviewed 2026-11-04
Documentation date
Review window
Evidence4 sources
This route needs review.Use it as a planning baseline, then verify the dated sources and test with representative data before production.
Before you migrate

Should you make this move?

Both platforms have a case. Compare what you gain with what you give up before scheduling the cutover.

Current platform

Help Scout

Reasons to stay
  • Shared inboxes, Docs, and Beacon keep email support and self-service in one desk
  • Tickets, customer context, knowledge, automation, and service reporting share one operating system
Reasons to leave
  • Import2 skips users, workflows, and the knowledge base, and a full archive leaves through the API
  • Conversation visibility, routing logic, SLAs, and reporting history are hard to reproduce exactly
New platform

Freshdesk

What gets better
  • Accessible omnichannel ticketing and automation provide strong value for growing support teams
  • Tickets, customer context, knowledge, automation, and service reporting share one operating system
What gets worse
  • Advanced reporting, customization, and ecosystem depth can lag enterprise-focused competitors
  • Conversation visibility, routing logic, SLAs, and reporting history are hard to reproduce exactly
Best of the move

Freshdesk: Accessible omnichannel ticketing and automation provide strong value for growing support teams. This removes a major source-side concern: Import2 skips users, workflows, and the knowledge base, and a full archive leaves through the API.

Worst of the move

What you lose: Shared inboxes, Docs, and Beacon keep email support and self-service in one desk. What you inherit: Advanced reporting, customization, and ecosystem depth can lag enterprise-focused competitors.

Jump to a section
01At a glance

Know the shape of the move.

Transfer outcome10 features audited
Transfer outcome distributionClean transfer: 0, Partial transfer: 4, Manual rebuild: 5, Not transferred: 1.
Clean0
Partial4
Manual5
Lost1
Mapping route8 of 9 fields have a destination path

This timeline assumes

  • You can export Help Scout conversations with the Inbox API. Report CSVs exclude thread contents. A customer name-and-email CSV, if Help Scout sends one to an Account Owner, has no history.
  • Freshdesk already has at least 10 tickets, because Freshdesk says contact import needs that. Custom contact fields exist before the CSV. Email is the unique id, and a matching email overwrites the contact.
  • Tickets are created with the API, not a ticket CSV. Trial accounts are limited to 50 calls a minute. Growth, Pro, and Enterprise have lower per-endpoint caps on ticket create than the account total.
  • The site already documents Zendesk → Freshdesk, Freshdesk → Zendesk, and Help Scout → Zendesk. This guide is the Help Scout archive into Freshdesk.
02What transfers

What survives the move.

“Partial” and “manual” are not footnotes. They are work that must be scheduled and verified.

ItemOutcomeImpactWhat happensMitigation
Thread textmanualcriticalHelp Scout's in-app report export covers All Channels, Email, Company, and Happiness, and it excludes conversation thread contents. The Inbox API is how you get conversations. List Conversations defaults to active. Pass status=all. embed=threads truncates chat, so use List Threads for a full Beacon thread.Page status=all to disk before you create Freshdesk tickets.
Contact CSV rulespartialhighFreshdesk wants a header row and Name plus Email, or Name plus Phone. Email overwrites an existing contact. You can add up to 9 secondary emails besides the primary. Phone numbers need a country code, such as +14088481234. A company name that does not exist is created. The first company in the column becomes primary. Dropdown values must already exist. A checkbox must be yes or no, and any other value is stored as no. Tags are comma-separated. Dates must be YYYY-MM-DD. The file must be UTF-8.Build the file from Help Scout customers. Fix phones and dates before upload. Read the failure CSV Freshdesk emails back.
Ten-ticket minimummanualmediumFreshdesk says you need at least 10 tickets in the account before a contact import succeeds.Create those tickets, or wait until the first API batch has created them, then import contacts if you still need the CSV.
Ticket create identitymanualcriticalCreate Ticket needs one of requester_id, email, facebook_id, phone, twitter_id, or unique_external_id. An unknown email becomes a new contact. Phone without email also needs name. Default status is 2, which is Open. Default priority is 1, Low. Default source is 2, Portal, so set source 1 if the conversation was email.Send email and name from the Help Scout customer. Set status and source on purpose.
Status numberspartialhighFreshdesk's ticket properties are Open 2, Pending 3, Resolved 4, and Closed 5. Help Scout's switching table pairs Active with Freshdesk Open, Pending with Pending, and Closed with Resolved or Closed. Pick Resolved or Closed for Help Scout's Closed and use it on every row.Write the map down. Do not leave status at the default Open for closed history.
Rate limitspartialhighThe limit is per account, not per agent or IP. Trials are 50 calls a minute. On current plans, Growth is 100 a minute with ticket create at 50, Pro is 400 with ticket create at 160, and Enterprise is 700 with ticket create at 280. A 429 includes Retry-After, in seconds. Invalid requests count.Sleep for Retry-After. Size the job from the ticket-create cap, not the account total.
AttachmentspartialmediumFreshdesk says attachment bytes on create cannot exceed 20 MB in total. The request is multipart/form-data, and the filename you send is the filename stored. Local files are the documented upload.Skip or split a conversation whose files exceed 20 MB. Keep the Help Scout copy.
Custom fields and companiesmanualmediumContact custom fields must exist before the CSV, under Admin, Support Operations, Customer Fields. Ticket custom fields are a dictionary on create. company_id on a ticket works only when Multiple Companies is enabled, which Freshdesk's ticket page still describes as Estate and above.Create fields first. Leave company_id off unless that feature is on.
Workflows and DocsmanualhighHelp Scout does not export workflows or saved replies as a file you can import. Docs use the Docs API. Freshdesk's customer article is contacts and companies, not automations.Recreate the rules you still need after the tickets exist.
Tag-filtered contact exportlostlowFreshdesk says you can filter contacts by tag in the UI, and the export still returns the whole contact list.Filter your own CSV. Do not expect the export to honor the tag.
03Field and feature mapping

Where each thing goes.

SourceDestinationMethodNotes
Customer name and emailContact Name and EmailtransformUTF-8 CSV. Email overwrites a match.
Secondary emailsUp to 9 extra emailstransformUse Freshdesk's multi-email column format.
PhonePhone with country codetransformExample shape +14088481234.
Activestatus 2 OpentransformHelp Scout's table pairs Active with Open.
Pendingstatus 3 PendingtransformSame word on both sides.
Closedstatus 4 or 5manualResolved or Closed. Pick one.
Email conversationsource 1manualThe API default is 2, Portal.
Thread bodydescriptiontransformHTML. Pull chat from List Threads.
Report CSVNo destinationunsupportedNo thread text.
04Before you begin

Make the move recoverable.

Backup procedure

Create the source-of-truth backup

Keep a Help Scout API archive and a contact CSV that Freshdesk has not overwritten yet.

  1. List conversations with status=all and save every page.
  2. Save List Threads for chat.
  3. Build the contact CSV and keep a copy of current Freshdesk contacts before import.
  4. Leave Help Scout forwarding in place until a Freshdesk sample ticket matches.

Proof to capture: The JSON archive, the contact CSV, and a pre-import Freshdesk export are stored.

Transformation · Freshdesk Contacts import

Contacts, after 10 tickets exist

Load customers without breaking Freshdesk's import rule.

  1. Confirm the account has at least 10 tickets.
  2. Create custom fields first.
  3. Upload the UTF-8 CSV from Contacts, Import.
  4. Read the status email and fix every failed row.

Proof to capture: Save the input, output, command or tool settings, warnings, and final item counts.

Transformation · Freshdesk Create Ticket

Tickets under the create cap

Create history without ignoring Retry-After.

  1. Map status and set source.
  2. Send one requester identifier, usually email.
  3. Stay under the plan's ticket-create cap. On 429, wait Retry-After seconds.
  4. Attach files only when the set is within 20 MB, as multipart.

Proof to capture: Save the input, output, command or tool settings, warnings, and final item counts.

05Handle with care

The things most likely to hurt.

These are operating limits. Treat every “Stop if” condition as a blocked migration, not a suggestion.

Pilot

Email overwrite

criticalpossible likelihood

The CSV contains an email that already exists in Freshdesk.

Consequence
Freshdesk overwrites that contact, including with a checkbox value it treats as no.
Mitigation
Diff against a Freshdesk export first. Fix yes/no and dates.

Stop if: You have not exported current contacts.

Cutover

Closed history stays Open

highlikely likelihood

The create call omits status.

Consequence
Freshdesk defaults to Open, so old conversations look like a live queue.
Mitigation
Set 4 or 5 for Help Scout's Closed.

Stop if: The status map is not in the client.

Pilot

The create cap is ignored

highpossible likelihood

The script uses the account limit, or a trial's 50, as if every call can create a ticket.

Consequence
429s, and failed calls still count.
Mitigation
Throttle to the ticket-create number for the plan and honor Retry-After.

Stop if: You do not know the plan's ticket-create cap.

06Precise timeline

Do the work in this order.

Estimate forOne Help Scout account moving customers and conversations into an existing Freshdesk account through CSV and the ticket API
Total elapsed2 to 4 weeks
Active work20 to 40 hours
BufferRate limits set the elapsed time. A trial at 50 calls a minute, with ticket create inside that, is the slow case.
01
Days 1 to 3Plan caps and status map2 to 3 days
02
Days 3 to 8API archive3 to 5 days
03
Days 8 to 12A small create and a contact file2 to 4 days
04
Days 12 to 18The rest of the tickets, then mail3 to 6 days
05
Days 18 to 25A week of the queue5 to 7 days
  1. Days 1 to 3 · inventory

    Plan caps and status map

    4 to 8 hours active2 to 3 days elapsedAPI keys waiting
    • Read the Freshdesk plan cap.
    • Write Active, Pending, and Closed to 2, 3, and 4 or 5.
    • Count conversations.

    Depends on: Help Scout API and Freshdesk admin

    Stop / go checkpoint

    Start the archive?

    Go when: The cap and the status map are written down.

    Stop when: The account has no ticket-create budget you can name.

  2. Days 3 to 8 · backup

    API archive

    6 to 12 hours active3 to 5 days elapsedPaging waiting
    • Save status=all.
    • Save chat threads.
    • Export current Freshdesk contacts.

    Depends on: Keys

    Stop / go checkpoint

    Is history on disk?

    Go when: A known closed conversation is in the JSON.

    Stop when: The list call used the default status.

  3. Days 8 to 12 · pilot

    A small create and a contact file

    4 to 8 hours active2 to 4 days elapsedFreshdesk's import email waiting
    • Create enough tickets to pass the 10-ticket rule if needed.
    • Import a small contact file.
    • Create a few historical tickets with explicit status.

    Depends on: Archive and contact diff

    Stop / go checkpoint

    Run the rest?

    Go when: Closed samples are not Open, and the failure CSV is empty or fixed.

    Stop when: An existing contact was overwritten by mistake.

  4. Days 12 to 18 · cutover

    The rest of the tickets, then mail

    4 to 10 hours active3 to 6 days elapsedRate limit waiting
    • Create the remaining tickets under the cap.
    • Switch forwarding.
    • Stop Help Scout replies.

    Depends on: Passed pilot

    Stop / go checkpoint

    Freshdesk owns new mail?

    Go when: A test message arrives and the historical sample still has the right status.

    Stop when: 429s are being ignored.

  5. Days 18 to 25 · observe

    A week of the queue

    3 to 5 hours active5 to 7 days elapsedLive mail waiting
    • Watch the open queue for old tickets.
    • Keep the JSON.
    • Rebuild the workflows you still need.

    Depends on: Cutover

    Stop / go checkpoint

    Close Help Scout sending?

    Go when: New mail is in Freshdesk and closed history is not in the open queue.

    Stop when: A closed conversation was created as Open.

07The point of change

Cut over with a way back.

Go live

Cutover

Finish historical creates at the right status, then send new mail to Freshdesk.

Recommended window: After the contact email looks clean, at a pace the plan can accept.

  1. Confirm the contact failure CSV is handled.
  2. Confirm closed samples use status 4 or 5, not the default 2.
  3. Finish creates under the ticket-create cap.
  4. Switch forwarding and stop Help Scout replies.
  5. Send a test message to the public address.

Proof to capture: The test message is a Freshdesk ticket, and a known closed Help Scout conversation is not Open.

Return to safety

Rollback

Point mail back at Help Scout if Freshdesk contacts or statuses are wrong.

Deadline: Before you delete Help Scout conversations or drop the pre-import Freshdesk export.

  1. Point forwarding back at Help Scout.
  2. Stop the create script.
  3. List Freshdesk tickets created since the switch.
  4. Review those before you copy them into Help Scout.
  5. Use the pre-import contact export if a CSV overwrite has to be repaired.

Proof to capture: New mail is in Help Scout, and the contact diff is saved.

Rollback immediately when
  • A known contact was overwritten
  • Closed history is Open
  • The failure CSV is unexplained
  • Creates continued through 429 responses
  • An attachment set over 20 MB was skipped with no note
08Verification report

Prove the migration worked.

Every blocking check must pass. Capture the evidence before cleanup begins.

0%
Interactive report preview0 / 8 checks passed
PassIDCheckMethodExpected resultEvidence
V-01Blockingstatus=allRead the Help Scout request and find a known closed conversation.It is in the saved pages, with chat loaded from List Threads when needed.JSON archive.
V-02BlockingDiffCompare the CSV with a Freshdesk export taken first.Overlapping emails are intentional overwrites.Diff.
V-03BlockingDates, phones, checkboxesScan the CSV.Dates are YYYY-MM-DD, phones have a country code, checkboxes are yes or no, and the file is UTF-8.CSV.
V-04Blocking10 ticketsConfirm the account already has 10 tickets before the contact import.Freshdesk's precondition is met.Ticket count.
V-05BlockingStatus emailOpen the failure CSV Freshdesk attaches.Every failed row is fixed or explicitly dropped.Email.
V-06BlockingNot the defaultOpen a closed sample ticket.Status is 4 or 5, matching the map. Source is 1 for email.Ticket.
V-07BlockingRetry-AfterRead the client against the plan's ticket-create cap.It waits on 429 and stays under the create cap.Client log.
V-08BlockingForwardingSend to the public address.The message arrives in Freshdesk.Test email.
09Post-migration cleanup

Remove the scaffolding safely.

Safe after: Historical closed tickets are not Open, contact failures are resolved, and new mail arrives in Freshdesk.

  1. Keep the JSON archive and the pre-import contact export.
  2. Leave Help Scout readable until rollback closes.
  3. Recreate workflows that had no export file.
  4. Note any attachment skipped for the 20 MB limit.
  5. Store the status map next to the create log.
  6. Schedule a queue check for old tickets that landed as Open.
Sources and evidence

Verify against the primary material.

Platform behavior changes. Check these sources and the review dates above before executing a production migration.

  1. Help Scout: data export optionsAccessed 2026-11-04
  2. Help Scout: list conversationsAccessed 2026-11-04
  3. Freshdesk: import and export customersAccessed 2026-11-04
  4. Freshdesk API: create a ticket and rate limitsAccessed 2026-11-04