← back to Ga Allsites
grant script: --all-fleet mode (proven — took GSC coverage 10->180)
7f573059e6950720f14f395e60195d7ae235e0ad · 2026-08-17 10:56:16 -0700 · Steve Abrams
Files touched
M grant_microsites_gsc.py
Diff
commit 7f573059e6950720f14f395e60195d7ae235e0ad
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Mon Aug 17 10:56:16 2026 -0700
grant script: --all-fleet mode (proven — took GSC coverage 10->180)
---
grant_microsites_gsc.py | 67 ++++++++++++++++++++++++++++++++++++++++++-------
1 file changed, 58 insertions(+), 9 deletions(-)
diff --git a/grant_microsites_gsc.py b/grant_microsites_gsc.py
index fdadf0a..9d2d987 100644
--- a/grant_microsites_gsc.py
+++ b/grant_microsites_gsc.py
@@ -180,7 +180,16 @@ def grant(domain: str, gtoken: str, cftok: str, gd) -> str:
def main():
args = sys.argv[1:]
- if "--all" in args:
+ if "--all-fleet" in args:
+ # every GA4 property in the cache -> its guessed apex domain
+ rows = json.loads((pathlib.Path(__file__).parent / "cache" / "data.json"
+ ).read_text())["rows"]
+
+ def _sl(n):
+ x = n.lower().replace(" - ga4", "").replace("&", "and")
+ return "".join(c for c in x if c.isalnum())
+ targets = sorted({_sl(r["property"]) + ".com" for r in rows if _sl(r["property"])})
+ elif "--all" in args:
targets = RECOMMENDED
elif "--site" in args:
targets = [args[args.index("--site") + 1]]
@@ -193,23 +202,63 @@ def main():
gtoken = creds.token
cftok = cf_token()
gd = godaddy_creds()
+ # skip domains the SA can already query
+ try:
+ req = urllib.request.Request(
+ "https://searchconsole.googleapis.com/webmasters/v3/sites",
+ headers={"Authorization": f"Bearer {gtoken}"})
+ have = {s["siteUrl"].replace("sc-domain:", "")
+ for s in json.loads(urllib.request.urlopen(req, timeout=30).read()
+ ).get("siteEntry", [])
+ if s.get("permissionLevel") != "siteUnverifiedUser"}
+ except Exception: # noqa: BLE001
+ have = set()
+ skipped_have = [d for d in targets if d in have]
+ targets = [d for d in targets if d not in have]
print(f"SA: {json.loads(KEY.read_text()).get('client_email')}")
print(f"GoDaddy API: {'available' if gd[0] else 'NOT configured'}")
- print(f"Granting {len(targets)} domain(s): {', '.join(targets)}\n")
+ if skipped_have:
+ print(f"Already granted (skipping {len(skipped_have)}): {', '.join(skipped_have)}")
+ print(f"Granting {len(targets)} domain(s)\n")
- results = {}
- for d in targets:
+ def _do(d):
try:
- results[d] = grant(d, gtoken, cftok, gd)
+ return grant(d, gtoken, cftok, gd)
except urllib.error.HTTPError as e:
- results[d] = f"ERROR {e.code}: {e.read().decode()[:160]}"
+ return f"ERROR {e.code}: {e.read().decode()[:120]}"
except Exception as e: # noqa: BLE001
- results[d] = f"ERROR: {e}"
+ return f"ERROR: {e}"
+
+ results = {}
+ for d in targets:
+ results[d] = _do(d)
print()
+ # pass 2: retry domains whose TXT was written but hadn't propagated in time
+ retry = [d for d, r in results.items() if "VERIFY FAILED" in str(r)]
+ if retry:
+ print(f"--- pass 2: retrying {len(retry)} propagation-pending domain(s) ---")
+ time.sleep(25)
+ for d in retry:
+ results[d] = _do(d)
+ print()
+
+ granted = [d for d, r in results.items() if str(r).startswith("GRANTED")]
+ nohost = [d for d, r in results.items() if "SKIP" in str(r)]
+ failed = {d: r for d, r in results.items()
+ if not str(r).startswith("GRANTED") and "SKIP" not in str(r)}
print("=== SUMMARY ===")
- for d, r in results.items():
- print(f" {d:32} {r}")
+ print(f" GRANTED : {len(granted)}")
+ print(f" no DNS host : {len(nohost)} (domain not on our Cloudflare/GoDaddy)")
+ print(f" failed/other : {len(failed)}")
+ if granted:
+ print("\n newly granted:")
+ for d in sorted(granted):
+ print(f" ✓ {d}")
+ if failed:
+ print("\n failed (verify/token/other — likely wrong domain guess or foreign DNS):")
+ for d, r in sorted(failed.items()):
+ print(f" ✗ {d:32} {str(r)[:80]}")
print("\nNext: cd ~/Projects/ga-allsites && /opt/homebrew/bin/python3 etl.py")
print("then check keywords.json gsc_site_count climbs (data lags ~2 days).")
← a648e3c grant script: add GoDaddy DNS support (append TXT via API) s
·
back to Ga Allsites
·
auto-data-snapshot: 2026-08-17T10:56:53 (1 data files) — cac 9561e03 →