Bluesky Personal Data Server Migration Stuck Halfway: Fix
🔍 WiseChecker

Bluesky Personal Data Server Migration Stuck Halfway: Fix

You are migrating your Bluesky account to a Personal Data Server PDS and the process stops at 50 percent or 75 percent. The migration spinner keeps spinning for hours with no error message. This usually happens because the DNS records for your custom domain are not fully propagated or because the PDS cannot verify the domain ownership. This article explains why the migration stalls and provides the exact steps to complete the transfer.

Key Takeaways: Fixing a Stuck Bluesky PDS Migration

  • DNS TXT Record for atproto: The migration requires a specific TXT record at _atproto.yourdomain.com to prove domain ownership.
  • DNS Propagation Check: Use a global DNS checker to verify that the record is visible from multiple locations before retrying migration.
  • Restart Migration from Scratch: If DNS is correct but the process is stuck, cancel the current migration and start a fresh one in the Bluesky settings.

Why the Bluesky PDS Migration Gets Stuck at Midpoint

Bluesky uses the AT Protocol to let you host your data on your own server. When you migrate to a Personal Data Server, the system performs several checks in sequence. First, it verifies that your domain is correctly configured with a DNS TXT record that points to your PDS. Second, it establishes a connection between your Bluesky account and the new server. Third, it transfers your posts, follows, and account metadata.

The migration stops at the halfway point when the verification step fails silently. The Bluesky client shows a progress bar that moves to 50 percent or 75 percent and then stops. The server logs on your PDS may show a timeout error or a failed handshake. The most common technical cause is that the DNS TXT record for the AT Protocol identifier _atproto.yourdomain.com is not yet visible to Bluesky servers. DNS propagation can take anywhere from a few minutes to 48 hours depending on your domain registrar and the TTL value you set.

Another cause is an incorrect PDS endpoint URL. If you entered the wrong address during the migration setup, the connection attempt will time out. The migration process does not always show a clear error message for this scenario.

What the AT Protocol DNS Record Must Contain

The exact format required is a TXT record with the host _atproto and the value did=did:plc:yourPDSIdentifier. The identifier is the DID you received when you set up your PDS. If the value is missing the did= prefix or contains extra spaces, the verification fails and the migration stalls.

Step-by-Step Fix for a Stuck PDS Migration

Follow these steps in order. Do not skip the DNS verification step even if you already checked your records earlier.

  1. Check DNS propagation for the AT Protocol record
    Open a global DNS propagation checker such as whatsmydns.net or dnschecker.org. Enter _atproto.yourdomain.com as the hostname and select TXT as the record type. If any location shows a red X or a different value than expected, the record is not fully propagated. Wait until all locations show the correct TXT value.
  2. Verify the exact TXT record content
    On your domain registrar or DNS provider, open the DNS management page. Find the TXT record for _atproto. The value must be exactly did=did:plc:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. There must be no quotation marks around the value unless your provider automatically adds them. If the value is wrong, correct it and wait for propagation again.
  3. Restart the migration from the Bluesky web app
    Go to Settings > Account > Migration. Click the button labeled Cancel Migration or Reset. This clears the stuck process. Refresh the page and then click Start Migration again. Enter your PDS endpoint URL exactly as provided by your hosting service. The URL must start with https:// and must not have a trailing slash.
  4. Check the PDS server logs for connection errors
    If you have SSH access to your PDS, run sudo journalctl -u pds -f to watch live logs. Look for lines containing ERROR or timeout. A common error is Failed to verify domain ownership. If you see this, go back to step one and double-check the DNS record.
  5. Try a different DNS provider if propagation is slow
    Some registrars have slow propagation times. If your current provider shows inconsistent results after 24 hours, consider moving the domain to Cloudflare or another provider with instant propagation. After transferring the DNS, update the AT Protocol record and wait 10 minutes before retrying migration.
  6. Contact your PDS host for verification
    If you are using a managed PDS service like Bluesky Hosting or a self-hosted setup, open a support ticket or check their status page. The host may have blocked the migration due to a configuration error on their side. Provide them with your domain name and the exact error from the server logs.

If the Migration Still Fails After Checking DNS

PDS endpoint URL is incorrect

The endpoint URL you enter in Bluesky settings must match the URL of your PDS exactly. If your PDS is at pds.yourdomain.com, the endpoint is https://pds.yourdomain.com. Do not include a path like /migration. If you are unsure, ask your hosting provider for the correct endpoint.

Account already has a migration in progress on another device

If you started the migration on your phone and then tried again on your desktop, Bluesky may show the stuck state on both devices. Log out of all devices except one. On that single device, go to Settings and cancel the migration. Then restart the process from that same device.

PDS is not running or is behind a firewall

Your PDS must be accessible from the public internet on port 443. Use a port checker tool to test whether yourpdsdomain.com:443 is open. If the port is closed, update your firewall rules. The PDS process itself must also be running. On the server, run systemctl status pds to confirm it is active.

DNS record uses an incorrect hostname format

Some DNS providers automatically append the domain name to the host field. If you enter _atproto in the host field and the provider appends .yourdomain.com, the final record becomes _atproto.yourdomain.com.yourdomain.com. To avoid this, enter _atproto.yourdomain.com as the host and leave the domain suffix empty, or use a trailing dot like _atproto.yourdomain.com. Check the provider documentation for the correct syntax.

Bluesky PDS Migration: Common Failure Points at a Glance

Issue Symptom Fix
DNS not propagated Progress bar stuck at 50% Wait for propagation or use a faster DNS provider
Incorrect TXT record value No error message, spinner continues Correct the value to did=did:plc:...
Wrong PDS endpoint URL Process fails at 75% Enter the exact https:// URL without trailing slash
Firewall blocking port 443 Connection timeout in server logs Open port 443 on your server firewall
Multiple active sessions Migration shows as in progress on all devices Log out of all devices except one

You can now resolve a stuck Bluesky PDS migration by verifying DNS propagation and restarting the process. After a successful migration, your account data will reside on your own server, giving you full control over your content and identity. To prevent future issues, set the TTL on your AT Protocol DNS record to 300 seconds for faster updates. If you host multiple domains on the same PDS, ensure each domain has its own _atproto TXT record with the correct DID.