Tutorial8 min readMay 15, 2025

Migrate from osTicket to FreeScout: Step-by-Step (2025)

Complete guide to migrate from osTicket to FreeScout. Data export, import, and why FreeScout is the modern choice.

osTicket is legacy (launched 2006). FreeScout is the modern alternative. If you're on osTicket and want a better UI, more features, and active development, this guide covers migration.

Why Switch from osTicket to FreeScout

osTicket is:

  • Old (19 years old, shows it)
  • Slow-moving (infrequent updates)
  • Dated UI (feels 2000s)
  • No mobile app
  • Limited modern features

FreeScout is:

  • Modern (launched 2018, actively developed)
  • Regular updates (monthly)
  • Beautiful UI (2020s design)
  • Native mobile apps
  • Modular features (add what you need)

For new projects, FreeScout is the obvious choice. For osTicket users, migration is the path forward.


Migration Timeline

| Week | Activity | Hours | |---|---|---| | Week 1 | Set up FreeScout | 6–8 | | Week 2 | Export osTicket, import to FreeScout | 4–6 | | Week 3 | Parallel running (both systems) | 2–3 | | Week 4 | Cutover, training, osTicket shutdown | 1–2 |

Total: 3–4 weeks, 15–20 hours hands-on work.

(Faster than Zammad/Freshdesk migrations — osTicket data is simpler.)


Step 1: Set Up FreeScout (Week 1)

Choose an installation guide:

Recommendation: DigitalOcean or Hetzner (faster, easier than osTicket on same infrastructure).

Install, configure email, test email sending/receiving.


Step 2: Export Data from osTicket (Week 2)

osTicket stores data in MySQL. Export via database dump or admin interface.

# SSH into osTicket server
ssh root@your-osticket-ip

# Export database
mysqldump -u osticket_user -p osticket_db > osticket_backup.sql

You now have a complete database dump.

Option B: osTicket Admin Export

Some osTicket installations have export features in admin panel:

  1. Go to Admin Panel → Data
  2. Look for "Export" or "Backup" option
  3. Download tickets as CSV

(Not all osTicket versions have this.)

Option C: Direct MySQL Query

mysql -u osticket_user -p osticket_db

# Get all tickets
SELECT * FROM ost_ticket INTO OUTFILE '/tmp/tickets.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"';

# Get all users
SELECT * FROM ost_staff INTO OUTFILE '/tmp/staff.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"';

Step 3: Transform osTicket Data

osTicket structure is quite old. You'll need to map tables:

osTicket → FreeScout Mapping:

| osTicket Table | FreeScout | Notes | |---|---|---| | ost_ticket | conversations | Direct mapping | | ost_ticket_thread | conversation_threads | Messages | | ost_user | customers | Support customers | | ost_staff | users | Your agents | | ost_department | mailboxes | Route to mailboxes | | ost_ticket_status | status | Map statuses |

Transform Script (PHP/Laravel)

<?php
// In artisan tinker

// Parse osTicket SQL dump
$sql = file_get_contents('osticket_backup.sql');

// Extract tickets (simple parser)
preg_match_all('/INSERT INTO `ost_ticket` VALUES \((.*?)\);/s', $sql, $matches);

$mailbox_id = 1; // Your FreeScout mailbox

foreach ($matches[1] as $ticket_data) {
    $values = str_getcsv($ticket_data, ',', "'");
    
    // Create customer
    $customer = Customer::firstOrCreate(
        ['email' => trim($values[9])],
        [
            'first_name' => 'osTicket',
            'last_name' => 'User',
        ]
    );
    
    // Create conversation
    $conversation = Conversation::create([
        'mailbox_id' => $mailbox_id,
        'customer_id' => $customer->id,
        'subject' => trim($values[1]),
        'status' => map_status(trim($values[4])),
        'priority' => map_priority(trim($values[5])),
        'created_at' => $values[7],
        'updated_at' => $values[8],
    ]);
}

// Helper functions
function map_status($status) {
    $map = ['open' => 'open', 'closed' => 'closed', 'resolved' => 'closed'];
    return $map[$status] ?? 'open';
}

function map_priority($priority) {
    $map = ['Low' => 'low', 'Medium' => 'medium', 'High' => 'high', 'Urgent' => 'urgent'];
    return $map[$priority] ?? 'medium';
}

echo "Transform complete!";
?>

Step 4: Import to FreeScout

cd /var/www/freescout
php artisan tinker < import_script.php

Step 5: Validate Import

Check:

  • [ ] All tickets imported (count matches osTicket)
  • [ ] Subjects and descriptions intact
  • [ ] Status mapped correctly
  • [ ] Priority mapped correctly
  • [ ] Customer emails match
  • [ ] Dates preserved

Review 20–30 random tickets in FreeScout vs osTicket.


Step 6: Parallel Running (Week 3)

Run both systems simultaneously:

  1. osTicket: Disable new ticket creation (read-only)
  2. FreeScout: Handle all new support requests
  3. Temporary email: Route new emails to FreeScout
  4. Duration: 1–2 weeks (until team is comfortable)

Step 7: Cutover (Week 4)

Pre-Cutover Checklist

  • [ ] Team trained on FreeScout
  • [ ] All new tickets in FreeScout
  • [ ] Email working (sent and received)
  • [ ] Queue workers running (emails processing)
  • [ ] Backups created

Cutover

  1. Export any osTicket tickets created during parallel period
  2. Import to FreeScout
  3. Update website, email, docs, auto-responders
  4. Disable temporary email
  5. Cancel osTicket (if using hosted version)

Cost Analysis

osTicket Annual Cost:

  • Hosting (1GB VPS): $6–$12/month = $72–$144/year
  • Your server management time (estimated): ~$0 (unless you hire someone)
  • Total: $72–$144/year (or more if you pay for support)

FreeScout Annual Cost:

  • Setup: $150 one-time
  • Hosting (1GB VPS): $6–$12/month = $72–$144/year
  • Total: $222–$294/year

Cost difference: osTicket is slightly cheaper upfront. But FreeScout offers:

  • Modern UI (saves training time)
  • Regular updates (security + features)
  • Mobile apps (included)
  • Better support

Decision: Cost-neutral, but FreeScout is better product.


Why FreeScout is Better Than osTicket

| Factor | osTicket | FreeScout | Winner | |---|---|---|---| | Age | 19 years | 7 years | FreeScout (more modern) | | Update frequency | Quarterly | Monthly | FreeScout | | UI/UX | Dated (2000s) | Modern (2020s) | FreeScout | | Mobile app | No | Native iOS/Android | FreeScout | | Features | Sufficient | More modern | FreeScout | | Development activity | Slow | Very active | FreeScout | | Code quality | Old patterns | Modern Laravel | FreeScout |

FreeScout wins across the board except cost (negligible difference).


Migration Difficulty

osTicket → FreeScout is the easiest of all migrations because:

  • osTicket database is simple (no complex schemas)
  • Data mapping is straightforward
  • No omnichannel complexity (osTicket is email-only)
  • No Elasticsearch or advanced features to deal with

Compared to:

  • Zammad → FreeScout: Harder (complex data, multiple channels)
  • Zendesk → FreeScout: Harder (API-only export)
  • Freshdesk → FreeScout: Harder (per-agent metadata)

osTicket is legacy, so migration is clean.


Common Issues

| Issue | Cause | Fix | |---|---|---| | "MySQL connection refused" | Wrong credentials | Check osTicket config.php for DB credentials | | "Import fails parsing SQL" | SQL syntax changes | Use mysqldump instead of manual export | | "Dates are wrong" | Timezone mismatch | Check FreeScout timezone in Settings | | "Status don't match" | osTicket has custom statuses | Map custom statuses in transform script |


Post-Migration Optimization

After cutover, add FreeScout features osTicket didn't have:

  1. Live Chat module — Real-time support (osTicket has none)
  2. Knowledge Base module — Self-service (reduce tickets by 20%)
  3. Mobile app — Agents can respond from phone
  4. Automation rules — Auto-assign, auto-close, escalate
  5. Reports module — Better analytics than osTicket

Each takes 1–2 hours and adds value.


Timeline for Go-Live

| Date | Action | |---|---| | Mon | Start FreeScout setup | | Wed | FreeScout ready, start data export | | Fri | Data imported, validation complete | | Mon | Parallel running begins (both systems live) | | Mon +2 weeks | Team comfortable with FreeScout | | Fri +3 weeks | Cutover (osTicket shutdown) |

Total: 3 weeks from start to fully live on FreeScout.


Summary

osTicket is reliable but old. FreeScout is the modern helpdesk for teams that have outgrown osTicket.

Migration is fast (3 weeks, 15–20 hours work), straightforward (simple data), and immediate payoff (better product).

If you're still on osTicket, upgrading to FreeScout is overdue.

Need expert help migrating your osTicket installation to FreeScout?

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


Welcome to modern helpdesk software. osTicket's days are numbered.

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