<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jan T</title>
    <description>The latest articles on DEV Community by Jan T (@jan_t_fc63cd1865db88).</description>
    <link>https://dev.to/jan_t_fc63cd1865db88</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4116427%2F80c9f11a-f883-43ec-99d4-cb1f6d9053a9.png</url>
      <title>DEV Community: Jan T</title>
      <link>https://dev.to/jan_t_fc63cd1865db88</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jan_t_fc63cd1865db88"/>
    <language>en</language>
    <item>
      <title>We didn’t need another email API. We needed to know what our SaaS was actually sending.</title>
      <dc:creator>Jan T</dc:creator>
      <pubDate>Wed, 16 Sep 2026 12:41:39 +0000</pubDate>
      <link>https://dev.to/jan_t_fc63cd1865db88/we-didnt-need-another-email-api-we-needed-to-know-what-our-saas-was-actually-sending-2hcm</link>
      <guid>https://dev.to/jan_t_fc63cd1865db88/we-didnt-need-another-email-api-we-needed-to-know-what-our-saas-was-actually-sending-2hcm</guid>
      <description>&lt;p&gt;If you run a SaaS, sending transactional email is basically a solved problem.&lt;/p&gt;

&lt;p&gt;There is Mailgun. SendGrid. Postmark. Resend. Amazon SES. And plenty of others.&lt;/p&gt;

&lt;p&gt;Pick one, connect the API or SMTP, and your emails get delivered.&lt;/p&gt;

&lt;p&gt;That wasn't really the problem we wanted to solve.&lt;/p&gt;

&lt;p&gt;The problem appeared a few years later.&lt;/p&gt;

&lt;p&gt;We run several SaaS products ourselves, and at some point we realized that answering a very simple question was surprisingly difficult:&lt;/p&gt;

&lt;p&gt;What emails does this application actually send?&lt;/p&gt;

&lt;p&gt;Not how many emails we sent yesterday.&lt;/p&gt;

&lt;p&gt;Not which SMTP request failed.&lt;/p&gt;

&lt;p&gt;But the actual emails.&lt;/p&gt;

&lt;p&gt;Welcome email. Password reset. Trial reminder. Invoice. Failed payment. Weekly report. Someone invited you. Your export is ready. You haven't logged in for 30 days.&lt;/p&gt;

&lt;p&gt;And then the next questions:&lt;/p&gt;

&lt;p&gt;Who receives each of them?&lt;/p&gt;

&lt;p&gt;How often are they sent?&lt;/p&gt;

&lt;p&gt;Are people opening them?&lt;/p&gt;

&lt;p&gt;Are they clicking?&lt;/p&gt;

&lt;p&gt;Is the performance getting better or worse?&lt;/p&gt;

&lt;p&gt;Which emails basically nobody interacts with anymore?&lt;/p&gt;

&lt;p&gt;For most SaaS products, the answers are scattered all over the place.&lt;/p&gt;

&lt;p&gt;Transactional email grows quietly&lt;/p&gt;

&lt;p&gt;When a SaaS is new, this isn't a problem.&lt;/p&gt;

&lt;p&gt;You might have five emails and every developer knows exactly where they are.&lt;/p&gt;

&lt;p&gt;A few years later you have 30. Or 80.&lt;/p&gt;

&lt;p&gt;Some templates are in your application code. Some are in your email provider. Some were created for an old feature that might not even exist anymore.&lt;/p&gt;

&lt;p&gt;Different developers added different tags and metadata over the years.&lt;/p&gt;

&lt;p&gt;If you want to understand the performance of one message, you can usually do it.&lt;/p&gt;

&lt;p&gt;Open your provider. Filter events. Search for a tag. Pick a date range. Look at deliveries, opens and clicks.&lt;/p&gt;

&lt;p&gt;The data is there.&lt;/p&gt;

&lt;p&gt;What we were missing was the overview.&lt;/p&gt;

&lt;p&gt;We wanted to open one screen and see something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Welcome email          12,430 sent    71% opened
Password reset          4,210 sent    82% opened
Trial ending             980 sent    54% opened
Weekly report          28,110 sent    41% opened
Invite teammate         2,840 sent    63% opened
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And more importantly, we wanted to see how those numbers change over time.&lt;/p&gt;

&lt;p&gt;Not because we wanted another analytics product.&lt;/p&gt;

&lt;p&gt;We just wanted to understand the communication coming out of our own applications.&lt;/p&gt;

&lt;p&gt;The weird part is that email providers know everything already&lt;/p&gt;

&lt;p&gt;Your transactional email provider sees every email.&lt;/p&gt;

&lt;p&gt;It knows the recipient, delivery status, opens, clicks, bounces and timestamps.&lt;/p&gt;

&lt;p&gt;But most transactional email services are understandably built around sending email.&lt;/p&gt;

&lt;p&gt;Their basic unit is usually an event or a message.&lt;/p&gt;

&lt;p&gt;We wanted the basic unit to be something different:&lt;/p&gt;

&lt;p&gt;the email your product sends.&lt;/p&gt;

&lt;p&gt;"Password reset" is one email.&lt;/p&gt;

&lt;p&gt;"Weekly report" is another.&lt;/p&gt;

&lt;p&gt;"Your trial ends tomorrow" is another.&lt;/p&gt;

&lt;p&gt;For every one of those, we wanted its template, sending history and performance in one place.&lt;/p&gt;

&lt;p&gt;Without creating dashboards.&lt;/p&gt;

&lt;p&gt;Without agreeing on a complicated tagging convention first.&lt;/p&gt;

&lt;p&gt;Without repeatedly drilling through millions of individual message events.&lt;/p&gt;

&lt;p&gt;So we built Lettr&lt;/p&gt;

&lt;p&gt;That's the main idea behind Lettr.&lt;/p&gt;

&lt;p&gt;It isn't really about inventing another way to send an HTTP request that results in an email.&lt;/p&gt;

&lt;p&gt;You can already do that very well with dozens of services.&lt;/p&gt;

&lt;p&gt;The part we cared about was everything around it.&lt;/p&gt;

&lt;p&gt;Your application sends a named email through Lettr, and Lettr starts building an inventory of the communication coming from your product.&lt;/p&gt;

&lt;p&gt;You can see all the emails your application sends, how many times they're being sent, who they are being sent to and how they perform.&lt;/p&gt;

&lt;p&gt;Then you can open one of them and go deeper when you actually need to.&lt;/p&gt;

&lt;p&gt;And because the email itself lives in Lettr, you can manage the template there too.&lt;/p&gt;

&lt;p&gt;For us, that last part turned out to be pretty important.&lt;/p&gt;

&lt;p&gt;A marketing or product person can change some copy without asking a developer to find a Blade template, change it, make a pull request and deploy the application.&lt;/p&gt;

&lt;p&gt;But developers still control when the email is triggered and what data is passed into it.&lt;/p&gt;

&lt;p&gt;That separation feels much nicer to us.&lt;/p&gt;

&lt;p&gt;We built this because we wanted it ourselves&lt;/p&gt;

&lt;p&gt;We've been working in email for more than 10 years.&lt;/p&gt;

&lt;p&gt;Most of our background is around email infrastructure, deliverability and email security, so we've spent a slightly unreasonable amount of our lives looking at emails, SMTP, authentication, bounces and delivery problems.&lt;/p&gt;

&lt;p&gt;But Lettr actually came from a much more boring problem inside our own SaaS companies.&lt;/p&gt;

&lt;p&gt;We just wanted a screen showing us:&lt;/p&gt;

&lt;p&gt;This is what our product says to our users.&lt;/p&gt;

&lt;p&gt;And:&lt;/p&gt;

&lt;p&gt;This is how those messages are doing.&lt;/p&gt;

&lt;p&gt;It sounds almost too simple.&lt;/p&gt;

&lt;p&gt;But we couldn't find a tool that gave us that view in the way we wanted.&lt;/p&gt;

&lt;p&gt;There are excellent transactional email APIs.&lt;/p&gt;

&lt;p&gt;There are excellent marketing automation tools.&lt;/p&gt;

&lt;p&gt;There are very detailed email analytics tools.&lt;/p&gt;

&lt;p&gt;What we were missing was something in between: a simple inventory of the emails a SaaS sends, connected directly to their templates and performance.&lt;/p&gt;

&lt;p&gt;So that's what we're trying to build with &lt;a href="https://lettr.com" rel="noopener noreferrer"&gt;Lettr.com&lt;/a&gt; (and we have acquired this nice domain!)&lt;/p&gt;

&lt;p&gt;We're still early with it, and I'm especially interested in how other developers handle this today.&lt;/p&gt;

&lt;p&gt;Do you actually have a list somewhere of every email your application sends?&lt;/p&gt;

&lt;p&gt;Or, like us, would you have to search through the codebase to figure it out?&lt;/p&gt;

</description>
      <category>api</category>
      <category>saas</category>
      <category>monitoring</category>
      <category>softwaredevelopment</category>
    </item>
  </channel>
</rss>
