Tutorial10 min readMay 5, 2025

Migrate from HelpScout to FreeScout: Complete Guide (2025)

Step-by-step guide to migrate from HelpScout to FreeScout. Data export, import, team training, and smooth cutover strategy.

HelpScout is beautiful, but it's expensive. If you're paying $3,600–$19,500/year for 10–25 agents, FreeScout can cut that to $150 one-time. This guide shows you how to migrate without losing a conversation.

Why Teams Switch from HelpScout

HelpScout costs:

  • 10 agents on Standard tier: $30/agent/month = $3,600/year
  • 25 agents on Plus tier: $65/agent/month = $19,500/year

FreeScout costs:

  • 10 agents: $150 one-time
  • 25 agents: $150 one-time

Year 1 savings (25-agent team): $19,500 - $150 = $19,350

That's one person's salary. Even if you spend 40 hours on migration, you break even.


Migration Timeline

| Week | Activity | Hours | |---|---|---| | Week 1 | FreeScout setup, installation, configuration | 6–8 | | Week 2 | Data export, transform, import, validation | 6–8 | | Week 3 | Parallel running (both systems live) | 3–4 | | Week 4 | Cutover, training, HelpScout cancellation | 3–4 |

Total: 3–4 weeks, 18–24 hours of work.


Step 1: Set Up FreeScout (Week 1)

Choose Installation Method

Pick one of these guides based on your infrastructure:

Recommendation: DigitalOcean (easiest) or Hetzner (cheapest).

Install & Configure

Once installed:

  1. Configure email (SMTP/IMAP)
  2. Install SSL certificate (Let's Encrypt)
  3. Set up queue workers
  4. Test that everything works

Don't invite team members yet — wait until data is migrated.


Step 2: Export Data from HelpScout (Week 2)

HelpScout has good data export.

Export Conversations (Tickets)

  1. Go to HelpScout Admin → Settings → Import/Export
  2. Click "Export"
  3. Choose "Conversations"
  4. Select date range (all time or last 1–2 years)
  5. Click "Export"
  6. Download the CSV

You'll get a file with columns:

Conversation_ID,Subject,Status,Created_At,Updated_At,Customer_Name,Customer_Email,Assigned_Agent,Tags,Conversation_Threads

Export Customers (Contacts)

  1. Go to Admin → Settings → Import/Export
  2. Choose "Customers"
  3. Click "Export"
  4. Download CSV

Export Custom Fields

HelpScout custom fields don't export automatically.

  1. Go to Admin → Settings → Custom Fields
  2. Take screenshots of all custom fields
  3. Document field names and types
  4. You'll recreate these in FreeScout

Export Saved Replies (Canned Responses)

If you have saved replies:

  1. Go to Admin → Settings → Saved Replies
  2. Copy each reply (manually or screenshot)
  3. You'll recreate these in FreeScout as "Canned Replies"

Step 3: Prepare FreeScout (Week 2)

Create Mailbox

  1. Go to Settings → Mailboxes → Add Mailbox
  2. Name: Same as your HelpScout main inbox
  3. Email address: Your support email
  4. Configure IMAP/SMTP
  5. Test that emails work

Understand Data Model Differences

HelpScout → FreeScout mapping:

| HelpScout | FreeScout | Notes | |---|---|---| | Conversation | Conversation | Direct mapping | | Conversation threads | Conversation threads | Direct mapping | | Customer | Customer | Direct mapping | | Tags | Tags | Direct mapping | | Custom fields | Custom fields | Need to recreate | | Saved replies | Canned replies | Need to recreate | | Beacon (widget) | Live Chat module | Similar but different | | Surveys (NPS) | Not built-in | Can use modules |


Step 4: Transform & Import Data (Week 2)

HelpScout's CSV format is close to FreeScout but requires transformation.

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

  1. Open HelpScout CSV in spreadsheet
  2. Create conversations manually in FreeScout
  3. Add threads/messages for each conversation
  4. Assign to agents, add tags

Time: ~5 minutes per 50 conversations

For 500 conversations, budget 50 hours. Not ideal but reliable.

Option B: Automated Script (Large Teams)

Create a PHP import script:

<?php
// Connect to FreeScout database
$db = new PDO('mysql:host=localhost;dbname=freescout', 'user', 'password');

// Read HelpScout CSV
$file = fopen('helpscout_export.csv', 'r');
$header = fgetcsv($file);

while ($row = fgetcsv($file)) {
    $data = array_combine($header, $row);
    
    // Create customer if not exists
    $customer = Customer::where('email', $data['Customer_Email'])->first();
    if (!$customer) {
        $customer = Customer::create([
            'email' => $data['Customer_Email'],
            'first_name' => explode(' ', $data['Customer_Name'])[0],
            'last_name' => explode(' ', $data['Customer_Name'])[1] ?? '',
        ]);
    }
    
    // Create conversation
    $conversation = Conversation::create([
        'mailbox_id' => 1, // Your mailbox ID
        'customer_id' => $customer->id,
        'subject' => $data['Subject'],
        'status' => $this->mapStatus($data['Status']),
        'created_at' => $data['Created_At'],
        'updated_at' => $data['Updated_At'],
    ]);
    
    // Add first message (conversation body)
    if (!empty($data['Conversation_Threads'])) {
        ConversationThread::create([
            'conversation_id' => $conversation->id,
            'type' => ConversationThread::TYPE_CUSTOMER,
            'body' => $data['Conversation_Threads'],
            'created_at' => $data['Created_At'],
        ]);
    }
    
    // Add tags
    if (!empty($data['Tags'])) {
        $tags = explode(',', $data['Tags']);
        foreach ($tags as $tag) {
            $conversation->tags()->attach(Tag::firstOrCreate(['name' => trim($tag)]));
        }
    }
}
?>

Time: 2–4 hours to write and test, then 30 minutes to run.

Validate Import

After import, verify:

  • [ ] Conversation count matches HelpScout
  • [ ] All subjects imported
  • [ ] All threads/messages imported
  • [ ] Customer names and emails correct
  • [ ] Dates/timestamps correct
  • [ ] Tags preserved
  • [ ] Attachments imported (if script supports)

Sample 20–30 conversations from FreeScout and compare to HelpScout originals.


Step 5: Parallel Running (Week 3)

Run both systems simultaneously while team adapts.

Setup

  1. HelpScout: Switch to read-only (no new conversations created there)
  2. FreeScout: All new conversations
  3. Duration: 1–2 weeks

How

  1. In HelpScout, disable email forwarding to main inbox
  2. Create temporary email: temp-support@your-domain.com
  3. Update website copy: "We're upgrading our support system. New emails → temp-support@domain.com"
  4. Point temporary email to FreeScout
  5. Team uses FreeScout for all new conversations
  6. Agents reference HelpScout (read-only) for historical context

Monitor

  • Email arrival: Check FreeScout logs hourly
  • Team comfort: Slack poll on day 3, 7, 10
  • Response times: Compare to baseline (should be same)
  • Customer feedback: Monitor for complaints

Step 6: Cutover (Week 4)

Pre-Cutover Checklist

  • [ ] Team trained on FreeScout
  • [ ] All new conversations in FreeScout (none in HelpScout)
  • [ ] Email deliverability verified (emails arriving and leaving)
  • [ ] Queue workers running (background jobs processing)
  • [ ] Backups created (FreeScout database, HelpScout export)
  • [ ] SSL certificate working (HTTPS not HTTP)

Cutover Process

  1. Export final conversations: Any from HelpScout during parallel period
  2. Import to FreeScout: Add final conversations
  3. Update all touchpoints:
    • Website contact page → new support email
    • Email signature → new support email
    • Auto-responder → new email
    • Help center → new email
    • Slack channels → update topic
    • Customer-facing docs → update email
  4. Notify customers: Email announcing new support address
  5. Disable temp email: Stop accepting temp-support@domain.com
  6. Cancel HelpScout: Schedule cancellation at end of billing cycle
  7. Archive data: Download final HelpScout backup for compliance

Day-of-Cutover

Morning:

  • Send test conversation to new email address
  • Verify it arrives in FreeScout
  • Verify reply goes out correctly

Afternoon:

  • Announce to customers (email, website banner, social)
  • Monitor support email and FreeScout for issues

Evening:

  • Team reviews any new conversations
  • Follow-up call with team: any issues?

Next Day:

  • Check logs for errors
  • Verify no lost conversations
  • Celebrate the migration! 🎉

HelpScout → FreeScout Feature Mapping

Some HelpScout features have FreeScout equivalents:

| HelpScout Feature | FreeScout Equivalent | Notes | |---|---|---| | Beacon (widget) | Live Chat module | Similar functionality, different look | | Surveys (NPS) | Reports module | Track satisfaction differently | | Snippets (saved replies) | Canned replies | Same idea, different UX | | Workflows | Automation rules | Similar but more powerful in FreeScout | | Custom fields | Custom fields | Need to recreate | | Team members | Agents | Direct mapping | | Mailboxes | Shared mailboxes | Direct mapping | | Reports | Reports module | Similar analytics |

HelpScout's beauty is in UX. FreeScout's strength is customization. Both are fully functional helpdesks.


Cost Breakdown

HelpScout Annual Cost (25 agents, Plus tier):

  • $65/agent/month × 25 agents = $1,625/month
  • Annual: $19,500

FreeScout Annual Cost (25 agents):

  • Setup: $150 (one-time)
  • VPS: $6/month = $72/year
  • Total Year 1: $222
  • Total Year 2+: $72/year

Savings:

  • Year 1: $19,500 - $222 = $19,278 saved
  • Year 2+: $19,500/year saved

Even at 40 hours of migration work, at $50/hour that's $2,000 in labor. You still save $17,278 in year one.


Common Issues & Fixes

| Issue | Cause | Fix | |---|---|---| | "CSV encoding error" | Special characters (emoji, accents) | Re-export as UTF-8 from HelpScout | | "Dates are wrong" | Timezone mismatch | Check FreeScout Settings → Localization → Timezone | | "Attachments missing" | Import script doesn't handle attachments | Manually download from HelpScout, reattach in FreeScout | | "Custom fields lost" | Import script incomplete | Recreate custom fields manually | | "Beacon widget missing" | Feature difference | Use FreeScout's Live Chat module (similar) | | "Team confused about UI" | UX difference | Provide 1-hour training session |


FAQ: HelpScout Migration

Q: How long does the whole migration take? A: 3–4 weeks (planning, setup, parallel running, cutover), 18–24 hours hands-on work.

Q: Will we lose conversation history? A: No, a proper import captures all conversations and messages.

Q: Can we keep HelpScout as a read-only archive? A: Yes, but you'll need to keep paying ($3,600+/year). Better to export as final backup and cancel.

Q: Do customers need to do anything? A: No, they just email the new support address. Customer portal works the same way.

Q: What about Beacon (the HelpScout widget)? A: FreeScout has a Live Chat module. Not identical but similar. Or use a third-party widget (Intercom, Drift).

Q: Do we need downtime? A: No, parallel running means zero downtime.


Post-Migration

After cutover:

  1. Recreate custom fields: Any that didn't import
  2. Recreate canned replies: Save common responses
  3. Set up automation: Auto-assign, auto-close, escalation rules
  4. Enable knowledge base: Reduce support tickets by 20%
  5. Configure live chat: Capture visitors in real-time

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

Need expert help migrating HelpScout to FreeScout without losing conversations 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


Summary

HelpScout is beautiful but expensive. FreeScout is functional and free (after setup). The migration is straightforward:

  1. Set up FreeScout (6–8 hours)
  2. Export & import data (6–8 hours)
  3. Run both in parallel (1–2 weeks)
  4. Cutover (1 day)

Return on investment: $19,278 saved in year one for a 25-agent team.

That's worth 20 hours of work.

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