Shopify Flow Send Email to Customer: Why It Fails and What Works

12 min read
18 Sep, 2026

If your Flow is trying to email a customer and failing, the most likely reason is that you're using the wrong action for the job. Flow's Send internal email action is built for staff notifications, not customer messaging. The second most likely reason is the variable itself: Flow uses the Admin API's camelCase field names, so Liquid copied from a notification template breaks. Fix the route first, then the variable, then read Run history for the exact step that failed.

AI Summary

Shopify Flow's Send internal email action is designed for staff notifications, not customer messaging, which is the most common reason customer-facing emails from Flow fail. Customer emails should route through an email platform, typically by tagging in Flow and triggering an automation. Variable errors usually come from snake_case Liquid copied from notification templates, since Flow uses camelCase Admin API fields, or from empty values on guest and POS orders.

The workflow triggers. The condition passes. Then the email step either errors, sends to nobody, or goes to your own inbox instead of the customer's.

Nine times out of ten, one of two things is going on.

You're using an action built for a different job. Flow's email action is meant for notifying your team — a high-value order landed, stock is low, a fraud check flagged something. It isn't a customer messaging tool, and treating it as one is where most of these problems start.

Or the variable is wrong. Flow's Liquid doesn't use the same field names as your notification templates, so a perfectly valid snippet copied from one breaks in the other.

This article covers both, then how to read the error Flow actually gives you. If your workflow isn't running at all, that's a different problem with different causes — start with Shopify Flow not triggering. If you're building a workflow from scratch, Shopify Flow setup covers the basics.

Flow's actions, connectors and restrictions change regularly. Confirm current behaviour in Shopify's own Flow documentation before relying on any specific detail here.

What the email action in Flow is actually for

Flow's Send internal email action does what the name says: it emails people inside your business. Store staff, a fulfilment partner, a shared ops inbox. It's excellent for alerts — an order over a threshold, a product dropping below reorder point, a high-risk order waiting for review.

It is not designed to message customers, and Shopify has good reasons for that. Customer email carries consent obligations, unsubscribe requirements, sender reputation and deliverability concerns that an internal alert tool isn't built to handle. Putting {{order.email}} in the recipient field is working against the tool's purpose, so it's the first place things break.

The practical rule: if the email is for someone on your team, use Send internal email. If it's for a customer, route it through a system built for customer messaging — covered in the next section.

Worth checking as well: if the email is arriving in your own inbox rather than the customer's, the action is doing exactly what it was designed to do. That's not a bug to fix. It's a sign the workflow needs a different route.

How to actually email customers from a Flow

Flow is very good at deciding when something should happen. Let it make that decision, and hand the sending to a tool built for customers.

1. Tag, then let your email platform send. The most robust pattern. Flow adds a customer or order tag when the condition is met. Your email platform watches for that tag and sends the message. Flow handles the logic; the email platform handles consent, templates, unsubscribes and deliverability. When something goes wrong, you know which system to look at.

2. Trigger an email platform directly. Most major email platforms connect to Flow, so a Flow step can fire an event or add a profile to a list that starts an automation. Klaviyo is the common one. The platform-side setup is in the Klaviyo flows guide.

3. Use Shopify's own marketing email actions where they're available to you — but only for customers who've agreed to marketing. See Shopify Email setup.

4. Use native notifications for transactional messages. Order confirmations, shipping updates and refunds already have templates under Settings, Notifications. If what you want is a transactional message, edit the template rather than rebuilding it in Flow.

The consent point matters here. A message triggered by Flow is still marketing if it promotes something, and it needs the customer's permission. Transactional and marketing email have different rules, covered in GDPR and cookie compliance for Shopify. Routing through an email platform keeps those rules enforced automatically.

Why the variable comes back empty or errors

If the route is right and the email still fails, the variable is the next suspect. Five causes cover almost everything.

1. snake_case copied from a notification template. The most common cause and the least obvious. Notification templates use names like customer.first_name and order.line_items. Flow's Liquid follows the Admin API, which uses camelCase: order.customer.firstName, order.lineItems. A snippet that works perfectly in one place fails silently in the other.

2. The variable doesn't exist for that trigger. Each trigger exposes different data. An Order created trigger gives you the order and, through it, the customer. A Customer created trigger has no order at all. Referencing order in a customer-triggered workflow returns nothing.

3. The value is genuinely empty. Guest checkouts may have no customer record attached. Some POS, draft and phone orders have no email. The variable path is correct — there's just no data behind it for that particular order. Add a condition that checks the field is present before the email step.

4. A list treated as a single value. Line items, tags and fulfilments are lists. Printing them directly outputs nothing useful; they need a for loop.

5. A typo or wrong nesting. The simplest and still common. Build variables with Flow's variable picker rather than typing them by hand. It only offers fields that exist for your trigger, which rules out causes 1, 2 and 5 in one move.

Reading Run history properly

Flow tells you what broke. Most people just don't look in the right place.

Saving catches some errors, running catches the rest. Flow checks your Liquid when you save the workflow, which catches typos and invalid syntax. It can't know whether a particular order will have a customer email, so empty values only show up at runtime.

Open Run history and find a failed run. Each run shows which steps completed and which one stopped. Open the failed step and read the actual error text rather than the status label. Errors about missing data almost always point to cause 2 or 3 above: the field doesn't exist for this trigger, or it was empty for this record.

Compare a failed run with a successful one. If the same workflow succeeds for some orders and fails for others, the logic is fine and the data isn't. Look at what's different about the failing orders: guest checkout, POS, draft order, missing email.

Test with a real record. Place a test order that matches your conditions, including an email address you can check. Then confirm three separate things: the workflow ran, the step succeeded, and the message arrived. Those are three different problems, and knowing which one failed saves hours.

Symptom, cause, fix

What you seeLikely causeFix
Email goes to your own inbox, not the customer'sInternal email action used for customer messagingTag in Flow, send from your email platform
Error about missing data in Run historyField not available for this trigger, or empty for this orderCheck the trigger; add a condition that the field is present
Variable outputs nothingsnake_case copied from a notification templateRebuild with the variable picker using camelCase fields
Works for some orders, fails for othersGuest, POS or draft orders without a customer emailAdd a presence condition before the email step
Line items or tags missing from the emailList printed as a single valueWrap it in a for loop
Step succeeds but nothing arrivesDeliverability, not FlowSee the section below
Workflow doesn't run at allTrigger or condition problemSee Flow not triggering

When the step succeeds but nothing arrives

If Run history shows the email step completed and the message still didn't land, Flow did its job. The problem is further down the line.

Check spam and filtering first. Automated internal alerts often trip company spam filters, especially if they're sent to shared inboxes or aliases.

Check the recipient address. Aliases, forwarding rules and distribution lists all fail quietly. Test with a single real inbox before assuming anything else is broken.

If it's a customer email sent through your email platform, the issue is almost always deliverability: sender authentication, list quality, or the platform suppressing someone who previously unsubscribed. That's covered in Klaviyo deliverability.

If Shopify's own notifications aren't arriving — order confirmations and shipping updates — that's a separate problem with its own causes, covered in Shopify email not sending.

When to get help

Most of this is fixable in an afternoon with the variable picker and Run history. Three situations are worth handing over.

Workflows that span several systems. Flow triggering an email platform, which updates a helpdesk, which tags an order back in Shopify. When a message goes missing somewhere in that chain, it takes someone who can trace each hop — workflow automation experts, or specialists in Shopify Flow specifically.

Customer messaging built in the wrong place. If a store has grown a web of Flow workflows doing a job that belongs in its email platform, moving it properly is a migration, not a fix — email marketing experts. Klaviyo specialists are listed for the United States and the United Kingdom.

Intermittent failures you can't reproduce. Workflows that fail on some records and not others, with no obvious pattern, need someone to compare runs systematically — bug fixing and troubleshooting experts.

How to vet: ask where they'd send a customer email from. If the answer is Flow's internal email action, they've diagnosed the symptom, not the cause.

Flow doing a job it wasn't built for?

Matias Lopez
ML
Front-End DeveloperArgentinaFrom $70
4.96(154 reviews)
shopexpertsscore
85

I have over five years of experience in web development using technologies such as Shopify, Angular, Node.js, JavaScript, React, Vue, MongoDB, MySQL, and PHP. My journey with Shopify started when I joined Hey Carson, now known as 'Shop Experts', successfully completing their trial period. I have gained significant experience in Shopify development. I've worked in complex tasks such as integrating Shopify apps, Shopify Admin API, custom design development, apps extensions development, theme development and much more. Over the past few years, I've acquired what I believe is a solid understanding of Shopify development, which helps me deliver high-quality solutions to the clients I've worked with.

Sumit Chakradhar
SC
Shopify Plus EngineerNepalFrom $100
4.96(128 reviews)
shopexpertsscore
100

10+ years, 500+ Shopify store owners, and countless successful projects—I'm a top-rated Shopify expert dedicated to helping brands improve their store's conversion, speed, functionality, and aesthetics. As the longest-serving developer at Shopexperts (formerly HeyCarson), I've built my reputation on meticulous attention to detail, reliability, and unwavering commitment to client success. My work speaks for itself —check out reviews from past clients who can attest to my dedication and results-driven approach.

Muhammad Asad ullah baig
MA
Shopify Plus EngineerPakistanFrom $100
5.00(13 reviews)
shopexpertsscore
100

Turn Your Shopify Store Into a Reliable Sales Engine If you're looking for a Shopify developer who understands both the technical side and the business outcomes behind it, you're in the right place. As a Shopify Certified Developer with 10+ years of hands-on experience, I've worked with 100+ brands across fashion, apparel, beauty, food, fitness, and electronics to build stores that are fast, scalable, and built to convert. Whether you're a founder launching your first store or an established brand ready to level up, I bring the expertise to get you there. What Gets Delivered: Every project is approached with one goal, growth. Here's what that looks like in practice: Custom Shopify Theme Development — Figma and Adobe XD designs transformed into clean, maintainable Liquid-based themes optimized for performance and long-term scalability Store Redesigns & UX Improvements — Navigation restructured, friction points removed, and user journeys refined to drive more conversions without disrupting live traffic Speed & Performance Optimization — Core Web Vitals improvements, faster page load times, and technical SEO fixes that directly impact search rankings and reduce bounce rate Custom Feature Development — Bundles, upsells, subscriptions, loyalty programs, and third-party API integrations tailored to specific business models Store Migrations & Ongoing Support — Smooth, low-risk platform migrations and dependable technical maintenance that keep operations running without interruption Why Brands Keep Coming Back: Every architecture decision, layout choice, and integration is guided by one question: Does this help the business grow? Clean code and structured development aren't just standards — they're what make a store reliable at scale. Founders launching from scratch, in-house teams needing a trusted technical collaborator, and agencies looking for a dependable Shopify specialist, all have found long-term value in this kind of partnership. Ready to Grow Your Shopify Store? Whether it's a full custom build, a performance overhaul, or targeted improvements to boost conversions, let's map out a clear path forward. Reach out to discuss your goals and what's possible.

Frequently asked questions about Shopify Flow emails

Can Shopify Flow send an email to a customer?
Flow's Send internal email action is designed for staff notifications rather than customer messaging, which is the most common reason customer emails from Flow fail or arrive in the store's own inbox. To email customers, let Flow decide when something should happen and route the sending through a tool built for customer email, typically by adding a tag in Flow that triggers an automation in your email platform. Confirm current action behaviour in Shopify's Flow documentation, as it changes.
Why does my Shopify Flow email variable not work?
The most common cause is Liquid copied from a notification template. Notification templates use snake_case names like customer.first_name, while Flow follows the Admin API and uses camelCase like order.customer.firstName. Other causes are referencing a field the trigger doesn't provide, such as an order in a customer-triggered workflow, and empty values on guest, POS or draft orders. Building variables with Flow's variable picker avoids most of these.
Why does my Flow email work for some orders but not others?
When the same workflow succeeds for some records and fails for others, the logic is usually fine and the data is not. Guest checkouts may have no customer record, and some POS, draft and phone orders have no email address. Compare a failed run with a successful one in Run history, then add a condition that checks the required field is present before the email step runs.
Where do I see why a Shopify Flow step failed?
Open the workflow's Run history, select a failed run and open the step that stopped. Read the error text rather than the status label. Saving a workflow catches syntax errors, but empty values only appear at runtime, so errors about missing data usually mean the field is unavailable for that trigger or was empty for that specific order.
The Flow email step succeeded but nothing arrived. Why?
If Run history shows the step completed, Flow did its job and the problem is delivery. Check spam filtering, especially on shared inboxes and aliases, and test with a single real inbox. For customer emails sent through an email platform, look at sender authentication, list quality and suppressed contacts. If Shopify's own order notifications aren't arriving, that is a separate issue with its own causes.
Do emails triggered by Shopify Flow need customer consent?
It depends on the content, not the trigger. A transactional message about an order a customer placed follows different rules from a promotional one, and a Flow-triggered message that promotes something is still marketing and needs permission. Routing customer email through an email platform keeps consent, unsubscribes and suppression enforced automatically.

Next step

Open the failing workflow and check the action first. If a customer email is going through Send internal email, move the sending to your email platform and let Flow add a tag instead. That fixes the most common version of this problem outright.

If the route is already right, rebuild the variable with the picker, add a condition that the email field is present, and compare a failed run with a successful one in Run history.

For multi-system workflows or messaging that has outgrown Flow, browse workflow automation experts. Free matching, verified experience, no commissions.