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
- Go to Freshdesk Admin → Data Import/Export
- Click "Export Data"
- Choose:
- Type: Tickets
- Format: CSV
- Date range: All time (or last 1–2 years)
- 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)
- Go to Freshdesk Admin → Data Import/Export
- Click "Export Contacts"
- Download CSV
Export Custom Fields
Freshdesk custom fields don't export automatically. Document them:
- Go to Freshdesk Admin → Custom Fields
- Take screenshots of all custom fields
- You'll recreate these manually in FreeScout
Export Satisfaction Ratings (Optional)
- Go to Freshdesk Admin → Surveys
- 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
- Go to Settings → Mailboxes → Create Mailbox
- Name: Same as your Freshdesk helpdesk (e.g., "Support")
- Configure IMAP/SMTP to your email address
- 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)
- Export Freshdesk CSV
- Create conversations manually in FreeScout
- 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:
- Read Freshdesk CSV
- Insert into FreeScout database
- 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
- Freshdesk: Read-only mode (no new tickets)
- FreeScout: All new tickets
- Duration: 1–2 weeks (until team is comfortable)
How to Do This
- In Freshdesk, disable email forwarding to new mailbox
- Create a temporary email:
temp-support@your-domain.com - Update website: "We're migrating. Please use temp-support@domain.com for urgent issues"
- Point that email to FreeScout
- Team uses FreeScout for all new tickets
- 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
- Final Freshdesk export: Export any tickets created during parallel running
- Import final tickets: Add to FreeScout
- 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"
- Disable temporary email: Stop accepting temp-support@domain.com
- Cancel Freshdesk: Schedule cancellation at end of billing cycle
- Download final backup: Freshdesk data for archival (compliance)
Day-of-Cutover
- Morning: Final email test (send test ticket)
- Afternoon: Announce to customers (email, website)
- Evening: Monitor for issues (watch logs, email delivery)
- 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:
- Enable modules: Knowledge base (reduce tickets by 20%), live chat (capture visitors)
- Set up automation: Auto-assign tickets, auto-close stale tickets, etc.
- Configure escalation: Route complex tickets to managers automatically
- 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
- Freshdesk Data Export — official Freshdesk export docs
- FreeScout GitHub — source code and releases
- FreeScout Module Marketplace — available import tools
- Freshdesk Pricing — compare costs