← All case studies SendGrid → Resend

Spotflow left SendGrid for Resend after verification mail sat in Gmail

Michael Mikuš measured SendGrid, Postmark, and Resend with GlockApps, then moved Spotflow's Auth0 verification mail to Resend. A template rewrite removed a four-minute Gmail delay that the provider swap did not.

Michael Mikuš wrote two posts about Spotflow’s verification email. Part 1 is 10 July 2024. Part 2 is 13 August 2024. Spotflow is a self-serve IoT platform. The trial starts with a verification mail, sent through Auth0. When that mail sits for minutes, the signup dies.

They were on SendGrid, on a dedicated IP, with DKIM, SPF, DMARC, and reverse DNS in place. Gmail deliveries were taking about four minutes. They picked GlockApps, bought a pack of 10 spam tests, and sent the real verification template to the seed list with a C# script.

What SendGrid scored

On that first seed list, SendGrid put 50.8% of mail in the inbox or another tab (59 inbox, 1 tab, 57 spam, 1 missing). About 20 messages, to Yahoo and AOL, took about an hour. Average delivery was 689.65 seconds, about 11 and a half minutes. The median was 3 seconds. The max was 6,897 seconds.

They had already disliked the product. Subusers split streams in a way that felt clumsy for “production versus test”. Two-factor was SMS or Authy, and a single admin tied to one phone number. Custom SSO was SAML for Okta and Azure AD, not a Google or GitHub login. The delay is what made them test an exit. They had been on SendGrid for about six months.

Who they ruled out

Mailgun lost on the portal. They hit incomplete errors, a login outage, and a DNS setup they called the worst of the group. They also say Mailgun’s SDK, as they read it in July 2024, lacked official C#, Python, and Node support. They never ran a spam test.

Mailchimp looked like a marketing product with transactional mail as an add-on. The add-on started at $20 a month for 25,000 emails, unused quota did not roll over, and they found no C# SDK.

Amazon SES was cheap. They put a dedicated IP near $30. Tracking, complaint handling, and support were extra work, so they stopped.

Postmark stayed in the running. New accounts can mail only their own domains until a person approves them. Support raised the trial from 100 emails to 500 so the spam test could run. The first paid tier they cite is $15 for 1,000 emails, with a dedicated IP at $50. Retention of content and events is 45 days. There is an official C# SDK. On the shared-IP trial, inbox-or-tabs was 66.1%. Average delivery was 22.09 seconds. Four messages took just over 10 minutes. Max was 607 seconds.

Resend is the one they shipped. They note it launched as open source in 2022, joined Y Combinator’s winter 2023 batch, and sits on SES. The price they cite is $20 a month for 50,000 emails, plus $30 if you add a dedicated IP. There is no template builder. Retention is 3 days. The C# SDK is a community one Resend recommends, and it worked for them. Support was slower than Postmark when they asked for a higher test limit.

On the same style of trial test, Resend’s inbox-or-tabs was 77.1% (90 inbox, 1 tab, 24 spam, 3 missing). Every seed message arrived within a minute. Average was 1.83 seconds. Max was 11 seconds. The four-minute Gmail delay did not show up on that run.

Barracuda scores, where higher is worse, were SendGrid 8.00, Postmark 1.12, Resend 0.20. SpamAssassin, where lower is better, liked Postmark best at -3.5. SendGrid and Resend were both -0.5. Google’s filter said “not spam” for all three and did not give them a number.

They picked Resend because that spam test won, even though Postmark was ahead on SDK, retention, and support. Prices above are what the July 2024 post states. Check current plans before you budget from them.

Shared IPs, then the template

Part 2 is the Resend setup. They needed two domains in Europe, production and test, so the free plan was out. Free is one domain in one region and no dedicated IP. Pro at $20 a month covers 50,000 emails, unlimited domains, and more than one region.

They stayed on shared IPs. The SendGrid dedicated IP had scored worse than other vendors’ shared pools. A new dedicated IP has no reputation. They argue dedicated IPs pay off around hundreds of thousands of emails a month, when you can keep a reputation warm at Gmail, Yahoo, and the rest. Mailbox providers also weigh the domain. For their volume, a vendor that watches the shared pool looked safer.

A second Resend spam test moved inbox-or-tabs from 77.1% to 78%. One Gmail seed took four minutes again (max 244 seconds). Average rose from 1.83 seconds to 4.17. The median stayed at 1 second.

Headers, read in Google’s Admin Toolbox, showed the slow message hopping through extra Google servers. The last hop held it for about four minutes. Fast messages crossed three servers. They point at Gmail’s phishing check, which can hold a suspicious message for up to four minutes.

The Auth0 template still used the default subject, “Verify your email”, and a checkmark loaded over plain HTTP from cdn.auth0.com. Manual edits to subject and image were inconsistent. They rewrote the template. About 570 lines became about 130. The subject changed. Non-HTTPS links came out.

On that template, Resend’s max delivery was 7 seconds and the average about 1.61 seconds. Nothing took longer than a minute. Missing seeds fell from 3 to 1. Spam went from 23 to 25, so the inbox rate did not magically jump. The win was the clock. Manual checks on the Gmail accounts that used to stall also went through. As of the August post, they had watched a month without the delay coming back.

They then ran SendGrid and Resend against a new GlockApps seed list, so you cannot line those percentages up with the July test. With the new template, SendGrid inbox-or-tabs was 86.0%. Resend was 94.4%. SendGrid delivered 7 messages after five minutes, with a max of 1,083 seconds. Resend’s max was 8 seconds, average 1.61, median 1. They did not retest Postmark. Earlier tests had already dropped it.

What I would copy

Test the template you send in production, on a seed list, before you blame the vendor. Spotflow’s four-minute Gmail hold survived the move to Resend and died when the Auth0 HTML changed.

Write down inbox rate and delivery time as separate columns. Resend won both. A template change can fix time and leave spam about the same, which is what their 23-to-25 spam count shows.

If you send a few thousand transactional messages a month, read their shared-IP decision before you buy a dedicated address. Their dedicated SendGrid IP did not save the July test.

The SendGrid → Resend playbook is the DNS and suppression cutover. Spotflow’s posts never export a suppression list. Do that step from the playbook. Their story stops at “which vendor, which IP pool, which HTML”.