Runbook: Gsuite Tenant Suspended
P0 always. Google suspended our entire Workspace tenant. Every Specialist mailbox in the affected tenant is unreachable; every OSA in the org becomes a black hole for inbound + outbound mail. See
OWNERS.mdfor on-call contact.
This runbook covers Google Workspace tenant-wide suspension โ distinct from individual user suspension (which is gsuite-license-cap.md Step 3a). Tenant suspension is rare but catastrophic: usually billing default, Terms of Service violation, or detected abuse.
Symptomsโ
- All
workspace-provisioningjobs failing simultaneously across multiple OSAs withAccount suspended/Domain in violation. - All inbound email going to NDR (
User account is suspended). - All outbound Gmail Send returning 403
account_suspended_by_administratorordomain_suspended. - Google Admin Console banner at top: "Your account is suspended" or "Your subscription is past due".
- Email from
googleworkspace-noreply@google.comwith subject "Important: Your Google Workspace account has been suspended" โ read it carefully, it states the reason.
Step 1 โ Identify the suspension class (within 30 min)โ
Google suspends tenants for 3 distinct reasons, each with a different remediation path:
| Class | Trigger | Remediation |
|---|---|---|
| Billing | Payment failed (expired card, hold on account) | Fix payment โ reinstated within hours |
| Policy | ToS violation (spam, phishing, abuse reports) | Appeal via Google support โ 24-72h |
| Security | Google detected suspicious activity (compromise) | Verify identity โ 24h |
The suspension email from Google states which class. If you don't have the email, check Google Admin Console banner text. DO NOT GUESS โ the wrong remediation path can extend the suspension.
Step 2 โ Mitigate customer impact (parallel with Step 3)โ
While the suspension is in effect:
2a. Customer-facing noticeโ
Send to every Org owner / AM in the affected domain (h.work / h852.work / h853.work based on which tenant is suspended):
Subject: Temporary email delivery issue โ
<domain>We're working with Google to restore email service on
<domain>. Inbound and outbound messages on your Specialist's@<domain>email may bounce until restored (ETA:). Please use Slack, WhatsApp, or the web portal as a workaround.
Send from a non-Gsuite address (e.g., personal email or Sendgrid). The whole point is our Gsuite is down.
2b. Mark all OSAs as inbound-pausedโ
UPDATE org_specialist_assignments
SET metadata = jsonb_set(
coalesce(metadata, '{}'::jsonb),
'{tenant_suspended}',
'true'::jsonb
)
WHERE email_alias LIKE '%@<suspended-domain>';
This is metadata-only; the UI can show a banner per-OSA: "Workspace suspended โ waiting for Google."
2c. Outbound dispatcher fallbackโ
Correction (2026-06-05): Resend does not fall back for Specialist outbound. Resend is reserved for invites / onboarding / transactional mail only; Specialist outbound goes through Gmail-DWD send-as. If Gmail-DWD fails for a Specialist there is no automatic provider fallback โ the message stays in queue and surfaces as a dispatch error. Losing the Workspace tenant therefore halts Specialist outbound for that tenant until reinstatement.
Verify dispatcher behaviour during incident:
grep "gmail-dwd send-as failed" <recent-api-logs>
If a Specialist message did not error and somehow went out via Resend โ that's a bug (cross-channel leak); file it.
Step 3 โ Resolve the suspensionโ
3a. Billing classโ
- Google Admin โ Billing โ Payment methods โ identify the failed payment.
- Update card on file or pay the past-due balance.
- Reinstatement is usually automatic within hours; if not, contact Google Workspace billing support.
3b. Policy classโ
- Read the suspension email carefully โ it cites the policy and (usually) a specific event/message that triggered the flag.
- Investigate from our side: did we send phishing-looking emails? Bulk outbound? See
email_audit_logfor outbound activity around the suspension time. - File an appeal at https://support.google.com/a/contact/reinstatement with:
- Tenant ID
- Suspension date/time
- Our explanation + remediation (e.g., "We've added stricter outbound rate limits and blocked the specific abuse vector")
- Wait 24-72h for Google to review.
If you find we were actually doing something policy-violating: stop it immediately, then file the appeal with proof of remediation. Don't hide it; Google sees the audit log too.
3c. Security classโ
- Google's email will request "identity verification" via a specific link.
- Click the link, provide the requested verification (admin's photo ID, etc.).
- Wait ~24h for Google to review.
- Once restored: rotate all Gsuite-related secrets (
GSUITE_SERVICE_ACCOUNT_KEY_JSON, all OAuth refresh tokens) on the assumption that the trigger was a real compromise.
Step 4 โ Verify restorationโ
When Google indicates reinstated:
- Google Admin Console banner clears.
- Smoke test:
echo "tenant restored $(date)" | gmail-send-via-service-account bob.acme@<domain> - Wait for inbound NDRs to stop (external senders' MTAs retry NDRs for ~72h, so legitimate inbound starts flowing within minutes; old NDRs in queues will gradually drain).
- Restart any stuck
workspace-provisioningBullMQ jobs per workspace-provisioning-failure.md Step 3. - Clear the per-OSA
metadata.tenant_suspendedflag:UPDATE org_specialist_assignments
SET metadata = metadata - 'tenant_suspended'
WHERE email_alias LIKE '%@<domain>';
Rollbackโ
Tenant suspension is not user-rollback-able โ only Google decides when to reinstate. Until then:
- Cannot DNS-rollback to Cloudflare worker as an interim โ the CF worker forwards to our API, which then tries to read/send via Gsuite, which is down. Rollback would only restore the inbound webhook path, not delivery.
- Workaround for individual customers: ask them to communicate via Slack / WhatsApp / web portal for the suspension window.
- Worst case: stand up a parallel Workspace tenant on a backup domain (
h-backup.work?) โ multi-week setup, not realistic for an active customer SLA event.
Step 5 โ Escalateโ
- Page Platform Lead + CEO immediately. Suspension means we're publicly seen as broken by every customer in the affected tenant.
- Loop in legal if it's policy-class โ appeal language matters and we don't want to over-promise.
- Schedule a post-mortem regardless of class.
Track in incident channel:
- Class (billing / policy / security)
- Suspension start time
- Customer impact estimate (# affected OSAs ร messages/day average)
- Workspace tenant ID
- Reinstatement ETA per Google email
Relatedโ
- oauth-token-refresh.md โ post-restore secret rotation
- workspace-provisioning-failure.md โ what to retry after restoration
- gsuite-license-cap.md โ individual user suspension (very different)
- dns-mx-rollback.md โ why MX rollback alone doesn't fix this