---
title: "Migration Stuck? - Troubleshooting Guide (Scaffolding DC-to-Cloud)"
canonical: "https://support.appfire.com/space/SCAFS/3257041073/Migration%20Stuck%3F%20-%20Troubleshooting%20Guide%20(Scaffolding%20DC-to-Cloud)"
format: markdown
---
> Macro (aura-html)


> ℹ️ This guide consolidates proven steps, scripts, and resolution patterns from recent L3 tickets to help you diagnose and unblock Scaffolding Forms & Templates data migrations that appear stuck when using Atlassian’s Confluence Cloud Migration Assistant (CCMA).

> Macro (toc)

## Who should use this guide

- Confluence Data Center admins migrating Scaffolding data to Cloud
- Partners and migration engineers performing large or complex moves
- Teams seeing CCMA show IN_PROGRESS for a long time or plateau at 30%, 50%, 70%, 84%, or 99%

---

## Quick diagnosis checklist

Before deep-diving, collect the following:

- Migration transferId and target Cloud site URL from CCMA
- CCMA App Vendor Checks export for Scaffolding (restricted pages CSVs)
- Any Scaffolding migration CSVs attached by CCMA or support (for cross-reference)
- Cloud site admin user with the ability to inspect content restrictions

If you can reproduce on a staging migration, do so first. Many fixes can be validated with a small subset of spaces and then applied broadly.

---

## Common stall points and how to fix them

### Stuck around 30% or 50% — restricted pages blocking app data write

Symptoms

- CCMA shows: “Some data are still not migrated… If these space(s) contain restricted pages, please run the migration script provided…”
- Cloud app errors such as 403 PermissionException when writing content properties

Root causes observed

- Pages with direct restrictions prevent the Scaffolding Cloud app from creating content/space properties
- Inherited restrictions from ancestors that do not show as “direct” on the page but still block write operations

Resolutions

1. 
  - Run CCMA App Vendor Checks for Scaffolding and export restricted-pages CSV
  - Be aware older vendor checks missed inherited restrictions; use the latest DC app and re-run pre-checks. For very large sites, verify completeness by spot-checking deep page trees
2. 
  - During an in-progress migration, you can grant the Scaffolding app user read and update on the affected Cloud page IDs; CCMA will keep polling and advance to 100% once writes succeed
3. 
  - Trigger a re-check/retry from CCMA after permissions are fixed

<details>
<summary>Example Cloud permission adder (run while migration is IN_PROGRESS)</summary>

```python
import csv, requests
from requests.auth import HTTPBasicAuth

csv_file_path = "page_ids.csv"  # column header: page_id
email = "your-admin@example.com"
api_token = "YOUR_API_TOKEN"
account_id = "APP_USER_ACCOUNT_ID"  # Scaffolding Cloud app user
site_url = "https://your-site.atlassian.net"

def add_permission(page_id, op):
    url = f"{site_url}/wiki/rest/api/content/{page_id}/restriction/byOperation/{op}/user?accountId={account_id}"
    r = requests.put(url, auth=HTTPBasicAuth(email, api_token))
    print(op, page_id, r.status_code, r.text)

with open(csv_file_path, newline="") as f:
    for row in csv.DictReader(f):
        pid = row["page_id"].strip()
        if pid:
            add_permission(pid, "read")
            add_permission(pid, "update")
```

Notes

- This approach was validated in multiple migrations: after adding permissions, CCMA progressed to SUCCESS without redoing the whole run
- Be sure you are using the correct Cloud page IDs and the correct app user accountId
- Keep a record of existing restrictions to restore them if needed after migration completion
</details>

> ⚠️ Large sites can have hundreds to thousands of restricted pages. Automate; do not try to fix these page-by-page manually.

---

### Stuck around 70% or 84% — mix of restricted pages and macro/layout complexities

Symptoms

- CCMA shows stuck at 70% or 84% with the same “restricted pages” message
- Pages contain complex layouts, tables, or nested usage patterns mixing Scaffolding and other macros

Root causes observed

- Restricted pages or inherited restrictions still unresolved
- Macro structures that are unsupported in Cloud until post-migration conversion steps are completed

Resolutions

1. Complete the restricted pages fix path above first
2. 
  - Minimums: 8.30.0 for Confluence 7/8, 9.1.0+ for Confluence 9
3. 
  - After app data migration succeeds, use the Scaffolding macro conversion in Cloud to convert DC macros
  - Do not rely on DC-side macro rearrangements mid-migration

---

### Stuck near 99% for hours — progress plateau after large runs

Symptoms

- CCMA shows 99% “running” for many hours though pages appear in Cloud
- Cloud logs may include harmless 409 Conflict when re-creating an existing property

Root causes observed

- Finalization polling in CCMA while the Scaffolding app finishes asynchronous writes and deduplicates properties
- Very high space/page counts prolong final consistency checks

Resolutions

- Confirm no permission errors remain; 409 Conflict on property re-create is benign and not a blocker
- Let CCMA settle; very large runs can sit near 99% for an extended period and then reach 100%
- For extremely large multi-thousand space moves, consider batching: migrate spaces with Scaffolding data separately from spaces without Scaffolding

> ✅ Observed outcome: after harmless 409s and extended polling, migrations settled to SUCCESS at 100% without data loss.

---

### Stuck at 98% — TIMED_OUT status with no re-run or cancel option

**Symptoms**

- CCMA shows migration stuck at 98% with status TIMED_OUT
- The re-run and cancel buttons in CCMA are unresponsive or greyed out
- Attempting to re-trigger the migration via curl command also fails

**Root causes observed**

- The migration process timed out during the final stages, leaving it in a limbo state that CCMA cannot automatically recover from
- Internal migration state prevents standard re-run or cancel actions from executing
- The curl-based re-trigger endpoint may reject requests because the migration is in an unrecoverable TIMED_OUT state rather than a retryable error state

**Resolutions**

1. Contact Atlassian Support to manually reset the migration state on the backend — this is typically the only way to clear a TIMED_OUT status that cannot be cancelled or re-run through the UI or API
2. Request Atlassian Support to either force-cancel the stuck migration so a fresh run can be initiated, or to manually advance it if the remaining data has already been transferred
3. Before re-running, verify that the underlying cause of the timeout is addressed (e.g., restricted pages resolved, large page trees batched) to prevent the same timeout on retry
4. For future migrations at risk of timeout, consider splitting the migration into smaller batches of spaces to reduce the chance of hitting platform-level timeout limits

---

## Finding the right page IDs and building your fix list

To grant permissions on Cloud pages, you need Cloud page IDs. There are two practical patterns:

1. Use the App Vendor Checks output from CCMA that already includes Cloud page IDs for affected content when available
2. 
  - Complete one dry-run migration so pages exist in Cloud (draft state is fine)
  - Map DC to Cloud page IDs using CCMA exports or your content transfer logs, then apply the permission adder script to the Cloud IDs

> 📝 Several L3 cases highlighted confusion about matching serverPageId to cloudPageId. Ensure your CSV includes a Cloud page_id column before running any Cloud-side permission update script.

---

## Live Templates: data appears empty after migration

Symptoms

- After migrating and converting a Live Template, fields render but values are empty

Root causes observed

- Live Template included non-Scaffolding macros or nested/unsupported structures that block correct migration and conversion
- Missing parameters or a conversion run only on an individual page without completing the recommended bulk conversion step

Resolutions

- Remove non-Scaffolding macros from Live Templates in DC before migration, or split them into separate included content
- After migration completes, run the macro conversion in Cloud for the affected space(s), preferably via bulk conversion
- If only some pages are impacted, re-run conversion for those pages after template cleanup

---

## Performance and scale considerations

- Extremely large migrations (thousands of spaces/pages) can prolong polling and give the impression of “stuck”
- 429 Too Many Requests in Cloud logs are typically rate limiting at platform level; not caused by Scaffolding data copy for spaces that contain no Scaffolding data
- Where feasible, batch spaces that contain Scaffolding macros separate from spaces that do not

---

## Decision tree: what to try next

> Macro (a8e926d1-1b35-41d2-978e-e76d4bbbe1c3/80e67470-4f95-4a5c-a27b-274bb7c6e70c/static/graphviz)

## Best practices to avoid stalls

- Upgrade Scaffolding DC to the latest compatible version before running CCMA
- Run App Vendor Checks and validate inherited restrictions are included; re-run with latest build if needed
- Prepare a Cloud permission adder CSV in advance for any pages flagged as restricted; keep an audit of original restrictions for rollback
- Use staging to validate end-to-end, including the Cloud macro conversion step
- For very large estates, split migrations and schedule longer windows for finalization

---

## Appendix: interpreting common messages and errors

- CCMA “Some data are still not migrated… restricted pages…”: Cloud app cannot write properties on one or more pages; fix restrictions
- 403 PermissionException when creating content property: app user lacks write on the page; grant read and update
- 409 Conflict on content/space property create: property already exists; harmless; does not block completion

---

## References

- [Migrate Scaffolding Data Center to Scaffolding Cloud](https://support.appfire.com/space/SCAFC/1356071105)
- [Step 2: Migrate your Scaffolding data to cloud](https://support.appfire.com/space/SCAFC/1356071469)
- [Step 1.2: Prepare your Scaffolding data for migration](https://support.appfire.com/space/SCAFC/1827144199)
- [SCAF-5627 Scaffolding migration stops at 30%](https://appfire.atlassian.net/browse/SCAF-5627)
- [SCAF-5634 CCMA stuck at 30% due to restricted pages](https://appfire.atlassian.net/browse/SCAF-5634)
- [SCAF-5519 Migration stuck at 99% (permissions/settling)](https://appfire.atlassian.net/browse/SCAF-5519)
- [SCAF-5558 Long-running migration and benign 409s](https://appfire.atlassian.net/browse/SCAF-5558)
- [SCAF-5567 Stuck at 84% and ID mapping/script bundle](https://appfire.atlassian.net/browse/SCAF-5567)
- [SCAF-5575 Live Template data empty after migration](https://appfire.atlassian.net/browse/SCAF-5575)