skills/sending/onboarding-emails/SKILL.md
Build welcome and activation email sequences. Use when designing signup flows, driving users to key actions, converting trials to paid, or reducing early churn.
npx skillsauth add chunkydotdev/email-skills onboarding-emailsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Design welcome sequences and activation emails that get new users to their first moment of value.
transactional-email - receipts and auth emails that sit alongside onboardingemail-sequences - general drip campaign architecture (onboarding is a specific case)email-copywriting - writing the actual email contenttemplate-design - HTML templates that render correctly everywherenotification-design - product notification patterns that complement onboardingsuppression-lists - managing opt-outs so you stop when users say stopab-testing - testing subject lines and content within your sequenceThe point is not open rates. The point is activation - getting users to the moment where they experience your product's value. Every email in the sequence should push toward a single action that moves the user closer to that moment.
Before writing a single email, define your activation milestone. What does a user need to do before they "get it"? Examples:
Everything in your onboarding sequence should point toward that milestone.
Most successful onboarding sequences have 4-7 emails sent over 1-2 weeks. Here is a proven 5-email structure that works across most SaaS products:
| # | Email | Trigger | Goal | |---|-------|---------|------| | 1 | Welcome + quick win | Immediately on signup | Get user to complete one small action in the first session | | 2 | Core feature tutorial | 24h after signup OR after completing quick win | Show the primary value feature | | 3 | Stall recovery / next step | 48h after signup if no activation, skip if activated | Re-engage stalled users or push activated users further | | 4 | Social proof + advanced use case | Day 5-7 | Show what power users do, build confidence | | 5 | Trial expiry / upgrade nudge | 3 days before trial ends | Create urgency, summarize value received |
If your product has a fast time-to-value (under 5 minutes to first success), a 3-email sequence works better:
Enterprise or multi-stakeholder products often need 7+ emails to cover:
This is the single most impactful decision in onboarding email design. Behavior-triggered sequences outperform time-based drips by roughly 30% on activation, and can see 3x higher open rates because the emails are relevant to what the user just did (or failed to do).
Every user gets the same emails on the same schedule regardless of what they have done:
Day 0: Welcome
Day 1: Feature tour
Day 3: Social proof
Day 7: Upgrade nudge
Day 13: Trial expiry warning
Use time-based when: you are just starting, have no event tracking, or your product has a very uniform user journey.
Emails fire based on product events:
user.signed_up -> Welcome email (immediate)
setup.completed -> "Nice, here's what to try next"
setup.stalled (24h) -> "Need help finishing setup?"
first_value.achieved -> "You did it - here's what power users do"
trial.expiring (3d) -> "Your trial ends soon" (only if not converted)
The key advantage: if a user activates in 10 minutes, they never get the "need help?" email. If they stall for 3 days, they get targeted help at the point where they are stuck.
Combine both. Use behavioral triggers for milestone emails and time-based fallbacks for users who have not triggered any events:
Event: user.signed_up
-> Send welcome immediately
Event: setup.completed (within 48h)
-> Send "great, here's the next step"
-> Cancel the Day 2 stall-recovery email
Fallback: 48h after signup, no setup.completed event
-> Send stall-recovery email
Event: first_value.achieved
-> Send activation celebration
-> Cancel the Day 5 feature highlight
Fallback: Day 7, no first_value.achieved
-> Send "here's what you're missing" with tutorial link
The hybrid model gets you 80% of the behavioral benefit with much simpler implementation. You need event tracking for key milestones (signup, setup complete, first value moment, conversion) and time-based fallbacks for everything else.
The welcome email has a 50-70% open rate - far higher than any other email in the sequence. Do not waste it.
Send within 5 minutes of signup. 74% of users expect the welcome email immediately. Every minute of delay reduces open rates. If your system takes longer than 10 minutes to send a welcome email, fix that before optimizing anything else.
Subject: You're in - here's your first step
Hi [name],
Welcome to [product]. Your account is ready.
The fastest way to see what [product] can do:
[CTA button: "Create your first [thing]"]
It takes about 2 minutes. Once you do, you'll see [specific value outcome].
Over the next week, I'll send you a few short emails with tips to get
the most out of [product]. You can unsubscribe anytime.
Questions? Just reply to this email.
[Sender name], [title] at [product]
The highest-converting onboarding emails are not the welcome messages. They are the stall-recovery emails - the ones that reach users who started but got stuck.
A stall is when a user completed one milestone but has not reached the next within an expected timeframe. Define stall thresholds for each milestone:
| Milestone | Expected completion | Stall threshold | Recovery action | |-----------|-------------------|-----------------|-----------------| | Account creation -> First login | Minutes | 24 hours | "Your account is waiting" | | First login -> Setup complete | 1 session | 48 hours | "Finish setup in 3 steps" | | Setup complete -> First value action | 1-3 days | 72 hours | "Here's a 2-minute walkthrough" | | First value action -> Repeated use | 3-7 days | 7 days | "Here's what power users do" | | Trial active -> Paid conversion | Varies | 3 days before expiry | Trial expiry warning |
Bad stall recovery: "Just checking in! Haven't seen you in a while."
Good stall recovery: "You created your account but haven't sent your first email yet. Here's a 2-minute walkthrough that covers the three steps."
The difference: specificity. Reference exactly where they stopped and give them a direct path to the next step.
Rules for stall-recovery emails:
When you are using automated or agent-driven systems to detect stalls and send recovery emails, policy enforcement prevents over-sending. Key safeguards:
onboarding:step3:user123 so that retries and duplicate event firings are safe.Sending the same onboarding sequence to every user is the second-biggest mistake after not sending onboarding emails at all. Segment by the dimensions that actually change what you should say.
Different plans imply different needs and value thresholds:
| Plan | Onboarding focus | Conversion goal | |------|-----------------|-----------------| | Free trial | Get to activation milestone fast | Convert to paid before trial ends | | Freemium | Show value of paid features | Upgrade when they hit limits | | Paid (self-serve) | Ensure full setup, reduce early churn | Expand to higher tier | | Enterprise | Admin setup, team rollout, integrations | Successful deployment |
Capture role at signup (even a single dropdown helps). Tailor the core feature you highlight:
If you ask "What do you want to accomplish?" during signup, use the answer to route users into different sequences:
After the welcome email, let behavior drive segmentation:
If you have fewer than 100 signups per month, do not build complex segments. Write one good sequence, measure where users drop off, and iterate. Segmentation pays off at scale; premature segmentation adds maintenance burden without enough data to optimize.
The trial expiry sequence is a mini-campaign within your onboarding. It deserves separate attention because the dynamics are different from educational onboarding emails.
For a 14-day trial:
| Day | Email | Tone | |-----|-------|------| | Day 10 | Usage summary + value reminder | Informational | | Day 12 | "Your trial ends in 2 days" + upgrade CTA | Urgency | | Day 14 | "Trial ended" + limited-time offer or downgrade option | Last chance | | Day 17 | "We saved your data" + reactivation link | Win-back |
Every onboarding email should have exactly one primary call-to-action. Research consistently shows that adding a second CTA reduces clicks on both. If you need to link to multiple resources, put them below the fold as text links, not buttons.
For onboarding emails, plain-text-style emails (or minimal HTML) outperform heavily designed templates. Reasons:
Reserve designed templates for transactional emails (receipts, confirmations). Onboarding emails should read like a helpful note from a real person.
"Sarah from Acme" gets higher open rates than "Acme Team" or "[email protected]". Use a real person's name and a reply-able address. Replies to onboarding emails are a strong engagement signal and help with inbox placement.
| Pattern | Example | Why it works | |---------|---------|-------------| | Direct benefit | "Send your first email in 2 minutes" | Clear value, specific time commitment | | Question | "What are you trying to build?" | Curiosity, feels conversational | | Progress update | "You're 1 step away from [outcome]" | Completeness bias, specific | | Social proof | "How [company] set up in 10 minutes" | Credibility, benchmarking | | Help offer | "Need help with [specific step]?" | Relevant to stalled users |
Avoid: "Welcome to [product]!" as a subject line. It says nothing about what is inside. The welcome email subject should state the first action: "Your account is ready - create your first [thing]."
| Metric | What it measures | Good benchmark | |--------|-----------------|----------------| | Activation rate | % of signups reaching the value moment | 40-60% | | Time to activation | Hours/days from signup to first value moment | Under 48 hours | | Trial-to-paid conversion | % of trial users who convert | 15-25% (no CC), 40-60% (CC required) | | Onboarding completion rate | % of users who reach the final milestone | Above 40% is OK, above 55% is strong |
| Metric | What it measures | Good benchmark | |--------|-----------------|----------------| | Welcome email open rate | First-impression engagement | 50-70% | | Sequence open rate | Sustained engagement across all emails | 40%+ | | CTA click rate | Action taken from email | 15%+ | | Unsubscribe rate per email | Fatigue or relevance issues | Under 0.5% per email |
The key diagnostic metric: compare activation rates of email-engaged users (opened or clicked at least one onboarding email) vs non-engaged users. If email-engaged users activate at 2x or higher the rate of non-engaged users, your onboarding emails are working. If the multiplier is below 1.5x, your emails are not driving behavior - they are just accompanying it.
Optimize in this order (highest impact first):
A developer and a marketing manager have completely different setup paths. At minimum, segment by role or use case. One generic sequence alienates most of your audience.
More than one email per day during onboarding triggers fatigue and unsubscribes. Space emails at least 24 hours apart, and respect a weekly cap of 3 during the onboarding period. Watch your fatigue score - if a user has received 3+ emails in 7 days with no engagement, back off.
"Did you know we have a Kanban board?" is a feature tour. "Create your first project board in 2 minutes" is an outcome. Users do not care about features. They care about what they can accomplish.
If you only send time-based emails, you are sending "try feature X" to users who already used it and ignoring users who are stuck. Even basic stall detection (checking whether the user logged in within 48 hours of signup) dramatically improves relevance.
Some teams delay the welcome email to batch-process it, or bury it in a queue behind lower-priority messages. The welcome email has the highest open rate of any email you will ever send to that user. Send it immediately - within 5 minutes of signup. Prioritize it above everything else in your send queue.
Users who hit a sudden paywall feel tricked. Send at least two warning emails before the trial ends, and always offer a downgrade path. The post-expiry win-back email is critical too - many users intend to upgrade but forget.
Vague check-in emails have near-zero click rates. Name the specific step the user has not completed and provide a direct link to complete it. "You haven't sent your first email yet - here's a 2-minute walkthrough" converts. "Just checking in!" does not.
Continuing to send onboarding emails to users who never open them damages your sender reputation. After 3 consecutive unopened emails, either reduce frequency or move the user to a different channel (in-app messages, push notifications). Do not keep hammering an unresponsive inbox.
If your system sends emails based on product events and the same event fires twice (webhook retries, duplicate API calls), the user gets two identical emails. Always use deduplication keys combining the email type, step identifier, and user ID.
Onboarding emails should use your transactional sending infrastructure, not your marketing email system. They should be sent from a reply-able address, not no-reply@. They should bypass marketing suppression rules (a user who unsubscribed from your newsletter still needs their password reset and onboarding emails). Check your email provider's classification - most support marking emails as transactional to ensure priority delivery.
data-ai
Choose and configure an email service provider. Use when setting up email for a new project, comparing providers, migrating between providers, or adding failover.
development
Set up SPF, DKIM, and DMARC email authentication. Use when configuring a new sending domain, debugging spam/rejection issues, adding email providers, or preparing for Google/Yahoo/Microsoft bulk sender requirements.
development
Design and send transactional emails. Use when building password resets, receipts, shipping notifications, account alerts, or separating transactional from marketing streams.
development
Design product notification emails. Use when building activity alerts, digests, status updates, or managing notification frequency and user preferences.