{"id":250101,"date":"2026-05-27T11:40:32","date_gmt":"2026-05-27T09:40:32","guid":{"rendered":"https:\/\/spotler.com\/blog\/eu-residency-for-lovable-emails"},"modified":"2026-06-03T18:13:39","modified_gmt":"2026-06-03T16:13:39","slug":"eu-residency-for-lovable-emails","status":"publish","type":"blog","link":"https:\/\/spotler.com\/en-gb\/blog\/eu-residency-for-lovable-emails","title":{"rendered":"The overlooked opportunity with Lovable: how easy it is to choose GDPR-proof email sending."},"content":{"rendered":"<p><strong>You picked an EU region for your Lovable\/Supabase project. File storage in Frankfurt, hosting in Stockholm, all the good stuff. You feel pretty good about your residency story. Then, a procurement person asks where your transactional emails get processed. The honest answer, for almost every Lovable project, is &#8220;I don&#8217;t know&#8221;.<\/strong><\/p>\n<p>As an avid vibe coder myself, I am exploring opportunities with tools like Lovable or Claude to build an interface on top of databases\/tools that have EU residency at the core of their business. An immediate problem with pretty much any tool I&#8217;ve built so far, is how to get emails delivered. <\/p>\n<p class=\"has-dark-blue-color has-pale-cyan-blue-background-color has-text-color has-background has-link-color wp-elements-65b7c86463363be78e19a7d7103afa6a\"><strong>When discussing &#8217;email&#8217; in my short series about <a href=\"https:\/\/lovable.dev\/\" target=\"_blank\" rel=\"noreferrer noopener\">Lovable<\/a><\/strong>, think of: one-time password emails, registration confirmation, order info email, weekly drilldowns. Anything that makes the app shareable with many requires some involvement with email.<\/p>\n<h2 class=\"wp-block-heading\">What EU data residency means for a Lovable app<\/h2>\n<p>EU data residency isn&#8217;t a single setting. It&#8217;s a property of every place your application processes personal data. That includes your database, your auth system, your file storage, your email provider, your analytics, and your error tracker. If any one of them routes personal data outside the EU without an appropriate legal basis, you&#8217;ve got an international transfer to account for under GDPR Article 44.<\/p>\n<p>A typical Lovable project has four exit points where personal data can leave the EU. Three are easy to get right. One is a quiet trap.<\/p>\n<p><i class=\"fa-solid fa-circle-1\" style=\"color: #1d93c1;\"><\/i>&nbsp;&nbsp;<strong>Database.<\/strong> Supabase offers EU regions (Frankfurt, London, Paris). Pick one at project creation and your user records and application data sit on EU infrastructure.<\/p>\n<p><i class=\"fa-solid fa-circle-2\" style=\"color: #1d93c1;\"><\/i>&nbsp;&nbsp;<strong>Authentication.<\/strong> Supabase Auth runs in your project region. Session tokens, password hashes and OAuth flows stay in the EU.<\/p>\n<p><i class=\"fa-solid fa-circle-3\" style=\"color: #1d93c1;\"><\/i>&nbsp;&nbsp;<strong>File storage.<\/strong> Supabase Storage uses the same regional configuration. Avatars, document uploads and assets stay in-region.<\/p>\n<p><i class=\"fa-solid fa-circle-4\" style=\"color: #1d93c1;\"><\/i>&nbsp;&nbsp;<strong>Email.<\/strong> This is where the wheels come off. Supabase Auth generates the OTP codes, magic links and password-reset tokens, then hands them off to an SMTP provider for delivery. The SMTP provider Lovable nudges you toward, by default and in most of its templates, is Resend.<\/p>\n<p>Resend is a fine company with a fine product. It&#8217;s also incorporated in the United States and runs primarily on AWS US-East-1 in northern Virginia. Every transactional email your application sends to a French user, a German user, or a Dutch user gets routed through US infrastructure and processed by a US-based controller.<\/p>\n<p class=\"has-dark-blue-color has-pale-cyan-blue-background-color has-text-color has-background has-link-color wp-elements-4e395352c8c189ec63f0d1da797f8d6e\"><a href=\"https:\/\/spotler.com\/en-gb\/blog\/what-is-the-us-cloud-act\" data-type=\"link\" data-id=\"https:\/\/spotler.com\/blog\/what-is-the-us-cloud-act\"><i class=\"fa-regular fa-lightbulb-exclamation-on\" style=\"color: #002a4d;\"><\/i>&nbsp;&nbsp;Learn why hosting in the EU matters (from a legal perspective)<\/a><\/p>\n<h2 class=\"wp-block-heading\">Why email is often overlooked by app builders<\/h2>\n<p>There&#8217;s a perfectly understandable reason this gap exists. When founders evaluate residency, they consider where data is stored at rest. Where&#8217;s the database? Where&#8217;s the file storage? Those questions have quick and simple answers.<\/p>\n<p>Email doesn&#8217;t fit that shape. Email is data in motion, outbound by definition, leaving your system whenever it&#8217;s sent. So it doesn&#8217;t feel like a residency question in the same way a database does.<\/p>\n<p>Under GDPR, it absolutely is one.<\/p>\n<p>The body of a password-reset message contains the user&#8217;s email address (a personal identifier), the OTP code (transient but real), and, usually, the user&#8217;s name and a contextual reference to their account. When that message is composed, queued, transmitted and logged on your email provider&#8217;s infrastructure, your provider is acting as a processor on your behalf. The location of that processing is squarely within the scope of GDPR transfer rules.<\/p>\n<p>If your email provider is US-based, you&#8217;re relying on the <a href=\"https:\/\/www.dataprivacyframework.gov\/Program-Overview\" target=\"_blank\" rel=\"noreferrer noopener\">EU-US Data Privacy Framework<\/a> or Standard Contractual Clauses to make that transfer lawful. Both are legally workable today. Both have been challenged by privacy regulators and NGOs, and the two predecessor frameworks, Safe Harbor in 2015 and <a href=\"https:\/\/sosafe-awareness.com\/blog\/privacy-shield-decision\/\" target=\"_blank\" rel=\"noreferrer noopener\">Privacy Shield in 2020<\/a>, were both struck down by the European Court of Justice.<\/p>\n<p>If you&#8217;re building a serious product, especially one you want to sell into EU enterprises, public-sector buyers, healthcare, or fintech, you don&#8217;t want your <a href=\"https:\/\/spotler.com\/discover\/sendpro\/transactional-email-tool\" data-type=\"discover\" data-id=\"158789\">transactional email layer<\/a> to depend on the durability of those mechanisms.<\/p>\n<p>The cleaner answer: <strong>keep the email in the EU to begin with.<\/strong><\/p>\n<h2 class=\"wp-block-heading\">Where the common email providers actually sit<\/h2>\n<p>Quick reference for the providers Lovable users tend to encounter:<\/p>\n<table style=\"width: 100%; border-collapse: separate; border-spacing: 0; border-radius: 20px; overflow: hidden; font-family: Arial, sans-serif; border: 2px solid #002a4d;\">\n<thead>\n<tr>\n<th style=\"background: #1d93c1; color: #ffffff; text-align: left; padding: 18px 20px; font-size: 18px; width: 28%; font-weight: bold;\">Provider<\/th>\n<th style=\"background: #1d93c1; color: #ffffff; text-align: left; padding: 18px 20px; font-size: 18px; width: 36%; font-weight: bold;\">Primary hosting<\/th>\n<th style=\"background: #1d93c1; color: #ffffff; text-align: left; padding: 18px 20px; font-size: 18px; width: 36%; font-weight: bold;\">EU-only data option<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"padding: 20px 20px 14px;\">Resend<\/td>\n<td style=\"padding: 20px 20px 14px;\">US (AWS)<\/td>\n<td style=\"padding: 20px 20px 14px;\">None at time of writing<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 14px 20px;\">SendGrid<\/td>\n<td style=\"padding: 14px 20px;\">US (Twilio, AWS)<\/td>\n<td style=\"padding: 14px 20px;\">Limited; data still touches US<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 14px 20px;\">Mailgun<\/td>\n<td style=\"padding: 14px 20px;\">US default, EU endpoint available<\/td>\n<td style=\"padding: 14px 20px;\">Yes, on a separate endpoint<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 14px 20px;\">Postmark<\/td>\n<td style=\"padding: 14px 20px;\">US default<\/td>\n<td style=\"padding: 14px 20px;\">Yes, separate EU data store<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 14px 20px;\">Amazon SES<\/td>\n<td style=\"padding: 14px 20px;\">Per-region; default US<\/td>\n<td style=\"padding: 14px 20px;\">Yes, if you explicitly use an EU region<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 14px 20px;\">Mailjet<\/td>\n<td style=\"padding: 14px 20px;\">France (Sinch)<\/td>\n<td style=\"padding: 14px 20px;\">Yes, by default<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 14px 20px 25px;\">Spotler SendPro<\/td>\n<td style=\"padding: 14px 20px 25px;\">Netherlands (prev. Flowmailer)<\/td>\n<td style=\"padding: 14px 20px 25px;\">Yes, by default. EU-only infrastructure.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n<p>The point isn&#8217;t that the US providers are bad. They&#8217;re not. They&#8217;re good products with thoughtful APIs. But if you&#8217;ve gone to the trouble of <a href=\"https:\/\/supabase.com\/docs\/guides\/platform\/regions\" target=\"_blank\" rel=\"noreferrer noopener\">selecting a Supabase EU region<\/a> and a European cloud setup, sending your transactional email through a US processor undoes the residency story you&#8217;ve built everywhere else.<\/p>\n<h2 class=\"wp-block-heading\">What &#8220;EU-hosted email&#8221; should actually mean<\/h2>\n<p>Some providers will tell you they have &#8220;EU options&#8221; while still routing metadata, support traffic or backups through US infrastructure. The marketing page says EU. The diligence reveals otherwise.<\/p>\n<p>The questions worth asking before you commit:<\/p>\n<ol class=\"wp-block-list\">\n<li><strong>Where is the message body processed and stored?<\/strong> <br \/>Including bounce, complaint and engagement logs.<\/li>\n<li><strong>Where are the sub-processors?<\/strong> <br \/>A provider can be European on paper but use AWS US for storage, or a US relay for SMTP delivery, under the hood.<\/li>\n<li><strong>Where does support access the data from?<\/strong> <br \/>A support engineer in California opening a ticket to debug your message logs is, technically, an international transfer.<\/li>\n<li><strong>Where are the backups?<\/strong> <br \/>Disaster-recovery copies often reside in a different region than the primary processing environment.<\/li>\n<li><strong>Where is the contracting entity?<\/strong><br \/>Some &#8220;EU options&#8221; still contract through a US parent and apply Standard Contractual Clauses to bridge the gap. The contract matters as much as the infrastructure.<\/li>\n<\/ol>\n<p>For Spotler SendPro, <a href=\"https:\/\/trust.spotler.com\/sub-processors#sendpro\" target=\"_blank\" rel=\"noreferrer noopener\">the entire stack sits in the EU<\/a>. Primary processing, logs, sub-processors, support, and contracting all stay in-region. There&#8217;s no US fallback path for message data. It&#8217;s the kind of detail that matters when an enterprise customer&#8217;s data protection officer is reviewing your subprocessor list.<\/p>\n<p class=\"has-light-blue-background-color has-background\"><strong>Spotler SendPro is the email API of choice<\/strong> for many European companies that take email deliverability seriously. Trusted by companies ranging from vibe coding start ups to multinationals sending millions of emails per day, SendPro provides the backbone of your email infrastructure. <br \/><strong><a href=\"https:\/\/spotler.com\/en-gb\/sendpro\" data-type=\"link\" data-id=\"http:\/\/spotler.com\/sendpro\">Learn more about Spotler SendPro<\/a><\/strong> <i class=\"fa-solid fa-arrow-right\" style=\"color: #1d93c1;\"><\/i><\/p>\n<h2 class=\"wp-block-heading\">How to plug SendPro into a Lovable project<\/h2>\n<p><strong>This is the practical (and fairly technical) bit.<\/strong> Supabase Auth in your Lovable project needs an SMTP or API-based email provider to deliver OTPs, magic links and confirmation emails. Swapping the default for SendPro <strong>takes one prompt and five environment variables<\/strong>. <\/p>\n<div class=\"wp-block-image borderradius20\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"776\" height=\"364\" src=\"https:\/\/spotler.com\/wp-content\/uploads\/2026\/05\/lovable_settings.webp\" alt=\"\" class=\"wp-image-249363\" style=\"width:742px;height:auto\" srcset=\"https:\/\/spotler.com\/wp-content\/uploads\/2026\/05\/lovable_settings.webp 776w, https:\/\/spotler.com\/wp-content\/uploads\/2026\/05\/lovable_settings-300x141.webp 300w, https:\/\/spotler.com\/wp-content\/uploads\/2026\/05\/lovable_settings-768x360.webp 768w, https:\/\/spotler.com\/wp-content\/uploads\/2026\/05\/lovable_settings-767x360.webp 767w, https:\/\/spotler.com\/wp-content\/uploads\/2026\/05\/lovable_settings-405x190.webp 405w, https:\/\/spotler.com\/wp-content\/uploads\/2026\/05\/lovable_settings-140x65.webp 140w, https:\/\/spotler.com\/wp-content\/uploads\/2026\/05\/lovable_settings-44x21.webp 44w\" sizes=\"auto, (max-width: 776px) 100vw, 776px\" \/><figcaption class=\"wp-element-caption\"><em>Lovable&#8217;s (partial) reponse when asked &#8220;How does the Spotler SendPro integration work?&#8221; <\/em><\/figcaption><\/figure>\n<\/div>\n<p>A prompt that gets it right on the first ask &#8211; assuming you have a feature that triggers emails already:<\/p>\n<p><em>&#8220;Replace the email sending in this project with Spotler SendPro using OAuth2. Use API documentation found here: <code>https:\/\/flowmailer.com\/apidoc\/sendpro-api.html<\/code>&#8220;<\/em><\/p>\n<p>What Lovable hands back is a clean implementation: an in-memory token cache with a safety margin on the TTL, a 401 auto-retry, and a graceful fallback that logs to console if credentials are missing, so development doesn&#8217;t break when you haven&#8217;t filled them in yet.<\/p>\n<p>You&#8217;ll then need to provide the five environment variables:<\/p>\n<ul class=\"wp-block-list\">\n<li><code><strong>SENDPRO_CLIENT_ID<\/strong><\/code>. From your SendPro dashboard, OAuth applications section.<\/li>\n<li><code><strong>SENDPRO_CLIENT_SECRET<\/strong><\/code>. Paired with the client ID.<\/li>\n<li><code><strong>SENDPRO_ACCOUNT_ID<\/strong><\/code>. Your account identifier.<\/li>\n<li><code><strong>SENDPRO_FROM_EMAIL<\/strong><\/code>. Your verified sender address.<\/li>\n<li><code><strong>SENDPRO_FROM_NAME<\/strong><\/code>. The display name on outgoing messages.<\/li>\n<\/ul>\n<p>If you&#8217;re routing auth-system emails through Supabase&#8217;s built-in flows (confirmation, password reset, magic links), point your Supabase project&#8217;s SMTP settings at SendPro&#8217;s SMTP relay separately, so those messages go through the same provider as your application-level transactional emails. Both paths lead to the same EU infrastructure.<\/p>\n<h2 class=\"wp-block-heading\">An EU residency checklist for Lovable apps<\/h2>\n<p>Before you take a Lovable project to a serious EU customer, walk through these:<\/p>\n<ol class=\"wp-block-list\">\n<li><strong>Supabase region.<\/strong> Confirm your project sits in an EU region. Visible in the Supabase dashboard.<\/li>\n<li><strong>Database backups.<\/strong> Check that automated backups are restricted to your region under your current plan.<\/li>\n<li><strong>File storage.<\/strong> Confirm Supabase Storage is configured to the same region.<\/li>\n<li><strong>Auth.<\/strong> Built into your Supabase project region. No separate action needed.<\/li>\n<li><strong>Email provider.<\/strong> Verify your provider&#8217;s processing region, sub-processors, and contracting entity. Not just the marketing claim. The data-processing agreement.<\/li>\n<li><strong>Analytics.<\/strong> PostHog has an EU instance. Google Analytics does not, in any meaningful sense.<\/li>\n<li><strong>Error tracking.<\/strong> Sentry has an EU region. Check yours is set to it.<\/li>\n<li><strong>AI APIs.<\/strong> If your app calls OpenAI, Anthropic or similar, those calls route to the US. Document that flow, and look at zero-data-retention agreements where they&#8217;re available for sensitive use cases.<\/li>\n<li><strong>Hosting.<\/strong> Your Lovable-deployed frontend likely runs on a US-based edge network. Most edge networks process minimal personal data, but it&#8217;s worth documenting.<\/li>\n<li><strong>DPA.<\/strong> Make sure you have a current data processing agreement signed with each processor on the list. SendPro provides one as standard.<\/li>\n<\/ol>\n<p>Email sits at number 5 on that list. It&#8217;s also the one most likely to catch you out, because it&#8217;s the only item where the default suggestion from your AI builder might actively work against your residency story.<\/p>\n<h2 class=\"wp-block-heading\">The summary, in a sentence<\/h2>\n<p>A serious EU-resident Lovable app is entirely possible (Supabase EU, SendPro, an EU analytics and error-tracking stack), but it requires deliberately picking each layer, and the email layer is the one almost everyone misses by default.<\/p>\n<p>If you want to dig into how SendPro fits into a Lovable project specifically, the <a href=\"https:\/\/spotler.com\/en-gb\/sendpro\">SendPro product overview<\/a> covers the EU hosting story, and the <a href=\"https:\/\/flowmailer.com\/apidoc\/sendpro-api.html\" target=\"_blank\" rel=\"noopener\">API documentation<\/a> has the OAuth2 details Lovable will work from.<\/p>\n<div class=\"wp-block-group has-light-blue-background-color has-background\">\n<div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<p class=\"has-medium-font-size\"><strong>Spotler SendPro starts at 59<strong>\u00a3<\/strong>\/month. <\/strong>Sign up for a 30-day free trial and experience how easy it is to get your emails to the inbox whilst maintaining EU data residency.<\/p>\n<div class=\"button-block\">\n                    <a href=\"https:\/\/spotler.com\/sendpro\/trial?utm_content=lovable_eu_residency\" class=\"btn ghost-btn\" target=\"_blank\"><br \/>\n                <span>Sign up and start sending<\/span><br \/>\n            <\/a>\n                                                        <\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>With more and more projects being shipped within days rather than weeks, privacy is an often overlooked element of your app. Learn how to make the difference.<\/p>\n","protected":false},"author":46,"featured_media":250093,"template":"","cat_industry":[1229],"cat_topic":[1592,1623,1636],"class_list":["post-250101","blog","type-blog","status-publish","has-post-thumbnail","hentry","cat_industry-software-en-gb","cat_topic-artificial-intelligence-en-gb","cat_topic-data-privacy-en-gb","cat_topic-deliverability-en-gb"],"acf":[],"_links":{"self":[{"href":"https:\/\/spotler.com\/en-gb\/wp-json\/wp\/v2\/blog\/250101","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/spotler.com\/en-gb\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/spotler.com\/en-gb\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/spotler.com\/en-gb\/wp-json\/wp\/v2\/users\/46"}],"version-history":[{"count":2,"href":"https:\/\/spotler.com\/en-gb\/wp-json\/wp\/v2\/blog\/250101\/revisions"}],"predecessor-version":[{"id":250103,"href":"https:\/\/spotler.com\/en-gb\/wp-json\/wp\/v2\/blog\/250101\/revisions\/250103"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/spotler.com\/en-gb\/wp-json\/wp\/v2\/media\/250093"}],"wp:attachment":[{"href":"https:\/\/spotler.com\/en-gb\/wp-json\/wp\/v2\/media?parent=250101"}],"wp:term":[{"taxonomy":"cat_industry","embeddable":true,"href":"https:\/\/spotler.com\/en-gb\/wp-json\/wp\/v2\/cat_industry?post=250101"},{"taxonomy":"cat_topic","embeddable":true,"href":"https:\/\/spotler.com\/en-gb\/wp-json\/wp\/v2\/cat_topic?post=250101"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}