Phase 0
Decide & Plan
Decisions that must be made before any extraction work starts.
-
Risk if skipped: Late-discovered modules force schema changes mid-migration and trigger re-runs of upstream transform jobs.
-
Risk if skipped: Choosing a lower edition than the data requires blocks Sandbox testing, per-Department customization, and Blueprint-driven state machines.
-
Risk if skipped: Without a written strategy, ticket-aging reports and SLA-historical analysis will reset on cutover day.
-
Risk if skipped: Provisioning in the wrong DC cannot be reversed by moving data later — it requires a fresh org and a second migration.
-
Risk if skipped: Loading all tickets into one Department when the business needs multiple Departments later forces a second migration to re-distribute records.
-
Risk if skipped: Without written criteria, the migration drags on indefinitely because nobody can declare it done.
Phase 1
Pre-Migration Prep
Everything that must be true before the first byte leaves the source.
1a. Source-system audit and cleansing
-
Risk if skipped: Without a baseline, you cannot prove what was lost in transit.
-
Risk if skipped: Duplicate Contacts split ticket history across two records and break Contact-level reporting.
-
Risk if skipped: Rows with empty required fields are dropped to the error log and do not appear in the destination.
-
Risk if skipped: Missing source statuses cause ticket rows to be skipped with a picklist-validation error during import.
1b. Destination-system setup
-
Risk if skipped: Skipping Sandbox forces every test to happen in production where errors are visible to end users.
-
Risk if skipped: Loading tickets into a Department that does not exist places them in the default Department and forces a manual move at volume.
-
Risk if skipped: Mismatched agent emails leave Ticket Owner blank and force a second pass to reassign at volume.
-
Risk if skipped: Changing time zone after import does not retroactively re-stamp records and creates an off-by-N-hours bug on every datetime field.
-
Risk if skipped: Silent column drops are the single most common cause of Phase 6 reconciliation gaps.
-
Risk if skipped: Unknown picklist values are rejected row by row and the row is skipped to the error log.
-
Risk if skipped: An active auto-acknowledgement workflow during a 50,000-ticket load emails every contact at cutover.
-
Risk if skipped: Active validation rules can reject otherwise-valid imported records on unrelated field-state conditions.
-
Risk if skipped: Without a Source ID, re-running a failed import duplicates every record.
-
Risk if skipped: Articles imported without a Section land in an unsorted area and require manual re-filing per article.
1c. People prep
Phase 2
Source Export
Get all data out of the source system in a form you can transform.
-
Risk if skipped: Missing Channel or Department columns force every ticket into the default Department and a single channel.
-
Risk if skipped: Importing tickets without Threads loses the entire conversation history and leaves agents with only the original Description.
-
Risk if skipped: Exporting Contacts without the Account foreign key forces a manual re-association later, which is error-prone at volume.
-
Risk if skipped: Articles with a Status value outside the allowed three values are rejected at import.
-
Risk if skipped: Files larger than the per-file cap will not load and silently leave records unlinked.
Phase 3
Transform & Map
The data-engineering core. Take raw exports and produce Zoho Desk-shaped files.
3a. Mapping spreadsheet
-
Risk if skipped: Without a single mapping document, transform logic drifts between engineers and reconciliation finger-pointing becomes unavoidable.
-
Risk if skipped: Choosing Clone by accident on a re-run creates duplicate Contacts, Accounts, and Tickets.
-
Risk if skipped: Mismatched picklist values cause row-level skips at insert time, with the row reported in the import error log but not loaded.
3b. Data transformation
-
Risk if skipped: Date-format mismatches cause the entire CSV column to be rejected with no clear row-level diagnostic.
-
Risk if skipped: Non-UTF-8 files convert accented characters to mojibake or ASCII escape codes.
-
Risk if skipped: Rows exceeding field width are rejected at import time.
-
Risk if skipped: Tags passed as plain comma-separated strings without brackets are rejected and the ticket row imports without tags.
-
Risk if skipped: Oversize ZIPs are rejected by the UI Import with no row-level diagnostic.
3c. Relationship and audit-trail decisions
-
Risk if skipped: Reporting on Created Time when UI Import was used will show every ticket dated to migration day, destroying time-series trend analysis.
-
Risk if skipped: Loading Ticket Owner as the agent's display name leaves every ticket unassigned and forces a second pass.
-
Risk if skipped: Re-uploading 100 GB of attachments into a Standard org saturates storage and blocks new records.
-
Risk if skipped: Loading Tickets before Contacts creates orphan Tickets with a placeholder Contact that must be merged later.
-
Risk if skipped: Skipping the parent-child link step leaves duplicate-ticket clusters that the support team has been manually merging.
3d. Helpdesk-specific transforms
-
Risk if skipped: Threads loaded out of sequence display in the wrong order in the agent UI; comments loaded as Threads break public/private visibility.
-
Risk if skipped: Loading Articles before Sections leaves orphan Articles in an unsorted area that has to be re-filed manually.
-
Risk if skipped: Skipping this transform leaves the helpdesk with no automation on cutover day and forces agents to do everything manually.
-
Risk if skipped: An active Blueprint rejects Status values that violate transition rules, causing partial imports.
-
Risk if skipped: Loading open tickets before SLA policies are active means their SLA clock starts from migration day rather than original Created Time.
-
Risk if skipped: Customer-success reports that depend on Happiness Ratings will show zero for the pre-cutover window.
-
Risk if skipped: Cutting over before channels are wired means inbound tickets via the old channels stop arriving the moment the source freeze starts.
-
Risk if skipped: Restarting the SLA clock on cutover hides every breached ticket and makes the team look better than they are.
Phase 4
Sandbox Test Migration
Catch every problem in Sandbox before it costs you in production.
-
Risk if skipped: Sampling fewer than 10 records misses field-level drops that only surface on certain ticket subtypes.
-
Risk if skipped: Misordered threads make the entire ticket history unreadable for agents.
-
Risk if skipped: Character-encoding bugs are invisible until a customer sees mojibake in a reply.
-
Risk if skipped: Going straight to a full Zwitch run without a Sample Migration risks queueing the full load behind a fixable formatting bug.
-
Risk if skipped: Discovering revert limitations in production after a bad load means manual cleanup per record.
-
Risk if skipped: Verbal sign-offs evaporate when reconciliation surfaces an issue post-cutover.
Phase 5
Production Cutover
Tightly sequenced execution window. Densest cluster of risk.
-
Risk if skipped: Skipping the delta loses every ticket created between Phase 2 export and cutover.
-
Risk if skipped: An active auto-acknowledgement workflow at cutover sends thousands of accidental emails in minutes.
-
Risk if skipped: Out-of-order loads leave lookup fields blank with no error and require a second pass to repair.
-
Risk if skipped: Choosing Clone on a re-run after partial failure duplicates every previously-loaded record.
-
Risk if skipped: Oversize submissions are rejected without partial success.
-
Risk if skipped: Pushing through with an unexplained count delta makes Phase 6 reconciliation impossible.
-
Risk if skipped: Failing to Confirm leaves the load in a provisional state and a stray Revert click could delete the imported records.
Phase 6
Validate
Prove the migration was correct before letting agents back in.
6a. Reconciliation
-
Risk if skipped: Unexplained deltas typically trace to skipped picklist values, missing required fields, or unmapped Departments.
-
Risk if skipped: Missing Threads are the most common cause of post-cutover support escalations because agents lose conversation context.
-
Risk if skipped: Null Source IDs force every subsequent upsert to treat the record as new, creating duplicates.
6b. Relationship validation
-
Risk if skipped: Reversed direction makes agents reply to themselves, which has happened in real migrations.
6c. Audit and compliance
-
Risk if skipped: Audit-log capture immediately post-cutover is the cheapest SOC 2 evidence; pulling it months later may not be possible.
6d. User-acceptance check
-
Risk if skipped: An unconfigured channel means inbound customer messages vanish silently.
6e. Sign-off
-
Risk if skipped: Proceeding without sign-off leaves the project in a perpetual 'almost done' state.
Phase 7
Post-Migration Cleanup
Wrap up so the team can move on.
-
Risk if skipped: Forgetting this step means customer emails to the support address vanish silently.
-
Risk if skipped: Marketing-automation re-sync without Source-ID checks duplicates every contact.
-
Risk if skipped: Discarding exports too early eliminates forensic options if a data-quality issue surfaces months later.
Watch list
Risks to track throughout
These risks live across multiple phases — keep an eye on them from kickoff through cutover.
-
Created Time can only be preserved via Zwitch, not via UI Import
Zoho Desk's standard UI Import stamps Created Time at the moment of insert and does not let the import override it. Only the Zwitch migration path preserves original Created Time and Closed Time. Decide the load path in Phase 0, plan the Source Created Date custom field in Phase 1 if UI Import is chosen, and flag the implications for ticket-aging and SLA-historical reporting before the analytics team builds dashboards on the wrong timestamp field.
-
Validation Rules fire on untouched fields during update
Zoho Desk Validation Rules trigger for every field during an update, including fields that the import did not modify. A rule that requires Resolution when Status is Closed will reject every Closed ticket on import even if the rule has nothing to do with the imported columns. Disable Validation Rules in Phase 1, keep them disabled through Phase 5, and run a re-validation pass in Phase 6 before reactivating.
-
ZIP and row ceilings on the UI Import path
The Zoho Desk UI Import accepts a single ZIP of CSVs, capped at 30 MB total and 10,000 rows per CSV. A 200,000-ticket migration requires at least 20 ZIPs run sequentially. Plan the batching in Phase 3, time the Sandbox runs in Phase 4, and confirm the cutover window in Phase 5 accommodates the serial submission rather than assuming a single bulk job.
-
Multi-channel inbox cutover happens outside the data load
Migrating Tickets does not migrate the email, web form, SalesIQ chat, Zoho Voice, social, or ASAP widget channels themselves — each must be configured independently in Zoho Desk and the source channel must be deactivated at the cutover moment. Track this from Phase 1 (channel setup) through Phase 5 (DNS/mailbox cutover) through Phase 6 (channel-by-channel UAT). A missed channel means inbound customer messages vanish silently.
Pair this with the long-form guide
The complete Zoho Desk migration guide
Same research, written as prose: data model, import mechanisms, mapping strategy, pitfalls, and partner landscape.