← back to Cf Dns Migration
CF DNS migration: Phase-0 inventory (286 domains classified) + idempotent stage.py replication engine (GoDaddy records → CF zone, structural guards, dry-run proven)
cf3dacbb76180807b18beb463f7fa7a26bf765fb · 2026-07-22 21:32:20 -0700 · Steve
Files touched
A .gitignoreA README.mdA classified.csvA stage.pyA worklist.csv
Diff
commit cf3dacbb76180807b18beb463f7fa7a26bf765fb
Author: Steve <steve@designerwallcoverings.com>
Date: Wed Jul 22 21:32:20 2026 -0700
CF DNS migration: Phase-0 inventory (286 domains classified) + idempotent stage.py replication engine (GoDaddy records → CF zone, structural guards, dry-run proven)
---
.gitignore | 6 ++
README.md | 49 ++++++++++
classified.csv | 287 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
stage.py | 194 ++++++++++++++++++++++++++++++++++++++
worklist.csv | 242 ++++++++++++++++++++++++++++++++++++++++++++++++
5 files changed, 778 insertions(+)
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..c8cf16a
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,6 @@
+node_modules/
+.env*
+tmp/
+*.log
+.DS_Store
+staged-*.csv
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..cd8700c
--- /dev/null
+++ b/README.md
@@ -0,0 +1,49 @@
+# CF DNS migration
+
+Move the DNS *management* of Steve's actively-used GoDaddy domains to Cloudflare
+(domains stay **registered** at GoDaddy) so DNS + email become API-manageable.
+GoDaddy retired the write side of its public API for this account, so it can only
+be managed by hand in the dashboard today.
+
+## Why
+286 domains at GoDaddy, write-blocked API. Phase-0 inventory (`classified.csv`):
+- **LIVE+EMAIL 193 · LIVE_SITE 52 · ON_CF 39 · EMAIL_ONLY 2** (nothing fully parked)
+- Email: Purelymail 196 · **Google Workspace 5 (EXCLUDE)** · GoDaddy 2
+- NS: GoDaddy 243 · Cloudflare 39
+
+`worklist.csv` = the 241 GoDaddy-NS migration candidates (Workspace auto-excluded).
+
+## ⚠️ Hard exclusions (never touch MX — Google Workspace)
+`designerwallcoverings.com`, `studentdebtcrisis.com/.org`, `studentdebtcrisiscenter.com/.org`
+
+## The one manual step
+The **NS-swap is GoDaddy-dashboard-only** (unlock the domain, set nameservers to the
+per-zone pair CF assigns). Everything else is automated. Staging a CF zone is **safe
+and dormant** — the domain keeps its GoDaddy nameservers until the swap, so a staged
+zone changes nothing live. Cutover is then instant + lossless because the zone is
+already a faithful copy.
+
+## Tool — `stage.py`
+Reads each domain's LIVE GoDaddy records → ensures a CF zone → replicates records
+**idempotently**, DNS-only (grey cloud, mirrors GoDaddy exactly). Structural guards
+never create an invalid zone (CNAME-alone rule, DMARC/SPF singletons), so it's safe
+to re-run and safe against already-curated zones.
+
+```
+python3 stage.py --dry-run homesonspec.com # preview (no writes) — DEFAULT SAFE
+python3 stage.py --from worklist.csv --limit 5 # LIVE-stage first 5 (gated)
+python3 stage.py <domain> ... # LIVE-stage named domains (gated)
+```
+Never copies NS/SOA or GoDaddy's proprietary `_domainconnect`. Emits
+`staged-nameservers.csv` = the NS-swap worklist (each domain → its CF nameservers).
+
+## Runbook
+1. **Phase 0** — done (`classified.csv`, `worklist.csv`).
+2. **Phase 1 pilot — homesonspec.com**: zone already fully staged (dry-run = +0). Only
+ the GoDaddy NS-swap remains → then `purelymail_add_domain` + `info@` routing rule.
+3. **Phase 2** — `stage.py --from worklist.csv` (batches), then bulk NS-swap per batch
+ in the GoDaddy dashboard from `staged-nameservers.csv`.
+4. **Phase 3** — verify + SSL + a drift canary.
+
+**Gating:** live staging (CF zone/record writes) and every NS-swap are DNS changes →
+Steve-approved, run with named domains. Dry-run is always safe.
diff --git a/classified.csv b/classified.csv
new file mode 100644
index 0000000..a059ff7
--- /dev/null
+++ b/classified.csv
@@ -0,0 +1,287 @@
+domain,ns,has_a,mx,bucket
+1890swallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+800wallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+1930swallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+1800wallpapers.com,godaddy,yes,purelymail,LIVE+EMAIL
+abramscivic.com,cloudflare,yes,none,ON_CF
+1980swallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+aaatreetrimming.com,godaddy,yes,purelymail,LIVE+EMAIL
+1960swallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+1800wallcoverings.com,godaddy,yes,purelymail,LIVE+EMAIL
+90210rentals.com,godaddy,yes,none,LIVE_SITE
+1920swallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+67calc.com,godaddy,yes,purelymail,LIVE+EMAIL
+abramsatlas.com,cloudflare,yes,none,ON_CF
+abramsindustries.com,cloudflare,yes,none,ON_CF
+1940swallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+abramsindex.com,cloudflare,yes,none,ON_CF
+1970swallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+818butler.com,cloudflare,yes,none,ON_CF
+1950swallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+1900swallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+1800swallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+abramsdirectory.com,cloudflare,yes,none,ON_CF
+abramsintel.com,cloudflare,yes,none,ON_CF
+abramsintelligence.com,cloudflare,yes,none,ON_CF
+abramslocal.com,cloudflare,yes,none,ON_CF
+abramsguide.com,cloudflare,yes,none,ON_CF
+abramsos.com,cloudflare,yes,none,ON_CF
+abramsmaps.com,cloudflare,yes,none,ON_CF
+abramsmarkets.com,cloudflare,yes,none,ON_CF
+allnewsdaily.com,godaddy,yes,none,LIVE_SITE
+apartmentwallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+asknonna.ai,godaddy,yes,purelymail,LIVE+EMAIL
+abramslive.com,cloudflare,yes,none,ON_CF
+askgoodquestions.ai,godaddy,yes,purelymail,LIVE+EMAIL
+abramsvc.com,cloudflare,yes,none,ON_CF
+barwallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+abramsspace.com,cloudflare,yes,none,ON_CF
+asseeninmovies.com,godaddy,yes,purelymail,LIVE+EMAIL
+agentabrams.com,cloudflare,yes,purelymail,ON_CF
+asseeninshowrooms.com,godaddy,yes,purelymail,LIVE+EMAIL
+agedwallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+architecturalwallcoverings.com,godaddy,yes,purelymail,LIVE+EMAIL
+bestactorawards.com,godaddy,yes,none,LIVE_SITE
+bestdocumentaryfilms.com,godaddy,yes,none,LIVE_SITE
+bestwallpaperplace.com,godaddy,yes,purelymail,LIVE+EMAIL
+beverlyandhills.com,godaddy,yes,purelymail,LIVE+EMAIL
+beverlyhillspaints.com,godaddy,yes,purelymail,LIVE+EMAIL
+blockprintedwallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+bubbie.ai,godaddy,yes,purelymail,LIVE+EMAIL
+beverlyhillsbutler.com,cloudflare,yes,none,ON_CF
+borrowerbills.org,godaddy,yes,purelymail,LIVE+EMAIL
+bleachfriendly.com,godaddy,yes,purelymail,LIVE+EMAIL
+boulevardbutler.com,cloudflare,yes,none,ON_CF
+bubbeleh.ai,godaddy,yes,purelymail,LIVE+EMAIL
+borninbh.com,godaddy,yes,purelymail,LIVE+EMAIL
+bubbesblock.com,godaddy,yes,none,LIVE_SITE
+boomercalc.com,cloudflare,yes,none,ON_CF
+cannabisofthemonthclub.com,godaddy,yes,none,LIVE_SITE
+blankstocklining.com,godaddy,yes,purelymail,LIVE+EMAIL
+carmelriverwater.com,godaddy,yes,purelymail,LIVE+EMAIL
+abramsprotection.com,cloudflare,yes,none,ON_CF
+carmelpaints.com,godaddy,yes,purelymail,LIVE+EMAIL
+abramsterminal.com,cloudflare,yes,none,ON_CF
+asseeninhotels.com,godaddy,yes,purelymail,LIVE+EMAIL
+asseeninla.com,godaddy,yes,purelymail,LIVE+EMAIL
+carmelvalleywater.com,godaddy,yes,purelymail,LIVE+EMAIL
+carmelwallpapers.com,godaddy,yes,purelymail,LIVE+EMAIL
+cfafabrics.com,godaddy,yes,purelymail,LIVE+EMAIL
+carmelwallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+classawallcovering.com,godaddy,yes,purelymail,LIVE+EMAIL
+chinoiseriewallpaper.com,godaddy,yes,none,LIVE_SITE
+commercialdesignreps.com,godaddy,yes,none,LIVE_SITE
+claimmyaddress.com,godaddy,yes,none,LIVE_SITE
+cleaninggrants.com,godaddy,yes,none,LIVE_SITE
+contractwallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+corkwallcovering.com,godaddy,yes,purelymail,LIVE+EMAIL
+cleaninggrants.org,godaddy,yes,none,LIVE_SITE
+customdigitalmurals.com,godaddy,yes,purelymail,LIVE+EMAIL
+commercialsalesreps.com,godaddy,yes,purelymail,LIVE+EMAIL
+cypresawards.com,cloudflare,yes,none,ON_CF
+customdigitalwallcoverings.com,godaddy,yes,purelymail,LIVE+EMAIL
+commercialwalls.com,godaddy,yes,purelymail,LIVE+EMAIL
+bhbutler.com,cloudflare,yes,none,ON_CF
+cypresawards.org,godaddy,yes,purelymail,LIVE+EMAIL
+designerlaboratory.com,godaddy,yes,purelymail,LIVE+EMAIL
+commercialwallcovering.com,godaddy,yes,purelymail,LIVE+EMAIL
+customdigitalwalls.com,godaddy,yes,purelymail,LIVE+EMAIL
+bubbe.ai,cloudflare,yes,none,ON_CF
+designermagnetics.com,godaddy,yes,purelymail,LIVE+EMAIL
+designerrepresentatives.com,godaddy,yes,none,LIVE_SITE
+designerswallcoverings.com,godaddy,yes,purelymail,LIVE+EMAIL
+designerswallcovering.com,godaddy,yes,purelymail,LIVE+EMAIL
+designersalesreps.com,godaddy,yes,purelymail,LIVE+EMAIL
+designerswallpapers.com,godaddy,yes,purelymail,LIVE+EMAIL
+designerschat.com,godaddy,yes,purelymail,LIVE+EMAIL
+designerssalesreps.com,godaddy,yes,none,LIVE_SITE
+designerwallcoverings.com,cloudflare,yes,google,ON_CF
+designerwallcoverings.ai,godaddy,yes,purelymail,LIVE+EMAIL
+designerwallcover.com,godaddy,yes,purelymail,LIVE+EMAIL
+designerwallpaints.com,godaddy,yes,purelymail,LIVE+EMAIL
+designwallcoverings.com,godaddy,yes,purelymail,LIVE+EMAIL
+designerwalltiles.com,godaddy,yes,purelymail,LIVE+EMAIL
+designerwallcovering.com,godaddy,yes,purelymail,LIVE+EMAIL
+dsgn.tv,godaddy,yes,purelymail,LIVE+EMAIL
+dsgntv.com,godaddy,yes,none,LIVE_SITE
+dwlosangeles.com,godaddy,yes,purelymail,LIVE+EMAIL
+designtradereps.com,godaddy,yes,purelymail,LIVE+EMAIL
+designtradesalesreps.com,godaddy,yes,purelymail,LIVE+EMAIL
+etciemurals.com,godaddy,yes,purelymail,LIVE+EMAIL
+designtradelive.com,godaddy,yes,none,LIVE_SITE
+edgrants.org,godaddy,yes,purelymail,LIVE+EMAIL
+ephedrafreeherbs.com,godaddy,yes,none,LIVE_SITE
+fabricfridays.com,godaddy,yes,purelymail,LIVE+EMAIL
+fabricwallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+embroideredwallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+fauxnewslive.com,godaddy,yes,none,LIVE_SITE
+fabricsondemand.com,godaddy,yes,purelymail,LIVE+EMAIL
+fentucci.com,cloudflare,yes,purelymail,ON_CF
+fireratedwallcovering.com,godaddy,yes,purelymail,LIVE+EMAIL
+flocked.org,godaddy,yes,purelymail,LIVE+EMAIL
+freethedegree.org,godaddy,yes,purelymail,LIVE+EMAIL
+forgivestudentloandebt.com,godaddy,yes,purelymail,LIVE+EMAIL
+ffepurchasing.com,cloudflare,yes,purelymail,ON_CF
+glitterwalls.com,godaddy,yes,purelymail,LIVE+EMAIL
+glassbeadedwallpaper.com,cloudflare,yes,none,ON_CF
+flockedwallpaper.com,cloudflare,yes,none,ON_CF
+goodquestion.ai,cloudflare,yes,none,ON_CF
+fabricfriday.com,godaddy,yes,purelymail,LIVE+EMAIL
+greenwallcoverings.com,godaddy,yes,purelymail,LIVE+EMAIL
+grassclothwallpaper.com,cloudflare,yes,none,ON_CF
+grassclothwallcovering.com,godaddy,yes,purelymail,LIVE+EMAIL
+greendomainbrokers.com,godaddy,yes,purelymail,LIVE+EMAIL
+handcraftedwallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+handmadewallcovering.com,godaddy,yes,purelymail,LIVE+EMAIL
+grassclothwallcoverings.com,cloudflare,yes,none,ON_CF
+handmadewallpapers.com,godaddy,yes,purelymail,LIVE+EMAIL
+goldleafwallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+healthcarewallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+herbsmadeinchina.com,godaddy,yes,none,LIVE_SITE
+hempofthemonthclub.com,godaddy,yes,none,LIVE_SITE
+hollywoodwallcovering.com,godaddy,yes,purelymail,LIVE+EMAIL
+hollywoodwallcoverings.com,godaddy,yes,purelymail,LIVE+EMAIL
+homesonspec.com,godaddy,yes,none,LIVE_SITE
+handscreenedwallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+hospitalityfabrics.net,godaddy,yes,none,LIVE_SITE
+hospitalitydesignreps.com,godaddy,yes,none,LIVE_SITE
+hospitalitymurals.com,godaddy,yes,purelymail,LIVE+EMAIL
+filthyrichliving.com,godaddy,yes,purelymail,LIVE+EMAIL
+hospitalitysalesagency.com,godaddy,yes,purelymail,LIVE+EMAIL
+hospitalitywallcoverings.com,cloudflare,yes,purelymail,ON_CF
+hospitalitywalls.com,godaddy,yes,none,LIVE_SITE
+hospitalitywallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+hospitalitysalesrepresentatives.com,godaddy,yes,none,LIVE_SITE
+interiordesignreps.com,godaddy,yes,purelymail,LIVE+EMAIL
+hospitalitysalesreps.com,godaddy,yes,purelymail,LIVE+EMAIL
+hotelwallcoverings.com,godaddy,yes,purelymail,LIVE+EMAIL
+inflationfears.com,godaddy,yes,purelymail,LIVE+EMAIL
+iwascute.com,godaddy,yes,purelymail,LIVE+EMAIL
+joshdultz.com,godaddy,yes,purelymail,LIVE+EMAIL
+lacountyeats.com,godaddy,yes,none,LIVE_SITE
+jutewallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+latke.ai,godaddy,yes,purelymail,LIVE+EMAIL
+losgardeners.com,godaddy,yes,purelymail,LIVE+EMAIL
+lasjardineras.com,godaddy,yes,purelymail,LIVE+EMAIL
+malibuwallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+madagascarwallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+marijuanaofthemonthclub.com,godaddy,yes,none,LIVE_SITE
+metallicwallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+luxurymurals.com,godaddy,yes,godaddy,LIVE+EMAIL
+losangelesfabrics.com,godaddy,yes,purelymail,LIVE+EMAIL
+marijuanabuyersexchange.com,godaddy,yes,none,LIVE_SITE
+micawallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+muralsondemand.com,godaddy,yes,purelymail,LIVE+EMAIL
+mohairvelvet.com,godaddy,yes,none,LIVE_SITE
+museumwallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+montereywallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+nataliaabrams.com,godaddy,yes,purelymail,LIVE+EMAIL
+mymemosamples.com,godaddy,yes,none,LIVE_SITE
+mylarwallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+hospitalitysalesagents.com,godaddy,yes,purelymail,LIVE+EMAIL
+nationalpaperhangers.com,godaddy,yes,purelymail,LIVE+EMAIL
+nationalvotingday.org,godaddy,yes,none,LIVE_SITE
+naturalwallcoverings.com,godaddy,yes,purelymail,LIVE+EMAIL
+notvrequired.com,godaddy,yes,none,LIVE_SITE
+nybutler.com,godaddy,yes,none,LIVE_SITE
+linenwallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+petitionyour.org,godaddy,yes,none,LIVE_SITE
+nodailyworries.com,godaddy,yes,none,LIVE_SITE
+novasuede.com,cloudflare,yes,godaddy,ON_CF
+potofthemonthclub.com,godaddy,yes,none,LIVE_SITE
+pastelwallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+petitionyour.com,cloudflare,yes,none,ON_CF
+naturaltextilewallpaper.com,godaddy,yes,none,LIVE_SITE
+philliperomano.com,godaddy,yes,purelymail,LIVE+EMAIL
+protectyourspec.com,godaddy,yes,none,LIVE_SITE
+printmurals.com,godaddy,yes,purelymail,LIVE+EMAIL
+patterndesignlab.com,godaddy,yes,purelymail,LIVE+EMAIL
+raffiawalls.com,godaddy,yes,purelymail,LIVE+EMAIL
+raffiawallcoverings.com,godaddy,yes,purelymail,LIVE+EMAIL
+protestdaily.com,godaddy,yes,purelymail,LIVE+EMAIL
+restaurantwallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+restaurantfabrics.com,godaddy,yes,purelymail,LIVE+EMAIL
+naturalwalltextures.com,godaddy,yes,purelymail,LIVE+EMAIL
+restaurantmurals.com,godaddy,yes,purelymail,LIVE+EMAIL
+restorationwallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+retrowalls.com,godaddy,yes,purelymail,LIVE+EMAIL
+roomsettings.com,godaddy,yes,purelymail,LIVE+EMAIL
+saloonwallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+selfadhesivewallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+screenprintedwallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+silkwallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+specifywallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+silverleafwallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+stringwallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+studentdebtattorney.com,godaddy,yes,purelymail,LIVE+EMAIL
+silkwallcoverings.com,godaddy,yes,purelymail,LIVE+EMAIL
+starsofdesign.com,godaddy,yes,none,LIVE_SITE
+philipperomano.com,cloudflare,yes,none,ON_CF
+studentdebtcrisis.com,godaddy,yes,google,LIVE+EMAIL
+studentdebthotline.org,godaddy,yes,purelymail,LIVE+EMAIL
+steveabramsdesigns.com,godaddy,yes,purelymail,LIVE+EMAIL
+studentdebtlawyers.org,godaddy,yes,purelymail,LIVE+EMAIL
+studentstrikes.org,godaddy,yes,purelymail,LIVE+EMAIL
+summergamesrentals.com,godaddy,yes,none,LIVE_SITE
+sheltermagazines.com,godaddy,yes,purelymail,LIVE+EMAIL
+theatrewallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+textilewallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+suedewallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+thecannabisnews.com,godaddy,yes,purelymail,LIVE+EMAIL
+studentdebtcrisis.org,other,yes,google,LIVE+EMAIL
+thedesignerlibrary.com,godaddy,yes,purelymail,LIVE+EMAIL
+thesetdecorator.com,godaddy,yes,purelymail,LIVE+EMAIL
+tradeonlytextiles.com,godaddy,no,purelymail,EMAIL_ONLY
+thehotelwallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+traditionalwhimsy.com,godaddy,yes,purelymail,LIVE+EMAIL
+thedesignerlaboratory.com,godaddy,yes,purelymail,LIVE+EMAIL
+urthfriendly.com,godaddy,yes,none,LIVE_SITE
+treetrimmingguys.com,godaddy,yes,purelymail,LIVE+EMAIL
+textiletuesday.com,godaddy,yes,purelymail,LIVE+EMAIL
+upperonepercent.com,godaddy,yes,purelymail,LIVE+EMAIL
+unitedstateswallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+studentdebtcrisiscenter.com,godaddy,yes,google,LIVE+EMAIL
+venturacorridor.com,godaddy,yes,none,LIVE_SITE
+wallco.ai,godaddy,yes,purelymail,LIVE+EMAIL
+vinylwallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+venturadelivers.com,godaddy,yes,none,LIVE_SITE
+valleybutler.com,godaddy,yes,none,LIVE_SITE
+wall-papers.org,godaddy,yes,none,LIVE_SITE
+vintagebh.com,godaddy,yes,purelymail,LIVE+EMAIL
+wallpapercontractor.com,godaddy,yes,none,LIVE_SITE
+wallcovering.net,godaddy,yes,purelymail,LIVE+EMAIL
+wallpaperdictionary.com,godaddy,yes,purelymail,LIVE+EMAIL
+wallpaperfromthe80s.com,godaddy,yes,purelymail,LIVE+EMAIL
+wallpaperexports.com,godaddy,yes,purelymail,LIVE+EMAIL
+wallpaperestimator.com,godaddy,yes,none,LIVE_SITE
+wallpapercanada.com,cloudflare,yes,purelymail,ON_CF
+wallpaperglossary.com,godaddy,yes,purelymail,LIVE+EMAIL
+wallpaperhistory.com,godaddy,yes,purelymail,LIVE+EMAIL
+thesalesreps.com,godaddy,yes,purelymail,LIVE+EMAIL
+wallpapernyc.com,godaddy,yes,purelymail,LIVE+EMAIL
+wallpapernashville.com,godaddy,yes,none,LIVE_SITE
+wallpaperny.com,godaddy,yes,purelymail,LIVE+EMAIL
+wallpaperondemand.com,godaddy,yes,purelymail,LIVE+EMAIL
+wallpaperdistributors.com,godaddy,yes,none,LIVE_SITE
+wallpaperweekly.com,godaddy,yes,purelymail,LIVE+EMAIL
+wallpaperwednesday.com,godaddy,yes,purelymail,LIVE+EMAIL
+venturaclaw.com,godaddy,yes,purelymail,LIVE+EMAIL
+wallsandfabrics.com,godaddy,yes,purelymail,LIVE+EMAIL
+wallpaperpurchasing.com,godaddy,yes,purelymail,LIVE+EMAIL
+wallsondemand.com,godaddy,yes,purelymail,LIVE+EMAIL
+wallpaperdefinitions.com,godaddy,yes,purelymail,LIVE+EMAIL
+weedofthemonthclub.com,godaddy,yes,none,LIVE_SITE
+wc-01.com,godaddy,yes,purelymail,LIVE+EMAIL
+venturaeats.com,godaddy,yes,none,LIVE_SITE
+wc01wallcoverings.com,godaddy,yes,purelymail,LIVE+EMAIL
+wc01wallpaper.com,godaddy,yes,purelymail,LIVE+EMAIL
+wholivedthere.com,godaddy,yes,none,LIVE_SITE
+zayde.ai,godaddy,yes,purelymail,LIVE+EMAIL
+withoutstudentdebt.org,godaddy,yes,purelymail,LIVE+EMAIL
+withoutstudentdebt.com,godaddy,yes,purelymail,LIVE+EMAIL
+wallpapersback.com,cloudflare,yes,purelymail,ON_CF
+wintergamesrentals.com,godaddy,yes,none,LIVE_SITE
+stevenabramsphotography.com,godaddy,no,purelymail,EMAIL_ONLY
+studentdebtcrisiscenter.org,other,yes,google,LIVE+EMAIL
+studentdebtlawyers.com,other,yes,purelymail,LIVE+EMAIL
+studentloanvoter.com,other,yes,purelymail,LIVE+EMAIL
diff --git a/stage.py b/stage.py
new file mode 100644
index 0000000..3e3e7ca
--- /dev/null
+++ b/stage.py
@@ -0,0 +1,194 @@
+#!/usr/bin/env python3
+"""
+Phase-2 CF-DNS staging engine.
+
+For each domain: read its LIVE records from GoDaddy, ensure a Cloudflare zone
+exists, and replicate the records into that zone idempotently. NOTHING cuts over
+here — the domain keeps its GoDaddy nameservers until a human does the NS-swap,
+so a staged CF zone is dormant/safe. The point is that when the swap happens the
+zone is already a faithful copy, so there's zero downtime.
+
+ python3 stage.py --dry-run homesonspec.com # show what would happen
+ python3 stage.py homesonspec.com foo.com # stage specific domains
+ python3 stage.py --from worklist.csv --limit 5 # stage first 5 from worklist
+ python3 stage.py --from worklist.csv # stage the whole worklist
+
+Records are replicated DNS-only (grey cloud) to mirror GoDaddy exactly; enable
+the CF proxy per-site later if wanted. NS/SOA and GoDaddy-proprietary
+`_domainconnect` records are never copied.
+"""
+import json, os, sys, time, urllib.request, urllib.error
+
+ENV = os.path.expanduser("~/Projects/secrets-manager/.env")
+def load_env(path):
+ e = {}
+ for line in open(path, encoding="utf-8", errors="ignore"):
+ line = line.strip()
+ if line and not line.startswith("#") and "=" in line:
+ k, v = line.split("=", 1)
+ e[k.strip()] = v.strip().strip('"').strip("'")
+ return e
+E = load_env(ENV)
+GD_KEY = E.get("GODADDY_API_KEY"); GD_SEC = E.get("GODADDY_API_SECRET")
+CF_TOKEN = E.get("CLOUDFLARE_API_TOKEN") or E.get("CF_API_TOKEN") or E.get("CLOUDFLARE_DNS_TOKEN")
+
+COPY_TYPES = {"A", "AAAA", "CNAME", "MX", "TXT", "SRV", "CAA", "NS_SUB"} # zone-apex NS handled by CF
+SKIP_NAMES = {"_domainconnect"}
+
+def req(url, method="GET", headers=None, body=None):
+ data = json.dumps(body).encode() if body is not None else None
+ r = urllib.request.Request(url, data=data, method=method, headers=headers or {})
+ try:
+ with urllib.request.urlopen(r, timeout=30) as resp:
+ return resp.status, json.loads(resp.read().decode())
+ except urllib.error.HTTPError as ex:
+ try: return ex.code, json.loads(ex.read().decode())
+ except Exception: return ex.code, {"error": str(ex)}
+ except Exception as ex:
+ return 0, {"error": str(ex)}
+
+# ---- GoDaddy ----
+def gd_records(domain):
+ _, d = req(f"https://api.godaddy.com/v1/domains/{domain}/records",
+ headers={"Authorization": f"sso-key {GD_KEY}:{GD_SEC}"})
+ return d if isinstance(d, list) else []
+
+# ---- Cloudflare ----
+CF_H = {"Authorization": f"Bearer {CF_TOKEN}", "Content-Type": "application/json"}
+def cf_zone(domain):
+ _, d = req(f"https://api.cloudflare.com/client/v4/zones?name={domain}", headers=CF_H)
+ res = d.get("result") or []
+ return res[0] if res else None
+def cf_create_zone(domain):
+ _, d = req("https://api.cloudflare.com/client/v4/zones", "POST", CF_H,
+ {"name": domain, "type": "full"})
+ return d.get("result") if d.get("success") else None
+def cf_records(zid):
+ out, page = [], 1
+ while True:
+ _, d = req(f"https://api.cloudflare.com/client/v4/zones/{zid}/dns_records?per_page=100&page={page}", headers=CF_H)
+ res = d.get("result") or []
+ out += res
+ if len(res) < 100: break
+ page += 1
+ return out
+def cf_add(zid, rec):
+ return req(f"https://api.cloudflare.com/client/v4/zones/{zid}/dns_records", "POST", CF_H, rec)
+
+def gd_to_cf(domain, r):
+ """Map a GoDaddy record to a Cloudflare dns_records payload, or None to skip."""
+ t = r.get("type")
+ name = r.get("name", "@")
+ if t in ("NS", "SOA") or name in SKIP_NAMES or t not in ("A","AAAA","CNAME","MX","TXT","SRV","CAA"):
+ return None
+ fqdn = domain if name == "@" else f"{name}.{domain}"
+ data = r.get("data", "")
+ if t == "CNAME" and data in ("@", ""):
+ data = domain
+ rec = {"type": t, "name": fqdn, "content": data, "ttl": max(int(r.get("ttl", 600) or 600), 60), "proxied": False}
+ if t == "MX":
+ rec["priority"] = int(r.get("priority", 10) or 10)
+ rec.pop("proxied", None)
+ if t in ("TXT", "SRV", "CAA"):
+ rec.pop("proxied", None)
+ return rec
+
+def rec_key(t, name, content):
+ return (t, name.rstrip("."), str(content).strip().strip('"'))
+
+def stage(domain, dry=False):
+ gd = gd_records(domain)
+ if not gd:
+ return {"domain": domain, "status": "no-godaddy-records", "added": 0, "existing": 0, "ns": ""}
+ zone = cf_zone(domain)
+ created = False
+ if not zone:
+ if dry:
+ zone = {"id": "(would-create)", "name_servers": ["(assigned-on-create)"]}
+ else:
+ zone = cf_create_zone(domain)
+ created = True
+ if not zone:
+ return {"domain": domain, "status": "cf-zone-create-failed", "added": 0, "existing": 0, "ns": ""}
+ zid = zone["id"]
+ existing = [] if zid == "(would-create)" else cf_records(zid)
+ have = {rec_key(r["type"], r["name"], r.get("content", "")) for r in existing}
+ # Structural state so we never create an invalid zone when CF is already curated:
+ types_at = {} # name -> {types present}
+ dmarc_at, spf_at = set(), set() # names that already have a DMARC / SPF TXT
+ for r in existing:
+ nm = r["name"].rstrip(".")
+ types_at.setdefault(nm, set()).add(r["type"])
+ c = str(r.get("content", "")).strip('"').lower()
+ if r["type"] == "TXT" and c.startswith("v=dmarc1"): dmarc_at.add(nm)
+ if r["type"] == "TXT" and c.startswith("v=spf1"): spf_at.add(nm)
+ added = kept = 0
+ for r in gd:
+ payload = gd_to_cf(domain, r)
+ if not payload: continue
+ nm = payload["name"].rstrip("."); c = str(payload["content"]).strip('"').lower()
+ here = types_at.get(nm, set())
+ # CNAME must be the ONLY record at a name; and DMARC/SPF are singletons.
+ if payload["type"] == "CNAME" and here: kept += 1; continue
+ if payload["type"] != "CNAME" and "CNAME" in here: kept += 1; continue
+ if payload["type"] == "TXT" and c.startswith("v=dmarc1") and nm in dmarc_at: kept += 1; continue
+ if payload["type"] == "TXT" and c.startswith("v=spf1") and nm in spf_at: kept += 1; continue
+ k = rec_key(payload["type"], payload["name"], payload["content"])
+ if k in have:
+ kept += 1; continue
+ # commit to adding — update running structural state so later records see it
+ types_at.setdefault(nm, set()).add(payload["type"]); have.add(k)
+ if payload["type"] == "TXT" and c.startswith("v=dmarc1"): dmarc_at.add(nm)
+ if payload["type"] == "TXT" and c.startswith("v=spf1"): spf_at.add(nm)
+ if dry:
+ print(f" + {payload['type']:6} {payload['name']:34} -> {str(payload['content'])[:46]}")
+ added += 1
+ else:
+ code, resp = cf_add(zid, payload)
+ if resp.get("success"): added += 1
+ else:
+ # duplicate/exists errors are fine (idempotent); log others
+ errs = resp.get("errors", [])
+ if any("already exists" in str(e).lower() for e in errs): kept += 1
+ else: print(f" ! {payload['type']} {payload['name']}: {errs}")
+ time.sleep(0.05)
+ ns = ",".join(zone.get("name_servers", []) or [])
+ return {"domain": domain, "status": ("staged" + ("+created" if created else "")) if not dry else "dry",
+ "added": added, "existing": kept, "ns": ns, "zone_id": zid}
+
+def main():
+ args = sys.argv[1:]
+ dry = "--dry-run" in args; args = [a for a in args if a != "--dry-run"]
+ limit = None; domains = []
+ i = 0
+ while i < len(args):
+ if args[i] == "--limit": limit = int(args[i+1]); i += 2
+ elif args[i] == "--from":
+ import csv
+ for row in csv.DictReader(open(args[i+1])): domains.append(row["domain"])
+ i += 2
+ else: domains.append(args[i]); i += 1
+ if limit: domains = domains[:limit]
+ if not domains:
+ print("usage: stage.py [--dry-run] [--from worklist.csv] [--limit N] [domain ...]"); sys.exit(1)
+ if not (GD_KEY and GD_SEC and CF_TOKEN):
+ print("missing creds (GODADDY_API_KEY/SECRET, CLOUDFLARE_API_TOKEN)"); sys.exit(1)
+ print(f"{'DRY-RUN' if dry else 'STAGING'} {len(domains)} domain(s)\n")
+ results = []
+ for d in domains:
+ print(f"── {d}")
+ res = stage(d, dry)
+ results.append(res)
+ print(f" {res['status']}: +{res['added']} new, {res['existing']} already present"
+ + (f" | NS: {res['ns']}" if res['ns'] else ""))
+ # emit the NS-swap worklist
+ out = "staged-nameservers.csv"
+ if not dry:
+ import csv
+ with open(out, "w", newline="") as f:
+ w = csv.writer(f); w.writerow(["domain", "status", "added", "cf_nameservers"])
+ for r in results: w.writerow([r["domain"], r["status"], r["added"], r["ns"]])
+ print(f"\nNS-swap worklist → {out} (set each domain's GoDaddy nameservers to its cf_nameservers)")
+
+if __name__ == "__main__":
+ main()
diff --git a/worklist.csv b/worklist.csv
new file mode 100644
index 0000000..1539023
--- /dev/null
+++ b/worklist.csv
@@ -0,0 +1,242 @@
+domain,bucket,mx,priority
+1890swallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+800wallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+1930swallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+1800wallpapers.com,LIVE+EMAIL,purelymail,P3-has-email
+1980swallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+aaatreetrimming.com,LIVE+EMAIL,purelymail,P3-has-email
+1960swallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+1800wallcoverings.com,LIVE+EMAIL,purelymail,P3-has-email
+90210rentals.com,LIVE_SITE,none,P2-site-only
+1920swallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+67calc.com,LIVE+EMAIL,purelymail,P3-has-email
+1940swallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+1970swallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+1950swallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+1900swallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+1800swallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+allnewsdaily.com,LIVE_SITE,none,P2-site-only
+apartmentwallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+asknonna.ai,LIVE+EMAIL,purelymail,P3-has-email
+askgoodquestions.ai,LIVE+EMAIL,purelymail,P3-has-email
+barwallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+asseeninmovies.com,LIVE+EMAIL,purelymail,P3-has-email
+asseeninshowrooms.com,LIVE+EMAIL,purelymail,P3-has-email
+agedwallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+architecturalwallcoverings.com,LIVE+EMAIL,purelymail,P3-has-email
+bestactorawards.com,LIVE_SITE,none,P2-site-only
+bestdocumentaryfilms.com,LIVE_SITE,none,P2-site-only
+bestwallpaperplace.com,LIVE+EMAIL,purelymail,P3-has-email
+beverlyandhills.com,LIVE+EMAIL,purelymail,P3-has-email
+beverlyhillspaints.com,LIVE+EMAIL,purelymail,P3-has-email
+blockprintedwallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+bubbie.ai,LIVE+EMAIL,purelymail,P3-has-email
+borrowerbills.org,LIVE+EMAIL,purelymail,P3-has-email
+bleachfriendly.com,LIVE+EMAIL,purelymail,P3-has-email
+bubbeleh.ai,LIVE+EMAIL,purelymail,P3-has-email
+borninbh.com,LIVE+EMAIL,purelymail,P3-has-email
+bubbesblock.com,LIVE_SITE,none,P2-site-only
+cannabisofthemonthclub.com,LIVE_SITE,none,P2-site-only
+blankstocklining.com,LIVE+EMAIL,purelymail,P3-has-email
+carmelriverwater.com,LIVE+EMAIL,purelymail,P3-has-email
+carmelpaints.com,LIVE+EMAIL,purelymail,P3-has-email
+asseeninhotels.com,LIVE+EMAIL,purelymail,P3-has-email
+asseeninla.com,LIVE+EMAIL,purelymail,P3-has-email
+carmelvalleywater.com,LIVE+EMAIL,purelymail,P3-has-email
+carmelwallpapers.com,LIVE+EMAIL,purelymail,P3-has-email
+cfafabrics.com,LIVE+EMAIL,purelymail,P3-has-email
+carmelwallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+classawallcovering.com,LIVE+EMAIL,purelymail,P3-has-email
+chinoiseriewallpaper.com,LIVE_SITE,none,P2-site-only
+commercialdesignreps.com,LIVE_SITE,none,P2-site-only
+claimmyaddress.com,LIVE_SITE,none,P2-site-only
+cleaninggrants.com,LIVE_SITE,none,P2-site-only
+contractwallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+corkwallcovering.com,LIVE+EMAIL,purelymail,P3-has-email
+cleaninggrants.org,LIVE_SITE,none,P2-site-only
+customdigitalmurals.com,LIVE+EMAIL,purelymail,P3-has-email
+commercialsalesreps.com,LIVE+EMAIL,purelymail,P3-has-email
+customdigitalwallcoverings.com,LIVE+EMAIL,purelymail,P3-has-email
+commercialwalls.com,LIVE+EMAIL,purelymail,P3-has-email
+cypresawards.org,LIVE+EMAIL,purelymail,P3-has-email
+designerlaboratory.com,LIVE+EMAIL,purelymail,P3-has-email
+commercialwallcovering.com,LIVE+EMAIL,purelymail,P3-has-email
+customdigitalwalls.com,LIVE+EMAIL,purelymail,P3-has-email
+designermagnetics.com,LIVE+EMAIL,purelymail,P3-has-email
+designerrepresentatives.com,LIVE_SITE,none,P2-site-only
+designerswallcoverings.com,LIVE+EMAIL,purelymail,P3-has-email
+designerswallcovering.com,LIVE+EMAIL,purelymail,P3-has-email
+designersalesreps.com,LIVE+EMAIL,purelymail,P3-has-email
+designerswallpapers.com,LIVE+EMAIL,purelymail,P3-has-email
+designerschat.com,LIVE+EMAIL,purelymail,P3-has-email
+designerssalesreps.com,LIVE_SITE,none,P2-site-only
+designerwallcoverings.ai,LIVE+EMAIL,purelymail,P3-has-email
+designerwallcover.com,LIVE+EMAIL,purelymail,P3-has-email
+designerwallpaints.com,LIVE+EMAIL,purelymail,P3-has-email
+designwallcoverings.com,LIVE+EMAIL,purelymail,P3-has-email
+designerwalltiles.com,LIVE+EMAIL,purelymail,P3-has-email
+designerwallcovering.com,LIVE+EMAIL,purelymail,P3-has-email
+dsgn.tv,LIVE+EMAIL,purelymail,P3-has-email
+dsgntv.com,LIVE_SITE,none,P2-site-only
+dwlosangeles.com,LIVE+EMAIL,purelymail,P3-has-email
+designtradereps.com,LIVE+EMAIL,purelymail,P3-has-email
+designtradesalesreps.com,LIVE+EMAIL,purelymail,P3-has-email
+etciemurals.com,LIVE+EMAIL,purelymail,P3-has-email
+designtradelive.com,LIVE_SITE,none,P2-site-only
+edgrants.org,LIVE+EMAIL,purelymail,P3-has-email
+ephedrafreeherbs.com,LIVE_SITE,none,P2-site-only
+fabricfridays.com,LIVE+EMAIL,purelymail,P3-has-email
+fabricwallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+embroideredwallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+fauxnewslive.com,LIVE_SITE,none,P2-site-only
+fabricsondemand.com,LIVE+EMAIL,purelymail,P3-has-email
+fireratedwallcovering.com,LIVE+EMAIL,purelymail,P3-has-email
+flocked.org,LIVE+EMAIL,purelymail,P3-has-email
+freethedegree.org,LIVE+EMAIL,purelymail,P3-has-email
+forgivestudentloandebt.com,LIVE+EMAIL,purelymail,P3-has-email
+glitterwalls.com,LIVE+EMAIL,purelymail,P3-has-email
+fabricfriday.com,LIVE+EMAIL,purelymail,P3-has-email
+greenwallcoverings.com,LIVE+EMAIL,purelymail,P3-has-email
+grassclothwallcovering.com,LIVE+EMAIL,purelymail,P3-has-email
+greendomainbrokers.com,LIVE+EMAIL,purelymail,P3-has-email
+handcraftedwallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+handmadewallcovering.com,LIVE+EMAIL,purelymail,P3-has-email
+handmadewallpapers.com,LIVE+EMAIL,purelymail,P3-has-email
+goldleafwallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+healthcarewallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+herbsmadeinchina.com,LIVE_SITE,none,P2-site-only
+hempofthemonthclub.com,LIVE_SITE,none,P2-site-only
+hollywoodwallcovering.com,LIVE+EMAIL,purelymail,P3-has-email
+hollywoodwallcoverings.com,LIVE+EMAIL,purelymail,P3-has-email
+homesonspec.com,LIVE_SITE,none,P1-needs-email
+handscreenedwallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+hospitalityfabrics.net,LIVE_SITE,none,P2-site-only
+hospitalitydesignreps.com,LIVE_SITE,none,P2-site-only
+hospitalitymurals.com,LIVE+EMAIL,purelymail,P3-has-email
+filthyrichliving.com,LIVE+EMAIL,purelymail,P3-has-email
+hospitalitysalesagency.com,LIVE+EMAIL,purelymail,P3-has-email
+hospitalitywalls.com,LIVE_SITE,none,P2-site-only
+hospitalitywallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+hospitalitysalesrepresentatives.com,LIVE_SITE,none,P2-site-only
+interiordesignreps.com,LIVE+EMAIL,purelymail,P3-has-email
+hospitalitysalesreps.com,LIVE+EMAIL,purelymail,P3-has-email
+hotelwallcoverings.com,LIVE+EMAIL,purelymail,P3-has-email
+inflationfears.com,LIVE+EMAIL,purelymail,P3-has-email
+iwascute.com,LIVE+EMAIL,purelymail,P3-has-email
+joshdultz.com,LIVE+EMAIL,purelymail,P3-has-email
+lacountyeats.com,LIVE_SITE,none,P2-site-only
+jutewallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+latke.ai,LIVE+EMAIL,purelymail,P3-has-email
+losgardeners.com,LIVE+EMAIL,purelymail,P3-has-email
+lasjardineras.com,LIVE+EMAIL,purelymail,P3-has-email
+malibuwallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+madagascarwallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+marijuanaofthemonthclub.com,LIVE_SITE,none,P2-site-only
+metallicwallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+luxurymurals.com,LIVE+EMAIL,godaddy,P3-has-email
+losangelesfabrics.com,LIVE+EMAIL,purelymail,P3-has-email
+marijuanabuyersexchange.com,LIVE_SITE,none,P2-site-only
+micawallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+muralsondemand.com,LIVE+EMAIL,purelymail,P3-has-email
+mohairvelvet.com,LIVE_SITE,none,P2-site-only
+museumwallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+montereywallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+nataliaabrams.com,LIVE+EMAIL,purelymail,P3-has-email
+mymemosamples.com,LIVE_SITE,none,P2-site-only
+mylarwallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+hospitalitysalesagents.com,LIVE+EMAIL,purelymail,P3-has-email
+nationalpaperhangers.com,LIVE+EMAIL,purelymail,P3-has-email
+nationalvotingday.org,LIVE_SITE,none,P2-site-only
+naturalwallcoverings.com,LIVE+EMAIL,purelymail,P3-has-email
+notvrequired.com,LIVE_SITE,none,P2-site-only
+nybutler.com,LIVE_SITE,none,P2-site-only
+linenwallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+petitionyour.org,LIVE_SITE,none,P2-site-only
+nodailyworries.com,LIVE_SITE,none,P2-site-only
+potofthemonthclub.com,LIVE_SITE,none,P2-site-only
+pastelwallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+naturaltextilewallpaper.com,LIVE_SITE,none,P2-site-only
+philliperomano.com,LIVE+EMAIL,purelymail,P3-has-email
+protectyourspec.com,LIVE_SITE,none,P2-site-only
+printmurals.com,LIVE+EMAIL,purelymail,P3-has-email
+patterndesignlab.com,LIVE+EMAIL,purelymail,P3-has-email
+raffiawalls.com,LIVE+EMAIL,purelymail,P3-has-email
+raffiawallcoverings.com,LIVE+EMAIL,purelymail,P3-has-email
+protestdaily.com,LIVE+EMAIL,purelymail,P3-has-email
+restaurantwallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+restaurantfabrics.com,LIVE+EMAIL,purelymail,P3-has-email
+naturalwalltextures.com,LIVE+EMAIL,purelymail,P3-has-email
+restaurantmurals.com,LIVE+EMAIL,purelymail,P3-has-email
+restorationwallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+retrowalls.com,LIVE+EMAIL,purelymail,P3-has-email
+roomsettings.com,LIVE+EMAIL,purelymail,P3-has-email
+saloonwallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+selfadhesivewallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+screenprintedwallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+silkwallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+specifywallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+silverleafwallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+stringwallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+studentdebtattorney.com,LIVE+EMAIL,purelymail,P3-has-email
+silkwallcoverings.com,LIVE+EMAIL,purelymail,P3-has-email
+starsofdesign.com,LIVE_SITE,none,P2-site-only
+studentdebthotline.org,LIVE+EMAIL,purelymail,P3-has-email
+steveabramsdesigns.com,LIVE+EMAIL,purelymail,P3-has-email
+studentdebtlawyers.org,LIVE+EMAIL,purelymail,P3-has-email
+studentstrikes.org,LIVE+EMAIL,purelymail,P3-has-email
+summergamesrentals.com,LIVE_SITE,none,P2-site-only
+sheltermagazines.com,LIVE+EMAIL,purelymail,P3-has-email
+theatrewallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+textilewallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+suedewallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+thecannabisnews.com,LIVE+EMAIL,purelymail,P3-has-email
+thedesignerlibrary.com,LIVE+EMAIL,purelymail,P3-has-email
+thesetdecorator.com,LIVE+EMAIL,purelymail,P3-has-email
+tradeonlytextiles.com,EMAIL_ONLY,purelymail,P2-site-only
+thehotelwallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+traditionalwhimsy.com,LIVE+EMAIL,purelymail,P3-has-email
+thedesignerlaboratory.com,LIVE+EMAIL,purelymail,P3-has-email
+urthfriendly.com,LIVE_SITE,none,P2-site-only
+treetrimmingguys.com,LIVE+EMAIL,purelymail,P3-has-email
+textiletuesday.com,LIVE+EMAIL,purelymail,P3-has-email
+upperonepercent.com,LIVE+EMAIL,purelymail,P3-has-email
+unitedstateswallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+venturacorridor.com,LIVE_SITE,none,P2-site-only
+wallco.ai,LIVE+EMAIL,purelymail,P3-has-email
+vinylwallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+venturadelivers.com,LIVE_SITE,none,P2-site-only
+valleybutler.com,LIVE_SITE,none,P2-site-only
+wall-papers.org,LIVE_SITE,none,P2-site-only
+vintagebh.com,LIVE+EMAIL,purelymail,P3-has-email
+wallpapercontractor.com,LIVE_SITE,none,P2-site-only
+wallcovering.net,LIVE+EMAIL,purelymail,P3-has-email
+wallpaperdictionary.com,LIVE+EMAIL,purelymail,P3-has-email
+wallpaperfromthe80s.com,LIVE+EMAIL,purelymail,P3-has-email
+wallpaperexports.com,LIVE+EMAIL,purelymail,P3-has-email
+wallpaperestimator.com,LIVE_SITE,none,P2-site-only
+wallpaperglossary.com,LIVE+EMAIL,purelymail,P3-has-email
+wallpaperhistory.com,LIVE+EMAIL,purelymail,P3-has-email
+thesalesreps.com,LIVE+EMAIL,purelymail,P3-has-email
+wallpapernyc.com,LIVE+EMAIL,purelymail,P3-has-email
+wallpapernashville.com,LIVE_SITE,none,P2-site-only
+wallpaperny.com,LIVE+EMAIL,purelymail,P3-has-email
+wallpaperondemand.com,LIVE+EMAIL,purelymail,P3-has-email
+wallpaperdistributors.com,LIVE_SITE,none,P2-site-only
+wallpaperweekly.com,LIVE+EMAIL,purelymail,P3-has-email
+wallpaperwednesday.com,LIVE+EMAIL,purelymail,P3-has-email
+venturaclaw.com,LIVE+EMAIL,purelymail,P3-has-email
+wallsandfabrics.com,LIVE+EMAIL,purelymail,P3-has-email
+wallpaperpurchasing.com,LIVE+EMAIL,purelymail,P3-has-email
+wallsondemand.com,LIVE+EMAIL,purelymail,P3-has-email
+wallpaperdefinitions.com,LIVE+EMAIL,purelymail,P3-has-email
+weedofthemonthclub.com,LIVE_SITE,none,P2-site-only
+wc-01.com,LIVE+EMAIL,purelymail,P3-has-email
+venturaeats.com,LIVE_SITE,none,P2-site-only
+wc01wallcoverings.com,LIVE+EMAIL,purelymail,P3-has-email
+wc01wallpaper.com,LIVE+EMAIL,purelymail,P3-has-email
+wholivedthere.com,LIVE_SITE,none,P2-site-only
+zayde.ai,LIVE+EMAIL,purelymail,P3-has-email
+withoutstudentdebt.org,LIVE+EMAIL,purelymail,P3-has-email
+withoutstudentdebt.com,LIVE+EMAIL,purelymail,P3-has-email
+wintergamesrentals.com,LIVE_SITE,none,P2-site-only
+stevenabramsphotography.com,EMAIL_ONLY,purelymail,P2-site-only
(oldest)
·
back to Cf Dns Migration
·
stage.py fixes: GoDaddy read backoff/retry (kills false-empt 9f7662a →