Loading tutorials…
Loading tutorials…
Customer.io's email side has three distinct surfaces — Broadcasts, Newsletters, and Transactional — and each has its own rules. Mix them up and you'll send marketing content from your transactional IP (bad) or transactional from your marketing IP (worse).
Who this is forSaaS lifecycle marketers ready to send their first campaigns beyond automated workflows. Or teams whose campaigns have inconsistent design, drift from brand voice, or land in Gmail's Promotions tab when they shouldn't.
What you'll need
Step 1
Each surface has different rules and use cases. Pick deliberately — wrong choice costs you on every send.
**Broadcast**: one-time send to a segment. Use for product announcements, webinar invites, NPS surveys, sales pushes. Customer.io → Broadcasts → + Create Broadcast.
**Newsletter**: recurring scheduled send with templated content blocks. Use for weekly digests, monthly product updates. Customer.io → Newsletters → + Create Newsletter.
**Transactional**: triggered by API call from your backend. Use for password resets, receipts, signup confirmations, invoice emails. Customer.io → Content → Transactional Messages → + Create.
Critical distinction: Transactional and Marketing use separate sending reputations. Sending marketing content via the Transactional API is a TOS violation that gets accounts suspended. Don't.
Step 2
Content → Email Templates → + Create. Build one master template with header/footer, then copy for each campaign. Don't redesign per email.
Customer.io → Content → Email Templates → + Create Template.
Header: logo (linked to homepage), 1 line of brand identity. Keep clean — heavy headers hurt mobile rendering.
Body section: flexible block area. Most campaigns will be hero image + 2-4 paragraphs + 1 CTA button.
Footer: physical mailing address (required by CAN-SPAM), unsubscribe link, preference center link, social icons (optional). Customer.io provides Liquid variables: `{% unsubscribe_link %}` and `{% preferences_link %}`.
Save as `Base Template - Marketing`. Duplicate for `Base Template - Transactional` with a less promotional design (no marketing CTAs, minimal branding).
Test render on Litmus, Email on Acid, or Mailtrap before any send. Outlook still breaks 5% of emails — desktop Outlook 2019+ uses Word renderer.
Step 3
Content → Settings → Email Settings. From name, From address, Reply-To. Match the campaign type to the right sender.
From name: use a real human name for high-engagement campaigns ('Sarah from YourApp'), brand name for transactional ('YourApp').
From address: `sarah@mail.yourapp.com` (subdomain — never root domain).
Reply-To: usually a monitored inbox (`support@yourapp.com` or `sarah@yourapp.com`). Critical: replies must actually be read by a human or at least auto-acknowledged. Black-hole reply-to addresses hurt sender reputation over time.
Set up multiple sender identities for different campaign types: marketing sender, transactional sender, sales sender. Each tracks reputation separately.
In Settings → Email Settings → Default Sender, set the workspace-wide default. Per-campaign you can override.
Step 4
Broadcasts → + Create Broadcast → pick segment → build email → schedule. Walk through with a 50-person test segment first.
Customer.io → Broadcasts → + Create Broadcast.
Audience: select a segment. Start with a small internal test segment (teammates + 1-2 friendly customers).
Email: pick the marketing base template, edit body content. Subject line — keep under 50 chars for mobile preview pane. Preview text — write it intentionally; don't let it default to 'View this email in browser.'
Schedule: pick send time. Best results in B2B SaaS: Tuesday-Thursday, 9-11am or 1-3pm in the recipient timezone. Use Customer.io's send-time optimization if available on your plan.
Send to test segment first. Review actual inbox rendering in Gmail, Outlook, Apple Mail on both desktop and mobile.
When you're confident, send to the full segment. Monitor delivery + open rate for the first hour — abnormal patterns (delivery <95%, opens <10% in first hour) signal a problem.
Step 5
Newsletters → + Create Newsletter → set cadence, audience filter, content blocks. Best for weekly digests.
Customer.io → Newsletters → + Create Newsletter. Name: `Weekly Product Digest` or similar.
Schedule: e.g., every Tuesday at 10am recipient local time. Customer.io will batch send in waves.
Audience: usually `Lifecycle: Activated` AND `Email Consent: Marketing` AND NOT `Unsubscribed All`. Define this segment cleanly.
Content: build with Liquid-driven dynamic blocks. Example: pull last 7 days of changelog entries from a Webhook source or hardcode each week (most SaaS does the latter — it's OK).
Each week: open the newsletter draft → swap in the week's content → review → send. Total weekly effort: 30-60 min once the template is set.
Newsletters tend to outperform broadcasts on engagement because subscribers expect the cadence. Healthy open rate: 30-45%. Healthy click rate: 4-8%.
Step 6
Content → Transactional Messages → + Create. Each transactional template has an API endpoint your backend calls.
Customer.io → Content → Transactional Messages → + Create Transactional Message.
Common transactional templates to build: Password Reset, Email Verification, Signup Confirmation, Subscription Receipt, Payment Failed Notice, Subscription Cancelled Confirmation, Invite Received.
Each template has variables you pass via the Send Transactional API: `{{ customer.first_name }}`, `{{ reset_link }}`, `{{ amount_cents }}`, etc. Liquid templating throughout.
From the backend: `POST https://api.customer.io/v1/send/email` with JSON body containing `transactional_message_id`, `to`, `identifiers`, and template data.
Use the Transactional base template (less marketing-y design). These should look like system emails, not marketing.
Test each template by calling the API from curl with a sample payload before wiring your backend.
Step 7
Analytics → Deliverability. Watch bounce rate, complaint rate, and inbox placement. Catch problems before they compound.
Customer.io → Analytics → Deliverability (or per-broadcast Performance tab).
Healthy benchmarks for SaaS lifecycle email: Delivery 98%+, Bounce <2%, Complaint <0.1%, Open 25-45% (varies by segment), Click 2-8%.
If complaint rate creeps above 0.2%, you're approaching Gmail's danger zone (0.3% gets you throttled). Trim aggressive segments, slow the cadence.
Use a tool like Gmail Postmaster Tools (free) to monitor your sending subdomain reputation independent of Customer.io. Check weekly.
Tab placement: use a tool like GMass or simply forward a campaign to 5-10 Gmail accounts and check which tab it landed in. Promotions is fine for marketing; Primary is goal. If you're in Spam, immediate action needed.
Watch sending volume growth: ramping from 5K/week to 50K/week in 30 days will trigger throttling. Plan campaign cadence to grow volume 30-50% per month maximum.
Common mistakes
Sending marketing emails as Transactional to bypass unsubscribes
What goes wrong: Customer.io's spam team flags the account within 30-60 days. Account paused. Migration to a new ESP at the worst possible moment. Loses 4-8 weeks of campaign capability and $15K-50K of revenue, depending on company size.
How to avoid: Only send genuinely transactional messages (one-to-one user actions, receipts, password resets) via Transactional. Everything else through Broadcast or Newsletter. Yes, even 'important product updates.'
No physical mailing address in the footer
What goes wrong: CAN-SPAM violation. FTC fines up to $46K per email. Even if not fined, Gmail's automated systems treat emails without footers as more spam-likely, dropping inbox placement.
How to avoid: Every marketing email footer must include: a physical postal address (your registered business address is fine), an unsubscribe link, and a brief sender identifier. Add to base template once.
Heavy image-to-text ratio (one big hero image, minimal text)
What goes wrong: Email firewalls treat image-heavy emails as spam-likely. Gmail Promotions tab placement nearly guaranteed. Open rate drops 5-15% versus text-balanced emails. Outlook image-blocking (default-off images) leaves the email looking blank.
How to avoid: Target 60% text, 40% images by weight. Include alt text on every image (renders if image blocked). Add 2-3 paragraphs of real content even if your design is image-led.
No segmentation on broadcasts — full-list sends
What goes wrong: Sends a 'Power User Webinar' invite to free trial users who churned 6 months ago. Spam complaint rate spikes from 0.05% to 0.4%+. Deliverability damaged for 30-60 days. Open rate drops from 32% to 18% across all subsequent sends.
How to avoid: Every broadcast targets a specific segment. Minimum: filter to `Email Consent: Marketing` AND `Lifecycle: Active or Trial`. Never `All Users`. Saves the list, improves performance.
Subject line longer than 50 characters
What goes wrong: Mobile inbox truncates mid-word. 50%+ of SaaS opens are mobile. Truncated subject lines drop open rate 10-25%.
How to avoid: Keep subject lines under 50 characters. Test on actual mobile devices (not just preview tools). Use preheader/preview text to extend the message.
Sending at the wrong time for the audience timezone
What goes wrong: Email lands in EU inboxes at 3am when sent at 9am US time. Sits at the bottom of the inbox by the time the user checks at 8am. Open rate drops 15-30%.
How to avoid: Enable send-time optimization (Premium+) — Customer.io sends per-recipient at their local peak engagement time. On Essentials, segment by timezone and stagger send times manually.
Recap
Done — what's next
How to build Customer.io segments and Journeys workflows that actually fire
Read the next tutorial
Hand it off
Email campaign design is where Customer.io ROI shows up fastest. A specialist who's shipped 200+ campaigns will template your brand, set up the right sender hierarchy, and ship your first 3 campaigns in 1 week — typically $800-1,800 at $14-16/hr. Ongoing campaign production usually $400-1,200/mo at 4-8 campaigns per month.
See specialist rates
Yes — Broadcasts → A/B test toggle. Split by subject line or full content. Allocate 10-20% to each variant, 80% to control until winner is decided, then auto-send winner to the rest. Use this on every broadcast over 5K recipients — the lift compounds.
Broadcast = one-time send to current segment members. Journey = automated multi-step program triggered when someone enters a segment, sending to new entrants over time. Use Broadcast for 'send X today.' Use Journey for 'send X+Y+Z whenever someone enters this segment.'
Customer.io → Settings → Subscription Topics → create topics like 'Product Updates,' 'Marketing Promotions,' 'Weekly Digest.' Each user can opt out of specific topics rather than all-or-nothing. Include `{{ preferences_link }}` in your footer. Cuts unsubscribe rate by 30-50% on average.
Not until you cross 50K sends/week consistently. Customer.io's shared IP pool is well-managed and gives better deliverability than a cold dedicated IP for under-50K/week senders. Above 50K/week, dedicated IP is usually worth it — Premium+ plans support it.
ActiveCampaign is broader (CRM + email + automation) and better for small businesses. Customer.io is deeper on behavior triggers, Liquid templating, and multi-channel (email + SMS + push + in-app). SaaS teams past 25K users typically prefer Customer.io. Cross-link: see our ActiveCampaign tutorial for comparison.
Set up double opt-in for any EU/UK signup form. Store consent timestamp as a profile attribute. Filter every marketing campaign to `gdpr_consent == true` for EU users. Use the EU workspace (track-eu.customer.io) for EU data residency if required by your DPA. Add a clear unsubscribe link in every email.
Customer.io
Segments are how Customer.io decides who. Workflows are how it decides when and what. Most SaaS teams get one or the other right but rarely both — and the gap shows up as activation campaigns missing 40% of eligible users.
Customer.io
Liquid is what turns Customer.io from 'mass blast tool' into 'one-to-one personalization at scale.' Knowing the right 20% of Liquid syntax — variables, defaults, conditionals, filters — covers 95% of SaaS personalization use cases.
Customer.io
Email + SMS + Push is the canonical SaaS lifecycle trifecta. Adding SMS lifts onboarding completion 8-15%. Adding push lifts re-engagement on mobile apps 20-35%. The setup is one weekend of work, ongoing.
Klaviyo
Welcome flows are the highest-revenue flow in most Klaviyo accounts — typically 30-45% of automated email revenue. A bad welcome flow leaves 60% of that on the table. This is the build that captures it.
Customer.io
When a Customer.io workflow isn't firing, 80% of the time it's an event-delivery problem upstream, not the workflow itself. This is the diagnostic path that finds the root cause in minutes instead of days.
Customer.io
DIY Customer.io is the right call — until it isn't. In healthy SaaS, lifecycle email + in-app should drive 20-35% of activation and 10-20% of retention. If yours is at 5-10%, the gap is the program isn't being worked. Here's the honest framework for when to hire.