A team’s email program shows declining open rates quarter over quarter and the proposed fix is “send more frequently to compensate.” That math never works. Email marketing degrades when deliverability slips, lists go stale, and personalization gets faked with a first name in the subject. The patterns that reliably move metrics are unglamorous and worth doing first.
Deliverability is a configuration problem first
SPF, DKIM, DMARC, and BIMI handle whether the inbox provider trusts your envelope. Configure all four through HubSpot’s domain manager and verify with a tool like MXToolbox before the first send:
SPF: v=spf1 include:_spf.hubspot.com -all
DKIM: k=rsa; p=... (HubSpot generates, you publish)
DMARC: v=DMARC1; p=quarantine; rua=mailto:[email protected]; pct=100
BIMI: v=BIMI1; l=https://example.com/logo.svg; a=https://...
Send from a real subdomain like news.example.com, never from a free webmail address. Warm a new sending subdomain over 4 to 6 weeks starting at low daily volume.
Segmentation that respects the inbox
Active lists filter by property and behavior together. The right segmentation pulls the recipients most likely to engage with this specific message, not the largest possible list:
List: Q2 enterprise launch
Filter: Lifecycle stage in [Lead, MQL, Opportunity]
Filter: Industry in [Software, Financial Services, Healthcare]
Filter: Company employee count >= 500
Filter: Last engagement <= 90 days
Filter: Not opted out of product announcements
A small precise list beats a large broad list every time on engagement and on deliverability.
Personalization with depth
First name in subject is table stakes and easily faked. Real personalization uses smart content blocks gated by lifecycle, role, last interaction, or current campaign:
{% if contact.lifecyclestage == "customer" %}
<p>You've been with us {{ contact.tenure_days }} days. Here's what's new
for the {{ contact.plan }} plan.</p>
{% elif contact.lifecyclestage == "marketingqualifiedlead" %}
<p>You downloaded {{ contact.last_asset }}. The companion guide is here.</p>
{% else %}
<p>Most teams in {{ contact.industry | default("your industry") }} start
with this overview.</p>
{% endif %}
Test smart content thoroughly before sending. A failed condition shows everyone the wrong block.
A/B testing that stays honest
Test one variable at a time. Hold sample size large enough to reach significance — for most lists, that means at least 1,000 recipients per variant. Set a stop date and accept the result rather than chasing significance with a smaller follow-up:
Test: Subject line
A: "How {{company.name}} could move on Q2"
B: "Q2 readiness checklist for {{contact.role}}"
Sample: 1,500 per variant
Significance threshold: 95%
Stop date: 7 days after send
Winner: deploy to remaining 70% of list
Lifecycle marketing instead of batch sends
Trigger sends from lifecycle stage transitions, not from a quarterly campaign calendar. Each stage gets its own cadence and message bank:
Subscriber: educational, weekly, broad topics
Lead: category-specific, biweekly, problem framing
MQL: offer-focused, weekly, demo + content asset
SQL: AE-led, sequence in HubSpot Sales Hub
Customer: product, monthly, expansion + best practice
Champion: advocacy, quarterly, beta access + reference
A contact who transitioned from MQL to SQL last week should not also receive the weekly MQL newsletter. Build suppression into the lifecycle workflow.
Engagement decay and list hygiene
Contacts who have not opened in 18 months hurt your sender reputation. Tag, suppress, and remove from active campaigns. Hard-delete on a retention-policy cadence:
Sweep: monthly
Tag dead = no engagement in 18 months
Suppress dead from new sends
Remove dead from active campaign lists
Hard-delete after retention window
What to do this week
Verify SPF/DKIM/DMARC, audit your top sending lists for staleness, and build one smart-content email gated by lifecycle as a pilot before scaling personalization across the program.