Skip to content

Zendesk to Zoho Desk Migration: API Limits, Data Mapping & Methods

Complete guide to migrating Zendesk to Zoho Desk covering API rate limits, Zwitch limitations, field-by-field data mapping, and methods to avoid losing tags, inline images, and thread history.

Raaj Raaj · · 15 min read
Zendesk to Zoho Desk Migration: API Limits, Data Mapping & Methods

Migrating from Zendesk to Zoho Desk is a data-model translation problem disguised as a platform switch. Zendesk organizes support around tickets with structured comments, side conversations, tags, and custom field types that do not have direct equivalents in Zoho Desk. Zoho Desk organizes support around tickets too — but with different thread structures, a department-centric hierarchy, and a credit-based API system that behaves nothing like Zendesk's rate-limited endpoints.

If you need a fast decision: Zwitch (Zoho's native migration tool) works for straightforward moves where some data loss is acceptable. CSV export is not a full migration method — it omits ticket comments and descriptions. API-led migration is the only safe path when you care about authorship, attachment fidelity, tags, inline images, or cutover without post-migration cleanup.

This guide covers the exact API constraints on both sides, a field-by-field mapping table, the specific limitations of Zwitch, and a direct comparison of migration methods — so you can pick the approach that matches your data volume and risk tolerance.

For a general framework on mapping fields between helpdesks, see Your Ultimate Guide to Data Mapping for a Flawless Helpdesk Migration.

Why Zendesk to Zoho Desk Migrations Lose Data

Data loss in a Zendesk to Zoho Desk migration rarely looks like a catastrophic failure. It looks like a completed import where agents open old tickets and find inline screenshots missing, tags gone, and every thread reply incorrectly marked as "Incoming."

The root cause is structural divergence between the two platforms. Zendesk exposes side conversations, satisfaction ratings, ticket audits, and metric events as first-class API objects. Zoho Desk has no native equivalents for most of these. When a migration tool — including Zoho's own Zwitch — encounters an object with no 1:1 target, it either drops the data or reshapes it in ways that break context. (help.zoho.com)

Three specific failure modes cause the most damage:

  1. Inline images are not migrated by Zwitch. Zoho's documentation states that inline images will remain visible only while the Zendesk account is active. Once you deactivate Zendesk, every inline image in every migrated ticket breaks permanently.
  2. Tags, groups, teams, and collaborators are not migrated. If your Zendesk workflows depend on tags for routing, reporting, or automation triggers, that operational context vanishes on import.
  3. Thread direction is flattened. All thread replies from Zendesk tickets are marked as "Incoming" in Zoho Desk, destroying the distinction between agent responses and customer messages. Thread replies without from or to addresses are assigned to the organization admin and mapped to the Help Center channel.

Destination-side behavior changes are easy to miss in testing. Missing contacts can block ticket import entirely. Missing assignees cause the migration admin to become the ticket owner. Missing comment authors cause comments to be attributed to the admin who submitted the request. Those are not cosmetic changes — they affect search, reporting, ownership, and auditability. (help.zoho.com)

Ticket-count parity after migration is not a useful success metric. A migration can recreate the right number of tickets and still lose the internal context agents need to handle reopened cases.

For a deeper look at common migration pitfalls, see Common Helpdesk Migration Mistakes and How to Avoid Them.

Zendesk Export Limits: The 10 Requests/Minute Bottleneck

Every migration from Zendesk starts with data extraction, and every extraction hits the same wall: Zendesk's Incremental Export API is limited to 10 requests per minute, regardless of your plan tier. This limit applies to the cursor-based incremental export endpoints for tickets, users, and organizations. Exceeding this limit returns a 429 Too Many Requests error. (developer.zendesk.com)

The High Volume API add-on (available on Growth plans and above, minimum 10 agent seats) increases this to 30 requests per minute for incremental exports. Enterprise Plus plans include this add-on by default.

Warning

The 10 req/min limit applies only to incremental export endpoints. Fetching individual ticket comments, attachments, and side conversations uses the standard API, which has separate per-plan limits (e.g., 200 req/min on Team, 400 on Growth). But for bulk data extraction, the incremental export bottleneck is the one that matters.

Why this limit compounds during migration

  • Each incremental export page returns up to 1,000 tickets.
  • Ticket comments and attachments require separate API calls per ticket.
  • A Zendesk instance with 50,000 tickets and an average of 5 comments per ticket requires at least 50,000 additional API calls just for comments.
  • At the standard API limit, extracting comments alone takes hours — before you start downloading attachments.

Attachment downloads are the hidden bottleneck. Each attachment is a separate binary download. Zendesk supports ticket attachments up to 50 MB, but Zoho's ticket-creation limit is 20 MB. Any Zendesk attachment between 20 and 50 MB is a translation problem before you write a single line of import code. (developer.zendesk.com)

ZIP export limitations

If you use Zendesk's built-in data export (ZIP files) rather than the API, be aware of these constraints:

  • Account exports are not enabled by default. The account owner must ask Zendesk support to enable them. The export UI is not available on Team plans, though the REST API remains available. (support.zendesk.com)
  • JSON exports omit items with a system-generated timestamp within six minutes of the request. This creates a gap that requires a delta pass to close.
  • Tickets exceeding 1 MB of data are exported without comments — a separate JSON file is emitted explaining that comments were excluded.
  • CSV exports are not a migration format. They exclude deleted tickets, ticket comments, descriptions, multi-line text, multi-select fields, and custom date fields. CSV is a reporting snapshot, not ticket history.
  • Zendesk recommends JSON exports for accounts with more than 200,000 tickets. Accounts over one million tickets are split into 31-day JSON increments.

The best extraction pattern for API-based migration is to pull ticket events with comment payloads, then fetch inline images separately:

# Incremental ticket events with comment data
curl 'https://{subdomain}.zendesk.com/api/v2/incremental/ticket_events?start_time=1710000000&include=comment_events'
 
# Per-ticket comments with inline images
curl 'https://{subdomain}.zendesk.com/api/v2/tickets/{ticket_id}/comments?include_inline_images=true'

Zendesk marks inline attachments differently from normal file attachments, and inline images are not included in comment attachments by default — you must request include_inline_images=true. (developer.zendesk.com)

For advanced extraction techniques, see 3 Advanced Ways to Export Tickets from Zendesk.

Zoho Desk Import Limits: Credits, Concurrency, and Attachment Caps

The destination side has its own constraints. Zoho Desk does not use a simple requests-per-minute rate limit. Instead, it uses a credit-based system where each API call costs a specific number of credits, and your daily credit pool depends on your edition and user count. (help.zoho.com)

Zoho Desk Edition Base Credits + Per-User Credits
Free / Trial 5,000 + 0
Express 25,000 + 100/user
Standard 50,000 + 250/user
Professional 75,000 + 500/user
Enterprise / Zoho One 100,000 + 1,000/user

Credits reset every 24 hours based on your data center's timezone. Creating a ticket costs 1 credit. Listing tickets costs 3 credits. Search operations cost 3 credits. Once your credits are exhausted, API calls fail with a 429 Too Many Requests response and a Retry-After header until the next reset.

Concurrency limits also apply — the maximum number of API calls that can be active simultaneously, ranging from 5 (Free) to 25 (Enterprise). Concurrency is shared across all OAuth-authenticated integrations for the portal, not per token or per client. That matters in real migrations: your import job competes with existing CRM syncs, marketplace apps, and custom integrations already running against the same Zoho org.

Pagination defaults to 10 records per request and usually tops out at 50 records per call for most listing endpoints. The tickets listing endpoint is a documented exception, supporting up to 100 tickets per call. Do not hard-code one global page size across all endpoints. (desk.zoho.com)

Info

Attachment size limit: Zoho Desk enforces a 20 MB maximum attachment size for ticket creation. Zendesk attachments that exceed this limit will fail to import via the API. Workarounds include converting oversized attachments to secure cloud storage links (e.g., S3 or Google Drive) and embedding the URL in the ticket thread.

Custom field limits by edition: Zoho caps the total number of custom fields you can create — 50 in Standard, 150 in Professional, and 230 in Enterprise. Custom field labels are capped at 50 characters, and restricted characters are replaced with underscores. If your Zendesk build has years of organic field growth, you need a field consolidation pass before import or you will end up with renamed, truncated, or omitted fields. (help.zoho.com)

The practical implication: a Professional-edition Zoho Desk portal with 20 agents has roughly 85,000 daily credits. If each ticket creation costs 1 credit and each comment/thread creation costs another, migrating 40,000 tickets with comments could consume nearly your entire daily budget — before accounting for contact creation, attachment uploads, and validation queries.

Zendesk to Zoho Desk Data Mapping: What Zwitch Drops

Zoho's Zwitch migration tool is a free, built-in utility that ingests Zendesk's ZIP export files (the standard Tickets, Users, and Organizations exports from Zendesk's admin panel). Zoho's documentation says Zwitch also uses Zendesk APIs for custom fields and some knowledge base content, which is why Zoho instructs you not to close Zendesk immediately after export. (help.zoho.com)

Module-level mapping

Zendesk Module Zoho Desk Module
Ticket Tickets, Ticket Comments, Threads, Attachments
User (agent) Agents
User (end-user) Contacts
Organization Accounts
KB Sections, Root Categories, Article Translations Knowledge Base (via API import)

Field-level mapping

Zendesk Field Zoho Desk Field Notes
Subject Subject Direct map
Description Description Direct map
Status Status Requires picklist value alignment
Priority Priority Requires picklist value alignment
Assignee Assignee Agent emails must match; missing agents fall back to migration admin
Requester Contact Contact must exist or ticket import fails
Group Not migrated by Zwitch
Tags Not migrated by Zwitch
Type Classification Manual mapping needed
Custom Fields Custom Fields (cf_*) Zwitch auto-creates fields, except nested custom fields
Ticket ID Zendesk-ID (custom field) Stored for cross-reference
Inline Images Not migrated. Break when Zendesk is deactivated
Side Conversations No Zoho Desk equivalent
Satisfaction Ratings No direct equivalent
Collaborators Not migrated
Department routing Single department via Zwitch Zwitch migrates all data into one department

What Zwitch explicitly drops

Zoho's documentation confirms these items cannot be migrated via Zwitch: (help.zoho.com)

  • Tags — If you use tags for routing, SLA assignment, or reporting, this data is gone.
  • Groups, teams, and collaborators — Ticket assignment and collaboration context is lost.
  • Inline images — Images embedded in ticket descriptions and comments are not transferred. They remain hosted on Zendesk's servers and become inaccessible after account deactivation.
  • Nested custom fields — All other custom field types are auto-created, but nested (dependent) picklists are skipped.
  • Thread direction — All imported thread replies are marked as "Incoming," erasing the distinction between agent and customer messages.
  • Multi-department routing — Zwitch migrates all data into a single Zoho Desk department. If your Zendesk instance uses brands, groups, or queues to model multiple business units, Zwitch will not reproduce that structure. (help.zoho.com)
Danger

Tickets will fail to import if the associated contact (end user) does not already exist in Zoho Desk. Zwitch does not auto-create contacts from ticket data. You must import Users before Tickets, and ensure email addresses match.

Agent and author matching

If a ticket's assignee in Zendesk does not exist as an agent in Zoho Desk (matched by email), the ticket is reassigned to the admin who initiated the migration. The same applies to comments — if the commenting agent doesn't exist in Zoho Desk, the comment is attributed to the migration admin. This silently rewrites your ticket history. Migrated Zwitch records are also deleted 30 days after import.

Migration Methods Compared: Zwitch vs. CSV vs. Custom API vs. Engineer-Led

There are four paths to evaluate. Each trades off cost, coverage, and risk differently.

Method 1: Zoho Zwitch (Native Tool)

How it works: Export ZIP files from Zendesk's admin panel (Settings → Account → Data Export). Upload all three ZIPs (Organizations, Users, Tickets) to Zoho Desk → Data Administration → Zwitch.

Pros:

  • Free
  • No coding required
  • Auto-creates custom fields
  • Handles basic ticket, contact, and account mapping

Cons:

  • Drops tags, groups, inline images, collaborators, and nested custom fields
  • Flattens thread direction (all replies become "Incoming")
  • Migrates all data into a single department
  • No delta sync — tickets created during migration are missed
  • Requires Zendesk account to remain active for inline image access
  • Migrated records are deleted from Zwitch 30 days after import

Best for: Small teams (<1,000 tickets) with simple configurations, no tag-based workflows, no inline images, and a single-department structure.

Method 2: CSV Export

How it works: Export ticket data from Zendesk as CSV files and import into Zoho Desk.

Not a full migration method. Zendesk CSV exports omit ticket comments, descriptions, multi-line text, multi-select fields, and custom date fields. CSV is useful for lightweight contact or account data moves and reporting snapshots — not for ticket history migration. (support.zendesk.com)

Method 3: Custom API Scripts (DIY)

How it works: Engineers write scripts that extract data via Zendesk's REST API (incremental exports + per-ticket comment/attachment fetches) and write it into Zoho Desk via the Zoho Desk REST API.

Pros:

  • Full control over field mapping
  • Can preserve tags (via Zoho Desk's Tag API), thread direction, and inline images
  • Can implement delta sync for near-zero-downtime cutover
  • Can handle attachments over 20 MB by converting to cloud links
  • Can route tickets to multiple departments

Cons:

  • Must handle Zendesk's 10 req/min incremental export limit and Zoho's credit-based API budget
  • Must implement retry logic, pagination, error handling, and idempotency
  • Inline image migration requires downloading each image, re-uploading to Zoho, and rewriting HTML references in ticket descriptions
  • Typical engineering effort: 2–6 weeks for a production-grade script, depending on data complexity
  • No dedicated support if something breaks mid-migration

Best for: Teams with in-house engineering capacity, clear migration requirements, and time to build and test.

Method 4: Engineer-Led Migration Service

How it works: A dedicated migration team builds and runs custom scripts on your behalf, handling rate-limit management, field mapping, attachment conversion, inline image preservation, tag migration, and delta sync.

Pros:

  • Preserves data that Zwitch drops: tags, inline images, thread direction, nested custom fields
  • Handles both Zendesk's export throttles and Zoho's credit/concurrency constraints
  • Converts oversized attachments to secure cloud links
  • Runs delta sync to capture tickets created during the migration window
  • Post-migration QA and validation

Cons:

  • Higher cost than free tools
  • Requires sharing API credentials with external team

Best for: Teams with >5,000 tickets, tag-based workflows, inline images in ticket history, multi-department structures, or zero tolerance for data loss.

Method Best fit Main constraints Honest verdict
Zwitch Straightforward one-time move Drops tags, groups, inline images, nested fields; single department; authorship fallback to admin Good for a good enough move, not for strict fidelity
CSV Reporting snapshots, lightweight data moves Excludes comments, descriptions, and several custom field types Not a full migration method
Custom API (DIY) High volume, high fidelity, custom mapping Highest implementation effort; must engineer retries, idempotency, attachment handling Full control, but weeks of engineering
Engineer-led service High volume, compliance-sensitive, zero-downtime Higher cost; requires credential sharing Safest option when native gaps are unacceptable

The common mistake is choosing the cheapest-looking method before classifying the data. If your Zendesk instance has low attachment volume, no inline images, minimal custom fields, and one department, Zwitch may be enough. If you have brands, deep ticket history, large files, nested fields, or audit requirements, the cost center is not migration tooling — it is post-cutover cleanup and agent confusion.

For a framework on keeping your support team operational during the move, see Zero-Downtime Helpdesk Migration: How to Keep Support Running During the Move.

Step-by-Step: Running the Migration via Zwitch

If Zwitch meets your requirements, here is the exact process:

Step 1: Export data from Zendesk. Go to Zendesk Admin Center → Account → Data Export. Request full exports for Tickets, Users, and Organizations. Zendesk emails download links when exports are ready. Download all three ZIP files. Note: account exports must be enabled by Zendesk support first — they are not on by default.

Step 2: Prepare your Zoho Desk environment. Create departments, add agents (email addresses must match Zendesk agent emails), and configure any custom statuses or picklist values that need to exist before import. Trim or merge custom fields to fit your Zoho Desk edition's field limits.

Step 3: Upload to Zwitch. In Zoho Desk, go to Setup → Data Administration → Zwitch. Select Zendesk as the source. Upload all three ZIP files in a single Zwitch request.

Step 4: Map fields. Zwitch will display a mapping preview. Review auto-created custom fields. Verify that status and priority picklist values align between platforms.

Step 5: Initiate migration. Submit the Zwitch request. Monitor progress in the Zwitch dashboard.

Step 6: Validate. Spot-check tickets for missing data. Verify that contact-ticket associations are correct. Check for unassigned tickets (indicating agent email mismatches). Test tickets with inline images, private notes, and oversized attachments specifically — average-ticket sampling is how teams miss the real breakpoints.

Warning

Do not deactivate your Zendesk account until you have verified all data. Inline images in migrated tickets are still served from Zendesk's servers. Once you deactivate, those images break permanently.

What to Do Before You Start

Regardless of which method you choose, complete these steps first:

  1. Audit your Zendesk data. Count tickets, contacts, organizations, and attachments. Identify how many tickets contain inline images. List all tags in active use. Inspect attachment size distribution — anything above 20 MB needs a workaround plan.
  2. Map your custom fields. Document every custom field type, name, and picklist value. Identify nested/dependent fields. Check whether your field count exceeds Zoho's edition limits (50 Standard, 150 Professional, 230 Enterprise). Labels over 50 characters will be truncated.
  3. Align statuses and priorities. Zoho Desk's default statuses (Open, On Hold, Escalated, Closed) may not match your Zendesk configuration. Create custom statuses in Zoho Desk before import.
  4. Create agents first. Agent email addresses must match between platforms. Add all agents to Zoho Desk and assign them to the correct departments before migrating tickets.
  5. Decide on department structure. If your Zendesk instance uses brands, groups, or queues for multiple business units, decide whether a single-department Zwitch import is acceptable or whether you need custom import logic.
  6. Plan your cutover window. Decide whether you'll do a hard cutover (stop Zendesk, migrate, start Zoho) or a delta sync (migrate historical data, run both systems briefly, then sync the gap). Zendesk exports have a time gap near the request window, so a delta pass is almost always necessary for a clean cutover.
  7. Test against ugly tickets, not average ones. Pick examples with private notes, missing agents, oversized files, inline screenshots, non-English status values, and complex custom fields. Average-ticket sampling misses the real breakpoints.
  8. Do not deactivate Zendesk prematurely. Keep it active until all data — especially inline images — is verified in Zoho Desk.

For a complete pre-migration checklist, see The Go-Live Day Checklist: 15 Things to Do for a Smooth HelpDesk Migration.

How ClonePartner Handles Zendesk to Zoho Desk Migrations

Our approach is built around the specific failure modes described in this guide:

  • Rate limit engineering. We manage Zendesk's 10 req/min incremental export cap and Zoho's credit budget with production-grade throttling and retry logic. No 429 errors, no skipped records.
  • Inline image preservation. We download every inline image from Zendesk, re-upload it to Zoho, and rewrite the HTML references in ticket descriptions and comments so images render correctly after Zendesk is deactivated.
  • Tag and group migration. We map Zendesk tags to Zoho Desk tags via the Tag API. We recreate group-based assignment structures using Zoho Desk's team and department features.
  • Thread direction fidelity. We preserve the distinction between agent replies and customer messages, so agents reviewing old tickets see accurate conversation history.
  • Nested custom fields and field normalization. We handle the custom field types that Zwitch drops, including dependent picklists, and normalize field labels and values to fit Zoho's edition constraints.
  • Oversized attachments. Attachments exceeding Zoho's 20 MB limit are converted to secure cloud-hosted links embedded in the ticket thread.
  • Delta sync. We run a final sync pass immediately before cutover to capture tickets created during the migration window, closing the time gap that Zendesk exports leave open.
  • Multi-department routing. We map Zendesk brands and groups into Zoho Desk's department structure rather than collapsing everything into a single department.

Every migration ships with post-migration validation: ticket counts, attachment integrity checks, contact-ticket association verification, and custom field value spot-checks. We validate against the hardest tickets in your data, not the average ones.

Frequently Asked Questions

Does Zoho Zwitch migrate tags and inline images from Zendesk?
No. Zoho's Zwitch documentation explicitly excludes tags, groups, teams, collaborators, and ticket inline images. Tags must be migrated via Zoho Desk's Tag API using custom scripts. Inline images remain hosted on Zendesk's servers and break permanently once the Zendesk account is deactivated.
What are the API rate limits for a Zendesk to Zoho Desk migration?
On Zendesk, incremental exports are capped at 10 requests per minute (30 with the High Volume API add-on). On Zoho Desk, imports consume daily API credits based on your edition and user count, plus an org-wide concurrency limit shared across all integrations.
Can I use a Zendesk CSV export for a full migration to Zoho Desk?
No. Zendesk CSV exports omit ticket comments, descriptions, multi-line text, multi-select fields, and custom date fields. CSV is only suitable for lightweight contact or account moves and reporting snapshots — not ticket history migration.
What happens to Zendesk attachments over 20 MB during migration?
Zendesk supports attachments up to 50 MB, but Zoho Desk's ticket-creation limit is 20 MB. Attachments between 20 and 50 MB will fail to import via the API. The standard workaround is to rehost oversized files as secure cloud links embedded in the ticket thread.
Can Zwitch migrate Zendesk tickets into multiple Zoho Desk departments?
No. Zoho's Zwitch FAQ states that the migration engine currently places all data into a single Zoho Desk department. Multi-department routing from Zendesk brands or groups requires custom API import logic.

More from our Blog

3 Advanced Ways to Export Tickets from Zendesk
Zendesk

3 Advanced Ways to Export Tickets from Zendesk

Frustrated by Zendesk's 1000-ticket export limit and slow, manual data pulls? This guide explores three advanced methods for users who have outgrown the basics. We compare the pros and cons of using the Zendesk API , Marketplace apps , and ETL platforms for large-scale data migration , automated backups , and real-time BI reporting

Raaj Raaj · · 10 min read
Your Ultimate Guide to Data Mapping for a Flawless Helpdesk Migration (with CSV Templates)
Help Desk

Your Ultimate Guide to Data Mapping for a Flawless Helpdesk Migration (with CSV Templates)

This guide provides a complete playbook for data mapping, the most critical step for a flawless helpdesk migration. It explains how to match data fields from your old help desk to your new one, ensuring no customer data is lost and your reports remain accurate. You'll get practical templates for mapping tickets, users, and organizations , along with CSV examples showing how to transform data like ticket statuses. Learn to avoid common, costly mistakes like mishandling custom fields, ignoring attachments, or forgetting data dependencies.

Raaj Raaj · · 7 min read
Common Helpdesk Migration Mistakes and How to Avoid Them 
Help Desk

Common Helpdesk Migration Mistakes and How to Avoid Them 

This blog describes the biggest helpdesk migration mistakes and how to avoid them. Key tips include creating a migration plan, backing up data, mapping fields correctly, verifying permissions, and testing before go-live.

Raaj Raaj · · 11 min read
Zero-Downtime Helpdesk Migration: How to Keep Support Running During the Move
Help Desk

Zero-Downtime Helpdesk Migration: How to Keep Support Running During the Move

This guide details the 3-stage technical process for a zero-downtime helpdesk migration. Learn how to use an initial bulk data transfer, a continuous delta migration (Change Data Capture), and a seamless final cutover to move platforms without any service interruption. Discover how an engineer-led approach can guarantee a 100% accurate, 50x faster migration.

Raaj Raaj · · 6 min read