Loading tutorials…
Loading tutorials…
Workflows are firing. GHL says 'sent.' But your client's leads aren't getting the messages. This is the diagnostic sequence specialists run — in priority order, so you fix the highest-leverage issue first.
Who this is forAnyone running GHL email or SMS where actual delivery is broken or degraded. If open rate is below 15%, spam complaint rate is above 1%, OR SMS undelivered rate is above 10%, you're in this tutorial.
What you'll need
Step 1
In Sub-Account → Reporting → Email Stats / SMS Stats. Verify "sent" count matches expected workflow volume. If GHL isn't even sending, the issue is upstream (workflow logic, trigger config).
Sub-Account → Reporting → Email Stats (or SMS Stats). Filter to last 24-48 hours.
Compare "sent" volume to expected workflow trigger volume. If you expected 500 sends and see 50, the issue is in workflow logic or trigger filters, NOT deliverability.
Open the workflow → History. Look at recent contacts entering the workflow. Are they progressing through nodes? Stuck at a specific step?
Common workflow-level bug: a Wait timer is configured in "days" instead of "minutes" by accident. Workflow looks active but no sends happen for 24h.
If sends are happening but recipients aren't getting them — proceed to next step.
Step 2
Send a test email to a Gmail address. Open the email → 3-dot menu → "Show original." Verify SPF: PASS, DKIM: PASS, DMARC: PASS.
Send a test email from a workflow to your own personal Gmail address (NOT your work email — needs to be Gmail).
Open the email in Gmail web. Click 3-dot menu → "Show original."
At the top, see "SPF: PASS," "DKIM: PASS," "DMARC: PASS." All three must show PASS.
If SPF FAIL: check DNS at your provider. Likely cause: missing include:mailgun.org in SPF record, OR two SPF records on the domain.
If DKIM FAIL: GHL DKIM TXT records not added to DNS correctly. Re-paste from GHL → Sub-Account → Settings → Email Services.
If DMARC FAIL: missing DMARC record OR DMARC policy too strict. Set initial DMARC to v=DMARC1; p=none; rua=mailto:dmarc@clientdomain.com
Also paste the test email URL into mail-tester.com — score below 8/10 = deliverability issue.
Step 3
Google Postmaster Tools shows your sender reputation as seen by Gmail. Critical if you send to lots of Gmail addresses (most lists).
Sign up at postmaster.google.com — verify you own the sending domain via TXT record (5-min DNS update).
Wait 24-48 hours for data to populate.
Check Domain Reputation: should be "High" or "Medium." If "Low" or "Bad," 70%+ of your sends to Gmail are landing in spam.
Check IP Reputation: same — High or Medium is healthy. Low = mailbox providers don't trust the sending IP (which is Mailgun shared IP for most GHL setups).
Check Spam Rate: under 0.1% is excellent, under 0.3% is acceptable, above 0.3% is the threshold where Gmail starts filtering aggressively.
If reputation is poor: STOP all marketing sends. Continue only transactional. Audit content + list quality. Resume slow warm-up in 1-2 weeks.
Step 4
Bad list quality is the #1 cause of deliverability decay. Run the list through NeverBounce or ZeroBounce. Remove hard bounces, role-based addresses (info@, sales@), spam traps.
Export the active contact list from GHL.
Upload to NeverBounce ($0.008/email) or ZeroBounce ($0.0065/email). Costs $5-50 for typical agency list.
The tool returns: Valid, Invalid, Risky, Catch-All, Unknown.
Remove all Invalid (hard bounces) and Risky (spam traps).
Re-import the cleaned list into GHL — or tag and exclude the bad contacts from future workflows.
Re-run validation every 3-6 months. Email lists decay 25-30%/year naturally.
Step 5
In Sub-Account → Settings → Phone Numbers → A2P 10DLC. Confirm Brand status = REGISTERED, Campaign status = REGISTERED. Either pending or rejected = SMS failure.
Open Sub-Account → Settings → Phone Numbers → A2P 10DLC Registration.
Brand status: must show "REGISTERED" (green). If "PENDING" → wait 1-3 days, if "REJECTED" → resubmit with corrected business info.
Campaign status: must show "REGISTERED." If "PENDING" → 7-14 day wait. If "REJECTED" → fix the rejection reason (usually sample message mismatch or missing opt-out language) and resubmit.
Even with REGISTERED status, SMS can fail for specific recipients due to: (1) landline number (SMS not supported), (2) recipient previously sent STOP, (3) carrier-level spam filter (Verizon is strictest), (4) invalid number format.
In SMS Stats → click a failed message to see specific failure reason per recipient.
Step 6
Common spam triggers in 2026: ALL CAPS subjects, multiple "$$$", URLs to suspicious-looking domains, image-only emails with no text, brand-new sending domain bursting volume.
Run recent email content through mail-tester.com → get a score 0-10. Anything under 8 has fixable issues.
Common 2026 spam-trigger patterns: ALL CAPS in subject line (drops score 1-2 pts), excessive exclamation marks (!!! → -1 pt), URL shorteners like bit.ly (suspicious — use full URLs), single big image with no text body.
For SMS, common spam-trigger words flagged by US carriers: 'free,' 'guarantee,' 'risk-free,' 'no obligation,' 'click here,' 'limited time.' Rewriting marketing SMS in plain conversational tone lifts delivery 20-30%.
Always include opt-out language in SMS ("Reply STOP to unsubscribe") — missing it can trigger Verizon spam filter immediately.
Step 7
Sometimes the cheapest fix is starting over. Set up mail2.clientdomain.com as a new sending subdomain and warm it up over 4 weeks while the old one cools down.
If Google Postmaster shows persistent Low / Bad reputation despite content + list cleanup, the domain reputation is unrecoverable in <90 days.
Set up mail2.clientdomain.com (or m.clientdomain.com — anything different from current mail.clientdomain.com).
Configure DNS for the new subdomain (new SPF / DKIM / DMARC records, see the email/SMS setup tutorial).
Migrate the sub-account in GHL → Sub-Account → Settings → Email Services → Dedicated Sending Domain → swap.
Warm up the new subdomain over 4 weeks while the OLD subdomain cools (don't send from old at all — gives Google time to recover trust).
After 90 days of no sends on old subdomain, you can return to it if needed (rare).
Common mistakes
Diagnosing without checking SPF/DKIM/DMARC first
What goes wrong: You spend 4-8 hours debugging workflow logic, content, list quality. Turns out DNS had two SPF records. Whole investigation was time wasted. Bonus: ongoing sends keep failing while you chase the wrong cause.
How to avoid: ALWAYS check SPF, DKIM, DMARC FIRST. Send a test to Gmail, view source, verify all 3 PASS. 30 seconds saves 4-8 hours.
Sending to old / unengaged lists at full volume
What goes wrong: List from 18 months ago, 30% of contacts cold. Sending generates 5-8% bounce rate. Sender reputation tanks in 7-14 days. Future sends to engaged contacts also land in spam.
How to avoid: Segment lists by engagement. Send only to last-90-day engaged contacts during warm-up. Re-engage older segments slowly with re-permission campaigns.
Continuing to send marketing email after deliverability damage
What goes wrong: Reputation already low. You keep sending hoping it'll get better. It doesn't. Every send digs the hole deeper. By week 3, even transactional email (login codes, password resets) lands in spam.
How to avoid: When Google Postmaster shows Low reputation, STOP marketing sends immediately. Continue only critical transactional. Restart marketing only after content + list audit + 2-week recovery.
Submitting A2P 10DLC with vague use case description
What goes wrong: Campaign description like 'send marketing messages to customers' gets rejected. Resubmission cycle adds 7-14 days. SMS workflows offline meanwhile.
How to avoid: A2P 10DLC use case must be specific: "Send appointment reminders to scheduled dental patients 24h before their visit. Recipients opted in via consent checkbox on website intake form." Include sample messages that exactly match.
Using URL shorteners in SMS
What goes wrong: Bit.ly, tinyurl, etc. trigger US carrier spam filters in 2026 (carriers can't see the destination). Delivery rate drops 30-60% for SMS containing shortened links.
How to avoid: Use full URLs OR custom branded short links (e.g., shortened on YOUR domain, like link.youragency.com/abc123). GHL has built-in custom link shortening — use it.
Not isolating marketing from transactional sending
What goes wrong: Marketing sends from clientdomain.com root. Reputation tanks. Login emails, password resets, order confirmations all land in spam. Customer support tickets spike: 'I can't reset my password.' Compound damage.
How to avoid: Marketing sends from mail.clientdomain.com. Transactional sends from clientdomain.com root. Total isolation of reputation. Standard for any agency above $1K MRR.
Recap
Done — what's next
How to set up GoHighLevel email and SMS without ruining your deliverability
Read the next tutorial
Hand it off
Deliverability problems cost money every day they stay broken. For a workflow generating $200/lead, a 50% drop in delivery is $100/lead lost — and at 200 leads/mo that’s $20K/mo. A GoHighLevel specialist diagnoses + fixes in 1-2 days typically, plus runs the 4-week warm-up if needed. Saves the revenue loss many times over.
Get a same-day audit
Mild damage (occasional spam): 14-30 days of clean sending. Moderate damage (Low reputation in Google Postmaster): 30-60 days. Severe damage (Bad reputation, multiple blacklists): often easier to abandon the sending subdomain and start fresh on a new one (4 weeks).
GHL uses Mailgun, which uses shared IP pools. Your reputation is mostly determined by domain reputation, not IP reputation, because Gmail/Outlook prioritize DKIM (domain-level) over IP. So shared IPs are usually fine, but if you're sending high volume (50K+/month), consider a dedicated IP via Mailgun directly.
Usually carrier-specific filtering. AT&T is most aggressive on marketing content. T-Mobile blocks more URL-heavy SMS. Verizon flags more 'free / discount' wording. Test send a clean text-only SMS to one of each carrier (you can buy test numbers at $1-2 each) to confirm.
Always custom. GHL's built-in 'msgsndr.com' domain has shared reputation across thousands of agencies — anyone else's bad behavior affects your delivery. Custom domain isolates your reputation entirely.
Send a test email to one address per major provider (Gmail, Outlook, Yahoo, Apple). Check inbox vs spam folder on each. Run the email URL through GlockApps or mail-tester for a more comprehensive multi-inbox test (~$10/test).
You can't appeal — but you can resubmit with corrections. Most common rejection: sample messages don't match actual content. Fix: pull 3-5 actual messages from your active workflows, use them verbatim as samples. Approval typically follows on resubmission.
GoHighLevel
GHL’s email and SMS are the highest-leverage channels in the platform — and the easiest to torch by sending too fast, too cold, or without A2P 10DLC registration. This is the setup that keeps you out of spam and out of carrier filters.
GoHighLevel
GHL's Workflow Builder is the most powerful piece of the platform — and the easiest to misconfigure into expensive silence. This is the structural setup: triggers that don't fire-and-forget, actions that don't double-send, and the guardrails that catch problems before clients do.
GoHighLevel
Most agencies pay $297-497/mo for GHL for 3 months before a single client uses it. The blocker is almost never the platform — it's an unstructured agency setup that snowballs into rework. This is the setup path specialists use day one.
GoHighLevel
Most agencies pay $297-497/mo for GHL and use 25% of it. The platform is too deep to learn casually. This is the honest framework: when the cost of self-managing exceeds the cost of hiring, and how to tell which side you're on.