CheckoutAlarmWatch my app free

Supabase confirmation or magic-link email not arriving (Lovable, Bolt)

Your app was built with Lovable, Bolt or by hand on Supabase Auth. You sign up with your own email and the link arrives. A real customer signs up and gets nothing. The usual cause is Supabase's built-in email server, which is for testing only. Supabase: send emails with custom SMTP

What it would catch here

Nothing on this page. CheckoutAlarm never sees your email.

What it won't catch

It loads one page you pick and reads Stripe with a read-only key. It doesn't sign up, log in or read inboxes, so it never sees a missing sign-up email or a rate-limit error.

Plans

Free: 1 site, checked once a day. Pro: $19 a month, up to 3 sites checked hourly. You prove you own the site first. For Stripe we only take a restricted key with read access to Events, Webhook Endpoints and Charges. Full secret keys are refused. Compare plans

It only sends to your team

Until you set up your own SMTP server, Supabase Auth only sends to addresses on your Supabase organization's team. Everyone else fails with Email address not authorized. That's why it works for you and not for customers. Supabase: pre-authorized addresses

It has a very low hourly limit

Supabase says the built-in server is limited to 2 messages per hour right now, that the limit can change without notice, and that there is no delivery guarantee. A few test sign-ups can use it up. Supabase: rate limits on the default server

Pick an email service and verify your domain

Supabase works with any service that speaks SMTP. Its list includes Resend, AWS SES, Postmark, SendGrid, ZeptoMail and Brevo. With Resend you need an API key and a verified domain first. Resend: send with Supabase SMTP

Enter the SMTP settings in Supabase

In your Supabase project, open Authentication, then the email SMTP settings. Add a sender email and name. For Resend, the host is smtp.resend.com, the port is 465, the username is resend, and the password is your Resend API key. Keep that key out of your code and chat logs. Resend: SMTP credentials

Raise the new limit if you need to

After you switch, Supabase starts you at 30 messages per hour to protect your new sender. You can change it on the Rate Limits page. Supabase: custom SMTP rate limit

What the error means

The error code over_email_send_rate_limit means too many emails were sent to this email address. Supabase says to ask the user to wait before trying again. Supabase answers with HTTP 429 when a rate limit is hit. Customers may see it as "email rate limit exceeded". Supabase: Auth error codes

Check which limit you hit

The built-in server allows 2 emails an hour across the project. Sign-up, magic-link and password-reset requests also have a 60-second wait per user before another one can be sent. Supabase: Auth rate limits

Raise the limit

You can only change the email limit after you set up custom SMTP (part 03) or a Send Email hook. Then open Authentication, then Rate Limits, in the dashboard. Supabase: Auth rate limits

Seeing over_request_rate_limit instead?

That one counts requests from one IP address, not emails. Supabase notes a common cause in apps: a useEffect or similar code that calls sign-in again and again. Ask your AI builder to make sure the sign-in call only runs when the user clicks. Supabase: Auth error codes

Set the Site URL

The Site URL in URL Configuration is the default link target in confirmation and reset emails. If it still says http://localhost:3000, customers land on a page that doesn't exist. Set it to your live address. Supabase: redirect URLs

Add your redirect URLs to the allow list

If your code passes redirectTo, that URL must match an entry in the Redirect URLs list. Wildcards help for preview URLs, but Supabase suggests an exact path for production. Supabase: wildcards in redirect URLs Full steps: magic link redirects to localhost.

Use RedirectTo in the email template

When you use redirectTo, you may need to change {{ .SiteURL }} to {{ .RedirectTo }} in your email templates. Supabase: email templates with redirectTo

Set up SPF, DKIM and DMARC

Your email service shows the DNS records for your sending domain. Supabase says these records make a big difference to delivery. Supabase: best practices

Keep sign-in emails plain

Supabase suggests short subjects, few links and images, no sales copy, and a separate sending domain for marketing email. Supabase: keep auth emails focused Full steps: emails sent with Resend going to spam.

CheckoutAlarm won't catch this. In phase 1 it loads your page and reads Stripe with a read-only key. It doesn't sign up or pay, so it never sees your sign-up email.

CheckoutAlarm is new. It only checks sites you prove you own. How to verify

Watch my app free

Docs checked on Oct 20, 2026.