Why Your SaaS Onboarding Emails Are Losing You Users
Most SaaS products spend months perfecting their product and minutes thinking about onboarding emails. That is a costly mistake. Research consistently shows that users who reach their first meaningful outcome within the first seven days have dramatically higher retention rates. Your onboarding email sequence is the thread that guides them there — especially when they close the browser tab and forget you exist.
In 2026, the tool of choice for modern SaaS teams is Loops — a purpose-built email platform for SaaS products that replaces legacy tools like Mailchimp or ActiveCampaign with a developer-friendly, event-driven architecture. It integrates cleanly with Next.js, Supabase, and most modern stacks, and its loop-based automation model makes building behavioural sequences far more intuitive than traditional drip campaigns.
This tutorial walks you through building a complete SaaS onboarding email sequence with Loops, from account setup to your first behavioural trigger firing in production.
What You'll Need
- A Loops account (free tier available at loops.so)
- A SaaS product with user sign-up events you can instrument
- Basic familiarity with JavaScript or TypeScript
- Access to your product's backend (Node.js, Next.js, or similar)
- Your product's core activation metric identified (more on this below)
Step 1: Define Your Activation Metric Before You Write a Single Email
Before you open Loops, you need to answer one question: what does a user need to do to experience real value in your product? This is your activation event — the moment that separates users who stick from users who churn.
For a project management tool, it might be creating their first project and inviting a teammate. For an analytics product, it might be connecting a data source and viewing a first report. For an AI writing tool, it might be generating and saving their first piece of content.
Write down your activation event in plain language. Every email in your sequence should either push users toward that event or celebrate reaching it. If you are unsure what your activation metric should be, reviewing your best retained users' behaviour in your analytics tool is a good starting point — this is the kind of strategic groundwork the team at Lenka Studio typically does before designing any onboarding flow for clients.
Step 2: Set Up Your Loops Account and Configure Your Audience
Sign up at loops.so and create a new workspace for your product. Inside Loops, navigate to Contacts and then Properties. You will want to add custom properties that reflect your users' onboarding state. Common ones include:
signed_up_at— timestamp of registrationplan_type— free, trial, or paidactivated— boolean, true once they hit your activation eventapp_last_seen_at— timestamp of most recent login
These properties are what make behavioural triggering possible. Without them, you are stuck sending time-based emails that ignore what users are actually doing.
Step 3: Instrument Your Product to Send Events to Loops
Loops has a clean REST API. Install the official SDK in your project:
npm install loopsThen initialise the client in your backend. If you are using Next.js with Route Handlers, create a utility file:
// lib/loops.ts
import { LoopsClient } from 'loops';
export const loops = new LoopsClient(process.env.LOOPS_API_KEY!);Now instrument your key events. At minimum, you need three integration points:
3a. User Sign-Up
When a user registers, create them as a contact in Loops and fire a signup event:
await loops.createContact(user.email, {
firstName: user.firstName,
userGroup: 'onboarding',
signed_up_at: new Date().toISOString(),
plan_type: 'free',
activated: false,
});
await loops.sendEvent({
email: user.email,
eventName: 'signup',
});3b. Activation Event
When a user completes your activation action, fire a second event and update the contact property:
await loops.sendEvent({
email: user.email,
eventName: 'activated',
eventProperties: {
activation_action: 'created_first_project',
},
});
await loops.updateContact(user.email, {
activated: true,
});3c. Inactivity Signal (Optional but Valuable)
Set up a scheduled job (using a cron in Supabase Edge Functions or a Vercel Cron job) that runs daily and fires a went_inactive event for users who signed up more than two days ago but have not activated:
// Pseudocode — query your DB then:
if (!user.activated && daysSinceSignup >= 2) {
await loops.sendEvent({
email: user.email,
eventName: 'went_inactive',
});
}Step 4: Build Your Email Sequence in Loops
Navigate to Loops in the sidebar and click Create Loop. Select Event-based as the trigger type. You will build three separate loops that together form your onboarding sequence.
Loop 1: Welcome Loop (Triggered by the signup event)
This loop fires immediately when someone signs up. Create a single email that:
- Thanks them by first name
- Sets expectations for what they will get from your product
- Gives them one concrete next step — specifically the first step toward your activation event
- Links directly to that step inside the product (not your homepage)
Common pitfall: Do not include five different CTAs in your welcome email. One email, one job, one link.
Loop 2: Activation Nudge Loop (Triggered by went_inactive)
This is your most valuable loop. It catches users who signed up but drifted before activating. Set up a three-email sequence with delays between each:
- Email 1 (Day 2): A friendly check-in. Ask if they got stuck. Link to a specific getting-started resource or video walkthrough. Keep it short — two to three sentences maximum.
- Email 2 (Day 4): Show social proof. Include a short testimonial or a real outcome a similar user achieved. Remind them of the specific benefit they signed up for.
- Email 3 (Day 7): A direct offer to help. Include a link to book a quick onboarding call, or offer a personalised demo. This is your last push before they go cold.
Add a condition inside this loop: if the contact's activated property becomes true at any point, exit the loop immediately. This prevents sending nudge emails to users who just activated on their own.
Loop 3: Activation Celebration Loop (Triggered by activated event)
When a user activates, send a short congratulatory email. Acknowledge what they just did, then introduce the next level of value — a feature they can unlock, a pro tip, or an invitation to a community or webinar. This is also a natural moment to mention upgrading if they are on a free plan.
Step 5: Write Email Copy That Actually Works
The structure of each email matters as much as the trigger logic. Follow this format for every email in your sequence:
- Subject line: Specific and outcome-focused. Avoid generic subjects like "Welcome to [Product]." Try "Your first [outcome] is one step away" instead.
- Opening line: Reference context — use merge tags like
{{firstName}}and reference what they signed up to do. - Body: One idea, three to five sentences. No padding.
- CTA: A single, specific link with verb-forward anchor text ("Set up your first project" beats "Click here").
Pro tip: Write your emails in plain text first, then style them. Plain-text onboarding emails from founders consistently outperform heavily designed HTML templates in open and click rates for early-stage SaaS products.
Step 6: Test Before You Go Live
Loops has a built-in test mode. Before activating any loop, use the Send Test feature to deliver each email to your own inbox. Check that:
- Merge tags resolve correctly (no broken
{{firstName}}showing up) - Links go to the correct destinations inside your product
- The plain-text version renders cleanly in Gmail and Apple Mail
- Delays between emails in a sequence are correctly configured
Also test your event instrumentation end-to-end by creating a dummy user account in your product and walking through the sign-up flow. Verify in the Loops dashboard that the contact was created and the event was received.
Step 7: Monitor and Iterate After Launch
Once live, give your sequence at least two weeks of data before drawing conclusions. In Loops, track:
- Open rate by email — below 35% on a welcome email is a subject line problem
- Click rate — below 5% suggests your CTA or copy is not clear
- Loop exit rate via activation — this tells you how effective your nudge sequence is
Run one change at a time. Subject line, CTA copy, or send timing — not all three at once. Treat this like any other conversion rate optimisation experiment. If you are also building content systems to support your marketing, a structured planning tool like the Lenka Studio social media toolkit can help you coordinate onboarding email campaigns with your broader content calendar.
Common Pitfalls to Avoid
- Sending too many emails too quickly. Three emails in 48 hours will get you marked as spam. Respect the pace of your users' decision-making.
- Not exiting users from loops when they activate. Sending a "you haven't tried this yet" email to someone who activated yesterday destroys trust.
- Writing for your product, not for your user's goal. Every email should answer the user's implicit question: "What's in this for me right now?"
- Skipping mobile preview. Over 60% of SaaS onboarding emails are opened on mobile. Check your formatting on a small screen before going live.
Next Steps
You now have a working, event-driven onboarding email sequence that responds to what users actually do — not just when they signed up. From here, consider extending the system with a post-activation nurture loop that drives feature adoption, an upgrade sequence for free users, and a re-engagement loop for users who go quiet after a period of activity.
If you are building a SaaS product and want help designing the full onboarding experience — from in-app flows to email sequences to activation analytics — the team at Lenka Studio works with product teams across Australia, Singapore, Canada, and the US to turn early-stage user drop-off into measurable retention growth. Get in touch to talk through what your onboarding flow needs.




