When to Send Transactional Emails: A SaaS Timing Guide
When to send transactional emails in your SaaS: which go out instantly, which are timed, what to skip, and how to tell Claude Code when each should go.
Quick answer
When to send transactional emails depends on the type. Most should go out instantly, the moment someone signs up, resets a password or pays. A few are timed: a day 3 check-in, a trial ending reminder and a renewal reminder. Tell Claude Code when each should go, and your live project sends it then.
Last checked: October 2026
On this page
Your SaaS has its emails planned. Now each one needs a moment to go out. A welcome email that turns up an hour late feels broken. A trial reminder sent on the day the trial ends feels like a trap. Most timing problems come down to one question: is this email instant or timed?
This guide covers when to send transactional emails in a typical SaaS: which go out instantly, which wait for a set time, and which should check before they send. Transactional emails are the one-to-one messages your product sends about someone's own account, such as sign-up confirmations, password resets, receipts and reminders. You'll also get the exact messages to send Claude Code, and a way to check the timing works.
Which transactional emails should go out instantly?
Any email the person is waiting for should go out within seconds of them acting. That covers sign-up and verification emails, password resets, receipts and team invites.
A quick test: did the person do something, and are they now looking at their inbox? If so, it's instant. Someone who asked for a password reset may sit refreshing their inbox until it lands. A delay there doesn't only annoy them; it stops them using your product.
Some instant emails exist for safety. OWASP, a widely used source of web security guidance, recommends emailing people once their password has been changed, so they'd notice if it wasn't them. It also says reset links should work only once and expire after a set period. A reset email that arrives late may already be useless.
Other instant emails start outside your SaaS. If you take payments with Stripe, Stripe sends your project a webhook when a payment succeeds or fails: an automatic message one service sends another when something happens. Your receipt or payment failed email goes out the moment that message arrives. The guide to sending your own emails after a Stripe payment covers this in more detail.
Which emails should be timed?
Timed emails go out at a set point after something happened, or before something is due. In a typical SaaS, that means a day 3 check-in, a trial ending reminder, a renewal reminder and regular summaries.
There are two ways to count:
- Forward from a start, such as "3 days after sign-up".
- Back from a deadline, such as "3 days before the trial ends".
For deadlines, Stripe can do the counting. By default, Stripe tells your project 3 days before a trial ends, and you can change the number of days in Stripe's settings. For renewals, Stripe sends a similar notice a few days ahead, based on its Upcoming renewal events setting. Stripe can also send its own trial reminder emails 7 days before a trial ends. If you switch those on, pick one reminder so people don't get two. The trial ending email guide covers what to say.
Every timed email should check before it sends. A "finish setting up" email shouldn't reach someone who finished on day 1, and a trial reminder shouldn't reach someone who has already upgraded.
What does a timing plan for a typical SaaS look like?
Here's a starting point. Adjust it to the emails your SaaS sends; the 12 transactional emails every SaaS needs covers what goes in each one.
| When it goes out | Type | Skip or stop if | |
|---|---|---|---|
| Welcome | Right after sign-up | Instant | — |
| Email verification | Right after sign-up | Instant | The link has expired (send a fresh one) |
| Password reset | Seconds after the request | Instant | The link has been used or has expired |
| Password changed | Right after the change | Instant | — |
| Team invite | Right after someone is invited | Instant | The invite was canceled |
| Receipt | When Stripe confirms the payment | Instant | — |
| Payment failed | When Stripe reports the failure | Instant | — |
| Day 3 check-in | 3 days after sign-up | Timed | They've already finished setup |
| Trial ending | 3 days before the trial ends | Timed | They've already upgraded |
| Renewal reminder | A few days before renewal | Timed | They've canceled |
| Weekly summary | Same day and time each week | Timed | There's nothing to report |
Stripe defaults checked October 2026. For a longer welcome sequence, see onboarding emails for your SaaS.
How do you tell Claude Code when each email should go?
Describe the timing the way you'd brief a colleague: what sets the email off, how long to wait, and when to skip it. Claude Code builds that timing into your project.
For an instant email:
The password reset email needs to arrive within seconds of someone asking for it. Make the link work once and expire after an hour, and send a short "your password was changed" email once they've reset it.
For a timed email:
Three days after someone signs up, send them a short check-in email, but only if they haven't created their first project yet. Send it in the morning, their time, if we know their time zone.
Or hand over the whole plan at once:
Here's when I'd like each of our emails to go out: [paste your timing table]. Check it against how our SaaS works, flag anything that doesn't fit, and wait for my OK before building.
Timed emails run on a scheduled job: a small task your hosting runs at set times, also called a cron job. Each run finds who's due an email and sends it. On Vercel's free Hobby plan, scheduled jobs can run once a day and may start any time within the hour you choose; the Pro plan runs them to the minute. Vercel uses UTC, a standard world time, so ask Claude Code to convert from your local time. A daily job suits "3 days after" emails. Instant emails never wait for a schedule. How to automate emails with Claude Code explains scheduled jobs in more detail.
Once your project is live, real emails go out from the project itself through your email service, not from the chat. For the full journey from planning to live emails, see transactional emails in Claude Code.
How do you check the timing works?
Test instant emails by doing the action yourself. Test timed emails by shortening the wait for a while.
- Time the instant emails. Sign up with your own address, ask for a password reset and invite a teammate. Each email should arrive within seconds.
- Shorten the timed ones. Waiting three days to see a check-in isn't practical:
In a test version of the project, make the day 3 check-in and the trial ending email send after 2 minutes instead of days, so I can see them arrive. Then put the real timings back and tell me when that's done.
- Test the skip rules. Create a test user who has already finished setup or upgraded, and confirm they don't get the email meant for everyone else.
- Check after launch. With SimpleSends connected, Claude Code can read your send logs and delivery status, so you can ask in plain English:
Did yesterday's day 3 check-in emails go out? Tell me how many sent and whether any failed or bounced.
If a whole batch is missing, the scheduled job may not have run at all. The guide to checking whether your emails actually sent walks through that.
How do you adjust timing later?
Send Claude Code a message. Timing lives in your project, so changing it is a brief, not a dashboard task.
Common changes include moving a check-in from day 3 to day 2, sending annual plan renewal reminders earlier, or switching a weekly summary from Monday to Friday. One thing to watch: if you change Stripe's number of days, tell Claude Code too, so wording like "ends in 3 days" still matches.
Our trial reminder feels too late. Move it to 7 days before the trial ends, update the wording so the number of days matches, and tell me what else changes.
To change wording or design rather than timing, see how to update your SaaS emails by asking Claude Code.
Frequently asked questions
Should transactional emails wait for business hours?
Instant emails shouldn’t. Someone resetting a password at 2am still needs the link straight away. Timed emails are different: nobody is waiting for them, so you can send them at a sensible local hour, such as 9am. Tell Claude Code which emails can wait and which can’t.
Does “3 days after sign-up” mean exactly 72 hours?
Not always. If your scheduled job runs once a day, the email goes out on the third day at the job’s time, so the gap can be a little more or less than 72 hours. That’s usually fine. If you need an exact gap, tell Claude Code, and check your hosting plan supports more frequent jobs.
Should the welcome email wait until someone verifies their email address?
It’s a common choice. Sending the verification email first, then the welcome email once they click the link, means the welcome only reaches confirmed addresses and doesn’t compete with the verification link. Another option is one combined email. Tell Claude Code which you prefer.
How long should a password reset link stay valid?
There’s no single standard. OWASP’s guidance says reset links should work only once and expire after an appropriate period. A short window, such as an hour, is a sensible choice for most SaaS products. Say how long the link lasts in the email itself, so people know to use it soon.
Do timed emails still send when Claude Code is closed?
Yes. Claude Code builds the timing into your project. Once your project is live, it sends instant and timed emails on its own through your email service. Claude Code doesn’t need to be open, and your computer doesn’t need to be on.
Sources (5)
- Configure trial offers on subscriptions (Stripe Docs)(checked October 5, 2026)
- Using webhooks with subscriptions (Stripe Docs)(checked October 5, 2026)
- Forgot Password Cheat Sheet (OWASP)(checked October 5, 2026)
- Cron Jobs (Vercel Docs)(checked October 5, 2026)
- Usage & Pricing for Cron Jobs (Vercel Docs)(checked October 5, 2026)
Keep reading
More on Claude Code + email →How to Write Transactional Emails With AI in Claude Code
Learn how to write transactional emails with AI by briefing Claude Code like a copywriter, with a sample brief, a sample draft and tips for consistent wording.
6 min read
Edit Transactional Email by Asking Claude Code
Edit transactional email wording, design or timing by asking Claude Code in plain English. What to say, how to test a change and how to roll it back.
5 min read
AI Email Template Generator: Design Emails With Claude Code
Use Claude Code as your AI email template generator. Brief it on your brand, review the drafts, and get SaaS emails that work on mobile and in dark mode.
7 min read