Updated · 8 min read
Why Gmail clips emails at 102KB (and how to stop it)
Gmail clips at 102KB. That number has been stable for 13 years and most programs still hit it by accident, because the draft editor reports one size and the delivered email is another. What's actually going wrong is rarely the design — it's the wrappers, the comments, the inline CSS nobody audited, and a personalisation value that expanded by 40 characters on live send. Here's the mechanism, the six real sources of bloat, and the cap to enforce in QA.

By Justin Williames
Founder, Orbit · 10+ years in lifecycle marketing
Your email reaches the inbox and the bottom half is gone
Picture the moment a campaign goes out and someone forwards you the Gmail copy. The hero looks fine. The body reads cleanly. Then, where the unsubscribe link should sit, there's a small grey line: [Message clipped] View entire message. Everything past that point — secondary CTA, footer, legal copy, the unsubscribe link your compliance team insisted on — is hidden behind a click almost nobody makes. That's the failure mode this guide is about, and it has one trigger: your HTML crossed 102 kilobytes.
102KB
Gmail's hard clipping threshold, stable since 2013.
~30%
Gmail's share of global email market. This is the binding constraint for most programs.
Low single%
Click-through on the 'View entire message' link after a clip.
The exact threshold is 102,400 bytes — 100 KiB, which Google rounds to 102KB in its own docs. Any HTML email above it gets truncated, with the tail replaced by that "View entire message" link.Source · GoogleGmail sender guidelinesOfficial Google documentation covering email size, clipping behaviour, and sender requirements for reliable Gmail delivery.support.google.com/a/answer/8112613 years old. Still the same number. Applies in the Gmail web client and the Gmail mobile apps on iOS and Android. No other major client behaves this way — Apple Mail, Outlook, and Yahoo render the full message regardless of size. Gmail is alone on this, which makes it the binding constraint for basically every consumer program.
The bit most teams miss: the limit is on the raw HTML source — the markup the browser parses, before it's rendered into anything you see — not the visual output. Everything in that source counts. HTML tags, inline CSS (style declarations written directly on each element), <style>blocks, hidden preheader text, tracking pixels, the wrapper markup your ESP — your email service provider, the platform that actually sends the message — injects on the way out, even HTML comments your build was supposed to strip. Externally hosted images don't count, because they're a URL reference and a URL is tiny. Inline data-URI images — pictures encoded directly into the HTML as base64 text — absolutely do, and one base64 logo can wipe out a third of the budget without warning.
Clipped emails see click-through on the "View entire message" link consistently in the low single digits. Everything past the clip is effectively invisible: secondary CTAs, unsubscribe, legal footer. That last point is the one that bites. In several jurisdictions burying the unsubscribe link creates real compliance risk, and a clipped unsubscribe reliably drives the complaint rate up. The unsubscribe page guide has the full shape of that risk.
The limit is on the raw HTML source, not the rendered output. That's why the email that looked fine in your editor gets clipped in the inbox.
The editor says 85KB. The inbox sees 110KB. Welcome to the trap
Most ESPs bolt 8–20KB of wrapper markup onto whatever you built before the message leaves their system: link-tracking redirects (so they can attribute clicks), personalisation tokens that expand to their full values at send time (a 12-character placeholder becomes a 47-character first name plus product), an unsubscribe footer block, DKIM and SPF metadata for authentication. If your raw template shows 85KB in the editor, the delivered email can easily cross 102KB on the wire — and the ESP preview almost never shows that wrapper expansion. That's the trap. The version you QA'd isn't the version the recipient receives.
Where bytes go in a typical 95KB email A representative breakdown of a near-clipping email. Template markup is usually only a third of the actual byte count; the rest is ESP wrappers, inline CSS, comments, and unused style blocks — most of which can be eliminated without touching the design.
Check the final rendered size against a real send or a production-fidelity preview. Not the draft editor. Braze is a clean example of the trap in practice: the campaign editor shows raw template size, but the delivered payload includes tracking link rewrites and the Braze wrapper, neither of which the preview reports. Send a test to a Gmail address and use Gmail's "Show original" option (in the three-dot menu on any open message) to read the raw source as the inbox actually received it. The Email Size Checker accepts the post-wrapper HTML directly, which saves the test-send step entirely.
The six things actually pushing your email over the line
Six culprits account for almost every accidental clip. The design is rarely one of them, and an afternoon of audit work is usually enough to clear the lot.
1. Inline data-URI images.One 30KB logo encoded as base64 — the format that turns binary image data into a long string of text characters, so the image lives inside the HTML instead of at a separate URL — eats a third of the budget. Host images externally on a CDN. Reference them by URL. No exceptions. This is the single most common cause of unexpected clipping and it's almost always accidental: someone pasted a logo into the editor and the builder silently inlined it.
2. Unused CSS. Template builders generate hundreds of class definitions you never actually use. Purge them as a build step — it routinely reclaims 10–30KB of template output with no visual change at all.
3. HTML comments. Build-tool banners, Outlook conditional comments (the special <!--[if mso]> blocks that target old Outlook versions), developer notes, commented-out sections from three campaigns ago — every one of them ships to the inbox. Run a comment stripper as part of your build. 5–15KB usually comes back immediately.
4. Duplicate inline styles. Every <td> table cell carrying the same style declaration repeats every byte. Consolidate into a scoped <style> block with Outlook-safe selectors where you can.
5. Overly precise pixel values. CSS generators output things like margin-top: 12.7389px. Round them. The recipient cannot tell the difference between 12.7389 and 13 on a phone screen, and the bytes compound across a whole template.
6. Embedded fonts. @font-facedeclarations — the CSS that tells the client "use this custom font" — carry real weight and rarely render consistently across email clients anyway. Drop them in favour of web-safe fallbacks. The visual gain isn't worth the byte cost, full stop.
Most templates drop 20–40% of their weight from those six changes alone, with no visible impact on the recipient. If you've never audited, that's where the first pass goes.
How much headroom is enough — and the rule that enforces it
Under 60KB is comfortable. 60KB to 80KB is fine but watch the trend. Over 80KB starts to feel precarious. Over 95KB you're gambling — one personalisation token that expands to a longer value than you planned can push you past the threshold on a specific send, and you won't know until the complaints land.
The discipline that actually works: enforce the 80KB soft cap in QA, no exceptions without a documented reason. The Email Size Checker warns at 80% of the limit and errors at the clip threshold, so the problem surfaces before send. The Orbit Email Render QA skill folds the full pre-send checklist — size, Liquid fallbacks (the templating language ESPs use to inject personalised values, and the safety net for when those values are missing), dark-mode safety, link integrity — into one automated gate.
The failure mode nobody budgets for: a campaign safely under 80KB in test grows past 102KB on live send because of a longer-than-expected personalisation value. A user with a 40-character product name. A localised string in German where English was 15 characters. Inspect the data ranges, not just the template. This is the version of the problem that lands on Friday afternoons and ruins weekends.
One thing to do Monday: set the 80KB soft cap as a hard gate in your QA flow. Every other fix in this guide compounds behind that single rule.
Read to the end
Scroll to the bottom of the guide — we'll tick it on your reading path automatically.
Frequently asked questions
- Why does Gmail clip long emails?
- Gmail's web and mobile clients truncate email HTML at 102 kilobytes. Anything beyond that gets hidden behind a "[Message clipped] View entire message" link. The threshold has been stable since 2014 and is enforced to reduce rendering cost and protect users from oversized payloads. Most clipped emails blow past 102KB not from content but from inlined CSS, nested table wrappers, and HTML comments left in by email builders.
- What is the Gmail 102KB clipping threshold?
- Gmail truncates the HTML body at exactly 102 kilobytes (unpacked, after MIME decoding). This is NOT the total email size including images — images are fetched separately. It's the HTML string size, which is driven by the template's markup, inline styles, and text content.
- How do I prevent Gmail from clipping my emails?
- Three practical steps. First, minimise inline CSS — use shared styles in a head block only for Gmail-safe properties, not a full reset. Second, strip HTML comments and empty table cells left by email builders. Third, move below-fold content to a linked landing page rather than embedding it. The Orbit Email Size Checker at /apps/email-size flags the size before send and identifies which sections are driving bytes.
- Does Gmail clipping affect tracking pixels and unsubscribe links?
- Yes — this is the worst downstream consequence. If the tracking pixel sits below the 102KB threshold, open-rate tracking breaks for Gmail users (exacerbated further by Apple MPP). If the unsubscribe link is below the threshold, users can't unsubscribe without clicking through to the full view first — a major CAN-SPAM and GDPR risk. Put the unsubscribe link above the fold and the tracking pixel near the top of the body.
- What's the difference between clipping and spam filtering?
- Clipping is a rendering decision — Gmail truncates the HTML but still delivers the message to the inbox. Spam filtering is a delivery decision — the message goes to Spam entirely. Clipping can contribute to spam signals indirectly (broken unsubscribe links, missing tracking pixels, weird rendering) but is not itself a spam-filtering mechanism.
This guide is backed by an Orbit skill
Related guides
Browse allTransactional emails: the highest-engagement messages you ignore
Order confirmations, password resets, receipts, shipping updates. Transactional emails post open rates two to three times higher than marketing sends — and most lifecycle teams have never touched them. Effort is going to the wrong place.
Transactional email anatomy: the five sections every transactional needs
Transactional emails — receipts, password resets, shipping updates — open at 3–5x the rate of marketing and carry more brand signal per send than anything else in the program. Most teams treat them as ops artefacts and miss the leverage entirely. Here's the five-section anatomy that works across every transactional type.
Plain-text email versions: why they still matter in 2026
Every HTML email should ship with a plain-text twin — the same email rendered as bare text, no styling. Most ESPs auto-generate one, and most of those auto-generated versions are garbage. Here's why the plain-text version still matters in 2026 and how to make the version you ship actually work.
Email deliverability — the practitioner's guide
Deliverability isn't a setting. It's the running total of every send decision you've made since you bought the domain. Four pillars hold it up. Break one and the whole program starts leaking.
The unsubscribe page is the most important page in your lifecycle program
The page every lifecycle team ignores is the one quietly deciding sender reputation, suppression-list quality, and the fate of next quarter's deliverability. A short defence of why it deserves the ten-minute rebuild.
SPF, DKIM, and DMARC explained for lifecycle marketers
Three DNS records decide whether Gmail trusts your marketing email or quietly bins it. Gmail and Yahoo made all three mandatory for bulk senders in 2024 and the grace period is over. This is the practitioner's explainer: what each record does in plain English, how they interact, and the setup order that won't accidentally block your own mail.
Found this useful? Share it with your team.
Use this in Claude
Run this methodology inside your Claude sessions.
Orbit turns every guide on this site into an executable Claude skill — 63 lifecycle methodologies, 91 MCP tools, native Braze integration. Free for everyone.