Skip to content

Guide

How to send a welcome email to new Clerk users

Send a welcome email when someone signs up with Clerk. Use a webhook yourself, or connect Clerk to Kicklace with one key and let it write and send the email.

The short answer

Clerk handles sign-in. The welcome email is yours to send. You can listen for Clerk's user.created webhook and send it from your own endpoint, or connect Clerk to Kicklace with one key. Kicklace then sees every new sign-up and sends the welcome it wrote, in your voice.

The plain way

  1. In the Clerk Dashboard, add a webhook endpoint that listens for user.created.
  2. Verify each request is really from Clerk. Clerk delivers through Svix and recommends its verifyWebhook helper for the check.
  3. Return a 2xx quickly. Clerk keeps retrying an event until your endpoint answers with one or the retries run out.
  4. Write the email and send it through your provider.

Clerk's docs say webhooks are asynchronous, not guaranteed to arrive immediately or at all, and may arrive out of order or more than once. For a welcome email that is fine, as long as you never block sign-up on it and you keep the user ids you have already welcomed, so nobody gets two.

With Kicklace

Clerk is a built-in connection. There is no code to write and nothing to set up in Clerk.

  1. In Kicklace, go to Connections → Clerk → Connect. Paste your Clerk secret key, the sk_live_ or sk_test_ one on Clerk's API keys page. Kicklace checks once that it works, keeps it locked away, and never shows it back.
  2. Kicklace reads your users every hour. Whoever signed up since the last read becomes a person at Signed up on your Lifecycle map, dated the day Clerk says.
  3. Open the Signed up stage. Kicklace writes your first emails when you make the map, so open the one there, read it, and change what you like. An email with no words yet has Write it for me.
  4. Switch the sequence on. First Kicklace shows who would have got it over the last 30 days. Send yourself a test before you do.
  5. Sign up to your own app once. That is the quickest test.

A sign-up arrives within the hour rather than the second, and the email goes within about a minute after that. If a welcome needs to be faster, skip the connection and post the sign-up from your own server, as in the Next.js guide.

Kicklace only reads from Clerk and changes nothing there. It also reads your existing users once as history. That sends nothing and puts nobody on a list, and nothing goes out for something that happened before you switched it on. Your current users do not get a welcome.

One optional step closes a gap. A hosted sign-in leaves no form for Kicklace's tag to hear, so pass the Clerk session to <KicklaceTag user={...} /> and the visitor who read your pricing page last week becomes the same person as the one who just signed up. Sign-ups from Clerk and Kinde has it, and npx kicklace init writes it for you where it can check the call.

Try the whole flow on your own site in the demo, with no sign-up.

What the email should say

Name the product, give one thing to do first, and make it easy to write back.

Subject: Welcome to [your app]

Hi {{first_name}},

Thanks for signing up. The quickest way in is to [the first thing to do].

If you get stuck, reply to this email.

[Your name]

If Clerk gives Kicklace no name, the greeting reads "Hi there". Replies go to your own email address. More in a SaaS welcome email template.

FAQ

Do I have to add a webhook in Clerk?

No. Kicklace reads your users with the secret key, so there is no webhook for you to set up in Clerk.

Will my existing users get a welcome email?

No. Only people who sign up after you switch the sequence on.

What does it cost?

Kicklace is free up to 1,000 contacts, sending from its own address with your name on it. Your own domain is part of Starter, $25 a month. See pricing. Using something other than Clerk? See Supabase.

Free up to 1,000 contacts.