MSO Syntax in Customer.io

Customer.io partner logo

Table of Contents

Summarize this documentation using AI

This banner was added using fs-inject

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Overview

MSO syntax in Customer.io is how you add Outlook-specific conditional code so your emails render correctly in Microsoft Outlook, which is still common for corporate inboxes and higher income shoppers. For D2C, that matters because a broken abandoned cart email or a misaligned product grid can quietly tank clicks and revenue, even if Gmail and Apple Mail look perfect.

If you want a faster path to stable, conversion-ready templates across all inboxes, Propel can help you operationalize design systems and QA inside Customer.io, then pressure test them against your highest revenue journeys. If you want help, book a strategy call.

How It Works

MSO syntax in Customer.io works by wrapping specific HTML (often table-based layout, spacing fixes, or fallback buttons) in conditional comments that only Microsoft Office rendering engines read. Everyone else ignores that code, so you can tailor the Outlook experience without compromising modern clients.

In practice, you build your email in Design Studio (usually the code editor for precise control), then add MSO conditionals around the parts Outlook tends to break: multi-column product blocks, background images, border radii, and padding. You can keep your “ideal” version for Apple Mail and Gmail, while providing a simpler, reliable fallback for Outlook users. If you are managing templates at scale, this is easiest to standardize through reusable components and a QA loop in Customer.io.

Step-by-Step Setup

MSO syntax in Customer.io is easiest to implement when you treat Outlook as a separate rendering target and build explicit fallbacks for the modules that drive clicks.

  1. Identify the messages where Outlook breakage costs you money most (cart recovery, browse abandonment, post-purchase cross-sell, winback).
  2. Pull your current email template into Design Studio’s code editor so you can control the HTML structure precisely.
  3. Find the risky modules: multi-column product grids, hero sections with background images, rounded buttons, and tight padding around price and CTA.
  4. Wrap Outlook-only fixes in MSO conditional comments (for example, showing a table-based layout only for Outlook, or swapping a background image hero for a solid color block).
  5. Keep the non-Outlook version clean and modern (Gmail, Apple Mail), and make the Outlook version “good enough” and highly readable, not pixel-perfect.
  6. Send tests to real Outlook inboxes (desktop and web if possible), plus Gmail and Apple Mail, then iterate until the CTA, pricing, and product imagery are stable.
  7. Convert the final modules into reusable components so future campaigns inherit the Outlook-safe patterns automatically.

When Should You Use This Feature

MSO syntax in Customer.io is worth the effort when your revenue flows rely on layout-heavy merchandising and you have meaningful Outlook volume.

  • Abandoned cart recovery with product tiles: If Outlook collapses columns, shoppers may only see one item, lose price context, or miss the CTA entirely.
  • Product discovery journeys: Collections, “best sellers,” and recommendation grids often break in Outlook unless you provide table-based fallbacks.
  • Post-purchase cross-sell: If your “complete the set” block renders incorrectly, you lose the easiest second order you will ever earn.
  • High AOV launches: Premium buyers are more likely to be in corporate inboxes, where Outlook is common and rendering issues are frequent.

Realistic scenario: A skincare brand runs a 2-email cart recovery sequence with a 3-product grid (cart items plus two “you may also like” picks). Gmail shows a clean grid, but Outlook stacks awkwardly and pushes the checkout button below the fold. Adding an Outlook-only table layout keeps the checkout CTA visible and lifts recoveries without changing the creative for other inboxes.

Operational Considerations

MSO syntax in Customer.io becomes manageable when you standardize where it lives, how it is tested, and how it is reused across campaigns.

  • Component strategy: Put MSO conditionals inside components (buttons, product cards, two-column rows) so they are not re-implemented differently by every marketer.
  • Data-driven modules: If product blocks are populated dynamically (cart items, recommendations), ensure your Outlook fallback handles variable title lengths, missing images, and price formatting.
  • QA workflow: Treat Outlook as a required test client for any email that contains revenue-critical merchandising, not a “nice to have.”
  • Design constraints: Outlook-safe design often means fewer fancy effects (background images, rounded corners). Optimize for clarity and clickability first.
  • Change control: When you update global styles or swap components, re-test Outlook. Small CSS changes can have outsized impacts.

Implementation Checklist

MSO syntax in Customer.io is easiest to roll out when you treat it like a template hardening project, not a one-off fix.

  • Quantify Outlook share of opens and revenue for your top flows.
  • Prioritize 2 to 4 templates that generate most email revenue (cart, browse, post-purchase, winback).
  • Audit modules most likely to break (multi-column, background images, buttons).
  • Add MSO conditional fallbacks for each risky module.
  • Test in Outlook desktop plus at least one web Outlook inbox, then validate Gmail and Apple Mail.
  • Convert hardened modules into reusable components.
  • Document “approved” patterns so new campaigns do not reintroduce Outlook issues.

Expert Implementation Tips

MSO syntax in Customer.io pays off most when you focus on protecting the few elements that actually drive revenue: product clarity, price visibility, and a prominent CTA.

  • In retention programs we’ve implemented for D2C brands, the biggest wins came from simplifying the Outlook version of the hero and keeping the primary CTA above the fold. Outlook does not need to look identical, it needs to be readable and clickable.
  • Use Outlook-specific fallbacks to protect spacing around the button and price. If your CTA looks “cramped” in Outlook, click-through rate suffers even when everything technically renders.
  • Standardize an “Outlook-safe product row” component for cart and recommendation blocks. It prevents the recurring problem where one campaign looks fine and the next one breaks because someone copied a different grid pattern.

Common Mistakes to Avoid

MSO syntax in Customer.io can backfire when teams patch emails ad hoc and skip reusable patterns.

  • Fixing only the hero: Cart and recommendation grids are often the real culprit, not the header image.
  • Over-engineering Outlook parity: Chasing pixel perfection wastes time. Prioritize legibility, hierarchy, and a stable CTA.
  • Not testing variable content: Long product names, discounts, and missing images can break your Outlook fallback if you only test one “happy path.”
  • Copy-pasting conditionals everywhere: Scattered MSO code becomes unmaintainable. Put it in components and reuse.
  • Ignoring performance impact: Bloated HTML can slow rendering and complicate debugging. Keep Outlook fallbacks minimal.

Summary

Use MSO syntax when Outlook rendering issues threaten clicks in your highest revenue emails, especially cart recovery and post-purchase cross-sells. It matters because stable layout protects the CTA and product merchandising that drive conversion in Customer.io.

Implement with Propel

Propel can help you harden your Customer.io templates with Outlook-safe components, then roll them out across cart, browse, and post-purchase journeys. To tighten execution and QA, book a strategy call.

Contact us

Get in touch

Our friendly team is always here to chat.

Here’s what we’ll dig into:

Where your lifecycle flows are underperforming and the revenue you’re missing

How AI-driven personalisation can move the needle on retention and LTV

Quick wins your team can action this quarter

Whether Propel AI is the right fit for your brand, stage, and stack