Transactional Emails for Shopify Apps

Transactional emails for Shopify apps: install, billing, uninstall, and shopper emails
For beginners

Key takeaways

• Merchant emails: Your app writes to the store owner at install, before a trial ends, near a usage cap, and after an uninstall or a data deletion request.

• Shopper emails: Your app needs Shopify’s approval to send subscription, pre-order, and review emails to customer addresses from the store. Back-in-stock alerts go to the address a shopper entered in your app.

• No duplicates: Shopify already sends order, shipping, and refund notices and confirms trial extensions to merchants. Your app skips them, except a Shopify notification the merchant agrees to switch off (see the FAQ).

• Delivery: Shopify may deliver the same webhook several times, and deliveries may arrive out of order. Make the handler idempotent or skip repeated X-Shopify-Webhook-Id values. When two subscriptions share a topic, send one email per X-Shopify-Event-Id. Check X-Shopify-Triggered-At before sending a status email.

Shopify itself emails a store’s customers about their orders, shipments, and accounts, and most of these notifications are sent automatically and can’t be deactivated. A merchant can skip several of them, such as the refund or shipping email for a single order, but not the order confirmation. If your app also sends its own order confirmation, the customer gets two emails about the same order.

Everything else a Shopify app sends depends on what the app itself knows: which setup steps are done, what the merchant’s plan includes, and whether the store’s data is still on your servers. Your app emails shoppers only where it adds something Shopify doesn’t cover, such as a subscription or a pre-order.

What Counts as a Transactional Email From a Shopify App?

A Shopify app’s email is transactional when it reports a specific event in the merchant’s account, the store, or the app’s billing. Typical events are an install, a plan change, a trial nearing its end, a failed sync, an uninstall, and a purchase a shopper made through the app. Merchants and shoppers hear from different senders. Merchants get email from your team, sent to the shop owner’s address. Shoppers get email that carries the store’s name.

Upgrade offers, feature announcements, and newsletters to merchants are marketing emails, even when they come from the same app that sent the install confirmation. A review request that carries a discount code turns into a marketing email too. Shopify’s protected customer data rules ask apps to respect customers’ consent decisions where applicable.

Which Emails Does Shopify Already Send for You?

Order confirmations, shipping updates, refund notices, and customer account emails come from Shopify itself.

Shopify also bills the merchant for your app. Recurring app fees start when the merchant first approves the app, or when the free trial ends if the plan has one. They repeat at the start of each billing period and are added to the merchant’s Shopify bill. Under Shopify App Store rules, every app charge goes through Shopify App Pricing or the Billing API.

When you extend a merchant’s free trial in the Partner Dashboard, Shopify emails the merchant on your behalf to confirm the change. Your app has nothing to add here.

Which Transactional Emails Does a Shopify App Need?

A Shopify app needs up to thirteen emails: up to nine to the merchant and up to four to the store’s shoppers, depending on how the app charges merchants and which features it has. We based the list on Shopify’s App Store requirements, its billing and webhook documentation, and its privacy compliance rules for apps.

EmailTrigger · recipientWhat to includeWhen to send
Install confirmationApp installed and access approved · shop ownerSteps done, step left, link into the app, support contactRight after install
Setup reminderRequired setup step not done · shop ownerMissing step, where to do it, what isn’t working yetUntil setup is done; stop on uninstall
Store event alertSync failure, flagged order, low stock, finished import · owner or staff by roleWhat happened, which store, what to do, record linkAfter the event is processed, once per event
Plan confirmationPlan approved or changed · shop ownerPlan, price, first charge date, link to plansAfter approval
Trial ending reminderTrial end date approaching · shop ownerEnd date, plan and price after trial, how to change or cancelA few days before the trial ends
Usage cap warningUsage charges near the capped amount · shop ownerSpend so far, cap, what happens at the cap, where to raise itAt the warning threshold
Subscription statusSubscription frozen; on the Billing API also declined or expired · shop ownerWhat changed, where the balance is paid, what to doOn the status change
Uninstall confirmationApp removed · shop ownerWhat stopped, billing outcome, theme code to remove, reinstall linkRight after uninstall
Data request or deletion noticeMandatory compliance webhook · shop ownerThe requested data through a secure link, or what was deleted and what is keptWhen the request is processed
Subscription email to shoppersShopper buys a subscription · shopperPortal link, next charge, price, cancel linkAfter purchase
Pre-order date changeShipping date moved later · shopperNew date, product, how to cancelWhen the date changes
Review requestOrder delivered · shopperStore brand, product, link to the review formAfter delivery
Back-in-stock alertProduct restocked · shopper who signed upStore brand, product, link to the productOnce, when the product is back

How Should Your App Email a Merchant After Install?

Every install, setup, and alert email should link to the exact screen inside your app where the merchant’s next step is. Install and setup emails go to the owner address Shopify keeps in Shop.email.

Install Confirmation Email

An install confirmation is a short email you send right after a merchant approves your app’s access. It lists what the app has already done in their store and what is left to set up.

Example install confirmation email from a Shopify app with two completed setup steps marked with check marks, one open step, a Finish setup in Shopify admin button, and a support line

Be sure to include:

• The store name

• The steps already done, with check marks

• The one step left, with a button that opens it inside your app

• A way to reach your support team

Don’t confuse Shop.email with contactEmail, the store’s public address that customers use to reach the shop owner. Save the owner’s address at install, because after an uninstall your app loses API access and can’t look it up.

Setup Reminder Email

You send a setup reminder when the merchant still hasn’t done the one step your app needs, such as adding your theme app block to the storefront. Name the missing step and which features stay disabled until it’s done. Shopify’s App Store requirements ask apps that use theme app extensions for detailed setup instructions for their app embeds and app blocks. Link those instructions from the reminder. Stop every reminder as soon as the app/uninstalled webhook arrives, or the merchant keeps getting setup emails for an app they’ve removed.

Store Event Alert

When a product sync fails, an order gets flagged, stock runs low, or an import finishes, the person who can act on it should get one email.

Route each alert by role. Billing problems go to the owner, while import results go to the staff member who started the import. Your app gets that person’s address from an online access token. The token’s associated_user identifies the staff member who opened the app and includes their email, which you can trust only when email_verified is true. Without an online token or a verified address, send the alert to the owner. An owner or an agency may run several stores. Name the store in the subject line and keep each email to one event. Put the error text or the import totals in the email itself to show the reader what to fix before opening the app.

Which Billing Emails Should Your App Send?

Billing needs up to four emails: a new plan, a trial about to end, a usage cap on the Billing API, and a subscription status change.

Plan Confirmation Email

Once a merchant approves a plan or switches to another, confirm the plan name, the price, the date of the first charge, and what the new plan includes.

An email that looks like an invoice, with the developer’s bank details at the bottom, reads as a second bill. Leave payment details out of this email. App Store requirement 1.2.3 asks apps to let merchants upgrade and downgrade without contacting support or reinstalling the app. Link to the plan page inside your app, where the merchant can switch plans on their own.

Trial Ending Reminder

A few days before a free trial ends, tell the merchant the date, the plan that starts, and its price.

Example trial ending email from a Shopify app with the trial end date in large type, the plan and monthly price that start next, a note that the charge appears on the Shopify bill, and one Review your plan button

Each reminder should also include:

• The weekday next to the date

• One button to change the plan

• How to cancel, by uninstalling or by switching to a free plan if you have one

On Shopify App Pricing, take the date from the Partner API: while a subscription is in its trial, the activeSubscription query returns trialEndsAt, the end of the trial. Don’t calculate the end date as the install date plus the trial length, because trial days a merchant already used carry over to a reinstall (see the FAQ). On the Billing API, your app can learn the same date through webhooks or API polling.

Usage Cap Warning

Usage charges stop at the capped amount the merchant approved. Warn the merchant while there’s still room to raise the cap, and put both the amount used and the cap in the email.

Example usage cap warning email from a Shopify app with a progress bar at 90%, the amount used against the monthly cap, what pauses when the cap is reached, and one Raise your cap button

On the Billing API, the APP_SUBSCRIPTIONS_APPROACHING_CAPPED_AMOUNT webhook arrives when usage reaches 90% of the capped amount. Your app can send the warning at that moment. Only apps billed through the Billing API need this email, because Shopify App Pricing doesn’t support capped amounts.

Put the dollar amounts in the subject line too. With a bare “You’re close to your limit”, the merchant has to open the email to learn how close.

Subscription Status Email

A merchant’s subscription to your app can freeze, and on the Billing API it can also be declined or expire. For each of these statuses, send an email that says what changed and what, if anything, the merchant needs to do.

Frozen means the subscription is on hold because of non-payment, and it re-activates after payments resume. Avoid writing “your payment to us failed”: the unpaid balance sits on the merchant’s Shopify bill, and that’s where the merchant settles it. A declined status means the merchant turned the charge down, and an expired one means nobody approved the plan request within two days of its creation.

How your app learns about the change depends on how it bills. On the Billing API, the app_subscriptions/update webhook arrives when a subscription’s status changes. Shopify App Pricing doesn’t use webhooks for subscription changes. For a freeze, Shopify points apps to the Partner API: its events query returns SUBSCRIPTION_FROZEN and SUBSCRIPTION_UNFROZEN events, and activeSubscription returns the merchant’s current subscription. Poll both queries regularly and send the email when the state changes.

What Should Go Out When a Merchant Uninstalls Your App?

Shopify cancels the merchant’s subscription on its own, and your app sends the shop owner two emails: a confirmation right away and a data deletion notice when it processes shop/redact.

Timeline after a Shopify app is uninstalled: the app/uninstalled webhook and an uninstall confirmation email right away, the shop/redact request 48 hours later with a data deletion notice sent while it is processed, and 30 days from the request to complete the deletion

Uninstall Confirmation Email

The uninstall confirmation goes to the owner address you saved at install, right after Shopify delivers the app/uninstalled webhook.

Example uninstall confirmation email from a Shopify app listing what stopped, the billing outcome, the theme snippet left behind and where to remove it, when store data is deleted, and one Reinstall button

Cover these points:

• What your app stopped doing in the store

• That a charge for the current billing cycle may still appear on the merchant’s Shopify bill

• Any code left in the theme, and how to remove it

• How to reinstall

• How to ask you for a credit or a refund

Shopify warns merchants that some apps add code to the online store theme that isn’t removed automatically. Give your snippet’s name and the place to delete it. Leave out any claim that the store’s data is already gone, since Shopify’s shop/redact deletion request reaches your app later.

Data Request and Deletion Email

A data request or deletion email tells the store owner what your app did with a data report or deletion Shopify requested. Shopify sends these requests through three mandatory compliance webhooks: customers/data_request, customers/redact, and shop/redact. Every app in the Shopify App Store subscribes to all three, but only apps with access to customer or order data receive the two customer webhooks.

Shopify sends shop/redact 48 hours after a store owner uninstalls your app, and you have 30 days from receiving a request to complete it. For a customer with no orders in the past six months, Shopify sends customers/redact 10 days after the store owner submits the customer’s deletion request.

Send the shop/redact notice while you process the request, then delete the owner’s address along with the rest of the store’s data. If the law requires you to keep some records, Shopify says not to delete them; name those records in the email. A customers/data_request comes from a shopper, but Shopify asks your app to provide the stored data to the store owner directly. Send the owner a secure download link rather than personal data in the email body.

Which Emails Can Your App Send to a Store’s Shoppers?

A Shopify app can send shoppers subscription emails, pre-order date change notices, and review requests once Shopify approves its access to customers’ email addresses. The app takes these addresses from orders and customer records in the store. Email addresses there are protected customer data: a public app requests access in the Partner Dashboard, states why it needs the data, and waits for review. Back-in-stock alerts use the address a shopper types into your app’s own sign-up form. Shopify’s App Store requirements still ask apps to send collected data on the online store back to the merchant’s Shopify admin. Shopify’s protected customer data rules also ask apps to process only the minimum personal data they need.

Subscription Email to Shoppers

Each shopper who buys a subscription should get a post-purchase email with a link to the portal where they can manage or cancel it.

Example subscription confirmation email from an online tea store with the delivery schedule and price, the next charge date and amount, one Manage subscription button, and a line about skipping or canceling at any time

Shopify’s App Store requirements ask subscription apps to link shoppers to the customer portal in two places: the order status page and a post-purchase email. They also give a cancel link in an email as an example of how cancellation can work. The same requirements ask apps to show shoppers the price and when they’ll be charged, and Shopify recommends doing that on the storefront. Repeat the next charge date and amount at the top of the email.

Pre-Order Date Change Email

When a merchant pushes a pre-order’s shipping date back, every shopper who placed that pre-order should get an email from the store with the new date.

Example pre-order date change email from an online store with the product image, the old shipping date struck through, the new date, a one-line reason, and one Cancel and get a refund button

Your app is responsible for this one. Shopify’s requirement on pre-order delays asks pre-order apps to email a merchant’s customers whenever the merchant moves the shipment date to a later one. Along with the new date, include:

• The product with its image

• The old date next to the new one

• The reason in one line

• How to get a refund after canceling

• The store’s contact details

Review Request and Back-in-Stock Email

A review request is about one order and a back-in-stock email about one product, and each carries a single action.

Review request emails should name the product the shopper actually received and link straight to the review form. Before you add a discount or other products, check the customer’s defaultEmailAddress.marketingState, which shows whether they’ve subscribed to email marketing, and marketingUpdatedAt, when that consent last changed. Add them only when marketingState is SUBSCRIBED, and send everyone else the plain review request. Send a back-in-stock email once for each sign-up, when the product is back.

How Do Your App’s Emails Reach the Inbox?

Authenticate every sending domain, send one email per webhook event, and keep merchant and shopper mail on separate streams.

Send From an Authenticated Domain

Merchant emails. Send merchant emails from a subdomain of your app’s domain, with its own SPF and DKIM records. That subdomain needs no DMARC record of its own, because it inherits the DMARC policy of your app’s main domain. Make sure your app’s main domain publishes one.

Shopper emails. Your app sends its emails to shoppers through your own email service. Before your app puts the store’s address in the From line, the merchant has to add your service’s SPF and DKIM records to the store’s domain. Gmail and Yahoo require SPF or DKIM authentication from all senders, and both require SPF, DKIM, and DMARC from bulk senders. The store’s domain should keep a single DMARC record, shared by your app’s emails and Shopify’s. Until the merchant adds your records, keep the From address on your app’s domain, with the store’s name in the From name and the store’s contactEmail in Reply-To.

Emails that Shopify itself sends for the store need different records. Shopify rewrites the address on those emails to one on shopifyemail.com when the store address is unauthenticated. To avoid the rewrite, the merchant adds Shopify’s CNAME records to the store’s domain and checks that it has a DMARC record. Shopify warns that adkim=s or aspf=s in that record can stop these emails from authenticating. The CNAME records cover only Shopify’s own emails and don’t authenticate the ones your app sends.

In UniOne, for example, you publish SPF and DKIM records for each sending domain and keep the domain’s existing DMARC record. The service’s real-time reports track bounces, so you can see when a customer gets a bounced email.

Send One Email per Webhook Event

A Shopify webhook can arrive more than once and out of order, so an email sent straight from the handler can reach the merchant twice.

Your app has five seconds to answer a webhook, and failed deliveries are retried eight times over the next four hours. Answer first and put the email in a queue. Shopify advises idempotent processing, so that a repeated delivery doesn’t produce a second email. Where that isn’t possible, save the X-Shopify-Webhook-Id header and skip any delivery whose ID you’ve already saved. That ID only catches retries of the same delivery. If your app has two subscriptions to the same topic, each delivery gets its own X-Shopify-Webhook-Id, but both share one X-Shopify-Event-Id. Shopify gives that ID to all deliveries from the same merchant action. When both subscriptions can trigger the same email, check the X-Shopify-Event-Id before sending, so one action produces one email. A merchant who gets the same alert twice may report it as spam, and Gmail warns that frequent spam reports lower a domain’s reputation.

Shopify also doesn’t guarantee delivery order and recommends sorting events by the X-Shopify-Triggered-At header or the payload’s updated_at. Status emails depend on this. Say a merchant’s subscription on the Billing API freezes and then re-activates. The app_subscriptions/update delivery about the freeze may arrive after the one about the re-activation. An app that emails on arrival then tells an active merchant that their subscription is on hold. Compare the delivery’s X-Shopify-Triggered-At with the latest one you’ve stored for that subscription, and skip the email when the delivery is older.

Keep Merchant and Shopper Emails Apart

Use one sending stream for merchant emails and another for shopper emails.

Google asks senders to keep promotions out of sales receipt messages and to use one From address per category of messages. Gmail’s one-click unsubscribe rule excludes transactional messages. Google’s examples are password resets, reservation confirmations, and form submission confirmations, and an install confirmation or a pre-order date change is the same kind of email. Marketing and subscribed emails, such as newsletters and upgrade offers to merchants, need one-click unsubscribe once your daily sends to Gmail go past 5,000 messages.

Who Can Build Your Shopify App?

When your team is short on Shopify engineers, a development studio can build the app with you. It can also build the systems behind the app’s transactional emails, such as the webhook handlers. Check whether a studio has shipped an App Store app before, as both studios below have.

StudioBased inApp Store experience
KLoc TechnologiesBengaluru, IndiaTwo apps of its own in the App Store; custom apps for merchants
InventalMontevideo, UruguayA client app taken through App Store review

KLoc Technologies

KLoc Technologies is a Bengaluru team that sells custom Shopify apps and integrations as a separate service. KLoc is also the developer behind Marketwise Discount Ninja and Marketwise Loyalty Ninja, both listed in the App Store. It builds on Ruby on Rails, the MERN stack, or Python, and connects a store to any outside service that has a REST API. Each project starts with a review of the client’s setup before KLoc proposes a solution. Its custom apps for individual merchants start at $1,000.

KLoc Technologies website with the “We are Kloc” headline and a link to book a discovery call

Invental

Invental is a development studio in Montevideo, Uruguay, that builds custom Shopify apps, checkout UI extensions, and themes alongside websites and mobile apps. One published case is a product-recommendation quiz app for a direct-to-consumer brand. Invental built the storefront quiz, the merchant admin, and the backend, and wired the HMAC-verified webhooks and the mandatory data webhooks. It then took the app through Shopify App Store review to approval. Work begins with a discovery week and runs in two-week sprints. Invental has no public price list.

Invental website with the “We build unique apps for businesses” headline and a Start a project button

Conclusion

An App Store app already subscribes to Shopify’s mandatory compliance webhooks, and the app/uninstalled webhook tells it when a merchant leaves. The uninstall and data emails are sent from those handlers, so add them first. Add the install confirmation and the trial ending reminder next: a merchant needs one to finish setup and the other to know when the paid plan starts.

FAQ

Does Reinstalling a Shopify App Restart the Free Trial?

Not on Shopify App Pricing. It counts trial days over a 180-day window. For example, a merchant who used 12 days of a 15-day trial and reinstalls 90 days later has 3 days left. Your trial ending email should use trialEndsAt for the date.

Can a Merchant Turn Off Shopify’s Shipping Emails If an App Sends Them?

Yes, for six of Shopify’s notifications. A merchant can skip the Order canceled, Order refund, Shipping confirmation, and Shipping update notifications one order at a time. The merchant does this by unchecking the customer notification while canceling, refunding, fulfilling, or editing tracking. Out for delivery and Delivered can be turned off in the store’s notification settings. The order confirmation isn’t among the notifications a merchant can switch off, though on the Shopify Plus plan the store owner can ask Shopify Support to turn off specific notifications. If your app replaces one of these, agree with the merchant how the Shopify version gets switched off.

Who Refunds a Merchant After They Uninstall a Paid App?

The app developer does. Uninstalling cancels future recurring charges, but the merchant may still be billed for the current cycle, and Shopify says refunds for third-party app charges are managed by the developer. You can credit an unpaid charge or refund a paid one. Name the address that handles refund requests in your uninstall email.

Related Articles
5 Best Analytics Tools For Boosting E-commerce Strategy in Shopify [2026]
Blog
For beginners
5 Best Analytics Tools For Boosting E-commerce Strategy in Shopify [2026]
Can't Shopify sort out your data? Discover the tools that will transform your analytics in 2026!
Vitalii Piddubnyi
Vitalii Piddubnyi
03 january 2026, 12:02
Transactional emails for small online stores – illustration of an e-commerce storefront, package, order confirmation, and email notifications.
Blog
For beginners
Transactional Emails for Small Online Stores
Key takeaways • What to send: A small store emails customers about orders, payments, shipping, refunds, accounts, and form requests. Whoever packs the orders gets a separate alert. • Check your builder’s defaults: Some emails go out on their own, and others stay off until you switch them on. Your builder may not send any […]
Andrew Dyuzhov
Andrew Dyuzhov
26 october 2026, 12:35 14 min
14 Best Mailchimp Transactional (Mandrill) Alternatives
Blog
For beginners
14 Best Mailchimp Transactional (Mandrill) Alternatives
Find the right Mailchimp Transactional alternative for transactional emailing to scale your email capabilities with a more affordable service. Check out these 14 Mailchimp Transactional competitors in our roundup.
Vitalii Piddubnyi
Vitalii Piddubnyi
19 september 2024, 11:44
Blog
Blog UniOne | Transactional email tips and resources
The UniOne blog provides insights, writings, and musings from the UniOne team about all things email. On our blog we talk about new features and email delivery best practices.
28 july 2026, 20:06
Commercial and Transactional Emails: the Differences
Blog
For beginners
Commercial and Transactional Emails: the Differences
What are the differences between transactional and marketing emails? Let's find out...
Alexey Kachalov
Alexey Kachalov
14 february 2023, 15:52
Email Invoice – Use Free Template
Blog
For beginners
Email Invoice – Use Free Template
Do you know how to write an invoice by email? Check out our detailed guide to see what information you need to include and review our templates.
Vitalii Piddubnyi
Vitalii Piddubnyi
05 august 2022, 14:57