Preheader Text — The Hidden Conversion Booster in AcelleMail

After the subject line, recipients see the preheader — the gray text snippet that follows. Setting it explicitly can lift open rates 5-10% over the auto-extracted default. This guide walks the AcelleMail field + the writing patterns.

What the preheader is

The preheader is the gray text shown immediately AFTER the subject line in most inbox lists. Examples:

Inbox preview:
─────────────────────────────────────────────
Brand Marketing  ·  Last chance for 20% off
The sale ends tonight — your discount code...
─────────────────────────────────────────────
              ↑
         Preheader

If you don't set the preheader explicitly, the inbox auto-grabs the first text from your email body. Usually this is garbage like "Trouble seeing this email? View in browser" — wasted real estate.

Setting an explicit preheader = 5-10% higher open rates, measured across many senders.

Set the preheader in AcelleMail

In the campaign builder's Setup step, find the Preheader field. It sits next to the Subject:

Preheader field in setup

Type your preheader text. Once typed:

Preheader typed + saved

Save. The campaign's metadata now includes both subject + preheader; receiver inboxes display both.

Preheader writing patterns

Treat the preheader as a "second subject line" — different angle, complementary message:

Pattern Subject Preheader
Extend the subject "Last chance for 20% off" "Discount ends tonight at midnight"
Add urgency "Spring sale is live" "1,247 customers already saved $40+"
Soften with empathy "We noticed you're inactive" "No pressure — just curious how you're doing"
Curiosity tease "This is the email I should have sent last month" "Better late than never. Let me explain..."
Concrete benefit "Your weekly digest is here" "5 actionable tips, 5 minute read"
Personalization "{{ subscriber.first_name }}, here's your update" "We've been working on something — hope it helps"

Length matters

Preheaders display ~40-100 characters in most inboxes:

Apple Mail iOS:        ~50 chars before truncation
Gmail desktop:         ~80 chars
Gmail mobile (Android): ~55 chars
Outlook desktop:       ~60 chars
Yahoo:                 ~70 chars

Aim for 40-80 chars. Front-load the most important words.

Verify in Preview

After typing the preheader, click Preview in the campaign builder:

Campaign preview — desktop

The preview shows the full email body but NOT the inbox-preview format. For the actual recipient-side inbox view:

  1. Click Send test → send to your own personal Gmail / Outlook
  2. Open the test in each client
  3. Verify the preheader text is what you typed (not the auto-extracted default)

In mobile view:

Mobile preview

Common UI signals + fixes

Symptom Likely cause Fix
Preheader field grayed out Selected campaign template overrides preheader Some templates hardcode preheader; remove the override in template settings
Preheader saved but inbox shows "View in browser" Preheader text contains hidden HTML / image alt text first Verify preheader is plain text only
Preview shows preheader, real inbox doesn't Inbox auto-extracted first body text instead Add hidden preheader markup at top of email body (advanced)
Mobile preview truncates the preheader Too long Cut to 40-50 chars front-loaded
Preheader includes merge tags that don't resolve Tag name mismatch Use `{{ subscriber.first_name
Test send shows preheader correctly in 3 of 4 clients Client-specific auto-extraction differences Lengthen the explicit preheader to 80+ chars to ensure all clients use it

Common preheader mistakes

Mistake Why it hurts
Leaving preheader blank Inbox auto-extracts garbage ("View in browser")
Repeating the subject verbatim Wasted space; no incremental signal
Putting the unsubscribe link in preheader Recipient sees "unsubscribe" before opening — reduces open rate
Cramming 200+ chars Most gets truncated; first 40 chars are all that matter
Using emoji-only preheader Some clients render as boxes; not all support emoji
Generic ("Hi there!") Provides no incremental signal

What to put in the preheader

Best uses (ranked by reliability):

  1. Restate the benefit + add urgency — "Sale ends tonight"
  2. Show social proof — "1,247 customers already saved"
  3. Hint at content — "5 actionable tips inside"
  4. Tease curiosity — "Wait until you see #3..."
  5. Personalize — "Maria, your update is ready"

Worst uses:

  • Generic greeting ("Hello!")
  • Sender reminder ("From Brand")
  • Already-in-subject information (redundant)
  • Unsubscribe link (kills open rate)
  • "View in browser" (signals automation; lowers trust)
Advanced: hidden preheader markup + A/B testing preheaders + per-segment preheader personalization

Hidden preheader markup (for ensuring the right text appears even when inboxes auto-extract):

Most email templates include hidden preheader text at the top of the body:

<!-- Preheader (hidden visually; readable by inbox extractors) -->
<div style="display: none; max-height: 0; overflow: hidden;">
  Your preheader text here. Cannot exceed ~80 chars to avoid truncation.
</div>

Then add invisible filler to push the actual email content:

<div style="display: none; max-height: 0; overflow: hidden;">
  &zwnj;&nbsp; &zwnj;&nbsp; &zwnj;&nbsp; (etc — pad with zero-width-non-joiner)
</div>

The inbox extractor reads the first ~80 chars; recipients see only the visible email body.

AcelleMail's builder handles this automatically when you set the Preheader field. For raw HTML mode, add it yourself.

A/B testing preheaders:

If your subject lines are well-optimized, the next ROI lever is preheader testing:

  1. New campaign → A/B test type
  2. Variant A: "Sale ends tonight"
  3. Variant B: "1,247 customers already saved"
  4. Same subject + same body for both
  5. Test on 20% sample; winner sends to 80%

Subject + preheader together = "what they see before opening." Combined optimization yields compound gains.

Per-segment preheader personalization:

For sophisticated segmentation, vary the preheader by audience tag:

Engaged segment:   "You're one of our most active subscribers"
At-risk segment:   "We've missed you — here's something to come back"
New segment:       "Welcome — here's the catch-up you've been waiting for"

In AcelleMail, this requires per-segment campaign splits (one campaign per segment with appropriate preheader). Some senders use dynamic Liquid in the preheader:

{% if 'vip' in subscriber.tags %}VIP early access — 24h before everyone else
{% else %}Spring sale starts now{% endif %}

But preheader display from receiving clients can be unpredictable with dynamic content — test before relying on this.

Preheader for transactional emails:

For password resets / receipts / order confirmations, the preheader should:

  • Mention the action briefly ("Password reset link inside")
  • NOT include sensitive details (not "Your code: 123456" — visible in inbox preview = security issue)
  • NOT include the unsubscribe link (transactional emails don't have one)
Transactional subject: "Your password reset link"
Transactional preheader: "Click below; expires in 30 minutes"

Multi-language preheaders:

For multilingual senders:

{% if subscriber.locale == 'es' %}Última oportunidad: 20% de descuento
{% else %}Last chance: 20% off{% endif %}

Test in Spanish-speaking + English-speaking client previews to ensure render correctly.

Related articles

15 comments

7 comments

  1. phuong.mai.hn
    Any guidance on how this interacts with the time-of-day send optimization? Conflicts with our scheduled-blast pattern. fwiw
    1. admin
      We don't recommend that approach in production. It works in dev but has subtle race conditions under concurrent load. Stick with the documented pattern.
  2. tranminh.devop…
    pro tip from our team: bild campaign templates with a single CTA. Multiple CTAs always underperform in our data
  3. lucas.bernard.…
    Our open rate jumped from 18% to 24% after we restructured around these principles. Took about 6 weeks to see the full lift.
    1. admin
      great real-world detail. your point about stale running_pid > 30 min as an alert is something we should add to the diagnostic flow.
    2. admin (edited)
      thanks for sharing. the pattern you describe is exactly the use case we built that feature for — glad it landed for you.
  4. d.cohen.tlv
    Saved this. Goin to use as a reference for our next campaign cycle.
  5. hung.nguyen.it
    The personalization-beyond-first-name section is what I needed. Most articles talk about it abstractly.
    1. admin (edited)
      thanks. Pass it along if it helps your team
  6. priya.iyer.ops
    how do you handle this when your campaign list spans multiple language audiences? we have en + es + fr subscribers in one campaign
    1. admin
      There's no built-in way today. Two workarounds: (1) cron + custom script polling the API every N minutes, (2) webhook-driven if your event source supports it. Most operators go with #2.
    2. admin (edited)
      Suppression list import via CSV captures all opt-outs including preference-center ones if you exported with the right field set. The export filter defaults exclude some — check the 'include unsubscribed' checkbox on Mailchimp's export wizard.
    3. admin (edited)
      yes, that pattern is supported. The undocumented bit is the order — config:cache MUST come after the migration, not before. Updating the docs to make that explicit. lol
  7. cw.dev.sh
    confirming the a/b-test sample size guidance. we were testing too small for too long — switching to bigger batches over fewer cycles was the right call.
    1. admin
      Confirming your experience matches what we see in support cases. We'll cite the cause-#5 'wait it out' guidance more prominently in the next revision 👀

More in Email Marketing