# Welcome email examples that work (and how to send them via API)

> Five ready-to-copy welcome email examples (SaaS, store, course, app and B2B) with subject lines, preheaders and the code to send one at sign-up.

Source: https://couryo.com/en/blog/welcome-email-examples · Published 2026-10-20

Someone just signed up. Their inbox is open and they are waiting for your email. If it is late, lands in spam, or arrives saying "Welcome to our platform!" and nothing else, you lost the moment of highest attention they will ever give you.

This article covers what the first email has to do, five ready-to-copy examples (SaaS, online store, course, app and B2B), sender tips, and the code to send it right after sign-up.

## What a welcome email has to do

A good welcome email does four things, in this order:

1. **Arrive within seconds.** It is the most expected email of the relationship. If people have to dig through spam, trust starts low. That is why it goes out through the API at sign-up, not from a job that runs every hour.
2. **Confirm what the person got.** "Your account is ready", "here is your discount code", "your first lesson is unlocked". One sentence, no fluff.
3. **Show a single next step.** One button, one action. Five links competing with each other means none gets clicked.
4. **Invite a reply.** A sender with a human name and an invitation to reply turn the email into a conversation. Replies are also a strong signal to mailbox providers that your email is wanted.

What **not** to do: send the whole manual, ask people to follow you on five networks, push the paid plan in the first line, or use a `noreply@` address.

## Subject line, preheader and sender

Before opening, people see three things: the sender name, the subject line and the preheader (the gray snippet next to or under the subject in the inbox list).

- **Sender name:** "Ana from Example" reads like a conversation; "Example Platform Inc." reads like a bill. If the brand is better known than any person, use just the brand. Keep the same name on every email so people recognize it.
- **Address:** use one that accepts replies (`ana@example.com` or `hi@example.com`), on the same verified domain as your site. No `noreply@`.
- **Subject line:** short, concrete and true. Say what is inside. A subject that promises something the email does not deliver earns spam complaints.
- **Preheader:** complete the subject, do not repeat it. If you do not set one, the email app shows the start of the body, which is often "Can't see this email?" or your logo's alt text.

A side note for US senders: misleading subject lines can also be a legal problem. In Brown v. Old Navy (April 17, 2025), the Washington Supreme Court held that the state's commercial email law, which allows damages of up to US$ 500 per email, covers commercial emails with false or misleading subject lines ([Manatt's summary](https://www.manatt.com/insights/newsletters/client-alert/email-marketers-beware-don-t-underestimate-the-power-of-a-subject-line)). Fake urgency ("last chance!" on an offer that never ends) is the kind of line to avoid.

## 5 welcome email examples to copy

Replace what is in brackets. Each example has one main action; keep it that way.

### 1. SaaS (free trial or free plan)

- **From:** Ana from [Product]
- **Subject:** Your [Product] account is ready
- **Preheader:** The first step takes 2 minutes. Start here.

```text
Hi [name],

Your [Product] account is set up. Most people see the value of
[Product] after they [activation action: create their first
project / connect their store / import their spreadsheet].

It takes about 2 minutes:

[Button: Create my first project]

If you get stuck anywhere, just reply to this email. It comes
straight to me.

Ana
[Role], [Product]
```

Why it works: it names the action that leads to the first result (activation) and gives a realistic time estimate. The invitation to reply comes from a person, not a "support team".

### 2. Online store (account or newsletter)

- **From:** [Store]
- **Subject:** Your welcome code: [CODE]
- **Preheader:** Good until [date] on anything in the store.

```text
Hi [name],

Glad you're here. As promised, here's your code:

[CODE] - [10%] off until [date]

[Button: Shop new arrivals]

What to expect from us: [one email a week] with new arrivals and
offers. We won't flood your inbox.

Free returns within [X] days and free shipping over [amount].
Questions? Just reply.

[Store]
[Unsubscribe link]
```

Why it works: it delivers what the form promised right away (the code is in the subject), says how often the next emails will come, and answers the two questions that block a first purchase (returns and shipping). Since it carries an offer, send it as marketing, with an unsubscribe link.

### 3. Online course

- **From:** [Instructor name]
- **Subject:** Your first lesson is unlocked
- **Preheader:** It's [12] minutes. You can watch it today.

```text
Hi [name],

Your access to [Course] is live. Before anything else, start
with lesson 1. It shows [concrete outcome] in [12] minutes.

[Button: Watch lesson 1]

Your login details:
Address: [student area link]
Login: [email]

One question for you: what made you sign up? Reply in one line.
I read every answer and use them to improve the course.

[Instructor name]
```

Why it works: it pulls people out of "I'll get to it later" with a short lesson, keeps the login handy (the most searched-for email of any course is the login one) and asks an easy question.

### 4. Mobile app

- **From:** [App]
- **Subject:** You're in, [name]. One thing left in [App]
- **Preheader:** Turn on [feature] and see [benefit] today.

```text
Hi [name],

Your [App] account is active. To see [main benefit], there's just
one more thing: [turn on notifications / add your first account /
pick your interests].

[Button: Open the app]

On your computer? Open this email on your phone, or get the app:
[App Store link] [Google Play link]

The [App] team
```

Why it works: the button opens the app (use a universal link or deep link), and the email accepts that many people read on a computer, where the button does not help.

### 5. B2B (demo or company account)

- **From:** [Name], [Company]
- **Subject:** Next steps for [Customer company] on [Product]
- **Preheader:** What we prepared for your team and who to contact.

```text
Hello [name],

Thanks for setting up [Customer company] on [Product]. To help
your team get to a first result quickly, here are three things:

1. Setup guide (10-minute read): [link]
2. How to invite your team: [link]
3. A 20-minute call with me, if useful: [calendar link]

If someone technical will handle the integration, forward them
this email. The docs are at [link].

[Name]
[Role], [Company]
[Phone]
```

Why it works: in B2B, the person who signs up is rarely the one who implements. The email makes forwarding easy and offers a real person without forcing a meeting.

## How to send the welcome email right after sign-up

The right moment is in the same code that creates the user, after saving it to your database. With Couryo, it is one `POST /v1/emails` call (the [quickstart](https://couryo.com/en/docs/quickstart.md) shows how to create a key and verify your domain).

```js title="Node.js"
async function sendWelcome(user) {
  const preheader = "The first step takes 2 minutes. Start here.";
  const link = "https://app.example.com/projects/new";

  const res = await fetch("https://api.couryo.com/v1/emails", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.COURYO_API_KEY}`,
      "Content-Type": "application/json",
      // Same user, same key: a retry never sends the email twice
      "Idempotency-Key": `welcome-${user.id}`,
    },
    body: JSON.stringify({
      from: "Ana from Example <ana@example.com>",
      to: [user.email],
      subject: "Your Example account is ready",
      html: `<div style="display:none;max-height:0;overflow:hidden">${preheader}</div>
        <p>Hi ${user.name},</p>
        <p>Your account is set up. Creating your first project takes about 2 minutes:</p>
        <p><a href="${link}">Create my first project</a></p>
        <p>If you get stuck anywhere, just reply to this email.</p><p>Ana</p>`,
      text: `Hi ${user.name},\n\nYour account is set up. Create your first project: ${link}\n\nIf you get stuck, just reply.\n\nAna`,
      tags: { type: "welcome" },
    }),
  });

  if (res.status !== 202) {
    // Don't swallow the error: log it and retry (the same Idempotency-Key prevents duplicates)
    console.error("Welcome email was not queued", res.status, await res.json());
  }
}
```

Things that matter:

- **A `202` response with `status: "queued"`** means the email is in the queue. Any other response carries the reason in `error.message`.
- **`Idempotency-Key`** with the user id protects you from the classic double call on one sign-up (a double click, an automatic retry). Details in [idempotency](https://couryo.com/en/docs/sending.md#idempotency).
- **Escape the name** if you build HTML by hand, because it comes from a form. Better yet, save the email as a [template](https://couryo.com/en/docs/templates.md) and send only `template` + `variables`. Couryo escapes values and supports fallbacks: `Hi {{name|there}}!` reads "Hi there!" for people who left the name blank.
- **Stream:** a welcome that only confirms the account and shows the first step can go as transactional (the default). If it carries a discount or offer, like the store example, send `stream: "marketing"`: Couryo adds the one-click unsubscribe that Gmail and Yahoo ask for.
- **No code?** The [visual editor](https://couryo.com/en/docs/template-editor.md) has a ready welcome template in English and Portuguese, with your brand.

### What about the second email?

The welcome is the first step of a sequence. Instead of calling the API for every follow-up, send a `user.signed_up` [event](https://couryo.com/en/docs/contacts.md) and let a [sequence](https://couryo.com/en/docs/sequences.md) handle day 1, day 3 and day 7, with an automatic exit when the person activates. The step by step is in [SaaS onboarding email sequence](https://couryo.com/en/blog/saas-onboarding-email-sequence).

## How to measure your welcome email

Do not judge it by open rate. Since Apple Mail Privacy Protection, many opens are machines. That is why research on welcome email open rates gives very different numbers depending on the source, as [this Stripo roundup](https://research.stripo.email/welcome-email-open-rates) shows. Compare your email against itself, not against an industry number.

Measure:

1. **Delivery:** did it arrive? In each message's [timeline](https://couryo.com/en/docs/events.md), Couryo shows whether the receiving server accepted it, with its reply explained in plain language. If Outlook is the problem, see [emails not reaching Outlook and Hotmail](https://couryo.com/en/blog/emails-not-reaching-outlook-hotmail).
2. **Clicks on the main button:** the sign the email did its job.
3. **Activation:** how many people completed the button's action (created the project, watched the lesson) within 24 hours. This number comes from your system, and it is the one that matters most.
4. **Replies:** how many people answered. With a [receiving domain](https://couryo.com/en/docs/inbound.md), replies come into Couryo with AI triage.

Test one thing at a time: the subject line one week, the button the next. Changing everything at once teaches you nothing.

## FAQ

### When should I send the welcome email?

At sign-up, from the same code that creates the account. That is when the person is waiting for it. A job that sends every hour already loses part of that attention.

### Is a welcome email transactional or marketing?

It depends on the content. If it only confirms the account and shows how to start, it is transactional. If it carries a discount, offers or news, treat it as marketing, with one-click unsubscribe. Keeping the two apart protects delivery of password and billing emails.

### Can I use noreply@ as the sender?

You can, but you shouldn't. An address that does not take replies closes the conversation you want to open, and replies are a good sign that your email is wanted. Use a real address, like `hi@` or a person's name.

### How long should a welcome email be?

Long enough to confirm what the person got and show one next step. Usually 50 to 150 words and one button. Everything else goes in the following emails of the sequence.

### Why is my welcome email going to spam?

The usual causes are a domain without SPF, DKIM and DMARC, a new domain with no history, image-only content or shortened links. Start with the [SPF, DKIM and DMARC guide](https://couryo.com/en/guides/spf-dkim-dmarc.md) and see [emails going to spam](https://couryo.com/en/guides/emails-going-to-spam.md).
