Troubleshooting
1. Agent shows as Offline immediately after registration
Symptoms: Agent registers successfully, but status shows Offline in the dashboard.
Causes and fixes:
- The agent process stopped after registration. Ensure the agent is running as a service:
migrate-agent start --service(Linux) or check Services / Task Manager (Windows). - The machine cannot reach
api.theonemigrate.appon port 443. Test:curl https://api.theonemigrate.app/api/healthfrom the agent machine. - Firewall or proxy blocking outbound HTTPS. Add an exception for
*.theonemigrate.app. - Registration code expired (24-hour limit). Generate a new code and re-register.
2. Job stays in "created" status and never starts scanning
Symptoms: A job was created but the agent never picks it up.
Causes and fixes:
- The assigned agent is Offline. The
start_jobcommand is delivered via the heartbeat, which only happens when the agent is online. Bring the agent online; it will receive the command on the next heartbeat (within 2 minutes). - The job was assigned to the wrong agent. Delete the job and create a new one assigned to an online agent.
- Check agent logs for errors receiving the
start_jobcommand.
3. "Azure credentials expired — re-authenticate via dashboard"
Symptoms: Job fails with this error; project status shows auth_required.
Fix:
- Go to the project page.
- Click Reconnect Azure Storage.
- Sign in with the Microsoft account that has Storage Blob Data Contributor on the storage account.
- Save. The project status clears to
in_progress. - Create a new job (or re-run the previous one) — completed files do not need to be re-transferred if integrity verification was enabled.
Prevention: Microsoft refresh tokens expire after ~90 days of inactivity. If the migration takes longer than this, reconnect mid-project. The token refresh checker timer warns you by email before expiry.
4. Job fails with "Project has no Azure connection"
Symptoms: Job status failed with error code NO_AZURE_CONNECTION.
Fix:
- The project does not have an Azure Storage connection configured.
- Go to the project → Connect Azure Storage and complete the OAuth flow.
- Re-create the job.
5. RockRMS connection test fails
Symptoms: "Test Connection" fails with a SQL Server error.
Diagnosis:
- Connection refused / timeout: The agent cannot reach the SQL Server. Check:
- SQL Server name/IP is correct in the connection string.
- SQL Server has TCP/IP protocol enabled (SQL Server Configuration Manager).
- Firewall allows the agent's IP to reach the SQL Server on port 1433.
- Login failed: Credentials are wrong or the SQL account doesn't have read access to the RockRMS database.
- SSL/certificate error: Add
TrustServerCertificate=trueto the connection string if using a self-signed cert. - Database not found: Verify the database name in the connection string matches the RockRMS database name exactly.
6. RockRMS import has many "errored" records
Symptoms: Progress shows a high errored count for an entity type.
Common causes:
- People without names: Records with null
FirstNameandLastNameare imported with placeholder values ("Unknown"). Check if these are real people or RockRMS system records. - Invalid emails: Emails that don't match
[email protected]format are excluded from the person record (not errored — the person still imports without email). - Contribution batch failures: If the Mission API returns an error for a batch (e.g., due to a missing fund or person reference), all records in that batch are counted as errored. Check the Mission API logs for details.
- Missing person reference in contributions: Contributions without a
PersonAliasIdare imported with no donor link. These are not errors but will showexternal_person_id: nullin Mission.
7. Financial total doesn't reconcile after RockRMS import
Symptoms: Post-import verification shows financial_match: false; quality score < 100%.
Causes:
- The
date_range_startfilter was set, so only contributions after that date were imported. The Rock total (all time) won't match the Mission total (filtered). This is expected — not a data integrity issue. - Contributions flagged as non-positive amounts were still imported but may be causing a total discrepancy. Review the error log for flagged amounts.
- A contribution batch error caused some transactions to not import. Check the job's error log for batch errors, fix the root cause, and re-run.
8. Transfer speed is very slow
Symptoms: Job is running but transfer speed is near 0 or very low Mbps.
Checks:
- Review the project's Bandwidth Schedule — you may be in a throttled window.
- Check the job's
bandwidth_limit_mbpssetting. - Try increasing Concurrency (default: 4) — more parallel streams can improve throughput on high-latency connections.
- For large files, increase Chunk size from 8 MB to 32 MB or higher to reduce overhead.
- Verify the agent machine has adequate outbound bandwidth: run a speed test from the agent machine.
- Azure storage accounts have per-account egress limits. If multiple jobs are running simultaneously against the same storage account, total throughput is shared.
9. Dashboard shows stale progress after agent reconnects
Symptoms: An agent went offline and reconnected, but the job progress still shows the old values.
Fix: The progress updates in near-real-time but the dashboard polls every 10 seconds. Wait up to 30 seconds after the agent reconnects for progress to refresh. If progress still doesn't update after 1 minute, check agent logs for errors submitting progress batches.
10. "Registration code already used" or "Registration code expired"
Symptoms: Running migrate-agent --register <CODE> fails with one of these errors.
Fix:
- Already used: Registration codes are single-use. If the agent registered successfully the first time (check the Agents list), no action needed. If the agent is not showing up, the code may have been used by a different registration attempt. Generate a new code.
- Expired: Codes expire after 24 hours. Generate a fresh code and use it immediately.
When to Contact Support
Self-resolve the issues above first. Contact support if:
- An agent is online and heartbeating but the
start_jobcommand never delivers after 10+ minutes. - A job gets stuck in
scanningfor more than 30 minutes with no progress. - The Azure OAuth flow fails after multiple attempts (OAuth token service error).
- You see unexpected data in Mission after a RockRMS import that doesn't match any known mapping behavior.
Open a support ticket at: [email protected] or via your Hub account → Support.