Most SaaS founders focus on getting signups. The real problem is what happens after.
You set up a 14-day trial, 100 people sign up, and two weeks later, 3 of them pay. The other 97 just leave. This is not a traffic problem. It is a conversion problem -- and the fix is not better marketing. It is what you do between day 0 and day 14.
This post gives you a concrete playbook for trial-to-paid conversion using the tools already in a Next.js SaaS boilerplate: Stripe trial periods, Resend email sequences, usage counters, and upgrade prompts.
Trial users do not convert because they never experience the value your product delivers.
This has a specific implication: your job during the trial is not to let users explore. It is to make sure they reach the moment where the product clicks -- what product people call the "aha moment." For a project management tool, that moment might be the first time a teammate leaves a comment. For an invoice tool, it might be when the first payment clears. For an analytics dashboard, it might be seeing the first chart with real data.
Identify your aha moment. Build everything in your trial around getting users there.
The first 48 hours decide more than the rest of the trial combined. If a user does not complete a key action in the first two days, they almost certainly will not convert.
Your Day 1 email should do one thing: get the user to complete the single action that unlocks value fastest. Not five things. One.
If you track which steps users complete in your onboarding checklist, you can query for users who signed up 24 hours ago but have not hit that action -- and send a targeted nudge. Not "did you forget about us?" A specific one: "You signed up yesterday but have not created a project, added a teammate, or uploaded your first file. Here is how to do it in 2 minutes."
Users who activated need proof that the product is worth paying for. This is where your automated email sequence earns its keep.
The Day 7 email is the most important one. By day 7, the user has either experienced value or they have not. A generic "check out our features" email does nothing. An email that shows them their own usage data -- "you have processed 12 invoices this week" or "your team has completed 8 tasks" -- makes the value concrete. You pull this from Drizzle ORM, send it via Resend, and it outperforms every promotional email in your sequence.
Most founders send a "your trial is ending" email on Day 13 and hope for the best. The conversion-oriented version is a three-email sequence:
Email gets users back to your app. What they see when they arrive converts them.
An upgrade prompt shown at the right moment -- when a user tries to do something just past their plan limit -- converts far better than a static pricing page. The free tier upgrade prompts pattern covers the specific Next.js implementation for showing usage progress and surfacing CTAs at friction points.
The language matters. "You have hit your limit" converts poorly. "You have created 9 of 10 projects -- upgrade to Pro for unlimited" converts much better. You are showing momentum, not a wall.
If you are building on this boilerplate, the plumbing for this playbook is already in place:
trial_end webhooks that fire when trials expireThe gap is rarely infrastructure. It is the sequence and the timing.
Before you lose non-converts, learn from them. A 1-2 question exit survey -- shown when a trial ends without upgrade -- tells you whether the issue is price, missing features, timing, or fit. Three "too expensive" responses mean a pricing problem. Three "I need X" responses are a roadmap signal. You can build this in a single Drizzle table and a modal that fires when the trial end date is today and the user is still on the free plan.
Start with the infrastructure already handled -- get the Next.js SaaS boilerplate and spend your time on the playbook, not the plumbing.