Back to blog
Guides

How to export your data from a legacy helpdesk (tickets, KB, contacts)

How to get tickets, knowledge base articles, contacts and macros out of a legacy helpdesk: formats, APIs, attachments and the traps that surface later.

MoveDesk TeamFebruary 17, 20268 min read

Key takeaways

  • Start the export before you choose a destination: a verified copy of your own data is a backup, a negotiating position and an inventory in one.
  • Combine routes: native bulk export for the easy 90%, API scripts for attachments, status history and everything the bulk job misses.
  • Prefer JSON over CSV for tickets — CSV flattens reply threading and metadata that the destination import cannot reinvent.
  • Knowledge base exports hide dependencies: hotlinked images on the vendor CDN, visibility flags and category trees all need explicit capture.
  • Reconcile counts and copy files, not links — export caps, expiring attachment URLs and unmapped agent IDs are the traps that surface in week two.

Export is the half of a migration you fully control, and the half most teams start too late. You don't need to have chosen a destination to begin: a complete, verified export is useful even if you stay — it's your backup, your negotiating position, and your proof of what you actually own.

This guide covers what to pull out of a legacy helpdesk, which route to use for each object, and the traps that stay invisible until week two of the new tool.

What you can (and should) export

A helpdesk holds more object types than most admins realise. The full set worth extracting:

  • Tickets and conversations — the messages, their authors, timestamps, statuses, assignees and tags.
  • Contacts and organizations — customer records with custom fields and the links between them.
  • Knowledge base articles — bodies, categories, visibility flags, and the images inside them.
  • Macros and saved replies — the wording your customers already recognise.
  • Custom field definitions — not just the values, but the types and allowed options.
  • CSAT history — ratings and comments, if you report on satisfaction trends.
  • Attachments — the files hanging off tickets and articles, which almost never travel with the primary export.

The three export routes

Every mainstream helpdesk offers some combination of three paths:

  1. Native bulk export. A button or scheduled job that produces CSV, JSON or XML. Fastest to start, but often plan-gated, sometimes capped in volume, and rarely complete — attachments and article images are the usual gaps.
  2. The API. Complete and scriptable, but paginated and rate-limited. This is the route for anything the bulk export misses, and the only reliable route for attachments.
  3. A migration service. The destination vendor runs the export for you against the source APIs. Least effort — just verify you also receive (or can re-run) a raw copy for your own archive.

A sensible plan combines the first two: bulk export for the easy 90%, API scripts for the rest. If the destination runs the migration, keep your own export anyway.

Tickets: formats matter more than volume

CSV flattens; JSON preserves. A CSV export typically gives you one row per ticket or per message and loses the reply threading, author roles and metadata that make history useful. If a JSON export or API route exists, prefer it — the destination import can always downgrade structure, but it can't reinvent it.

Practical rules for the ticket export:

  • Export in batches, oldest first, respecting rate limits. A full history pull on a large account can take days on API quotas — schedule it, don't babysit it.
  • Record the timezone convention. Most APIs return UTC; some bulk exports localise timestamps silently. Verify a handful against the UI before trusting thousands.
  • Filter before you export. Spam-closed and one-word tickets inflate the job and pollute the destination's search. Nobody has ever looked one up.
  • Capture status history if you can. SLA and resolution-time reporting depends on state transitions, not just the final state.

Contacts and organizations

Contacts are small, so teams treat them casually — then spend a quarter cleaning duplicates. Before exporting:

  • Confirm email is populated on the records you care about; it's the deduplication key almost every destination uses.
  • Export custom fields with their definitions, not just values. A dropdown that arrives as free text is permanent damage.
  • Preserve the contact-to-organization links — they usually live in a separate export or endpoint.

Knowledge base: the export with hidden dependencies

Article bodies export easily as HTML. The dependencies don't:

  • Images are usually hotlinked, not embedded — the export references files on the old vendor's CDN. Download every referenced image now; those URLs may die when your account closes.
  • Drafts and visibility flags get lost or flattened in some exports. Note which articles were internal-only before the move, or you may publish your escalation playbook to the world.
  • Category trees often export separately from articles. Capture the structure, including ordering.
  • Article-to-article links point at old URLs. You'll rewrite them at import; you need the list now.

Macros, automations, and the rest

Macros export as text in most tools — short work. Automation and routing rules usually don't export in any usable form: document them by hand, in plain language, and treat the rewrite as a design opportunity rather than a copy job. Export tags, CSAT history and any views your reporting depends on.

The traps that surface in week two

  • Attachment links that expire. The export references storage URLs that stop resolving after account closure. Copy the files, not the links.
  • Export caps. Some bulk jobs silently truncate at a row limit. Reconcile counts: the export should match the ticket count the UI reports.
  • Agent identity mapping. Messages reference agent accounts by internal ID. Export the agent list too, or authorship becomes a puzzle.
  • Deleted and archived tickets. Some routes include them, some don't. Decide deliberately which you want.
  • Rate-limit throttling mid-job. A script that doesn't handle backoff dies at 3 AM and leaves a partial export that looks complete.

Verify the export before you trust it

An export you haven't verified is a hope, not a backup. Before declaring victory:

  • Reconcile the counts. Tickets, contacts and articles in the export should match what the old tool's UI reports. A mismatch means a cap, a filter or a died-at-3-AM script.
  • Open a random sample. Ten tickets across the date range: threading intact, authors resolved, timestamps sane, attachments actually present as files.
  • Check the oldest and newest records. Truncation lives at the edges — a job that silently stopped mid-way looks complete until you look at the tail.
  • Store two copies in places you control, and note the export date. If the migration slips a quarter, you'll know exactly how stale this snapshot is.

A note on the big three

Zendesk, Freshdesk and Intercom all provide legitimate export paths — bulk exports and well-documented APIs — though availability varies by plan tier, and admin access is required everywhere. None of them holds your data hostage; the friction is in completeness and formats, not permission. Budget a day to learn your specific tool's quirks, and check the vendor's own export documentation first — it's the authoritative source for what your plan includes. If you're comparing destinations at the same time, our Zendesk comparison covers the migration path in both directions.

Where MoveDesk fits

MoveDesk's white-glove migration runs this entire export against your source account for you — tickets, contacts, articles, macros and attachments from Zendesk, Intercom or Freshdesk — free on every plan. We still recommend keeping your own raw export copy: it's your data, and a second copy costs nothing.

Start the export this week, even if the decision is months away. A verified copy of your own data is the strongest position a support team can negotiate from.

Share this article

Frequently asked questions

JSON via the API if it is available, CSV only as a fallback. CSV exports flatten conversations into rows and lose reply threading, author roles and state history — structure a destination import cannot reconstruct. JSON preserves the full conversation object, and any import tool can downgrade structure it does not need.

Almost always through the API, not the bulk export. Bulk exports typically reference attachments as URLs pointing at the vendor’s storage, and those links can stop resolving after your account closes. Write or use a script that downloads every referenced file to storage you control, for tickets and knowledge base images alike.

Anything from an hour to several days, driven by ticket volume and API rate limits rather than by data size. Bulk exports finish quickly; API pulls of full history on a large account need paginated, rate-limited scripts that are scheduled rather than babysat. Filtering out spam and one-word tickets before export meaningfully shortens the job.

For the bulk-export portion, no — it is an admin task. For attachments, status history and complete article assets, a short script against the vendor API is usually required, which is a few hours of work for a developer. Alternatively, migration services run the API export for you; MoveDesk includes this free on every plan, and keeping your own raw copy alongside is still good practice.

No. Exports and API reads are non-destructive and run alongside normal operation. The only caution is rate limits: an aggressive export script can consume the API quota that live integrations also depend on, so run large pulls off-peak and with backoff handling rather than at maximum speed during business hours.

Yes. Migration and archival are separate decisions: you might move only 12–24 months of tickets into the new tool but still want the full history as a read-only archive under your control. Exporting everything once — while you still have admin access and an active account — costs little and keeps every later option open.

Ready to put AI support to work?

14 days free. Full platform. We move your data for you.