Skip to content

Zendesk to ServiceNow Migration: The 2026 Technical Guide

Technical guide for migrating Zendesk to ServiceNow. Covers ITIL ticket classification, data mapping, API export limits, SLA redesign, and common pitfalls.

Nachi Nachi · · 22 min read
Zendesk to ServiceNow Migration: The 2026 Technical Guide
TALK TO AN ENGINEER

Planning a migration?

Get a free 30-min call with our engineers. We'll review your setup and map out a custom migration plan — no obligation.

Schedule a free call
  • 1,500+ migrations completed
  • Zero downtime guaranteed
  • Transparent, fixed pricing
  • Project success responsibility
  • Post-migration support included

Zendesk to ServiceNow Migration: The Technical Guide

Moving from Zendesk to ServiceNow is not a standard help desk migration — it is a paradigm shift. You are going from a flat, customer-support-oriented ticketing system to a structured, ITIL-driven enterprise platform. Every Zendesk ticket must be classified as an Incident, Service Request, or Change before it touches ServiceNow. The data models, automation engines, CMDB dependencies, and SLA frameworks are architecturally different. This guide covers exactly how to handle that transition — including the ITIL classification logic, API extraction constraints, import mechanics, CMDB considerations, validation procedures, and rollback planning.

What Makes Zendesk-to-ServiceNow Migration Different

Most help desk migrations are lateral moves — Zendesk to Freshdesk, Intercom to Help Scout. The data model is similar enough that you are essentially mapping field-to-field.

Zendesk-to-ServiceNow is a vertical move. You are transitioning from a customer support tool to an enterprise ITSM platform built on ITIL principles. The core difference:

  • Zendesk uses a flat ticket model. Every issue — whether it is a broken laptop, a password reset, or a hardware request — is a "ticket." Zendesk has a type field (Question, Incident, Problem, Task), but these are labels. They do not enforce different workflows or route to separate tables.
  • ServiceNow separates issues by ITIL process. An unplanned service disruption is an Incident (table: incident). A user requesting new software is a Service Request (table: sc_request, with fulfillment tracked via Requested Items in sc_req_item). A planned infrastructure change is a Change Request (table: change_request). Each has its own table, its own state model, and its own lifecycle. (servicenow.com)
  • ServiceNow also supports Customer Service Management (CSM). If your Zendesk instance serves external customers (not internal IT), your target may be the CSM module, where tickets map to Cases (sn_customerservice_case) rather than Incidents. The data model, SLA structure, and assignment logic differ significantly between ITSM and CSM. Determine which module is your target before designing your migration.

This means you cannot pipe Zendesk tickets into a single ServiceNow table. You need conditional logic that inspects each ticket and routes it to the correct ServiceNow table based on its content, tags, and type. That classification decision is the single hardest part of this migration.

Pushing a decade of flat Zendesk tickets into ServiceNow's Incident table will corrupt your ITSM reporting and violate ITIL best practices. For teams evaluating the broader ITSM landscape, this rigid structure is a primary differentiator covered in our ServiceNow vs Jira Service Management Architecture Guide.

Warning

Do not make ticket → incident your default rule for everything. If you flatten access requests, onboarding asks, equipment orders, and information requests into incidents, you preserve history but break future SLA reporting, catalog fulfillment, and queue ownership.

How to Map Zendesk Data to ServiceNow

Mapping data from Zendesk to ServiceNow requires translating objects from a customer support context into an enterprise service management context. Here is the entity-level mapping. The table covers the major objects; the subsections below cover the ones that require real engineering work.

Zendesk Entity ServiceNow Entity ServiceNow Table Notes
Ticket (break/fix) Incident incident Requires ITIL classification logic
Ticket (request) Requested Item (RITM) sc_req_item Routed via Service Catalog; requires Service Catalog licensing
Ticket (external customer) Case sn_customerservice_case If using CSM module; requires CSM entitlement
Organization (ITSM) Company core_company Map org fields to company fields
Organization (CSM) Account customer_account If using Customer Service Management
User (end user) User sys_user Deduplicate by email
User (agent) User (ITIL role) sys_user Assign itil role; see role mapping section below
Ticket comment Journal entry sys_journal_field Public → Additional Comments, Internal → Work Notes
Custom field Dictionary entry Per-table Create via Table schema
Tag Label / Category Varies No direct equivalent; use labels or categories
Trigger Business Rule / Flow sys_script Server-side; condition + script
Automation Scheduled Job / Flow sysauto_script Flow Designer preferred
Macro Template sys_template Pre-fill field values
Zendesk Guide article Knowledge Article kb_knowledge Map sections → categories
SLA Policy SLA Definition contract_sla Fundamentally different model
Asset (if tracked) Configuration Item cmdb_ci or subclass See CMDB section below

Tickets → Incidents and Service Requests

This is where most migrations stall. In Zendesk, a "ticket" is a ticket. In ServiceNow, you must decide: is this an Incident (something is broken) or a Service Request (the user wants something new)?

There is no automated way to do this without understanding your historical data. The approach that works:

  1. Audit Zendesk ticket types and tags. If you used Zendesk's built-in type field consistently ("Incident" vs. "Question"), use that as the primary classifier.
  2. Build a rules engine. Map combinations of Zendesk tags, form fields, and group assignments to ServiceNow record types.
  3. Default to Incident for ambiguous tickets. In ITIL practice, if something is not clearly a request, it is treated as an incident. This is safer for historical data than inventing a request classification after the fact.

A practical classification matrix looks like this:

Zendesk Condition ServiceNow Target Table
Type = "Incident" OR tag contains "outage" or "bug" Incident incident
Type = "Question" AND tag contains "access_request" Requested Item sc_req_item
Form = "Hardware Request" or tag = "hardware_request" Requested Item sc_req_item
Type = "Problem" AND tag contains "root_cause" Problem problem
Group = "Customer Support" AND org is external Case (CSM) sn_customerservice_case
Default (no match) Incident incident

You must also map Zendesk's core statuses (New, Open, Pending, Solved, Closed) to ServiceNow's state values, which differ depending on whether the target is an Incident or a Request:

Zendesk Status ServiceNow Incident State ServiceNow RITM State
New 1 – New 1 – Open
Open 2 – In Progress 2 – Work in Progress
Pending 4 – Awaiting Caller 4 – Awaiting Info
Solved 6 – Resolved 3 – Closed Complete
Closed 7 – Closed 4 – Closed

Document this dictionary mapping explicitly before migration.

User and Agent Role Mapping

Zendesk has two basic user types: end users and agents (with optional admin roles). ServiceNow has a granular role architecture. Mapping requires more than assigning the itil role:

Zendesk Role ServiceNow Role(s) Notes
End user snc_internal or snc_external Internal employees vs. external contacts
Agent itil Base ITSM fulfiller role
Agent (KB author) itil + knowledge If agent wrote Guide articles
Agent (catalog manager) itil + catalog_admin If managing service catalog items
Admin itil_admin or admin Scope based on actual admin duties
CSM agent sn_customerservice_agent If migrating to CSM module

Assign roles based on actual job function, not Zendesk role labels. Over-provisioning ServiceNow roles is a common post-migration security finding.

CMDB Considerations

ServiceNow's Configuration Management Database (cmdb_ci and its subclass tables) is central to ITSM. Incidents and Requests in ServiceNow link to Configuration Items (CIs) via the cmdb_ci reference field, enabling impact analysis and change tracking.

Zendesk has no native CMDB. However, your Zendesk tickets may contain CI-related data in custom fields (e.g., "Affected System," "Hardware Model," "Application Name") or tags. During migration:

  1. Identify CI-adjacent fields in Zendesk. Custom fields like "Application," "Server," or "Device" may map to CIs.
  2. Decide whether to populate cmdb_ci references on migrated records. If your ServiceNow CMDB is already populated (e.g., via Discovery or a prior CMDB project), you can map Zendesk field values to existing CIs by name or serial number.
  3. If your CMDB is empty, do not block migration on CMDB population. Populate the cmdb_ci field where you have clean data; leave it null otherwise. Backfilling CI relationships post-migration is common.
  4. Map the relationship correctly. On the incident table, the field is cmdb_ci (reference to cmdb_ci). On sc_req_item, the field is configuration_item. Both are reference fields, not free text.

Ignoring the CMDB during migration means your imported incidents lack the CI context that ServiceNow's impact analysis, change management, and problem management modules depend on.

Triggers and Automations → Business Rules and Flows

Zendesk triggers fire on ticket create/update events and execute actions like sending emails, setting fields, or adding tags. Zendesk automations are time-based and checked hourly. Neither migrates automatically.

ServiceNow Business Rules are server-side scripts that run on table operations (before, after, async, or display). They are more powerful but require scripting knowledge. There is no 1:1 automated conversion — you need to manually rebuild each trigger as either:

  • A Business Rule (for field manipulation and data validation)
  • A Flow Designer flow (for multi-step automations — ServiceNow's preferred path for new process automation)
  • A Notification (for email sends)
Warning

Do not try to replicate every Zendesk trigger in ServiceNow. Many triggers exist because of Zendesk's limitations. ServiceNow's out-of-the-box ITSM workflows handle most routing and notification scenarios natively. Audit your triggers first, migrate only the ones that map to genuine business logic, and let ServiceNow's OOB features handle the rest.

Deploy new Business Rules and Flows via Update Sets (or scoped applications) through your instance pipeline (dev → test → prod). Do not create automation directly in production — ServiceNow best practice requires promoting changes through sub-production instances.

Zendesk Guide → ServiceNow Knowledge Base

Zendesk Guide uses a three-level hierarchy: Categories → Sections → Articles. ServiceNow's Knowledge Base uses: Knowledge Bases → Categories → Articles (stored in kb_knowledge).

The structural mapping is straightforward, but the execution has edge cases:

  • Inline images: Zendesk stores these on its own CDN. After migration — or after you decommission Zendesk — those URLs will break. You need to download every inline image, upload it as a ServiceNow attachment, and rewrite the <img> tags in the article HTML. (support.zendesk.com)
  • HTML sanitization: ServiceNow's TinyMCE editor handles HTML differently than Zendesk. Complex Zendesk Guide themes, custom CSS, embedded videos, and interactive elements will need manual adjustment after migration.
  • Internal cross-links: Any article linking to another Zendesk Guide article needs its href rewritten to the new ServiceNow KB article URL.
  • Drafts and unpublished articles: Zendesk Guide supports draft states. Map these to ServiceNow's "Draft" workflow state to prevent accidental publication.
  • Theme vs. content: Zendesk Guide theme code is a separate asset from article content. Theme migration is distinct from article migration.
  • Knowledge article authors: Map the author field to a valid sys_user record with the knowledge role, or articles may fail validation.

Custom Fields → Table Dictionary Fields

Zendesk custom fields are often generic strings or dropdowns. In ServiceNow, these must be mapped to specific dictionary types on the target table (incident, sc_req_item, or custom extended tables):

  • Zendesk dropdown fields → ServiceNow choice fields
  • Zendesk text fields → ServiceNow string fields
  • Zendesk multi-select fields need special handling — ServiceNow does not natively support multi-select on all field types. You may need to convert these to string fields with delimited values or use a related table.
  • Zendesk dependent field logic requires attention during transform, since ServiceNow Import Set staging accepts string name-value pairs only, so type coercion and enum cleanup belong in your Transform Map script.
  • Zendesk date and regex fields need explicit type mapping in the ServiceNow dictionary entry to avoid silent string storage.

SLA Policies → SLA Definitions

This mapping is deceptively complex. Zendesk SLA policies are condition-based rules tied to the Priority field, measuring metrics like First Reply Time and Resolution Time across four priority levels.

ServiceNow SLA Definitions (contract_sla) are a different beast entirely. They support:

  • Start, stop, and pause conditions — not just priority-based, but any field-level condition
  • Schedules (cmn_schedule) for business hours calculations
  • Multiple SLA types on a single record: SLAs, OLAs (Operational Level Agreements), and Underpinning Contracts
  • Workflow-driven escalations at configurable thresholds (50%, 75%, 90%, breach)

You cannot copy Zendesk SLA targets into ServiceNow. You need to redesign your SLA framework to take advantage of ServiceNow's richer model. Map each Zendesk SLA policy to a ServiceNow SLA Definition, set the appropriate start/stop/pause conditions, and attach the correct schedule. If you want to retain historical SLA breach data, map it to the task_sla table.

One known pitfall: frequently changing dot-walked fields are a poor choice in SLA conditions because ServiceNow's repair logic does not replay their historical state the way teams often assume.

Licensing Considerations

ServiceNow licensing affects which tables and modules are available to your migration. Verify your entitlements before designing the data model:

  • ITSM Standard includes Incident, Problem, Change, and basic Service Catalog.
  • ITSM Professional adds Virtual Agent, Predictive Intelligence, and Performance Analytics.
  • CSM is separately licensed and required if you target sn_customerservice_case.
  • Service Catalog (included in ITSM) is required to use sc_request and sc_req_item.
  • Knowledge Management requires the Knowledge plugin (com.glideapp.knowledge) to be activated.
  • CMDB is included with the platform, but Discovery and Service Mapping are separately licensed.

A migration plan that targets sc_req_item assumes Service Catalog is licensed. If it is not, your Requested Items have nowhere to land.

Exporting Zendesk Data: API Limits and the 1,000-Row Trap

Zendesk's built-in export options are surprisingly limited for a platform of its size. Many IT teams attempt to extract data using native CSV exports. This approach fails immediately in enterprise environments.

The CSV View Export Trap

Zendesk's CSV view export silently caps at 1,000 rows and excludes ticket comments, descriptions, and attachments. If you have 5,000 tickets in a view, you get the first 1,000 and no warning that 4,000 are missing. Zendesk also limits view exports to once every 10 minutes, and larger views can fail entirely. (support.zendesk.com)

The JSON/XML Account Export

The full account export (Admin Center → Account → Tools → Reports) is better — it includes comments for most tickets. But there is a catch: if a single ticket exceeds 1 MB of data, comments are stripped from that ticket's JSON entry without clear notification. CSV exports from this page still exclude comments entirely. Deleted tickets are also excluded. (support.zendesk.com)

Important: Zendesk's built-in data export must be enabled by Zendesk support at the account owner's request. This can take 24–48 hours. Do not wait until migration week to discover this.

API-Based Extraction

The Zendesk REST API is the only reliable path for migration-grade extraction:

  • Use the Incremental Ticket Export endpoint (/api/v2/incremental/tickets) for bulk ticket retrieval. Sideload comment_events to get comments included in the response — without this sideload, you only get flags that a comment exists. (developer.zendesk.com)
  • Fetch attachments separately via the Ticket Comments endpoint (/api/v2/tickets/{id}/comments), then download each file from its content_url. Attachments are returned as temporary, authenticated URLs — your migration script must download the binary file and store it for injection into ServiceNow. (developer.zendesk.com)
  • Rate limits vary by plan: 200 req/min for Team, 400 for Professional, 700 for Enterprise. The Incremental Export endpoint is further limited to 10 requests per minute and excludes the most recent minute of activity.
  • Cursor-based pagination does not provide a total record count, so progress tracking needs separate counters or checkpoints. (developer.zendesk.com)

Zendesk Guide article attachments are a separate Help Center object from ticket attachments, with their own URLs. If you export only tickets, you do not have the full history. For a deeper dive into extraction strategies, see our guide on 3 Advanced Ways to Export Tickets from Zendesk.

Observed Extraction Throughput

For planning purposes, these are realistic extraction rates based on Zendesk API behavior:

Operation Approximate Throughput (Enterprise plan)
Incremental ticket export (with sideloads) ~1,000 tickets/min
Individual ticket comments fetch ~500 tickets/min (parallel, respecting 700 req/min)
Attachment download (depends on file size) ~50–200 files/min
Full extraction with comments + attachments (50K tickets) 4–8 hours

These numbers vary based on average ticket size, attachment count, and Zendesk server load.

Importing to ServiceNow: Import Sets and Payload Limits

ServiceNow provides the Import Set API for bulk data ingestion, which uses staging tables and Transform Maps to load data into target tables like incident. The pattern is: stage first, transform second. While powerful, this API has strict operational limits that will break naive migration scripts. (servicenow.com)

The 10 MB Payload Limit

ServiceNow's REST API enforces a default inbound payload limit of 10 MB, controlled by the glide.rest.max_content_length property. The maximum you can set this to is 25 MB. If you are sending batches of Zendesk tickets with base64-encoded attachments, you will hit this limit fast. (servicenow.com)

The fix: chunk your payloads. Send tickets in batches of 50–100 records, and handle attachments via the dedicated Attachment API (/api/now/attachment/file) rather than embedding them in the ticket payload. The Import Set insertMultiple endpoint expects flat string name-value pairs — if you push nested JSON into staging, the stored format may not match what you intended.

Semaphore Queue Exhaustion (HTTP 429 Errors)

ServiceNow does not use simple per-minute rate limits like Zendesk. It uses semaphore pools to manage concurrent transactions. In a documented ServiceNow example configuration, 16 active plus 150 queued transactions means the 167th concurrent request is rejected with HTTP 429. That example is not a universal limit — actual capacity depends on your instance's node count and configuration — but the pattern is universal: if you over-parallelize, you lose stability before you gain throughput. (servicenow.com)

Long-running operations — like Transform Maps with complex business rules — hold semaphores longer and fill the queue faster. Aggressive multi-threading will effectively DDoS your own ServiceNow instance, causing performance degradation for active users.

Best practices:

  • Use dedicated integration service accounts so your migration traffic does not compete with other ServiceNow integrations
  • Implement exponential backoff on 429 responses
  • Send data in sequential batches, not massively parallel threads — 3–5 concurrent threads is a practical ceiling for most instances
  • Monitor semaphore health via stats.do on your ServiceNow instance
  • Load the task record first, then attach binaries and write comment/work-note history as separate operations

Observed Import Throughput

Realistic import rates for ServiceNow's Import Set API, based on standard instance configurations:

Operation Approximate Throughput
Import Set insert (flat records, no attachments) 200–500 records/min
Transform Map execution (with Business Rules active) 100–300 records/min
Attachment upload via Attachment API 30–100 files/min (depends on size)
Full import with comments + attachments (50K records) 6–16 hours

Throughput drops significantly when Business Rules, Flow triggers, or SLA engines fire on each insert. Consider temporarily disabling non-essential Business Rules during bulk import and re-enabling them afterward.

Pre-Migration Preparation

Before you touch a single API endpoint, do this groundwork. Moving dirty data into ServiceNow nullifies the value of the platform.

1. Audit and Clean Zendesk Custom Fields

Export your full custom field list via the Zendesk API (/api/v2/ticket_fields). For each field, decide:

  • Does this field have a ServiceNow equivalent? (Map it)
  • Is it obsolete or unused? (Drop it)
  • Does it need to become a custom field on the ServiceNow incident or sc_req_item table? (Create it before migration)
Warning

Do not use a migration as an excuse to map 100% of your Zendesk custom fields into ServiceNow. Audit your instance and drop fields that have not been utilized in the last 12 months.

2. Define Your Ticket Classification Rules

Build a decision matrix that maps Zendesk ticket attributes to ServiceNow record types. Document it in a spreadsheet your team can review. Map every tag, form, and category to either the Incident, Request, or Case path. Work with your ITSM stakeholders — this is a business decision, not just a technical one.

3. Decide What Not to Migrate

Not everything deserves a spot in ServiceNow. Consider archiving:

  • Closed tickets older than 2–3 years
  • Spam and suspended tickets
  • Test tickets from sandbox environments
  • Tickets from deactivated organizations

Zendesk AI agent tickets also cannot be exported through the standard account export path — plan for that edge case early. (developer.zendesk.com)

4. Request Zendesk Data Export Enablement Early

Zendesk's built-in data export must be enabled by Zendesk support at the account owner's request. This can take 24–48 hours. Do not wait until migration week to discover this.

5. Configure ServiceNow Before You Migrate

Create custom fields on the incident and sc_req_item tables, set up assignment groups, configure SLA Definitions with proper start/stop/pause conditions, and build Knowledge Base categories matching your Zendesk Guide structure. Deploy all schema changes and Business Rules via Update Sets promoted through your instance pipeline (dev → test → prod). If your ServiceNow instance is not ready, the migration has nowhere to land.

6. Verify Licensing and Module Activation

Confirm that the ServiceNow modules you need are licensed and activated:

  • ITSM (Incident, Problem, Change)
  • Service Catalog (for sc_req_item)
  • Knowledge Management (com.glideapp.knowledge)
  • CSM (if targeting Cases)

Attempting to import records into unlicensed tables will fail silently or produce records that users cannot access.

For a complete planning framework, see our Help Desk Data Migration Playbook.

Validation and Testing Framework

A migration without validation is a data disaster waiting to happen. Build validation into every phase.

Record Count Reconciliation

After each migration batch, compare source and target counts:

Validation Check Method
Total tickets extracted from Zendesk Count via Incremental Export API
Total records created in ServiceNow SELECT COUNT(*) FROM incident WHERE u_zendesk_ticket_id IS NOT NULL (via GlideAggregate)
Total comments per ticket Compare Zendesk comment count vs. sys_journal_field entries per task
Total attachments Compare Zendesk attachment count vs. sys_attachment records linked to migrated tasks

A mismatch of more than 0.1% warrants investigation before proceeding.

Field-Level Spot Checks

Randomly sample 50–100 migrated records and verify:

  • Priority, status, and assignment group mapping correctness
  • sys_created_on matches original Zendesk ticket creation date
  • Public comments appear in Additional Comments (not Work Notes)
  • Internal notes appear in Work Notes (not Additional Comments)
  • Custom field values transferred without truncation or type coercion errors
  • CI reference fields point to valid CMDB records (if populated)

SLA Validation

If you migrated SLA breach data to task_sla, verify that:

  • Breach timestamps align with original Zendesk SLA breach times
  • SLA Definitions correctly attach to migrated Incidents based on your new conditions
  • Elapsed time calculations match expected values given the assigned schedule

Dry Run Protocol

Always run a full migration against a ServiceNow sub-production instance before touching production. Use a representative sample (minimum 10% of total records, including edge cases: tickets with 50+ comments, tickets with large attachments, tickets spanning all classification categories). Compare results against your validation checklist. Fix Transform Map issues in sub-production, promote fixes via Update Sets, then run the production migration.

Rollback Strategy

Plan for failure before you start. A migration that goes wrong after cutover without a rollback plan means corrupted production data.

Pre-Cutover Rollback

If issues are found during the dry run or early production migration:

  • Delete imported records from ServiceNow using the u_zendesk_ticket_id custom field as the filter. A scripted background job using GlideRecord can bulk-delete by source ID.
  • Revert schema changes by backing out the Update Set that added custom fields and Business Rules.
  • Restore from snapshot if your ServiceNow instance supports instance cloning or backup snapshots (available on most ServiceNow plans).

Post-Cutover Rollback

If critical issues are discovered after go-live (e.g., agents have already started working in ServiceNow):

  • Maintain Zendesk in read-only mode for 2–4 weeks after cutover. Do not decommission immediately.
  • Define rollback decision criteria upfront: e.g., "If more than 5% of migrated records have incorrect classification or missing comments, we revert to Zendesk and re-migrate."
  • Keep Zendesk API credentials active so you can re-extract if needed.

Parallel Running

For high-risk migrations (100K+ tickets, regulated industries), consider running both systems in parallel for 1–2 weeks:

  • New tickets go to ServiceNow
  • Historical data is accessible in both systems
  • Agents validate migrated data against Zendesk originals during normal work
  • Cutover is finalized only after validation sign-off from stakeholders

Common Zendesk-to-ServiceNow Migration Pitfalls

Even with a correct data map, technical edge cases can derail the project. If you hit a critical failure mid-migration, refer to our Engineer's Rescue Guide.

Broken Inline Images

When Zendesk agents paste screenshots directly into a comment, Zendesk stores them as inline HTML image tags pointing to Zendesk's CDN (company.zendesk.com/attachments/...). After you decommission Zendesk, those URLs return 404s. If you migrate the raw HTML string into ServiceNow's sys_journal_field, the images appear as broken links because ServiceNow users cannot authenticate against Zendesk's servers.

The fix: download every inline image, upload it to ServiceNow's sys_attachment table, generate a new ServiceNow sys_id, and rewrite the HTML <img> tag in the comment or article payload. Miss this step, and your historical context goes blank.

Orphaned Ticket Relationships

Zendesk supports linked tickets, parent/child relationships, and side conversations. If you migrate Child Ticket B before Parent Ticket A, the relationship map fails because Parent Ticket A's target ID does not exist in ServiceNow yet.

Migrations must execute in a strict dependency order: Users → Companies → Parent Tickets → Child Tickets → Comments → Attachments. If you do not explicitly map these relationships during migration, you lose the thread of investigation chains and escalation history.

Timestamp Overwrites

By default, ServiceNow stamps the sys_created_on and sys_created_by fields with the date of the migration and the API user performing the import. To preserve historical audit trails, your API integration must explicitly pass sys_created_on and sys_created_by values, and the ServiceNow Transform Map must be configured with autoSysFields(false) to respect the historical timestamps. Skip this, and every migrated record looks like it was created on the same day.

Example Transform Map script to preserve timestamps:

// In Transform Map - onBefore script
(function runTransformScript(source, map, log, target) {
    // Disable auto-population of system fields
    target.autoSysFields(false);
    
    // Set historical values from source
    target.sys_created_on = source.u_original_created_date;
    target.sys_created_by = source.u_original_created_by;
    target.sys_updated_on = source.u_original_updated_date;
})(source, map, log, target);

Losing Historical Context in the ITIL Split

When you split flat Zendesk tickets into Incidents and Service Requests, the original ticket number and cross-references break. Agents who search for "Zendesk ticket #45892" need to find it in ServiceNow. Preserve the original Zendesk ticket ID in a custom field (u_zendesk_ticket_id) on both incident and sc_req_item tables so agents can search by legacy ID.

Comment and Work Note Confusion

If public replies, internal notes, and system comments are all dumped into one field, your imported tickets stop behaving like real ServiceNow task history. Journal fields exist specifically to build the activity stream. Zendesk public comments should map to ServiceNow Additional Comments (customer-visible), while Zendesk internal notes should map to Work Notes (agent-only). (servicenow.com)

Use the public boolean on each Zendesk comment object to determine routing:

  • "public": true → Additional Comments (comments element on the task)
  • "public": false → Work Notes (work_notes element on the task)

Mid-Migration Failures

If your migration script hits ServiceNow's semaphore limit or Zendesk's API rate limit and fails mid-sync, you end up with partial data in ServiceNow. Without proper idempotency handling, restarting the migration creates duplicates. Every migration script needs:

  • A checkpoint mechanism to resume from where it failed (store last processed Zendesk ticket ID or cursor position)
  • Deduplication logic using source IDs (check for existing u_zendesk_ticket_id before inserting)
  • Source ID preservation for re-runs and auditing
  • Transaction logging to a separate table or file for post-migration reconciliation

Realistic Migration Timeline

Timeline depends on three variables: data volume, classification complexity, and ServiceNow instance readiness.

Scenario Typical Timeline Key Bottleneck
<10K tickets, simple mapping, ServiceNow already configured 3–5 days Classification rules
10K–100K tickets, moderate custom fields, ITIL classification needed 1–3 weeks Transform Map tuning + validation
100K+ tickets, complex automations, KB migration, SLA redesign 3–6 weeks SLA redesign + parallel running

The biggest timeline risk is not the data transfer itself — it is the classification decision-making and ServiceNow configuration. If your ServiceNow instance is not configured with the right catalog items, assignment groups, and SLA definitions before migration starts, you will be blocked.

A realistic plan runs in five phases:

  1. Audit (2–5 days): Inventory Zendesk data, define classification rules, identify custom fields to migrate or drop, verify ServiceNow licensing.
  2. Sample Extract (1–2 days): Extract 500–1,000 representative tickets via API. Validate extraction completeness including comments and attachments.
  3. Mapping Build (3–7 days): Build Transform Maps, create custom fields, configure Import Sets, write classification logic. Deploy via Update Sets to sub-production.
  4. Dry Run (2–5 days): Full migration to sub-production. Execute validation checklist. Fix issues. Repeat until clean.
  5. Delta Cutover (1–2 days): Migrate remaining tickets created since initial sync. Final validation. Go-live.

Raw ticket count matters less than form logic, comment reconstruction, and how much ITSM behavior you are rebuilding.

How ClonePartner Handles Zendesk-to-ServiceNow Migrations

We have completed over 1,500 data migrations across help desks, CRMs, and enterprise platforms. Zendesk-to-ServiceNow is one of the more complex moves we handle. Here is what we do:

  • Custom ITIL classification logic: We build conditional routing scripts that inspect your historical Zendesk data — tags, types, form fields, group assignments — and automatically classify each ticket as the correct ServiceNow record type (Incident, RITM, or Case).
  • API orchestration that handles limits: Our middleware handles Zendesk's incremental export pagination, ServiceNow's payload chunking, and semaphore-aware throttling. Attachments are transferred via the ServiceNow Attachment API separately from ticket data.
  • Inline image and link preservation: We download every inline image, re-host it in ServiceNow, and rewrite the HTML in journal entries and KB articles. Your historical context survives intact.
  • Timestamp and audit trail preservation: We configure Transform Maps with autoSysFields(false) and pass original sys_created_on and sys_created_by values so your historical timeline remains accurate.
  • Zero downtime with delta sync: We run a historical sync while your team continues working in Zendesk, then execute a final delta sync right before go-live to capture any tickets created during the transfer window.
  • Validation and rollback built in: Every migration includes record count reconciliation, field-level spot checks, and a defined rollback plan.

We hold SOC 2 Type II, ISO 27001, HIPAA, and GDPR compliance certifications, which matters when you are moving sensitive ITSM data that may contain PII, infrastructure details, or security incident records.

For a broader view of how ServiceNow compares architecturally to Zendesk, see our Zendesk vs ServiceNow Architecture Guide.

Frequently Asked Questions

How long does a Zendesk to ServiceNow migration take?
For most mid-market companies (10K–100K tickets), expect 1–3 weeks including planning, test migration, and go-live. The timeline is driven by ITIL classification decisions and ServiceNow configuration, not the data transfer itself. Companies with clean, consistently tagged data and a pre-configured ServiceNow instance can finish in under a week.
Can I migrate Zendesk attachments and inline images to ServiceNow?
Yes, but not through Zendesk's built-in export — native exports drop attachments and comments. A proper API migration downloads all binaries from Zendesk and uploads them to ServiceNow's sys_attachment table, rewriting inline HTML image links to preserve visual context. This per-file process is the most time-consuming part of the migration.
How do I map Zendesk custom fields to ServiceNow?
Create matching fields on the target ServiceNow table (e.g., incident or sc_req_item) before migration. Zendesk dropdown fields map to ServiceNow choice fields. Text fields map to string fields. Multi-select fields need special handling since ServiceNow does not natively support multi-select on all field types — you may need to convert these to delimited strings or use a related table.
Do I need to rebuild Zendesk SLA policies in ServiceNow?
Yes — this is not a copy-paste operation. Zendesk SLAs are flat, priority-based rules with fixed metrics. ServiceNow SLA Definitions support condition-based start/stop/pause logic, schedule-aware duration calculations, and multi-tier escalation workflows. You need to redesign your SLA framework for ServiceNow's model, not replicate Zendesk's limitations.
Do we have to freeze Zendesk during the migration?
No. A zero-downtime migration involves a historical sync while your team works normally in Zendesk, followed by a final delta sync right before your go-live cutover to catch any tickets created or updated during the transfer window.

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
Help Desk Data Migration Playbook: What Data to Move and What to Leave Behind
Help Desk

Help Desk Data Migration Playbook: What Data to Move and What to Leave Behind

This definitive playbook answers the single most critical question: "What data do we actually need to move?". This strategic guide helps you declutter and decide what's precious and what's junk. We provide a clear breakdown of the non-negotiable Tier 1 data, like tickets , knowledge bases , and user profiles, versus the Tier 2 data that provides rich context, like automations and organizations. Use this as your strategic checklist to avoid common mistakes and ensure a flawless, functional new help desk.

Raaj Raaj · · 7 min read