Loading tutorials…
Loading tutorials…
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.
Who this is forAgencies and operators launching email/SMS sequences in GHL for the first time, OR diagnosing existing sequences that have dropped to 30%+ spam rate or 50%+ SMS undelivered rate.
What you'll need
Step 1
Use mail.clientdomain.com (or similar subdomain) as the GHL sending domain, NOT the client's main domain. Protects transactional email if cold outreach kills the subdomain reputation.
In Sub-Account → Settings → Email Services → Dedicated Sending Domain.
Use a subdomain like mail.clientdomain.com (NOT clientdomain.com directly). This isolates marketing email reputation from transactional email (login codes, password resets) sent from the main domain.
GHL provides SPF, DKIM, and DMARC records. Add all three in the client DNS.
For SPF: include "include:mailgun.org" (GHL uses Mailgun under the hood) in the existing SPF record. Don't create a second SPF record — multiple SPF records on the same domain = SPF failure.
For DKIM: add the GHL-provided TXT records (usually 2-3).
For DMARC: start with p=none policy (monitoring only). Move to p=quarantine after 30 days of clean sending.
Wait 24-48 hours, verify each record passes via MXToolbox.com or Google's Postmaster Tools.
Step 2
Send 20-50 emails/day to known engaged contacts in week 1, 100-300/day in week 2, scaling to 1,000+/day by week 4. Skip this and your domain gets blacklisted within 7 days.
Day 1-7: send 20-50 emails/day to your most engaged contacts (people who opened your last 3 emails). Manual send via GHL bulk action.
Day 8-14: increase to 100-300/day. Still warm contacts only.
Day 15-21: 500-800/day. Start including cooler contacts (opened in last 90 days).
Day 22-28: 1,000-2,000/day. Mix in older list segments cautiously.
Day 29+: full sending volume. By now your domain has earned sender reputation with major mailbox providers (Gmail, Outlook, Yahoo).
Monitor open rate weekly. Healthy: 25-40% open rate. Below 15% = your sends are landing in spam, slow down and audit.
Step 3
In Sub-Account → Settings → Phone Numbers → A2P 10DLC Registration. Submit Brand (business info) and Campaign (use case for SMS). Required for ANY SMS to US numbers.
A2P 10DLC = Application-to-Person 10-Digit Long Code. Required by AT&T, T-Mobile, Verizon for any automated SMS to US numbers as of June 2023. Skipping it = SMS silently dropped or heavily throttled.
In Sub-Account → Settings → Phone Numbers → A2P 10DLC Registration.
Step 1: Submit Brand. Requires: legal business name, EIN, business address, business website, industry vertical. Approval: 1-3 days.
Step 2: Submit Campaign. Requires: use case (Customer Care, Marketing, etc.), sample messages (3-5 examples of actual SMS your workflows will send), opt-in language (how recipients consented).
Sample messages are where 30-40% of campaigns get rejected. Make sure they match what your workflows will actually send AND include opt-out language ("Reply STOP to unsubscribe").
Campaign approval: 7-14 days. After approval, your sub-account can send full volume to US numbers.
Step 4
In DNS: ONE SPF record (with GHL/Mailgun include), 2-3 DKIM records, ONE DMARC record. Verify pass via MXToolbox before sending.
SPF record format: v=spf1 include:mailgun.org include:_spf.google.com ~all (combine with existing senders, never duplicate).
DKIM: GHL provides 2-3 TXT records with names like ghl-mta._domainkey, ghl-s1._domainkey. Add exactly as provided.
DMARC: v=DMARC1; p=none; rua=mailto:dmarc@clientdomain.com (start with p=none, move to p=quarantine after 30 days, p=reject after 90 days of clean sending).
Verify each at MXToolbox.com → SPF Lookup, DKIM Lookup, DMARC Lookup. All three should pass.
Common failure: existing SPF record with no GHL include, OR two SPF records on the same domain. Both = SPF fail = inbox-rate drop of 20-40%.
Step 5
In each workflow, configure email throttling: max X emails per hour per workflow. Prevents accidental list blast that triggers spam filters.
In each Workflow → Settings → Throttling.
Set max emails per hour to a sensible rate: 200/hr in warmed-up account, 50/hr in newly-warmed account.
If a sudden 5,000-contact import dumps into the workflow, throttling prevents 5,000 emails firing in 1 minute (which triggers every spam filter).
Same for SMS — throttle to max 50 SMS per hour to avoid burst patterns that look like spam to carriers.
Throttling slows down delivery but is invisible to recipients — they receive the email/SMS as scheduled, just spread over time.
Step 6
Check Sub-Account → Reporting → Email Stats and SMS Stats. Healthy: 25-40% open rate, <2% spam complaints, <5% bounce, <2% SMS undelivered.
Weekly cadence: open Sub-Account → Reporting → Email Stats. Pull last 7-day metrics.
Open rate target: 25-40% for nurture, 35-55% for transactional. Below 15% = deliverability issue.
Spam complaint rate: under 0.1% is excellent, under 0.5% is OK, above 2% = your sender reputation is dying. Pause sends, audit content and list quality immediately.
Bounce rate: under 2% hard bounce. Above 5% = list quality issue. Run NeverBounce or ZeroBounce to clean before next send.
SMS: under 2% undelivered is healthy. Above 10% undelivered = A2P 10DLC issue or invalid number prevalence in list. Audit.
Set up Google Postmaster Tools for deeper Gmail-specific deliverability metrics.
Step 7
Configure GHL to honor STOP / UNSUBSCRIBE replies automatically. Add unsubscribe link to every email footer. Failure = CAN-SPAM violation + carrier blacklist.
Sub-Account → Settings → Communication Settings → Email → ensure "Append unsubscribe link" is ON.
SMS: GHL auto-handles STOP, UNSUBSCRIBE, QUIT, CANCEL, END, OPT OUT. When detected, the contact is automatically tagged "DNC" (Do Not Contact) and excluded from future SMS.
Verify by texting STOP to one of your sub-account numbers from a test phone. Confirm the contact gets tagged and excluded from active workflows.
In every email template, include the unsubscribe link in the footer + your physical business address (CAN-SPAM requirement). GHL auto-appends if configured.
Audit monthly: pull a "DNC contacts who received messages in last 30 days" report. Should be ZERO. If any, you have a workflow not respecting DNC status.
Common mistakes
Sending from the root domain instead of a subdomain
What goes wrong: Cold-outreach email gets flagged, reputation tanks for clientdomain.com. Login emails, order confirmations, password resets — all transactional email starts landing in spam. Customer support tickets spike. Full recovery: 60-90 days OR domain reset.
How to avoid: Always send marketing email from mail.clientdomain.com (or similar subdomain). Isolates marketing reputation from transactional.
Skipping the domain warm-up
What goes wrong: Day 1, you bulk-send 5,000 emails from a brand-new sending domain. Gmail flags it as spam, Outlook blacklists the subdomain. Future open rate: 5-10%. Recovery: 60-90 days of careful sending OR new sending subdomain (and start over).
How to avoid: 2-4 week warm-up: 20-50/day week 1, scaling to 1,000+/day by week 4. Send to known engaged contacts first.
Sending SMS without A2P 10DLC registration
What goes wrong: All SMS to US numbers silently dropped or heavily throttled by AT&T/T-Mobile/Verizon. Workflows fire, GHL reports 'sent,' but recipients never receive the SMS. Discovered by client when they realize no appointment reminders are going out. 7-14 day approval cycle to fix.
How to avoid: Register A2P 10DLC Brand + Campaign before any SMS sends. Budget 2-3 weeks for approval. Submit accurate sample messages matching real workflow output.
A2P 10DLC sample messages do not match workflow content
What goes wrong: Campaign sample says 'appointment reminder' but workflow sends 'limited time sale.' Carriers flag the mismatch, may reject the campaign mid-month, may filter sends silently. Wasted 2 weeks of waiting + need to resubmit.
How to avoid: Before submitting A2P 10DLC campaign, export 5-10 actual messages your workflows will send. Use them as samples verbatim. If you change workflow message types later, resubmit campaign.
Two SPF records on the same sending domain
What goes wrong: If a domain has two SPF records (e.g., one from Mailgun-via-GHL and one from Google Workspace), every receiving server gets SPF FAIL. Inbox rate drops 20-40%. You blame GHL, but it's the DNS.
How to avoid: ONE SPF record per domain. Combine includes: v=spf1 include:mailgun.org include:_spf.google.com ~all. Verify with MXToolbox SPF Lookup.
No throttling on workflows that ingest large CSV imports
What goes wrong: Sub-account imports a 10,000-contact CSV. Workflow trigger fires 10,000 times in 60 seconds. 10,000 emails attempt to send simultaneously. Spam filters catch all of them. Sender reputation: destroyed in one batch.
How to avoid: Set workflow throttling to max 200-500 emails per hour. Same for SMS, max 50-100/hr. Slow but invisible to recipients.
Recap
Done — what's next
How to build GoHighLevel workflows that actually convert
Read the next tutorial
Hand it off
Deliverability is the difference between $5K/mo in workflow-driven revenue and $500/mo. A GoHighLevel specialist who has set up 50+ sending domains writes A2P use cases that pass first try, configures DNS without typos, and runs the warm-up on cadence. Typical scope: $400-800 of talent time, plus ongoing monitoring at $100-200/mo per sub-account.
See specialist rates
Brand approval: 1-3 days typically. Campaign approval: 7-14 days. If rejected, you resubmit and add another 7-14 days. Budget 2-3 weeks total from first submission to first SMS send.
Yes — GHL via Twilio supports international SMS. International doesn't require A2P 10DLC (that's US-specific), but each country has its own compliance rules. UK requires opt-in records, EU has GDPR-driven consent rules, Canada has CASL. Research per-country before sending.
Email Services = the underlying ESP (Mailgun, by default). Dedicated Sending Domain = the From domain you authenticate (e.g., mail.clientdomain.com). You need both: the service AND the authenticated domain. Without dedicated domain, you send from a shared GHL domain and inherit that domain's reputation (good or bad).
Top levers: (1) sender name = a real person at the agency, not a generic 'Marketing Team' (lifts opens 15-30%), (2) subject lines under 50 characters, (3) preview text that complements the subject, (4) send timing aligned to recipient timezone, (5) list hygiene — remove unengaged contacts every 90 days.
Common causes: (1) landline number being sent SMS — SMS doesn't reach landlines, (2) recipient previously sent STOP, (3) carrier-level spam filter (mostly Verizon, sometimes T-Mobile), (4) invalid number format. Run a phone-validation pass on the list quarterly.
One per client. Each client gets their own mail.clientdomain.com. Mixing clients on one sending domain means one client's bad list quality damages every other client's deliverability. Isolation is the right architecture even though it requires more DNS work per sub-account.
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
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.
GoHighLevel
GHL's funnel builder is fast enough to launch a campaign by Friday. It's also slow enough to tank your conversion rate if you don't structure pages, tracking, and upsells the way performance specialists do.
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.