Email Marketing — Knowledge Base
v1 — verify/expand. Practical 2026 best practices, benchmarks, and mistakes. For CTA design specifically, see
../email_cta_playbook.md(don't duplicate it here). For ESP reporting/dashboards, see../dashboards_decks_playbook.md(ESP section).
What good looks like (2026 benchmarks)
- Open rate: ~30-35% campaign avg; flows higher. (Klaviyo cross-brand campaign avg ~31%.)
- Click rate: ~1.7% campaign avg, ~5.5% on welcome flows; top 10% campaigns ~3.4%.
- Mobile share of opens: ~85%. Design mobile-first, always.
- Dark mode share: ~40% of opens. Test it.
- Flows beat campaigns on every metric — and drive the majority of email revenue for ecommerce (often 40-55% of total email revenue from <5% of sends).
- List health: keep hard-bounce <2%, spam complaints <0.1% (Gmail/Yahoo enforce 0.3% as a hard ceiling), unsubscribe <0.5% per send.
Lifecycle / flows (the revenue engine)
Build flows before campaigns. The high-ROI core set, in priority order:
- Welcome series (3-5 emails) — triggered on signup. Deliver the promised incentive in email 1, set expectations, brand story, social proof, soft + then hard offer.
- Abandoned cart / browse abandonment (ecommerce) — 3 emails over ~48h. Cart: remind → urgency/scarcity → incentive. Browse: lower-intent, lighter touch.
- Post-purchase — thank-you, shipping, education/how-to-use, cross-sell, review request. Drives repeat + reduces support load.
- Win-back / sunset — re-engage lapsed (60-120 days no open/click), then suppress non-responders to protect deliverability.
- Replenishment (consumables) — timed to product lifecycle.
- B2B nurture / lead nurture — see
lead-generation.md. Drip on content + intent, hand off to sales at threshold.
Rule of thumb: trigger on behavior, not on the calendar. Behavioral triggers convert multiples of batch sends.
Segmentation
Default to behavior + lifecycle stage over demographics.
- Engagement tiers: engaged (opened/clicked last 30-60d), lapsing, dormant. Send frequency and content should differ per tier — never blast dormants at full cadence (kills deliverability).
- Predicted value: RFM (recency/frequency/monetary), predicted CLV, churn risk where the ESP supports it (Klaviyo, Braze).
- Intent / stage: for B2B, segment by funnel stage and content topic affinity.
- Suppression is a segment too: unengaged, recent purchasers (for promo), already-converted.
Common mistake: over-segmenting into tiny lists you can't statistically test or maintain. Start with 3-5 meaningful segments.
Deliverability (the foundation — nothing else matters if you land in spam)
- Authentication is mandatory: SPF, DKIM, DMARC (Gmail + Yahoo require it for bulk senders as of 2024+). Set up a dedicated authenticated sending domain/subdomain.
- Warm up new domains/IPs gradually — start with most-engaged, ramp volume over 2-4 weeks.
- List hygiene: double opt-in where feasible; never buy lists; sunset non-responders; validate signups (bot-trap detection).
- One-click unsubscribe in the header (RFC 8058) — required by Gmail/Yahoo for bulk.
- Monitor: complaint rate (<0.1% target, 0.3% hard limit), bounce rate, Google Postmaster Tools, spam-trap hits.
- Content signals: avoid spammy phrasing, all-caps subjects, excessive
!, single giant image with no text, link shorteners, mismatched from/reply-to.
Subject line & preview text
- Subject: 30-50 chars (mobile truncates ~40). Lead with the value or curiosity. Specificity and numbers beat vague hype.
- Preview text (preheader): treat as a second subject line — it's prime real estate. Never leave it defaulting to "View in browser" or the first hidden link. ~40-90 chars.
- From name: a recognizable human or brand name outperforms no-reply. Consistency builds inbox trust.
- Emoji: test, don't assume — modest lift in some audiences, hurts in B2B/enterprise.
- A/B test subject lines on a holdout before the full send when the ESP supports it.
Send-time
- There is no universal best time — it's audience-specific. Use the ESP's smart-send-time / predictive send where available (Klaviyo Smart Send Time, Braze Intelligent Timing, Iterable Send Time Optimization).
- General starting points: mid-morning (9-11am recipient local time) and early evening test well; Tue-Thu skews better for B2B.
- Respect time zones — send at recipient local time, not server time. (House rule: schedulers use America/Mexico_City unless the audience dictates otherwise.)
- Frequency: find the cadence that maximizes revenue without spiking unsubscribes/complaints; let engaged segments get more, dormant get less.
ESP notes (where the team ships from)
- Klaviyo — ecommerce default. Best-in-class flows, predictive analytics (CLV, churn, smart send time), strong segmentation. Button block is limited (use HTML/table blocks for advanced CTAs — see CTA playbook). Django-style merge tags. Deepest team coverage.
- Braze — cross-channel/enterprise (email + push + in-app + SMS). Canvas journeys, Intelligent Timing, Liquid personalization. Heavier setup; analytics live in Braze (limited external API for campaign metrics — see dashboards playbook).
- HubSpot — CRM-native marketing. Great for B2B nurture tied to deal stages and lead scoring. LC Email reporting has A/B-click attribution gaps (noted in dashboards playbook). Strong workflow automation.
- Iterable — experimentation + journeys; cross-channel. Good A/B/n and Send Time Optimization.
- GoHighLevel (GHL) — agency multi-account. V2 API (PIT auth), Email Stats V2 endpoint. Caveats: LC Email only, A/B click gaps, rate limits. Good for sub-account/client isolation.
Pick the ESP per client's existing stack — don't migrate without a strong reason.
Common mistakes
- Skipping flows to chase campaigns — leaves the biggest revenue on the table.
- No DMARC / unauthenticated domain → silent deliverability decay.
- Blasting the full list every time (no engagement segmentation) → complaints, spam folder.
- Default/empty preview text.
- Image-only emails (break in dark mode, no-image-load, and ALT-less = spam signal). See CTA playbook's image rule.
- Multiple competing CTAs — one primary ask per email.
- Not testing dark mode (~40% of opens).
- Ignoring time zones / sending at server time.
Quick checklist (pre-send)
- Mobile-first layout, single-column, ≥16px body
- Subject ≤50 chars + intentional preview text
- One clear primary CTA (see CTA playbook)
- SPF/DKIM/DMARC pass + one-click unsubscribe present
- Segment/suppression correct (not the whole list)
- Dark-mode rendered & checked
- Links UTM-tagged (see
google-analytics.mdUTM hygiene) - Time zone / send-time set correctly
- Spam test / inbox placement check run