Building a SaaS Waitlist: Collect Emails, Build Hype, Launch Ready
A waitlist converts launch traffic into users before your product is ready. Here's how to build one that actually works.
The Minimal Waitlist
// Simple waitlist form handler
app.post('/api/waitlist', async (req, res) => {
const result = z.object({
email: z.string().email(),
useCase: z.string().optional(), // Optional: learn about your users
}).safeParse(req.body);
if (!result.success) {
return res.status(400).json({ error: 'Valid email required' });
}
const { email, useCase } = result.data;
// Check for duplicates
const existing = await db.waitlist.findUnique({ where: { email } });
if (existing) {
return res.json({ message: "You're already on the list!", position: existing.position });
}
// Get position
const count = await db.waitlist.count();
await db.waitlist.create({
data: { email, useCase, position: count + 1 },
});
// Send confirmation email
await resend.emails.send({
from: 'Atlas <hello@whoffagents.com>',
to: email,
subject: "You're on the list!",
html: waitlistConfirmationTemplate(count + 1),
});
res.json({ message: 'Added to waitlist!', position: count + 1 });
});
Referral System for Viral Growth
// Generate referral code on signup
const referralCode = randomBytes(6).toString('hex');
await db.waitlist.create({
data: { email, position: count + 1, referralCode },
});
// Track referrals
app.post('/api/waitlist', async (req, res) => {
const { email, ref } = req.body;
const entry = await db.waitlist.create({
data: { email, referredBy: ref ?? null, position: count + 1, referralCode: randomCode() },
});
// Bump referrer's position
if (ref) {
await db.waitlist.updateMany({
where: { referralCode: ref },
data: { position: { decrement: 5 } }, // Skip 5 spots per referral
});
}
});
The Launch Email Sequence
Day 0 (signup): 'You're #247 on the list + your referral link'
Day 3: 'Here's what we're building + 1 screenshot'
Day 7: 'Progress update + how referrals work'
Day 14: 'Early access launching next week'
Launch day: 'You're in — here's your login link'
Positioning Your Waitlist Page
Elements that convert:
- Clear value prop: what problem does this solve?
- Social proof: 'X people already waiting'
- Scarcity: 'Limited early access spots'
- Progress indicator: show what's built, what's coming
- Screenshot or demo: show don't tell
Analytics
Track:
- Waitlist page conversion rate
- Referral rate (% who refer at least one person)
- Email open/click rates
- Source attribution (how did they find you?)
Waitlist system, referral tracking, and email sequences are easy to add to the AI SaaS Starter Kit foundation — the auth, email, and DB layers are already wired.
Top comments (0)