Skip to main content
How-to

Import ticket history

Bring your tickets over from Freshservice, Freshdesk, Zendesk or HappyFox, or from a CSV. What to get from your old helpdesk, what comes over and what doesn't, and how statuses and priorities are matched.

Open the Tickets tab of Admin › Account › Import Data to bring the tickets from the helpdesk you used before into schoolOS, so your team can look up what happened last year and carry on with what's still open. It needs schoolHelpdesk and Manage helpdesk settings; connecting a helpdesk also needs Manage integrations, because its key is an integration secret.

Which should I choose?#

Under Where are your tickets now?, pick your old helpdesk or CSV file.

| Source | What comes over | Choose it when | | --- | --- | --- | | Freshservice or Freshdesk | Every ticket with its replies and internal notes, requester, agent, group, tags and times, from every Freshservice workspace (IT, Facilities, HR and any others). Runs in the background. | Your history is in Freshworks. Most school IT teams use Freshservice; Freshdesk is its customer support desk. | | Zendesk | The same, from Zendesk Support. | Your history is in Zendesk. | | HappyFox | The same, from HappyFox Help Desk. HappyFox's categories are its teams. | Your history is in HappyFox. | | CSV file | One row per ticket: subject, first message, requester, agent, status, priority, group, tags and times. No replies. Runs while the page is open. | Your history is anywhere else, or you only need a summary of each ticket. |

For example, a district moving from Freshservice over the summer connects it, imports everything from the last three school years, and turns Include closed tickets on for reporting. A district whose tickets were in a shared spreadsheet saves it as CSV and uploads it.

In a CSV, the Created, Last updated and Closed columns take a date, with or without a time: 2024-03-15 14:30 is best, and 3/15/2024 2:30 PM, March 15, 2024 and dates Excel saved as numbers work too. Slash dates are month first, unless they can only be day first, like 15/03/2024. A time with no time zone is read in your account's time zone (the default zone, Eastern, when your account has none); one that names its zone, like 2024-03-15T14:30:00Z, keeps it. A date alone is midnight. A row whose Created can't be read is listed with the reason and skipped.

What to get from your old helpdesk#

Whoever's key you use needs to see every ticket you want to import, so use an admin's. For Zendesk it has to be: Zendesk lets only admins export tickets, so Test connection says so when the email belongs to an agent. Freshservice and Freshdesk need a key that can list your agents too; without that the import stops and says why, rather than bringing tickets over unassigned.

| Helpdesk | Where | What you enter | | --- | --- | --- | | Freshservice | Your profile picture › Profile settings. The API key is on the right. | Your Freshservice address (yourdistrict.freshservice.com) and the API key. | | Freshdesk | Your profile picture › Profile settings › View API key. | Your Freshdesk address (yourdistrict.freshdesk.com) and the API key. | | Zendesk | Admin Center › Apps and integrations › Zendesk API. Turn on Token access, then add a token and copy it (Zendesk shows it once). | Your Zendesk address (yourdistrict.zendesk.com), the Admin email the token belongs to, and the API token. | | HappyFox | Manage › Integrations › API. Create an API key; HappyFox shows the key and its auth code together. | Your HappyFox address (yourdistrict.happyfox.com), the API key and the Auth code. |

Select Test connection to check them without saving, or Connect to check and save. Nothing is saved if the check fails. Keys are stored encrypted and never shown again: the field shows only that one is saved and its last few characters, and leaving it blank keeps it when you change something else. Disconnect deletes the saved credentials; tickets you've imported stay.

schoolOS only reads from your old helpdesk. Nothing there changes.

What to import#

  • Department (when your account has more than one): where imported tickets go, and whose statuses, priorities and teams they're matched to.
  • Tickets to bring: All ticket history (the default) brings every ticket. From Freshservice they come newest first, so your open and pending tickets are in schoolOS within minutes and the closed history fills in behind them; a large history can take many hours. Created in a date range shows From and Through, to bring only tickets created between them; leave either empty for no limit on that end. The same choice is there for a CSV and for every helpdesk.
  • Include closed tickets: on brings your full history, for reports and lookups; off brings only tickets that are still open, to carry on working them here. "Closed" means the status you match it to means Solved or Closed.
  • Include replies and notes (helpdesks only): on brings each ticket's conversation and internal notes, and takes longer, because each ticket's replies are read one ticket at a time; off brings each ticket's first message only.

How statuses and priorities are matched#

Under Match statuses, priorities and teams, every status, priority and group from your old helpdesk gets one of yours. Each list has two columns, named at the top: on the left, your old helpdesk's, like Freshservice status with its logo (Status in your file for a CSV); on the right, schoolOS status, the one it becomes. Each of your old helpdesk's values sits in a dashed, gray box with that helpdesk's logo, with what it says the value means underneath, like "Freshservice treats this as Open"; an arrow points to the schoolOS picker beside it. On a phone the two sides stack, each with its heading.

It starts at a suggestion, and you can change any of them before you start. Matching is by what a status means first, so a status you renamed still gets the right tickets.

| From | Starts matched to your status that means | | --- | --- | | Freshservice and Freshdesk | Open → Open, Pending → Pending, Resolved → Solved, Closed → Closed. Custom statuses start at Open. | | Zendesk | New → New, Open → Open, Pending and On-hold → Pending, Solved → Solved, Closed → Closed. | | HappyFox | Statuses HappyFox counts as completed → Closed; the rest → Open. | | CSV | A status written exactly New, Open, Pending, Solved or Closed → that meaning; anything else starts at Open and says to check it. |

When you have several statuses with the same meaning, one with the same name as your old helpdesk's comes first (so its In Progress goes to your In Progress, if you have one, rather than to Open), then the one marked Default. A name never moves a status to a different meaning. A custom status your old helpdesk gives no meaning goes to your status of the same name, if you have one; otherwise it starts at Open.

Priorities go to your priority of the same name when you have one. The rest are laid over yours by urgency: Freshworks' and Zendesk's Low to Urgent go to your least to most urgent. HappyFox doesn't rank its priorities and a CSV can't, so each starts at your default priority and says to check it; set them. A ticket with no priority gets your default.

Add a status or priority you don't have#

The last choice in every status and priority list is Add a status in schoolOS… (or Add a priority in schoolOS…). It opens the same form as Admin › Tickets › Statuses (or Admin › Tickets › Priorities), filled in with your old helpdesk's name and, for a status, its meaning; change either. Select Create status (or Create priority) and the new one is picked for that row and added to your Ticket Settings, for the department you're importing into. The confirmation has Undo, which removes it again and puts the row back as it was. Adding needs Manage helpdesk settings; without it the choice shows but is turned off and says so.

Groups and teams is optional: a group you match to a team puts its tickets on that team; the rest have no team. A team whose name is the same as the group is suggested. When your Freshservice has more than one workspace, each group shows its workspace after its name, like "Service Desk (Facilities)".

A ticket's type becomes its type without any matching: Zendesk's and Freshdesk's Problem → Outage, Incident → Issue, Question → Question, and Task or Feature Request → Request; Freshservice's Incident → Issue and Service Request → Request. In a CSV, the optional Type column works the same way (Issue and Outage are read as themselves). Any other type is left empty, for AI triage or a person to set.

Who's who#

  • Requesters are matched to people in schoolOS by email. Someone who isn't there is added, turned off, with that email, so the ticket keeps who asked: as Staff when the address is at your district's own email domain (or a subdomain, like your students' domain), and as a Guest at any other address. They aren't invited or emailed. When you later add, import or sync the same email, that record becomes the person, with their old tickets.
  • Agents are matched by email to people in schoolOS. A ticket whose agent isn't there is unassigned; no one is added. Once they are in schoolOS (added, or brought in by a directory sync), run the import again: each ticket still unassigned goes to its agent, with a line in its history saying so. A ticket someone has assigned or worked in schoolOS is left as it is.
  • Replies and notes keep their author: matched by email, or added the same way as a requester. A reply whose author the helpdesk doesn't name is kept under the requester, with "From" and whatever name it has at the top.

What comes over, and what doesn't#

| Comes over | Doesn't | | --- | --- | | Subject and first message | Attachments: their file names are listed on the message, and the files stay in your old helpdesk | | Status, priority, team, tags and type | Custom fields, satisfaction ratings, time tracked and SLA history | | Requester and assigned agent | CCs, followers, linked or merged tickets, and child tickets | | When it was created, last updated and closed | Automations, macros and views | | Replies and internal notes (helpdesks, when included) | | | Its number and a link to it in the old helpdesk, beside the ticket's number and in its history ("Imported from Zendesk ticket #1234") | |

Imported tickets get new schoolOS ticket numbers. The original number stays with each one; see Finding imported tickets.

Finding imported tickets#

  • On the ticket. Beside its schoolOS number, an imported ticket shows where it came from and the number it had there, like Zendesk #48213. Select it to open the original in your old helpdesk, in a new tab, while you still have that helpdesk. Its Original ticket, under Properties, shows the same with the whole link to the original, to open or copy. A ticket from a CSV shows Imported, with the Ticket number from your file. Imported tickets get new schoolOS numbers, so a schoolOS number that happens to match the old one (#1842 and SR-1842) is a different ticket.
  • In the inbox. Each imported ticket says so under its message, like Imported from Zendesk.
  • By its old number. Type the number people knew it by, such as 48213, #48213 or INC-1042, into Search tickets... or the Open a ticket box, and the imported ticket comes up. Search only ever finds tickets you could already see.
  • In the ticket list. The Origin filter on Helpdesk › Tickets picks tickets made in schoolOS or brought in from Freshservice, Freshdesk, Zendesk, HappyFox or CSV. Pick schoolOS to leave history out, or flip it to "is not" schoolOS to see only imported tickets.
  • In reports. On Tickets, Imported (Yes or No) and Origin can filter or break down any report, so last year's history doesn't inflate this year's numbers. For example, filter Imported is No for tickets made in schoolOS only. Dashboard reports count imported tickets unless their report filters them out. See Build reports.

What doesn't happen#

Importing is quiet. No one is emailed or notified, no auto-replies go out, workflows don't run, SLA clocks don't start, and AI doesn't triage, route or re-prioritize anything. An imported ticket keeps its own times, so it doesn't look new.

Scheduled workflows ("no update for 7 days") and the automatic close of unattended Pending tickets leave an imported ticket alone until someone works on it in schoolOS. After that it's a ticket like any other. Your privacy settings for removing personal information from old tickets apply to imported ones too.

Running it, and running it again#

Select Start import. A helpdesk import runs in the background, so you can leave the page; Ticket imports shows its progress (for Freshservice, Freshdesk and HappyFox, how many of about how many tickets, and the percentage), when it last made progress, and you can Pause, Resume or Cancel it. A Freshservice or Freshdesk import reads as fast as your plan allows, keeping a fifth of the limit for anything else using the same key. If your old helpdesk asks schoolOS to slow down, it does; if it asks for a wait longer than 15 minutes, the import pauses itself and says when you can resume it. If an import goes 30 minutes without bringing anything in, it shows Stopped: select Resume to carry on where it left off, or Cancel to start a new one. A CSV import runs while the page is open; if you close the page, upload the file again to carry on.

Running an import again never duplicates anything. Tickets are matched by their number in the old helpdesk (for a CSV, the Ticket number column): a ticket that hasn't changed there is skipped, one that has is updated, and new replies are added. A ticket someone has worked on in schoolOS since it was imported isn't overwritten; only its new replies are added.

Each import's start and finish, with its counts, are in Admin › Account › Logs under Imports & exports.

Was this article helpful?

Updated October 29, 2026