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.
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:
- 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.
- 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.
- 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.
Keep reading
Apr 18, 2026 · 9 min read
Switch your helpdesk over a weekend: the Friday-to-Monday playbook
A Friday-evening-to-Monday-morning plan for moving your support stack to a new helpdesk while your customers sleep: what to freeze, what to import, what to test — and the checklists that catch the traps most teams hit.
Read moreApr 2, 2026 · 8 min read
Retraining your support team on a new helpdesk in one week
A five-day plan for moving agents to a new helpdesk: guided orientation, rebuilt workflows, shadow shifts, AI drafts and a live day with a safety net.
Read moreJan 20, 2026 · 8 min read
The helpdesk migration checklist: everything to verify before you switch
A stage-by-stage checklist for switching helpdesks: exit terms, data inventory, field mapping, technical seams, team readiness and post-launch checks.
Read more