Every time I take over a GHL account that has deliverability problems, I find the same thing: someone made a bunch of decisions about email setup in the first week and never revisited them. Wrong sending domain. Campaigns and workflows stepping on each other. Lists that haven't been cleaned since the account launched. And a client who's convinced GHL's email "just doesn't work."
GHL's email tools work fine. Agencies set them up wrong. Here's how to do it right.
Campaigns vs. Workflows: This Is Not a Preference, It's a Function
The number one setup mistake I see is agencies using campaigns and workflows interchangeably. They're not the same tool. They're built for different jobs.
Campaigns are for broadcast email — one message to a list, sent once (or on a schedule). Think newsletters, promotions, announcements, any time you're sending the same email to a defined group at the same time. Campaigns are built for this. They have list selection, scheduling, and sending infrastructure designed for volume broadcasts.
Workflows are for behavioral, triggered email — the right message to the right person based on something they did (or didn't do). Someone fills out a form. They book an appointment. They haven't responded in 7 days. Workflows handle these sequences because they're event-driven and they can branch based on contact behavior.
Here's what each one looks like in practice.
Campaign example — monthly newsletter: You're sending a client's monthly newsletter to their full subscriber list. In GHL, you create a campaign, select the contact list (filtered to "subscribed, engagement tag not 'cold'"), write the email, set the send time for Tuesday at 10 AM in the recipient's timezone, and schedule it. The campaign handles the blast. After it sends, you review the stats: opens, clicks, bounces, unsubscribes. That data informs next month's send.
Workflow example — post-booking nurture: A contact books a free consultation through the calendar. The "Appointment Booked" trigger fires. The workflow immediately sends a confirmation email with logistics. It waits 24 hours, then sends a "what to expect on the call" email. If the contact opens that email, a tag is applied and the workflow adds a note in the contact record. If they don't open within 48 hours, the workflow sends an SMS instead. None of this is possible in a campaign — because campaigns don't react to individual behavior, they blast everyone the same way.
Where I see agencies get into trouble: they try to run drip sequences through campaigns, scheduling them days apart. It works until it doesn't — contacts who enter mid-sequence get the wrong email, timing logic breaks down, and you can't easily branch based on behavior. Use workflows for drip sequences. Always.
The other mistake: running follow-up automation through a campaign after someone books a call, because "it's just one email." The problem is campaigns are list-based. Behavioral follow-ups should be contact-based and triggered. Put it in a workflow, trigger it off the appointment booking event, and you'll have much more control over timing and conditions.
Domain Authentication Is Not Optional
Before a client ever sends an email through GHL, the sending domain needs to be authenticated. This means setting up DKIM and SPF records in their DNS. GHL walks you through this in the Email Services settings, but I'm always surprised how many accounts I inherit where this was skipped.
Here's why it matters: email providers use DKIM and SPF to verify that the email claiming to be from hello@clientbusiness.com actually came from an authorized server. Without these records, you're sending unauthenticated email. It won't necessarily bounce immediately — but it signals spam to receiving mail servers, and over time your deliverability tanks.
Beyond SPF and DKIM, I also check DMARC. GHL doesn't set this up for you, but your client's domain should have a DMARC policy in place. At minimum, a p=none policy with a reporting address so you can monitor authentication failures. If they're dealing with serious deliverability problems, a p=quarantine or p=reject policy may be appropriate — but don't start there without understanding what's failing authentication first.
I use MXToolbox to verify all three records after setup. Takes five minutes and confirms everything is configured before the first email goes out.
Domain Warmup: What It Is, How Long It Takes, and How to Do It
This is the one deliverability topic that trips up most agencies, because it's invisible until something goes wrong.
When a domain is new — or when a domain switches to a new sending IP or infrastructure — receiving mail servers have no history to judge it by. High volume from an unknown domain looks like spam behavior by default. Domain warmup is the process of gradually increasing your send volume so that you build a positive sending history before you ever approach scale.
Here's what happens if you skip it: you onboard a new client, import their 8,000 contacts, and send a campaign to the full list in week one. Even if authentication is perfect and the list is clean, receiving servers flag the sudden high volume from an unfamiliar domain. Open rates crater, bounce rates spike, and your client's domain ends up on a blocklist before they've sent ten campaigns.
How long warmup takes: Plan for four to six weeks for a new domain to be trusted for volume sends. The goal is to ramp gradually — starting with your most engaged contacts (people who know the sender and are likely to open) and increasing volume as positive engagement signals accumulate.
How to do it in and around GHL:
GHL does not have a built-in warmup tool, so you manage this through how you structure your campaigns and lists. Here's the approach I use:
Week 1: Send to your highest-engagement segment only. If the client has an existing list, this means contacts who have opened or clicked in the last 30 days. Target 250–500 contacts maximum. If it's a brand-new list with no engagement history, start with known contacts — customers, referral partners, people the client has a real relationship with.
Week 2: Expand to engaged contacts from the last 60 days. Aim for 1,000–2,000 contacts.
Weeks 3–4: Expand to engaged contacts from the last 90 days. You can now start including contacts who were on the list but haven't interacted recently, as long as the earlier weeks showed strong engagement (open rates above 20%, bounce rates under 1%).
Weeks 5–6: Begin sending to the full list, excluding known cold contacts. By this point, your domain has established a positive reputation with major ISPs and high-volume sends are no longer suspicious.
Watch your metrics weekly. If bounce rates creep above 2% or open rates drop significantly, slow down and don't increase volume that week. The point is steady positive signals, not speed.
If you're using a dedicated sending domain (a subdomain set up specifically for email, like mail.clientdomain.com), the warmup is domain-specific to that subdomain. Warming up mail.clientdomain.com doesn't carry over from clientdomain.com — they're treated as separate senders.
How to Manage Lists Without Destroying Sender Reputation
Sender reputation is built at the domain level and the IP level. In GHL, if your client is on a shared sending IP (the default unless they're on dedicated IP), their reputation is partially shared with other GHL users. That makes your list hygiene even more important — you're contributing to a shared pool.
Here's how I approach list management for every client:
Verify contacts before importing. If a client is importing an old list — especially one that's been sitting in a spreadsheet for six months or more — run it through an email verification tool first. I use tools like NeverBounce or ZeroBounce. Remove invalid addresses, role-based addresses (info@, admin@, contact@), and anything that's been previously bounced. Importing a dirty list and blasting it is the fastest way to crater a sender reputation.
Segment by engagement. Within GHL, I tag contacts based on email engagement using workflow triggers. Anyone who opens or clicks gets an "engaged" tag. Contacts who haven't opened in 90 days get a "low-engagement" tag. I run re-engagement campaigns to the cold segment before I'd ever remove them — but I never mix cold and engaged contacts in the same broadcast. Engaged contacts get sent to frequently; cold contacts get a single re-engagement attempt and then get suppressed if they don't respond.
Honor unsubscribes immediately. GHL handles this automatically, but I always verify the unsubscribe link is present in every email template and that the suppression list is being respected. I've seen accounts where contacts were re-imported from external CSVs and landed back on the active list after unsubscribing. Don't let this happen — it's a CAN-SPAM violation and a deliverability disaster.
Watch bounce rates. A hard bounce rate above 2% is a signal to receiving mail servers that something is wrong. I check bounce reporting in GHL's email stats after every campaign. High bounce rates tell me either the list wasn't verified before import or there's a segment with a lot of old or fake addresses.
A/B Testing in GHL Campaigns: What to Test, How to Read Results, When to Declare a Winner
GHL supports A/B testing on campaigns, and it's underused. Most agencies either don't know it's there or don't bother. Here's how to do it well.
What to test. Subject line is the highest-leverage variable to test first — it has the biggest impact on open rate, and open rate determines whether everything else you wrote actually gets read. Once you've found a subject line approach that consistently performs, move to testing the from-name (person vs. company), the preview text, and eventually the email body (one clear CTA vs. multiple links, image-heavy vs. text-focused).
Test one variable at a time. If you change the subject line and the send time in the same test, you don't know which change drove the result.
How to set it up in GHL. When creating a campaign, select the A/B test option before scheduling. You'll set the split percentage — how much of your list gets Version A vs. Version B. I typically run 40/40 with a 20% holdback: 40% gets Version A, 40% gets Version B, and the remaining 20% gets the winning version after results are in. GHL can automatically send to the holdback group after a set time window, or you can do it manually.
How to read the results. The primary metric for subject line tests is open rate. Click-through rate matters when you're testing body content or CTAs. Don't declare a winner based on absolute numbers alone — look at the percentage difference relative to your baseline. A 22% open rate vs. a 19% open rate on a list of 500 contacts is a meaningful difference worth paying attention to. The same difference on 50 contacts may just be noise.
When to declare a winner. I use 24 hours as my standard window for email open data. Most opens happen within the first 4 hours; by 24 hours you have a reliable picture. If the difference between A and B is less than 3 percentage points on a small list (under 500 per variant), it's probably not statistically meaningful — call it a tie and pick based on other criteria. If the difference is 5+ percentage points, you have a clear winner. Apply that learning to future campaigns and keep building on what works.
The goal isn't to run one test and be done. It's to accumulate data about what resonates with your client's specific audience so every campaign performs better than the last.
Subject Lines, Send Times, and the Stuff That Actually Affects Opens
I'm going to give you my actual working defaults because the generic advice on this is useless.
Subject lines: Keep them under 50 characters so they don't get cut off on mobile. Don't use all-caps, excessive punctuation, or obvious spam trigger words ("FREE!!!", "Act NOW"). Write them like a human, not a marketing robot. I test two subject lines whenever the list is large enough to split — GHL supports A/B testing on campaigns.
Sender name: Use a person's name, not the company name. "Krys at Dark Horse" performs better than "Dark Horse Agency" in almost every niche I've worked in. Contacts are more likely to open email from a person they recognize.
Send times: My starting point for most B2B clients is Tuesday through Thursday, 9–11 AM in the recipient's local timezone. GHL has a timezone-based sending option — use it for any list that spans multiple timezones. I adjust based on actual open-rate data after the first few sends. Don't trust industry averages over your client's actual audience data.
From address: Use a real, monitored inbox. I see agencies set up email sending from noreply@clientdomain.com — this is bad practice. Contacts who try to reply to an email and get bounced back are less likely to engage again. More importantly, ISPs look at reply-to addresses as a reputation signal. Use a real address.
Why Agencies Blame GHL for Deliverability When It's Their Own Setup
I've had clients come to me convinced that GHL was broken because emails were landing in spam. In every single case, it was one of these:
1. Domain not authenticated.
DKIM or SPF is missing. The emails are sending — GHL doesn't block unauthenticated sends — but every receiving mail server sees them without a valid authentication signature. The fix is straightforward: go to Email Services in GHL, add the sending domain, generate the DNS records, add them in your client's DNS provider, and verify. This takes under 30 minutes. If the records aren't propagating, give it up to 48 hours and verify with MXToolbox. Don't let a client send a single campaign before this is done.
2. Dirty list.
Someone imported an old contact list without running it through a verification tool. The list had 15% invalid addresses. After two campaigns, the bounce rate was at 8% and the domain was flagged. I've inherited accounts in this state where the only path forward was switching to a subdomain for email sending and doing a full warmup from scratch, because the main domain's sender reputation was too damaged. The fix in this state isn't a quick one — prevention is much easier. Verify every list before import. No exceptions.
3. Too much too fast.
A new sending domain or subdomain blasted thousands of contacts in the first week. No warmup. No gradual ramp. The domain had no sender history, and the sudden volume looked like a spam operation to ISPs. The fix is to slow down, start re-sending to small engaged segments only, and rebuild your sending history over 4–6 weeks. It's painful, but it works. See the warmup section above for exactly how to do it.
4. Spam-trigger content.
The email body has trigger words, it's 90% image with two lines of text, there's no plain text version, and every other sentence has a call to action. ISPs filter on content as well as sender reputation. The fix: write emails that look like they came from a human being. Mostly text, one clear CTA, a plain text version always included (GHL generates this automatically if you let it), and no word or phrase combinations that scream "marketing blast." Run your email through a tool like Mail-Tester before sending if you're unsure.
5. No engagement-based segmentation.
The client is sending every email to every contact, including 3,000 people who haven't opened anything in over a year. Dead contacts drag your engagement rate down across every send. ISPs use engagement signals — open rates, clicks, replies — as a factor in deliverability decisions. Low engagement from a segment tells them your emails aren't wanted. The fix is to stop sending to cold contacts until they've been through a deliberate re-engagement sequence. If they don't re-engage after one targeted attempt, suppress them. You'd rather have a smaller active list than a large list that's quietly destroying your reputation.
The platform is fine. The setup is the problem.
Set Up a Review Cadence
Email marketing in GHL isn't a set-it-and-forget-it situation, and I tell every agency client that upfront. I recommend a monthly check-in on:
- Deliverability metrics (open rates, bounce rates, unsubscribe rates)
- List health — size, engagement breakdown, recent unsubscribes
- Workflow audit — are triggered sequences still firing correctly, are there any contacts stuck mid-sequence
- Domain authentication status — connections can break, DKIM keys can expire
Catching a problem early is always easier than rebuilding a sender reputation that's been damaged over six months of bad sends.