Execute complete platform migrations to or from MaintainX.
Use when migrating from legacy CMMS systems, performing major re-platforming,
or transitioning to MaintainX from spreadsheets or other tools.
Trigger with phrases like "migrate to maintainx", "maintainx migration",
"cmms migration", "switch to maintainx", "maintainx data migration".
Execute complete platform migrations to or from MaintainX.
Use when migrating from legacy CMMS systems, performing major re-platforming,
or transitioning to MaintainX from spreadsheets or other tools.
Trigger with phrases like "migrate to maintainx", "maintainx migration",
"cmms migration", "switch to maintainx", "maintainx data migration".
allowed-tools
Read, Write, Edit, Bash(npm:*), Bash(node:*)
version
1.11.0
license
MIT
author
Jeremy Longshore <jeremy@intentsolutions.io>
tags
["saas","maintainx","migration"]
compatibility
Designed for Claude Code, also compatible with Codex and OpenClaw
MaintainX Migration Deep Dive
Current State
!node --version 2>/dev/null || echo 'N/A'
Overview
Comprehensive guide for migrating to MaintainX from legacy CMMS systems (Maximo, UpKeep, Fiix), spreadsheets, or custom databases.
Prerequisites
MaintainX account with API access
Access to source system data (CSV export, API, or database)
#!/bin/bash# rollback-migration.sh# Delete all migrated records (use with extreme caution)echo"WARNING: This will delete all work orders created during migration."echo"Press Ctrl+C to cancel, Enter to continue."read# Tag migrated work orders with a search pattern# Then delete by filtering
curl -s "https://api.getmaintainx.com/v1/workorders?limit=100" \
-H "Authorization: Bearer $MAINTAINX_API_KEY" \
| jq -r '.workOrders[] | select(.title | startswith("Migrated")) | .id' \
| whilereadid; doecho"Deleting WO #$id..."
curl -s -X DELETE "https://api.getmaintainx.com/v1/workorders/$id" \
-H "Authorization: Bearer $MAINTAINX_API_KEY"sleep 0.5 # Rate limitingdone
Output
Source system assessment report (record counts, data quality issues)
Schema mapping configuration (legacy fields to MaintainX fields)
ETL migration with rate-limited batch imports
Validation report comparing source and target counts
Rollback script for emergency reversal
Error Handling
Issue
Cause
Solution
400 Bad Request on import
Invalid field value after mapping
Fix transform function, re-run failed records
429 during bulk import
Too many records too fast
Reduce PQueue concurrency to 2
Duplicate records
Migration re-run without cleanup
Deduplicate by title or external ID
Missing relationships
Assets migrated after work orders
Migrate in order: Locations -> Assets -> Work Orders