10 ServiceNow Data Migration Challenges & How to Overcome Them
The 10 most common ServiceNow data migration challenges — from API rate limits to attachment handling — and practical engineering strategies to overcome each one.
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
ServiceNow migrations fail when teams underestimate the platform's relational complexity. The Now Platform isn't a flat database — it's a deeply interconnected web of tables, reference fields, and logic-driven automation. Lifting and shifting data from a legacy ITSM tool, a flat-file database, or even another ServiceNow instance without respecting that architecture creates immediate technical debt, broken references, and production instability.
Your options usually fall into three buckets: native export/import, DIY scripting against the Table and Attachment APIs, or a commercial migrator. Native methods are fine for smaller, controlled jobs. Scripts give more control but make your team own pagination, rate limits, retries, and attachment linkage. If you stay native, expect to work directly with sysparm_query, sysparm_offset, and sysparm_limit rather than a one-click full export. (servicenow.com)
This guide covers the ten most common ServiceNow data migration challenges we see across enterprise projects, with practical mitigation strategies for each.
What Makes ServiceNow Data Migration So Complex?
ServiceNow data migration is a relationship-preservation problem, not a file-format problem. Every incident, change request, and CMDB CI is connected through sys_id references across dozens of tables. When you migrate data in, every record must land in the right table with valid references to every related record — or downstream reporting, SLAs, and automation break silently.
The challenge compounds because most source systems don't share this structure. Legacy tools often store data in flat files, loosely typed fields, or denormalized tables that have no direct equivalent in ServiceNow's schema. Transactional records move one way, configuration another, and attachments through a separate path again. XML export/import preserves sys_id values but ignores business rules and offers no transform step. Import Sets are built for staging and transforms. Update Sets carry configuration, not task data. The Attachment API moves files one request at a time. (servicenow.com)
That mix is why simple lift-and-shift plans create technical debt so quickly. The right starting question is not "How do we export this table?" It is "Which tables, references, automations, and binary objects must land together — and in what order — for the target process to still work on day one?"
Migration sequencing matters
Tables must be migrated in dependency order to preserve referential integrity. The general sequence is:
- Reference/foundation data —
sys_user,sys_user_group,core_company,cmn_location, choice lists, categories - CMDB configuration items —
cmdb_ciand subclasses, thencmdb_rel_cifor relationships - Service catalog and knowledge —
sc_cat_item,kb_knowledge,kb_category - Transactional records —
incident,change_request,sc_request,sc_req_item,sc_task - Attachments —
sys_attachment→sys_attachment_docchunks, mapped to parent records - Validation — automated integrity checks across all migrated tables
Deviating from this sequence is the single most common cause of orphaned references in production migrations.
XML export/import is useful for smaller, controlled ServiceNow-to-ServiceNow moves because it preserves sys_id, creation date, and update date. But direct XML import ignores business rules and offers no transform step — it is not a transformation framework. Native URL-based XML export also does not include attachments or journal fields. (servicenow.com)
How Do You Handle Data Mapping Complexity?
Summary: Data mapping failures cause silent duplicates, truncation, and data drift. The fix is rigorous coalesce key selection, staging with Import Sets, and pilot loads before production.
Legacy systems rarely share ServiceNow's strict relational data model. Fields that were free-text in your old tool may map to reference fields, choice lists, or typed columns in ServiceNow. If field character limits, reference loops, or data types don't match, information is silently truncated or dropped during import.
Coalesce is ServiceNow's mechanism for deciding whether an import updates an existing record or inserts a new one — and it's where many projects start drifting. Import Sets stage the source data, Transform Maps define field relationships, and coalesce fields must be unique. Choose the wrong keys and you either duplicate records or overwrite the wrong ones. Import Sets run as System, which means they cannot populate encrypted fields — a significant constraint for organizations migrating PII or credential data that must remain encrypted at rest. ServiceNow also warns against importing extremely large chunks at once. (servicenow.com)
Common anti-pattern: Teams import 500K+ incident records without pre-migrating assignment groups, resulting in 30–50% orphaned assignment_group references that require days of remediation scripting.
The fix is boring but effective: create a field-by-field mapping spec, identify authoritative coalesce keys before build, separate reference data from transactional data, and run a pilot load on a small representative slice (1,000–5,000 records) first. Use staging tables to normalize data, clean up formatting, and resolve dependencies before records touch production tables.
For a detailed field-mapping framework, see our data mapping guide.
Why Is Custom Field Translation a Risk?
Summary: Legacy custom fields rarely have 1:1 ServiceNow equivalents. Migrating them without classification creates upgrade fragility, data truncation, and dead fields in sys_dictionary.
Most legacy ITSM tools accumulate years of custom fields — dropdown menus with 200 options, free-text fields storing structured data, multi-value fields that ServiceNow doesn't natively support. A field named u_status may actually mix workflow state, SLA state, and reporting tags. There's rarely a 1:1 match.
Attempting to shoehorn legacy custom fields into ServiceNow's out-of-the-box (OOTB) tables either requires creating custom columns (which complicates future upgrades) or losing data fidelity. If data types don't align — such as pushing a 4,000-character string into a String(100) field — the API will truncate the data or reject the record entirely. Import rows also have a maximum database row size; rows that exceed the platform limit are skipped. (servicenow.com)
Audit every custom field in the source system and classify each as migrate, transform, or archive:
- Migrate: Field has a direct ServiceNow equivalent or a clear operational need. Map it to the correct OOTB or scoped custom field.
- Transform: Field data is valid but needs restructuring — e.g., splitting a compound field into separate ServiceNow fields, mapping free-text values to choice list options.
- Archive: Field is unused, redundant, or only needed for historical reference. Store in a read-only archive table or export for offline retention. Do not create a custom column.
Follow ServiceNow's OOTB-first principle — align with the Common Service Data Model (CSDM) wherever possible. For fields that genuinely need to survive, use scoped custom fields on the correct table rather than modifying core tables. If you cannot explain a custom field's operational use, do not auto-migrate it. Deprecate unused fields early to reduce the migration footprint and avoid cluttering the sys_dictionary.
How Can You Overcome Attachment Handling Limitations?
Summary: Attachment migration requires reconstructing a three-table reference chain (parent record → sys_attachment → sys_attachment_doc). Breaking any link orphans files.
ServiceNow stores attachment metadata in sys_attachment (file name, size, content type, table name, table_sys_id pointing to the parent record) and file content in sys_attachment_doc (gzipped, base64-encoded chunks, typically 4KB each). Each parent record references a record in sys_attachment via sys_id, and sys_attachment has a one-to-many relationship with sys_attachment_doc. Migrating attachments means reconstructing this entire chain — if sys_id references break, files become orphaned.
Native URL-based XML export does not include attachments or journal fields. That means a ticket export is not a full-fidelity ticket migration unless you separately move the file binaries and rebuild the linkage. (servicenow.com)
Never attempt to migrate attachments as part of the parent record import. Migrate parent records first, then run a separate attachment migration pass that maps sys_attachment records to the correct parent sys_id, followed by the sys_attachment_doc chunks in position order. Make retries idempotent so a failed file upload doesn't orphan the record. Watch for silent failures with small attachments that are processed asynchronously via the ecc_queue. For large attachments, increase the glide.soap.request_processing_timeout property beyond the default 60 seconds to avoid timeouts.
Attachment migration is the single most underestimated step in ServiceNow migrations. At scale, XML files can exceed 1GB, making manual sys_id swapping impractical. Do not attempt to map attachments manually via flat files or CSV uploads.
What Breaks During CMDB CI Migration?
Summary: The CMDB is ServiceNow's most complex migration target. CI class hierarchies, identification rules, reconciliation logic, and cmdb_rel_ci relationships all require deliberate handling.
The Configuration Management Database (cmdb_ci and its subclasses) presents unique challenges beyond standard table migration. CIs are organized in a class hierarchy — cmdb_ci_server, cmdb_ci_win_server, cmdb_ci_app_server, etc. — and each class can have different attributes, identification rules, and reconciliation behavior. Migrating CIs without respecting this hierarchy creates orphaned relationships, duplicate CIs, and CMDB Health score degradation.
Key CMDB migration risks:
- Identification rules: ServiceNow uses identification rules (configured in
cmdb_identifier) to determine whether an incoming CI matches an existing record. If your source data doesn't include the fields used by the target instance's identification rules (e.g.,serial_number,mac_address,name+ip_address), every CI imports as a new record — creating mass duplication. - CI relationships: The
cmdb_rel_citable stores typed relationships between CIs (e.g., "Runs on," "Depends on," "Hosted on"). Both the parent and child CI must exist before the relationship record can be created. Migrate CIs first, then relationships. - Discovery source conflicts: If the target instance runs Discovery or a third-party CMDB population tool, imported CIs may be immediately overwritten or flagged as duplicates. Coordinate with the discovery schedule and set the
discovery_sourcefield appropriately on imported records. - CMDB Health: After migration, run the CMDB Health Dashboard to check for orphan CIs, duplicate CIs, stale CIs, and relationship integrity. ServiceNow's CMDB Health KPIs provide quantitative validation that the CMDB is operationally sound.
Migrate CMDB data in this order: cmdb_ci base records → subclass-specific attributes → cmdb_rel_ci relationships → service maps and application services. Validate against identification rules in a sub-production instance before touching production.
What Breaks During SLA Configuration Transfer?
Summary: SLAs are logic-driven configurations, not data records. They must be rebuilt in the target instance, not exported and imported.
SLAs in ServiceNow are not simple data points — they're logic-driven configurations that combine start/pause/stop/cancel conditions, duration calculations, business schedules (with timezone handling), and escalation workflows. You can't export an SLA definition from one system and import it as a record. The underlying conditions reference specific fields, choice values, and assignment groups that may not exist in the target instance.
ServiceNow's own docs show how easy it is to misconfigure this logic: if your start condition is a subset of the stop condition, the SLA never attaches; if your pause condition overlaps with the start condition, the SLA can attach and stay paused or cancel unexpectedly. (servicenow.com)
Treat SLA migration as a configuration rebuild, not a data transfer. Document every SLA definition's conditions, schedule, and escalation logic in a platform-agnostic format first. Then rebuild each definition in the target instance using ServiceNow's SLA Definition module, validating that start/pause/stop conditions resolve correctly against the migrated data. Use Flow Designer for escalation automation — ServiceNow has been converting all OOTB workflows to Flow Designer, and new instances (Washington DC release and later) no longer include legacy workflows by default.
When migrating historical, closed tickets, calculate the final SLA states in the source system and map them to static custom fields (e.g., u_historical_sla_met, u_historical_sla_duration_minutes). This preserves historical reporting without triggering active SLA workflows or sending false breach notifications. This approach is not documented in ServiceNow's official guides — it's a pattern we've validated across dozens of enterprise migrations.
How Do You Recreate Workflows Without Breaking Logic?
Summary: There is no automated conversion tool from legacy Workflow Editor to Flow Designer. Every workflow must be manually analyzed, documented, and rebuilt.
Legacy workflows — whether from an older ServiceNow instance or an external system — can't be automatically converted to ServiceNow's modern Flow Designer. There is no OOTB conversion tool. Every legacy workflow must be manually rebuilt from scratch. ServiceNow began deprecating the legacy Workflow Editor in the Tokyo release (2022), and new instances from the Washington DC release onward no longer include legacy workflows by default. (servicenow.com)
If your source instance used heavily customized Workflow Editor automations with hard-coded sys_id references, script includes, and conditional logic, those references will all be invalid in the target.
Audit every active workflow in the source system. Document the trigger conditions, branching logic, approval chains, and script actions in a runbook format. Map the business intent of the workflow, not the technical execution. Then rebuild each as a Flow Designer flow, breaking monolithic workflows into smaller, reusable sub-flows and flow actions. This modular approach is one of Flow Designer's key advantages — and it's your chance to eliminate years of accumulated workflow debt.
For organizations using IntegrationHub, also audit any Spoke-based integrations that interact with workflows. These integrations may need reconfiguration if endpoint URLs, authentication methods, or payload formats change between instances.
Run both old and new automation in parallel during testing, and don't deactivate legacy workflows until the last in-flight record completes.
For context on how platform architecture differences affect workflow migration, see our ServiceNow vs Jira Service Management architecture guide.
Why Is User and Group Mapping Critical for History?
Summary: Every historical ticket references users and groups via sys_id. Migrating transactional data before establishing these references makes ticket history operationally useless.
Every ticket in ServiceNow references users and groups through sys_id pointers — assigned_to, opened_by, assignment_group, closed_by. If you migrate ticket history without first establishing valid user and group records in the target instance, every historical reference becomes an orphaned sys_id. The ticket data is technically present, but it's operationally useless — you can't search by agent, filter by group, or generate accurate workload reports.
Migrate the sys_user and sys_user_group tables before any transactional data. Create a cross-reference map between source user identifiers (email, employee ID, username) and target sys_id values. For users who've left the organization, create deactivated user records to preserve history — never skip them. ServiceNow's own transform-map examples show this pattern: match referenced sys_user records on a stable key like email and update the target reference with the correct sys_id. (servicenow.com)
In practice, you also need rules for:
- Deleted groups: Map to a successor group or create an archived placeholder group.
- Merged departments: Decide whether historical tickets reflect the old or new org structure.
- SSO/IdP changes: If the target instance uses a different SSO provider,
user_namefields may not match. Use email or employee ID as the coalesce key instead. - Role and ACL migration: User records alone aren't sufficient — the roles assigned via
sys_user_has_roleand any row-level ACLs must also be migrated to preserve access controls. Failing to migrate ACLs can expose sensitive records or lock users out of data they need.
Validate referential integrity by running a count of orphaned assigned_to and assignment_group references after the transactional import. A healthy migration should have <0.1% orphaned references. For more on preserving user context during migrations, see our user and organization migration guide.
How Do You Manage Data Volume and API Performance Limits?
Summary: ServiceNow enforces hard export and API rate limits. Successful large-scale extraction requires paginated API calls, multiple integration users, and batched imports.
Scale changes the method. ServiceNow enforces hard limits at every extraction point.
Current ServiceNow docs list a default export limit of 10,000 rows for CSV, XML, JSON, and Excel unless admins change the relevant export properties (glide.export.csv.max, glide.export.xml.max, etc.), and Excel exports stop at 500,000 cells via the glide.excel.max_cells property. ServiceNow's own guidance is to break large exports into smaller chunks. (servicenow.com)
The REST Table API defaults sysparm_limit to 10,000 records per call, and requesting significantly more in a single call can cause timeouts. Rate limits are enforced at the user/integration account level via sys_rate_limit_rules — not per node — meaning you can't bypass throughput bottlenecks by simply adding infrastructure. (servicenow.com)
For extraction, use the REST Table API with proper pagination: combine sysparm_limit, sysparm_offset, and an explicit ORDERBYsys_created_on sort to get deterministic results. Query the Aggregate API (/api/now/stats/{tableName}) first to get total record counts, then calculate page counts. For imports, use Import Sets with batched scheduled jobs rather than synchronous per-record API calls. Distribute API load across multiple dedicated integration users, each with its own rate limit allocation — this is the officially recommended pattern for scaling throughput.
# Paginated extraction from ServiceNow Table API with error handling
import requests
import time
base_url = "https://instance.service-now.com/api/now/table/incident"
headers = {"Accept": "application/json"}
auth = ("integration_user", "password") # Use OAuth2 tokens in production
offset = 0
limit = 10000
all_records = []
max_retries = 3
while True:
params = {
"sysparm_limit": limit,
"sysparm_offset": offset,
"sysparm_query": "ORDERBYsys_created_on",
"sysparm_fields": "sys_id,number,short_description,assigned_to"
}
for attempt in range(max_retries):
resp = requests.get(base_url, headers=headers, auth=auth, params=params)
if resp.status_code == 200:
break
elif resp.status_code == 429: # Rate limited
retry_after = int(resp.headers.get("Retry-After", 30))
time.sleep(retry_after)
else:
resp.raise_for_status()
results = resp.json().get("result", [])
if not results:
break
all_records.extend(results)
offset += limitNote: In production, use OAuth 2.0 tokens via the /oauth_token.do endpoint rather than basic authentication. Basic auth is shown here for readability. For migrations exceeding 1M records, consider parallelizing extraction across multiple integration users, each querying a different sys_created_on date range.
If your scripts are already timing out, see our migration rescue guide.
What Is the Best Strategy for Downtime Management?
Summary: Delta sync strategies compress production downtime from days to minutes by separating historical bulk migration from incremental cutover syncs.
A bulk migration that takes 48–72 hours means freezing your production instance for an entire weekend — or longer. During that window, no new tickets are created, no SLAs are tracked, and your support team operates blind. For organizations with 24/7 global operations, this is a non-starter.
Use a delta sync strategy. Run the full historical migration during a low-traffic window, then perform incremental syncs of records created or modified after the initial cutover timestamp. Filter delta records using sys_updated_on with a watermark timestamp. ServiceNow's native scheduled and concurrent import capabilities support staged runs. (servicenow.com)
A typical delta sync cutover flow:
- T-7 days: Complete full historical migration in sub-production, validate, fix issues.
- T-2 days: Run full historical migration in production (during low-traffic window).
- T-1 day: Run first delta sync — all records with
sys_updated_on > [bulk migration start time]. - T-0 (cutover): Freeze source system writes. Run final delta sync. Flip DNS/API endpoints. Validate. Go live.
- T+1 hour: Run post-migration integrity checks.
This compresses your actual downtime window from days to minutes — typically 15–60 minutes for the final delta sync and endpoint cutover, depending on the volume of records modified during the delta window. The trade-off is planning: you need a clear change-freeze scope, a final ownership handoff, and a short list of tables that truly must pause.
For a deeper breakdown of zero-downtime migration patterns, see our zero-downtime migration guide.
How Do You Validate Data Integrity Post-Migration?
Summary: A migration that "completes without errors" is not necessarily successful. Automated validation across record counts, references, attachments, and field values catches the silent failures that manual spot-checking misses.
Silent failures — truncated fields, missing attachments, broken sys_id references, incorrect timezone conversions on date fields — are common and often only discovered weeks later when a report doesn't match or an SLA fires incorrectly.
Record counts are only the first test. Different ServiceNow import paths preserve different things — XML export/import preserves system values like sys_id and timestamps but ignores business rules, while attachment exports are a separate path entirely. You need validation that covers every track. (servicenow.com)
Build automated QA checks that run immediately after migration:
- Record count validation: Compare source and target counts per table. Acceptable variance: 0% for transactional records, <0.1% for reference data (accounting for intentionally excluded records).
- Attachment audit: Verify every
sys_attachmentrecord has a valid parentsys_idand the expected number ofsys_attachment_docchunks. Cross-check total attachment count and aggregate file size against the source. - Reference integrity check: Query for orphaned
assigned_to,assignment_group,caller_id, andcmdb_cireferences. Target: <0.1% orphaned references. - Field-level spot checks: Sample 1–2% of records and compare field values against the source, focusing on fields that underwent transformation.
- Date/time validation: Confirm that
opened_at,closed_at, andsys_created_onvalues survived timezone conversion correctly. Compare a sample of records across at least three timezones represented in the source data. - CMDB Health: If CMDB data was migrated, run the CMDB Health Dashboard and compare scores to pre-migration baselines.
Don't rely on manual spot-checking alone. Script these validations so they can be re-run after every delta sync. For a practical QA checklist, see our post-migration test list.
Why Must You Have a Rollback Plan?
Summary: Without a tested rollback path, a failed migration means a full instance restore from backup — which can take hours and wipes all changes since the backup.
Migrations can corrupt production instances. A bad transform map can overwrite live records. An import with duplicate sys_id values can create ghost records that break business rules. Without a tested rollback path, your only option is a full instance restore from backup — which can take hours and wipes any changes made since the backup was taken.
ServiceNow does have rollback for clone operations, but that's limited to the latest clone and must happen within a short time window. Standard XML import inserts records and does not give you a reversible transaction log. For most data migrations, rollback is something you design yourself. (servicenow.com)
Before any production migration:
- Take a full instance clone or snapshot. Verify the backup completed successfully and test a restore in sub-production.
- Define rollback triggers — specific, measurable conditions that warrant aborting:
- >0.5% record count mismatch vs. source
- Any orphaned SLA references
- >0.1% orphaned user/group references
- Any attachment integrity failures above threshold
- Write rollback scripts that can delete migrated records by batch using a migration marker field (e.g.,
u_migration_batch_id). Tag every imported record with a batch identifier so you can surgically remove migrated data without affecting pre-existing records. - Design migration scripts to be idempotent — meaning they can be run multiple times safely without creating duplicate records. Use coalesce keys to achieve upsert behavior. This lets you pause the migration, fix errors, and resume exactly where you left off.
- Time-box the rollback. If rollback takes longer to execute than the cutover window allows, you don't have a rollback plan yet. Test rollback execution time in sub-production.
What About Security, Compliance, and Encrypted Data?
Summary: Migrations involving PII, healthcare data, or financial records must address data sovereignty, encryption limitations, and audit trail continuity.
Enterprise ServiceNow migrations frequently involve regulated data — GDPR-covered personal data, HIPAA-protected health information, or PCI DSS cardholder data. Several platform constraints directly affect how you handle this:
- Import Sets cannot populate encrypted fields because they run as the System user. If your source data includes encrypted passwords, API keys, or sensitive credentials stored in encrypted ServiceNow fields, these values must be re-entered manually or populated via a separate secure process after migration.
- Data sovereignty: If migrating between instances in different geographic regions (e.g., EU to US data centers), verify that the migration path complies with data residency requirements. Staging data in intermediate systems or migration tools may create additional data processing locations that require GDPR Data Processing Agreements.
- PII masking: For non-production migrations (dev, test, staging), mask or anonymize PII before importing. ServiceNow's Data Anonymization plugin can help, but it operates on the target instance — meaning real PII still transits the migration pipeline.
- Audit trail preservation: The
sys_audittable tracks field-level changes. Standard data migration does not recreate audit history — every imported record appears as a single "insert" event. If regulatory compliance requires preserving the full change history, you must migratesys_auditrecords separately and rebuild the references.
Plan for these constraints early. Discovering encryption or sovereignty limitations during UAT is a schedule-breaking event.
ServiceNow Migration Challenges: Severity and Mitigation Summary
| Challenge | Severity | Key Risk | Mitigation Strategy |
|---|---|---|---|
| Data mapping complexity | High | Duplicates, silent truncation, data drift | Define coalesce keys; stage with Import Sets and Transform Maps |
| Custom field translation | Medium | Upgrade fragility, truncation, dead fields | OOTB-first approach; CSDM alignment; migrate/transform/archive audit |
| Attachment handling | High | Orphaned files, broken references | Separate migration pass with sys_id chain validation |
| CMDB CI migration | High | Duplicate CIs, broken relationships, Health score degradation | Respect class hierarchy; validate identification rules; migrate CIs before cmdb_rel_ci |
| SLA configuration transfer | High | Incorrect escalations, false breach notifications | Full rebuild with condition and schedule validation; static fields for historical SLAs |
| Workflow recreation | Medium | Duplicate automation, logic gaps, broken approvals | Manual rebuild in Flow Designer with parallel testing |
| User/group mapping | High | Orphaned history, broken reporting, access control gaps | Pre-migrate users; cross-reference map; deactivated records; ACL migration |
| Data volume & API limits | High | Incomplete extraction, timeouts, throttling | Paginated API calls; multiple integration users; batched Import Sets |
| Downtime management | High | Operational disruption, weekend freezes | Delta sync with watermark timestamps; staged cutover |
| Data integrity validation | High | Undetected corruption, silent data loss | Automated QA scripts for counts, references, dates, CMDB Health |
| Rollback planning | High | Unrecoverable production failure | Pre-migration snapshot; scripted rollback with batch markers; time-boxed testing |
| Security & compliance | High | Regulatory violations, data exposure | PII masking; encrypted field workarounds; audit trail migration |
How ClonePartner Engineers Zero-Downtime ServiceNow Migrations
Building custom scripts to page through the ServiceNow REST API, manage rate limits, and map the sys_attachment table takes hundreds of engineering hours. Standard out-of-the-box tools often fail when hitting enterprise data volumes or complex relational loops.
Our engineering team handles each of these challenges as part of a managed migration service:
- Attachment integrity: We automatically resolve
sys_attachment→sys_attachment_docreference chains, ensuring every file stays linked to its parent record without manualsys_idswapping. - API performance: We distribute load across dedicated integration users with optimized extraction methods — protecting your instance performance while maximizing throughput.
- Continuous Data Sync: Instead of a weekend freeze, we run incremental delta syncs right up to cutover, compressing actual downtime to minutes.
- CMDB validation: We validate CI identification rules, relationship integrity, and CMDB Health scores as part of every migration.
- Full accountability: We own the data integrity outcome. Your engineering team doesn't spend weeks writing, debugging, and re-running migration scripts.
If you're planning a ServiceNow migration — whether inbound from a legacy ITSM tool or between instances — and want to avoid the failure modes above, we should talk.
Frequently Asked Questions
- What are the biggest challenges in ServiceNow data migration?
- The biggest challenges are data mapping complexity (fitting unstructured legacy data into ServiceNow's relational model), attachment handling (rebuilding sys_attachment and sys_attachment_doc reference chains), API rate limits enforced per integration user via sys_rate_limit_rules, SLA configuration transfer (which requires a full rebuild, not a data copy), and user/group mapping to preserve ticket history. Each of these can cause silent data loss if not handled correctly.
- What is the ServiceNow REST API record limit?
- The ServiceNow REST Table API defaults to 10,000 records per call via the sysparm_limit parameter. To extract larger datasets, you must use pagination with sysparm_offset combined with an explicit ORDERBY sort. Requesting significantly more than 10,000 records in a single call can cause instance timeouts.
- How do you migrate attachments in ServiceNow?
- ServiceNow stores attachment metadata in sys_attachment and file content as gzipped, base64-encoded 4KB chunks in sys_attachment_doc. To migrate attachments, first import parent records, then run a separate attachment pass that maps sys_attachment records to the correct parent sys_id, followed by sys_attachment_doc chunks in position order. Never attempt to migrate attachments inline with parent records.
- Can you convert ServiceNow workflows to Flow Designer automatically?
- No. There is no out-of-the-box tool to automatically convert legacy ServiceNow workflows to Flow Designer. Each workflow must be manually rebuilt. New ServiceNow instances no longer include legacy workflows by default, making this migration increasingly urgent for organizations on older instances.
- How do you avoid downtime during a ServiceNow migration?
- Use a delta sync strategy: run the full historical migration during a low-traffic window, then perform incremental syncs of records created or modified after the initial load using sys_updated_on timestamps as watermarks. This compresses actual production downtime from days to minutes.
