Fixing AI-built apps

Your users aren't getting Supabase sign-up emails. It worked when you tested it. Here's why.

You sign up with your own email: the confirmation arrives. A real user signs up: nothing. No confirmation, no password reset, no magic link. Lovable, Bolt and many other AI builders use Supabase for logins, so this is one of the most common problems right after launch, and it usually has nothing to do with your code.

The cause: Supabase's built-in sender is only for testing

Every Supabase project comes with a built-in email sender, so logins work from the first minute. It has two limits that are easy to miss:

Supabase calls it best-effort, with no promise of delivery, and recommends your own email sender for anything beyond trying things out.

How to confirm it. In Supabase, open Logs → Auth. Look for "Email address not authorized" (the team-only limit) or an error about the email rate limit being exceeded.

The fix: send through your own email service

Supabase calls this custom SMTP. It takes about 15 minutes, and most services are free for the number of emails a new app sends.

  1. Pick an email service. Resend, Brevo, Postmark, Amazon SES and SendGrid all work with Supabase. Create an account and find its SMTP details: host, port, username and password.
  2. Verify your domain with it. The service gives you a few DNS records (SPF, DKIM and usually DMARC) to add where your domain is managed. They prove the emails really come from you, which keeps them out of spam.
  3. Add it in Supabase. In Authentication, open the SMTP settings, turn on custom SMTP and fill in the host, port, username and password, a sender address like no-reply@yourdomain.com, and a sender name people will recognise.
  4. Raise the limit if you need to. With your own sender, Supabase starts at 30 emails an hour. If you expect more sign-ups than that, change it under Authentication → Rate Limits.
  5. Test from outside the team. Sign up with an address that isn't on the project, like a friend's or a fresh Gmail, and try a password reset too.

Still not arriving?

Once your own sender is set up, these are the usual suspects, roughly in order:

Keep it from coming back

Use a separate sender for login emails and for newsletters, so a marketing campaign can't hurt the delivery of password resets. And if bots start signing up with fake addresses, turn on CAPTCHA for sign-ups in Supabase: bounced emails are what get senders blocked.

Want it done for you?

Setting up the sender, the domain records and testing it all usually fits in one fix, from $170, and you pay only once emails arrive. See how it works.

Also

Other things I build