Tutorial10 min readMay 4, 2025

Migrate Freshdesk to FreeScout: Complete Guide (2025)

Complete guide to migrate from Freshdesk to FreeScout. Covers data export, import, team training, and cutover strategy.

If you're on Freshdesk and paying $1,800–$4,500/year for 10 agents, switching to FreeScout can save you thousands. Migration is straightforward — this guide shows you how.

Why Freshdesk Teams Migrate

Cost savings are primary:

  • Freshdesk: $30–$65 per agent per month ($3,600–$7,800/year for 10 agents)
  • FreeScout: $150 one-time setup fee
  • Year 1 savings: $3,450–$7,650
  • Year 2+ savings: $3,600–$7,800 per year

For a 10-agent team on Freshdesk's Plus tier, you'll recoup the setup cost in 5 days.


Migration Timeline

| Week | Activity | Effort | |---|---|---| | Week 1 | Set up FreeScout, install, configure | 6–8 hours | | Week 2 | Export data, transform, import, test | 6–8 hours | | Week 3 | Parallel running (both systems live) | 2–3 hours | | Week 4 | Cutover, team training, Freshdesk cancellation | 2–3 hours |

Total: 3–4 weeks, including planning and testing.


Step 1: Set Up FreeScout (Week 1)

Before migrating data, get FreeScout fully running.

Installation

Choose one of our installation guides:

Configuration

Configure:

  • Email (SMTP/IMAP)
  • SSL certificate
  • Queue workers
  • Modules (knowledge base, live chat, automation)

Test that everything is working before proceeding to data migration.


Step 2: Export Data from Freshdesk (Week 2)

Freshdesk has good data export capabilities.

Export Tickets & Conversations

  1. Go to Freshdesk Admin → Data Import/Export
  2. Click "Export Data"
  3. Choose:
    • Type: Tickets
    • Format: CSV
    • Date range: All time (or last 1–2 years)
  4. Download

You'll get a CSV with columns:

Ticket_ID,Subject,Description,Status,Priority,Created_at,Updated_at,Requester_Name,Requester_Email,Assignee_Name,Assignee_Email,Group_Name,Tags,Notes

Export Contacts (Customers)

  1. Go to Freshdesk Admin → Data Import/Export
  2. Click "Export Contacts"
  3. Download CSV

Export Custom Fields

Freshdesk custom fields don't export automatically. Document them:

  1. Go to Freshdesk Admin → Custom Fields
  2. Take screenshots of all custom fields
  3. You'll recreate these manually in FreeScout

Export Satisfaction Ratings (Optional)

  1. Go to Freshdesk Admin → Surveys
  2. Export survey responses if needed

Step 3: Prepare FreeScout to Receive Data (Week 2)

FreeScout's database structure is different from Freshdesk. You need to prepare.

Create a Mailbox in FreeScout

  1. Go to Settings → Mailboxes → Create Mailbox
  2. Name: Same as your Freshdesk helpdesk (e.g., "Support")
  3. Configure IMAP/SMTP to your email address
  4. Test that emails work

This is the mailbox that will receive imported tickets.

Understand FreeScout's Data Model

FreeScout stores data in:

  • Conversations table = Tickets
  • Conversation Threads = Individual messages in the ticket
  • Customers = Your contacts/requesters
  • Mailbox = Which help desk owns the ticket

Unlike Freshdesk (which has tickets, notes, private comments), FreeScout has a flat message structure. Plan for this mapping:

  • Freshdesk ticket → FreeScout conversation
  • Freshdesk replies → FreeScout conversation threads
  • Freshdesk notes → FreeScout conversation threads (marked private)
  • Freshdesk custom fields → FreeScout custom fields (need to create)

Step 4: Transform & Import Data (Week 2)

This is the technical part. You have two options:

Option A: Manual Import (Small Teams < 500 Tickets)

  1. Export Freshdesk CSV
  2. Create conversations manually in FreeScout
  3. One by one, recreate each ticket

Time: 5–10 minutes per 50 tickets (tedious but reliable)

Option B: Automated Import Script (Large Teams)

Write a PHP script or use an importer:

  1. Read Freshdesk CSV
  2. Insert into FreeScout database
  3. Handle conversions (Freshdesk IDs → FreeScout IDs)

Script template:

<?php
// Read Freshdesk CSV
$tickets = array_map('str_getcsv', file('freshdesk_export.csv'));

foreach ($tickets as $row) {
    // Skip header
    if ($row[0] === 'Ticket_ID') continue;
    
    $conversation = Conversation::create([
        'mailbox_id' => 1,
        'customer_id' => $this->getOrCreateCustomer($row['Requester_Email']),
        'subject' => $row['Subject'],
        'status' => $this->mapStatus($row['Status']),
        'priority' => $this->mapPriority($row['Priority']),
        'created_at' => $row['Created_at'],
    ]);
    
    // Add first message (ticket description)
    ConversationThread::create([
        'conversation_id' => $conversation->id,
        'type' => ConversationThread::TYPE_CUSTOMER,
        'body' => $row['Description'],
        'created_at' => $row['Created_at'],
    ]);
}
?>

This is beyond the scope of this guide, but community members have written importers. Search GitHub for "freescout freshdesk importer".

Post-Import Validation

After import, verify:

  • [ ] Total ticket count matches Freshdesk
  • [ ] All ticket subjects imported
  • [ ] All messages/notes imported
  • [ ] Customer names and emails correct
  • [ ] Dates/timestamps correct
  • [ ] Attachments imported (if supported)
  • [ ] Custom fields preserved (if script supports)

Check 20–30 random tickets in FreeScout against Freshdesk originals.


Step 5: Parallel Running (Week 3)

Now you have two systems with all historical data. Run both simultaneously.

Strategy

  1. Freshdesk: Read-only mode (no new tickets)
  2. FreeScout: All new tickets
  3. Duration: 1–2 weeks (until team is comfortable)

How to Do This

  1. In Freshdesk, disable email forwarding to new mailbox
  2. Create a temporary email: temp-support@your-domain.com
  3. Update website: "We're migrating. Please use temp-support@domain.com for urgent issues"
  4. Point that email to FreeScout
  5. Team uses FreeScout for all new tickets
  6. Agents reference Freshdesk (read-only) for historical context

Risks to Watch For

  • Lost tickets (if emails don't arrive in FreeScout) → Check IMAP logs
  • Team confusion (two interfaces) → Train on FreeScout
  • Slow response (team needs to look up history in two places) → Keep parallel period short

Step 6: Cutover (Week 4)

Once the team is comfortable:

Pre-Cutover Checklist

  • [ ] All team members trained on FreeScout
  • [ ] All new tickets in FreeScout (no new tickets in Freshdesk)
  • [ ] Freshdesk access still available (read-only) for reference
  • [ ] Backups created (FreeScout database, Freshdesk data export)
  • [ ] Email deliverability tested (emails arriving and replies sending)
  • [ ] Queue workers running (emails processing correctly)

Cutover Steps

  1. Final Freshdesk export: Export any tickets created during parallel running
  2. Import final tickets: Add to FreeScout
  3. Update all touchpoints:
    • Website contact page → FreeScout email
    • Email signature → FreeScout email
    • Auto-responder → FreeScout email
    • Help docs → FreeScout email
    • Slack #support channel → Update channel topic
    • Customer notifications → "Support address is now support@domain.com"
  4. Disable temporary email: Stop accepting temp-support@domain.com
  5. Cancel Freshdesk: Schedule cancellation at end of billing cycle
  6. Download final backup: Freshdesk data for archival (compliance)

Day-of-Cutover

  1. Morning: Final email test (send test ticket)
  2. Afternoon: Announce to customers (email, website)
  3. Evening: Monitor for issues (watch logs, email delivery)
  4. Next day: Follow-up with team on any issues

Freshdesk → FreeScout Field Mapping

When importing, map these fields:

| Freshdesk | FreeScout | Notes | |---|---|---| | Ticket ID | Conversation ID | Auto-generated, can't preserve | | Subject | Subject | Direct mapping | | Description | First thread body | First message | | Status | Status | Map: New→open, Pending→pending, Resolved→resolved, Closed→closed | | Priority | Priority | Map: Low/Medium/High/Urgent | | Replies | Conversation threads | Multiple threads per conversation | | Notes | Private threads | Mark as private | | Created at | Created at | Direct mapping | | Updated at | Updated at | Direct mapping | | Requester | Customer | Create customer if not exists | | Assignee | Assigned to | Map agent by email | | Tags | Tags | Direct mapping | | Custom fields | Custom fields | Need to recreate in FreeScout |


Cost Comparison

Old Setup (Freshdesk):

  • 10 agents × $35/month (Plus tier) = $350/month
  • Annual cost: $4,200/year

New Setup (FreeScout):

  • One-time installation: $150 (professional service)
  • VPS cost: $6–$12/month (~$100/year)
  • Annual cost: $100 (service fee) + $100 (VPS) = ~$200/year

Savings:

  • Year 1: $4,200 - $200 = $4,000 saved
  • Year 2+: $4,200/year saved

Common Migration Issues

| Issue | Cause | Fix | |---|---|---| | "Import fails with encoding error" | CSV has special characters | Re-export as UTF-8 from Freshdesk | | "Ticket dates wrong" | Timezone mismatch | Check FreeScout timezone setting (Settings → Localization) | | "Attachments not imported" | Import script doesn't support attachments | Manually download from Freshdesk, upload to FreeScout | | "Customer emails don't match" | Formatting differences (uppercase, spaces) | Normalize emails before import (lowercase, trim) | | "Custom fields lost" | Import script doesn't handle custom fields | Recreate manually or extend script |


FAQ: Freshdesk Migration

Q: How long does migration take? A: 3–4 weeks planning and setup, 2–3 days of actual hands-on work.

Q: Will we lose ticket history? A: No, if you use a proper import tool. All tickets should transfer with messages intact.

Q: Can we go back to Freshdesk if we hate FreeScout? A: Yes, your data is in FreeScout. Export it and contact Freshdesk support for re-import. Cost: time, not money.

Q: Do we need downtime? A: No, run both in parallel so there's zero downtime.

Q: What about customer portal access? A: FreeScout has a customer portal. Notify customers of new portal URL.

Q: Do agents need retraining? A: Yes, 1–2 hour training session. FreeScout is simpler, so learning curve is short.


Post-Migration Optimization

After cutover, consider:

  1. Enable modules: Knowledge base (reduce tickets by 20%), live chat (capture visitors)
  2. Set up automation: Auto-assign tickets, auto-close stale tickets, etc.
  3. Configure escalation: Route complex tickets to managers automatically
  4. Create canned replies: Speed up response time for common issues

Each optimization takes 1–2 hours and compounds over time.

Need expert help migrating Freshdesk to FreeScout without losing data or customer service?

We handle the full FreeScout installation on your server — SSL, email, security hardening, and a 1-hour onboarding call. Done in 24 hours.

One-time fee · 30-day support · Money-back guarantee


Final Checklist

  • [ ] FreeScout installed and configured
  • [ ] SSL certificate installed
  • [ ] Email working (SMTP/IMAP tested)
  • [ ] Queue workers running
  • [ ] Freshdesk data exported
  • [ ] Data imported and validated
  • [ ] Parallel running for 1–2 weeks
  • [ ] Team trained
  • [ ] All touchpoints updated
  • [ ] Freshdesk canceled (at end of billing cycle)
  • [ ] Archival backup downloaded

You're now running FreeScout and saving thousands per year. The migration was the hard part — the benefit is permanent.

Resources

Need FreeScout Installed Professionally?

Skip the complexity. We install and configure FreeScout on your server in 24 hours — SSL, email, security, and a full onboarding call included.

Get It Done for $100

One-time fee · 30-day support · Money-back guarantee

Related Articles