McGarrah Technical Blog

Migrating 16 Domains from SquareSpace to Porkbun

· 16 min read

When a vendor you depend on gets acquired, the technical debt lands on your desk whether you planned for it or not. Google killed Google Domains, SquareSpace inherited the customers, and SquareSpace’s walled garden — no API, no DNS export, no automation hooks — made it incompatible with the DNS automation I need for Technitium, PowerDNS, and cert-manager DNS-01 challenges. Sixteen domains had to move, renewal dates were approaching, and I was already behind before I started.

“He was in a bind ‘cause he was way behind” — Charlie Daniels Band, The Devil Went Down to Georgia

This is the story of that migration: the batching strategy, the cost management, the DNS backup process that SquareSpace makes unnecessarily painful, and why Porkbun won the evaluation.

Google Domains — Gone But Not Forgotten

Google Domains was highly recommended for good reason: transparent pricing, clean interface, and reliable service. Google’s decision to shut down and sell to SquareSpace forced this entire migration project. A reminder that even Google services aren’t permanent. This left me with a technical debt to resolve on something that I had been able to ignore for a long time since the service had just worked.

The Situation

I’m migrating 16 domains from SquareSpace (SS) to Porkbun (PB). These domains originally came from Google Domains before Google sold their registrar business to SquareSpace. The migration is slow and somewhat expensive as I have to do the whole year of registration costs at once, but this is now necessary. I have some other projects involving Technitium and PowerDNS with Split Horizon DNS that require automation which SquareSpace does not have with their walled garden. That walled garden will come up later.

Domain Inventory

All domains currently at SquareSpace, sorted by renewal date:

Domain Original SS Renewal New PB Expiration Batch Risk Level Status Notes
mathomancer.com Mar 31, 2026 Mar 31, 2027 1 Low ✅ Complete Email forwarding only, minimal traffic
mathomancy.com Mar 31, 2026 Mar 31, 2027 1 Low ✅ Complete Old site, little to no traffic
brainyzone.com Apr 17, 2026 Apr 17, 2027 1 Low ✅ Complete Email forwarding, minimal traffic
brainyzone.org Apr 17, 2026 Apr 17, 2027 1 Low ✅ Complete Email forwarding, minimal traffic
cshensley.com May 8, 2026 May 9, 2027 1 Medium ✅ Complete Active website + email - son’s resume site, GitHub Pages reconfigured
brainyz.one May 17, 2026 May 17, 2027 2 Low ✅ Complete Minimal usage
brainyzone.app May 17, 2026 May 17, 2027 2 Low ✅ Complete Minimal usage
brainyzone.net May 17, 2026 May 17, 2027 2 Low ✅ Complete Minimal usage
brainyzone.us May 17, 2026 May 17, 2027 2 Low ✅ Complete Minimal usage
mcgarware.com Jun 9, 2026 3 High 🔄 In Progress Remaining at SquareSpace
phonemes.biz Jun 15, 2026 3 Low ❌ Abandoning Letting expire - not transferring
phonemes.org Jun 16, 2026 3 Medium 🔄 In Progress May have AWS demo site + email - needs investigation
darkmagic.org Aug 16, 2026 4 Medium 🔄 In Progress Long-held domain, may have complexity
mcgarrah.dev Mar 3, 2027 5 Medium 🔄 In Progress Development projects
mcgarrah.us Sep 22, 2027 5 Medium 🔄 In Progress Forwards to blog.mcgarrah.org
mcgarrah.app Mar 3, 2028 5 Medium 🔄 In Progress Application projects
mcgarrah.org Aug 2, 2027 6 High 🔄 In Progress Primary domain - highest risk, migrate last

Migration Strategy:

Progress: 9 of 16 domains migrated (56.25% complete) All transferred domains renewed through 2027 at Porkbun

The Transfer Process Challenges

Cost Management:

Porkbun Annual Renewal Pricing (as of Feb 2026):

My Domain Breakdown:

SquareSpace Delays:

Accelerated Transfer Process (IMPORTANT):

You CAN expedite the 5-day transfer hold:

  1. Contact Porkbun support and request accelerated transfer
  2. They will send authentication request to domain’s registered email
  3. Respond from valid domain email address to verify ownership
  4. Transfer completes much faster than standard 5-day wait

This significantly reduces migration time per domain batch.

Note: While this built-in delay is frustrating, it protects my domains against DNS hijacking and I appreciate they are protecting my domains. But also very glad they will accelerate the process as well. Good on SquareSpace. Would be happy to return if they stop the walled-garden and have competitive pricing.

Pre-Migration Investigation Needed

phonemes.org:

mcgarrah.org (HIGHEST COMPLEXITY):

This is the primary domain with the most complex DNS configuration:

Complete DNS Record Count: 25+ records across root and subdomains

Migration checklist for mcgarrah.org:

Why Porkbun?

After evaluating multiple registrars, Porkbun emerged as the clear winner for homelab domain management:

Key Advantages

API Access:

Pricing:

Developer-Friendly:

Homelab Integration:

Hard Pass Registrars

GoDaddy - Never Again

Multiple negative experiences, both personal and professional:

After the multi-day outage incident, I moved all personal domains away and have recommended against GoDaddy professionally ever since.

Register.com / Network Solutions

Poor customer service, outdated systems, and overpriced renewals. Multiple frustrating support interactions over the years made these registrars non-starters. However, I have not used them in so long that I’m not sure my assessment reflects the current company and is just spite on my part. :)

SquareSpace

Expensive, limited API access, not developer-friendly. The forced migration from Google Domains revealed how restrictive their platform is compared to alternatives. No DNS export functionality is particularly frustrating.

Alternative Registrars Considered

NameCheap

World’s second-largest registrar with competitive pricing and good support. Offers affordable SSL certificates and premium DNS with DDoS protection. Solid choice but lacks the API flexibility needed for homelab automation.

Dynadot

Favored by domainers and developers on Reddit. Low renewal prices and simple platform. Good option but Porkbun’s API capabilities were more compelling for homelab use.

Cloudflare

Sells domains at cost - lowest prices available. However, requires using Cloudflare DNS exclusively with no option to change nameservers. This restriction conflicts with homelab Technitium and PowerDNS setup I plan on using.

Migration Timeline

Week 1-2: Request transfer codes for Batch 1 (5 domains) Week 3: Wait for SquareSpace 5-day hold to expire Week 4: Complete Batch 1 transfers to Porkbun Ongoing: Repeat process for remaining batches

DNS Records Migration Challenge

The Problem

⚠️ CRITICAL: SquareSpace doesn’t provide an easy export function for DNS records. Once a domain transfers, SquareSpace removes all DNS records with NO way to retrieve them. You MUST backup DNS records BEFORE initiating transfer.

Lesson Learned: After transferring the first 9 domains, discovered that SquareSpace provides no access to DNS records post-transfer. Fortunately, had backed up records to Google Docs using SquareSpace WebUI copy/paste method. This backup was essential for recreating DNS at Porkbun.

Manual Export Method

For each domain at SquareSpace:

  1. Navigate to Settings → Domains → [domain name] → DNS Settings
  2. Screenshot or manually document all records:
    • A records (IPv4 addresses)
    • AAAA records (IPv6 addresses)
    • CNAME records (aliases)
    • MX records (mail servers)
    • TXT records (SPF, DKIM, verification)
    • SRV records (service records)
  3. Note TTL values if customized
  4. Save to spreadsheet or text file

BEST PRACTICE: Use dig or nslookup to create automated backup BEFORE transfer. This provides a reliable, timestamped record independent of registrar UI.

⚠️ IMPORTANT LIMITATION: The dig command only queries publicly published DNS records. It cannot discover:

For complete DNS backup, you MUST:

  1. Export from SquareSpace WebUI (copy/paste all records) - This is your authoritative source
  2. Run dig backup script (below) - Validates what’s publicly visible
  3. Compare both sources - Identifies any unpublished or subdomain records

Why both methods are needed:

For mcgarrah.org with 25+ records across multiple subdomains (nutrition, quiz, shiny-quiz, docean, etc.), the WebUI export was essential - dig alone would have missed most subdomain configurations.

Automated Backup Script:

Created a bash script to backup all remaining domains at once:

#!/bin/bash
# DNS Backup Script for SquareSpace Domain Migration
# Backs up all DNS records before transfer to Porkbun

# Check if dig command is available
if ! command -v dig &> /dev/null; then
    echo "ERROR: 'dig' command not found"
    echo "Install with: apt-get install dnsutils (Debian/Ubuntu) or dnf install bind-utils (RHEL/Fedora)"
    exit 1
fi

DOMAINS=(
    # Already migrated to Porkbun (commented out):
    # "mathomancer.com"
    # "mathomancy.com"
    # "brainyzone.com"
    # "brainyzone.org"
    # "cshensley.com"
    # "brainyz.one"
    # "brainyzone.app"
    # "brainyzone.net"
    # "brainyzone.us"
    
    # Still at SquareSpace (active):
    "mcgarware.com"
    "phonemes.org"
    "darkmagic.org"
    "mcgarrah.dev"
    "mcgarrah.org"
    "mcgarrah.us"
    "mcgarrah.app"
)

RECORD_TYPES=("A" "AAAA" "CNAME" "MX" "TXT" "NS" "SOA" "SRV")
BACKUP_DIR="dns-backups-$(date +%Y%m%d-%H%M%S)"

mkdir -p "$BACKUP_DIR"

echo "DNS Backup started at $(date)"
echo "Backup directory: $BACKUP_DIR"
echo "================================"

for domain in "${DOMAINS[@]}"; do
    echo "Backing up: $domain"
    output_file="$BACKUP_DIR/${domain}.txt"
    
    echo "DNS Records for $domain" > "$output_file"
    echo "Backup Date: $(date)" >> "$output_file"
    echo "========================================" >> "$output_file"
    echo "" >> "$output_file"
    
    for type in "${RECORD_TYPES[@]}"; do
        echo "[$type Records]" >> "$output_file"
        dig @8.8.8.8 "$domain" "$type" +noall +answer >> "$output_file" 2>&1
        echo "" >> "$output_file"
    done
    
    # Also check www subdomain
    echo "[WWW Subdomain]" >> "$output_file"
    dig @8.8.8.8 "www.$domain" A +noall +answer >> "$output_file" 2>&1
    echo "" >> "$output_file"
    
    echo "✓ Saved to $output_file"
done

echo "================================"
echo "Backup complete!"
echo "Files saved in: $BACKUP_DIR"
echo ""
echo "To view a domain's records:"
echo "  cat $BACKUP_DIR/mcgarrah.org.txt"

Download and Usage:

# Download script
wget https://mcgarrah.org/assets/binaries/backup-dns-records.sh
chmod +x backup-dns-records.sh

# Run backup
./backup-dns-records.sh

# View results
ls -lh dns-backups-*/
cat dns-backups-*/mcgarrah.org.txt

Manual dig commands for individual domains:

# Query all record types for a domain
dig @8.8.8.8 example.com ANY +noall +answer

# Query specific record types
dig @8.8.8.8 example.com A
dig @8.8.8.8 example.com MX
dig @8.8.8.8 example.com TXT
dig @8.8.8.8 www.example.com CNAME

# Export to file
dig @8.8.8.8 example.com ANY +noall +answer > example.com-dns.txt

Using online DNS lookup tools:

Import to Porkbun

Manual method:

  1. Log into Porkbun
  2. Navigate to domain → DNS Records
  3. Manually recreate each record from documentation
  4. Verify all records before changing nameservers

API method (future automation):

# Porkbun API endpoint for DNS records
curl -X POST https://porkbun.com/api/json/v3/dns/create/example.com \
  -H "Content-Type: application/json" \
  -d '{
    "apikey": "YOUR_API_KEY",
    "secretapikey": "YOUR_SECRET_KEY",
    "name": "www",
    "type": "A",
    "content": "192.0.2.1",
    "ttl": "600"
  }'

Migration Checklist

Migration Progress

Batches 1 & 2 Complete (9 of 16 domains - 56.25%):

All successfully transferred to Porkbun and renewed through 2027:

Remaining at SquareSpace (7 domains):

Key Lessons:

  1. DNS Backup is MANDATORY - SquareSpace deletes records after transfer
  2. WebUI export is essential - dig cannot discover subdomain records automatically
  3. Use BOTH methods - WebUI for complete config, dig for public validation
  4. SquareSpace’s walled garden - No API, no export, forces manual copy/paste
  5. Request accelerated transfer from Porkbun support to save days of waiting
  6. GitHub Pages domains require reconfiguration in repository settings after DNS changes

Note: This is the most critical and time-consuming part of the migration. SquareSpace’s lack of export functionality and post-transfer record deletion makes DNS backup absolutely essential. The combination of WebUI copy/paste (for completeness) and CLI tools (for validation) provides the most reliable backup strategy.

Lessons Learned

Start Early: Transfer delays mean starting 2-3 weeks before renewal dates Batch Wisely: Group by renewal date to manage cash flow API Matters: For homelab automation, API access is non-negotiable Cost Planning: Budget for all renewals upfront - transfers aren’t free

What This Migration Enables

With Porkbun’s API in place, the domains become programmable infrastructure rather than manually managed assets. This unlocks the DNS automation chain I’ve been building toward: cert-manager with Porkbun DNS-01 webhooks for wildcard TLS certificates, external-dns for automatic record management from Kubernetes, and Technitium split-horizon DNS for internal resolution — all driven by API calls rather than clicking through a registrar’s web UI. The migration cost roughly $182 and several weeks of elapsed time, but it eliminates a vendor dependency that was blocking three other infrastructure projects.


References

Categories: technical, infrastructure

About the Author: Michael McGarrah is a Cloud Architect with 25+ years in enterprise infrastructure, machine learning, and system administration. He holds an M.S. in Computer Science (AI/ML) from Georgia Tech and a B.S. in Computer Science from NC State University, and is currently pursuing an Executive MBA at UNC Wilmington. LinkedIn · Substack · GitHub · ORCID · Google Scholar · Resume