Founding merchants lock in lifetime founder pricing.
Docs

Automation

Building Workflows

Triggers, steps, delays, conditions, discounts and A/B splits. Build a flow yourself, from a template, or with your own AI.

A workflow is an automated sequence that runs on its own when something happens in your store. For example: a customer abandons their cart → xUpsell waits 1 hour → sends a reminder email → waits 1 day → sends a follow-up with a discount code. It runs 24/7, even while you sleep.

Workflows are the most powerful feature in xUpsell. Once you set one up and turn it on, it works forever — reaching every customer at the perfect moment, automatically.


Three Ways to Create a Workflow

You don’t need to be a marketing expert. xUpsell gives you three ways to create workflows — pick the one that fits your comfort level:

1. Ask Your Own AI Assistant (Fastest)

xUpsell doesn’t have an AI assistant of its own. Instead, you connect the AI you already use — Claude, ChatGPT, or any other MCP-compatible client — and it builds workflows in your store on your behalf.

How to do it:

  1. Go to Settings → Connect AI and copy Your connection URL
  2. Paste it into your AI client’s Connectors / MCP servers settings
  3. Approve the connection when your Shopify admin opens (click Allow access)
  4. Ask your AI for what you want — for example:

    “Create an abandoned cart workflow with an email after 4 hours and an SMS after a day”

  5. Your AI builds the workflow and saves it as a draft
  6. Open it in xUpsell, review and edit anything you like
  7. Turn it on when you’re ready

Everything your AI builds is a draft. A draft sends nothing to anyone. Making a workflow live is a separate, deliberate step — your AI can’t slip it past you, and xUpsell refuses to publish a workflow that has no trigger, has no steps, or clashes with a workflow that’s already live on the same trigger.

Two things to check on an AI-built workflow: personalization tags don’t work in xUpsell (see Personalizing Your Messages below), and if you later ask your AI to change the steps it rewrites the whole flow — anything it wasn’t told to keep is removed.

2. Use a Template

Pick a ready-made workflow from the template library — a complete set of steps and message content you only need to adjust.

How to do it:

  1. Go to the Templates page
  2. Browse the xUpsell Templates tab (or My Templates for ones you saved yourself)
  3. Click a template to preview all the steps
  4. Click Use template — this creates a new draft workflow and opens it in the workflow editor
  5. Click Select trigger and choose what starts the workflow (a template arrives with no trigger set)
  6. Customize the content to match your brand
  7. Turn on the workflow from its Overview page when ready

Good to know: The xUpsell template library is available on Basic ($99/mo), Pro ($199/mo), and Premium ($299/mo) plans. On the free plan those cards are disabled and you’ll see an “xUpsell Templates require a paid plan” banner. Save as template works on every plan, including Free — your own templates are never gated. Upgrade from Settings → Plans & billing. Full details are in our Templates guide.

3. Build It Yourself (Full Control)

Use the visual drag-and-drop canvas to build your workflow step by step.

How to do it:

  1. Go to the Workflows page
  2. Click Create workflow
  3. Click Select a trigger to start from scratch, or Browse Templates to start from a template
  4. In the editor, choose your trigger from the panel that slides in from the right
  5. Drag steps from the left sidebar onto the canvas — Email, Card (SMS/MMS), Notification, Delay, Condition, and more
  6. Connect the steps by drawing lines between them
  7. Configure each step (write your email, set the wait time, etc.)
  8. The editor saves as you work — you’ll see Saved in the top-right, and there’s a Save changes button if you want to save immediately
  9. Close the editor and click Turn on workflow on the workflow’s Overview page

If you see “Validation failed” instead of “Saved”, hover it to see why. The editor won’t save a flow with unconnected steps, an email with no subject, an SMS with no message, a delay of zero, or a condition whose True/False paths aren’t both connected.


Choosing a Trigger

A trigger is the event that starts your workflow. When the trigger happens, xUpsell creates a new “run” of the workflow for that specific customer.

Think of it like a domino — the trigger is the first domino that sets everything else in motion.

TriggerWhat Starts the WorkflowBest Used For
Abandoned cartCustomer adds items to cart but doesn’t check outCart recovery emails with reminders and discounts
Abandoned checkoutCustomer starts checkout but doesn’t finishCheckout recovery — they were very close to buying
Abandoned product pageCustomer views a product page but leaves without actionNudge with more info, reviews, or a small discount
New customerSomeone creates an account in your storeWelcome series — introduce your brand
Subscribed to receive email marketingCustomer subscribes to receive marketing emailsEmail welcome series, first-purchase incentive
Subscribed to receive push notificationsCustomer enables browser push notificationsInstant push welcome, flash sale alerts
Subscribed to receive SMS/MMS marketingCustomer subscribes to receive text messagesSMS welcome, exclusive text-only offers
Order createdA new order is placed in your storeThank-you sequence, ask for a review, cross-sell
Post-purchaseAfter checkout is completedThe upsell offers shown right after checkout
Shopify flowTriggered by a Shopify Flow automationAdvanced: combine Shopify Flow logic with xUpsell messaging
View productCustomer views a product pageFollow up with product info or related products
Low stockA product variant drops to 5 or fewer in stock, for shoppers who asked to be told about that productAlert interested customers to buy before it’s gone
Out of stockA sold-out product variant comes back in stock, for shoppers who asked to be toldNotify customers who were waiting
Product discountA price change on a product a shopper signed up to watchAlert customers when products go on sale
Discount subscriptionSomeone signs up to receive a discount codeSend the promised discount code

Which trigger should I start with? Abandoned cart is the highest-ROI automation for most stores. Customers who abandoned their cart were already interested — they just need a nudge. Try it first.

Two Rules About Triggers

  • A workflow can’t be turned on without a trigger. If you try, xUpsell shows “Can’t activate workflow without trigger”.
  • Only one workflow can be live per trigger. If you turn on a second workflow that uses the same trigger, xUpsell warns you and offers to turn the other one off — otherwise both would run for the same customer and every message would arrive twice.

Head Start Delays

Three triggers wait a while before they start a workflow, so you don’t chase a customer who was simply still shopping: Abandoned cart, Abandoned checkout and Abandoned product page. Set how long in Settings → Preferences (minimum one hour each) — the defaults are 2 hours, 1 hour and 8 hours.

Every other trigger, Order created included, starts its workflow as soon as the event happens. To delay one of those, put a Delay step at the start of the workflow.


Adding Steps to Your Workflow

Steps are the actions your workflow takes after the trigger fires. You drag them from the sidebar on the left of the editor. You can add as many as you need and connect them in any order.

StepWhat It DoesExample
EmailSends an email to the customer. Rich content with images, buttons and links. A subject line is required.”You left something in your cart!” with product images
Card (SMS/MMS)Sends a text message to the customer’s phone. Requires a connected Twilio account.”Your cart is waiting! Use code SAVE10 → [link]“
Text / Image / Audio / File / VideoDragged onto an existing Card to add another part to that message — extra text, or media so it goes out as an MMS. Up to 10 media parts per card.Add a product photo to your text
NotificationSends a browser push notification to the customer’s device. Free and unlimited on every plan.”Don’t forget your cart! 🛒“
DelayPauses the workflow for a set time before continuing to the next step.Wait 4 hours, wait 1 day, wait 3 days
ConditionChecks a fact about the event that started the workflow, then splits into a True and a False path.”Cart total greater than 50?” → True: send a discount → False: send a reminder
DiscountCreates a Shopify discount and makes its code available to later steps as {{discount_code}}. Two types: Percentage or Free Shipping.Generate a 10%-off code, then include it in the next email
Update ProductChanges the actual Shopify product price by a percentage (drop or raise). This affects the price everyone sees.Drop the price by 10% for a flash sale
Shopify Flow TriggerHands the run over to Shopify Flow so you can continue the logic there.Trigger a Shopify Flow to tag the customer
AB SplitSplits the flow into weighted branches on the canvas. Each customer continues down exactly one branch, chosen at random in the proportions you set (for example 50/50 or 70/30).Send half your customers a discount email and the other half a plain reminder
OfferThe post-purchase upsell shown right after checkout. Only available when the workflow’s trigger is Post-purchase.”Add this matching product for 20% off”

Important: Discount and Update Product are not the same. Discount creates a Shopify discount code you can put in your messages. Update Product changes the live Shopify product price for everyone and creates no discount code.

Post-purchase workflows are different. When a workflow’s trigger is Post-purchase, the sidebar offers only the Offer step — you build a chain of offers, each branching on whether the shopper accepted or declined. Shopify shows at most 2 offers in a row (up to 3 in total if you branch), and post-purchase upsells require Basic or higher. How that offer page looks is designed separately in Settings → Post-purchase.

How Steps Connect

Steps are connected by drawing lines between them on the canvas. The workflow follows the lines from one step to the next:

  • Linear flow: Trigger → Step 1 → Step 2 → Step 3 (one after another)
  • Branching flow: Trigger → Condition → True path (Step A) / False path (Step B)
  • Parallel flow: Trigger → Step 1 splits into Step 2A and Step 2B, and both run

Good to know: You can mix and match step types in almost any order — an email, then a wait, then a condition on the cart total, then either a follow-up email or an SMS.

What Conditions Can Check

A condition checks a fact about the event that started the workflow — not the customer’s history. The available checks depend on your trigger:

TriggerExamples of What You Can Check
Abandoned cartCart Total, Cart Quantity, Currency, Product Title, Vendor, SKU, Line Quantity, Line Price, and whether the person is an Email / Phone / Notification subscriber
Abandoned checkoutTotal Price, Currency, whether a Shipping Address or Discount Code exists, and subscriber channels
Abandoned product page / View productSKU, Price, Vendor, Product Title, Product Type, Currency
Order createdTotal Price, Currency, Financial Status, Total Discounts, Created At
Post-purchaseTotal Price, Currency, Fulfillment Status, Tracking Company, dates, and subscriber channels
New customer and the three Subscribed to… triggersWhether the person is an Email / Phone / Notification subscriber

There is no condition for “did they purchase?” or “did they open the last email?” — xUpsell can’t check those. Use the facts above instead, for example Cart Total greater than 50 to send a bigger discount only to bigger carts.


Personalizing Your Messages

In the email editor you can insert variables such as {{firstName}} from the variables menu, and they appear as gold tokens on screen.

Please read this before using them. Those tokens are not filled in when the message is sent — your customer would receive the text {{firstName}} exactly as written. Write your copy without them for now.

The one variable that genuinely works is {{discount_code}}:

VariableWhat It DoesWhere It Works
{{discount_code}}Replaced with the code created by a Discount step earlier in the same workflowEmail body, SMS/MMS message, and push notification content

How to use it: put a Discount step in your workflow before the message, then write {{discount_code}} where the code should appear. If no Discount step ran first, the text is left as-is — so always add the Discount step.


Turning Workflows On, Off, and Archiving

Workflow Statuses

StatusWhat It MeansWhat Happens
DraftWorkflow is saved but has never been turned onNothing happens — it’s just a design waiting to be turned on
ActiveWorkflow is liveListens for its trigger and automatically processes customers
InactiveWorkflow has been turned offNo new runs start, and runs already in progress stop too
ArchivedMoved out of your active listHidden from the main Workflows view, but its data is kept

How to Change Status

ActionHow to Do ItWhen to Use
Turn on workflowOpen the workflow → on the Overview page, click Turn on workflowWhen your workflow is ready to go live
Turn off workflowOpen the workflow → on the Overview page, click Turn off workflowWhen you want to stop it
ArchiveOverview page → Archive, or tick the workflow on the Workflows page and choose Archive workflowsWhen you’re done with it but want to keep the data
DuplicateOverview page → Duplicate, or tick one workflow on the Workflows page → Duplicate workflowTo reuse a flow as the starting point for a new one
DeleteOnly offered while the workflow has never run — Overview page → Delete, or tick it on the Workflows page → Delete workflowsTo remove a workflow you never used

Important: Turning a workflow off is a full stop, not a pause. Customers who are partway through it will not receive their remaining steps. Turning it back on does not resume them either — only new triggers create new runs.

Once a workflow has run at least once you can’t delete it — only archive it. Archiving keeps its history and metrics.


How Workflow Execution Works

Here’s what happens behind the scenes when a workflow runs — explained simply:

  1. A trigger fires — For example, a customer abandons their cart (after the delay you set in Settings → Preferences)
  2. xUpsell creates a “run” — A new, independent run of the workflow starts for that specific customer, using a snapshot of the workflow as it is right now
  3. Steps execute in order — Each step happens one at a time, following the lines on the canvas
  4. Delay steps pause the run — If a step says “wait 4 hours,” the run pauses and resumes automatically after 4 hours
  5. Conditions check and branch — The workflow checks the condition and follows the appropriate path (True or False)
  6. The run completes — When all steps are done the run finishes, and the counters on the workflow’s Overview page go up

Each customer gets their own independent run. If 50 people abandon their carts, 50 separate runs happen — each at the right time for that individual customer.

What Happens in Parallel

If a step has more than one outgoing line, every one of those branches runs. The two exceptions are Condition and AB Split: those always continue down exactly one path. Branches are independent and don’t interfere with each other.


What Happens When a Step Fails

Sometimes a step can’t complete successfully. Here’s what happens:

Failure ScenarioWhat HappensWhat You Should Do
Email provider rejects the sendThe email step is marked as failed with the reason and the rest of that customer’s run stops.Check your email provider in Settings → Mailbox management — the deliverability checklist there flags what’s missing
Subscriber has no email addressThe email step is marked as failed (“No recipient email address found”). The run continues.Reach that person on another channel, or gate the email behind a condition on Email Subscriber
Subscriber has no phone numberThe SMS step is marked as failed. The run continues to the next step.Reach them on another channel, or put the SMS behind a condition on Phone Subscriber
Customer replied STOP to your textsThe SMS step is marked as failed and the run continues, so they still get your email and push steps. Their opt-out applies to SMS onlyNothing to fix — texting them again isn’t possible until they reply START
Phone number or email address isn’t usableThat step is marked as failed and the run continues to the next stepCorrect the address on the subscriber, or gate the step behind the matching Subscriber condition
The phone number on file isn’t a valid numberThe SMS step is marked as failed and the rest of that customer’s run stops.Fix the number on that subscriber’s record — it needs the country code, like +14155551234
Customer never allowed push notificationsThe notification step is marked as failed. The run continues to the next step, so they still get your email and SMS steps.Nothing to fix — or put the push behind a condition on Notification Subscriber if you’d rather it didn’t show as failed
The push is rejected when it’s sent, or push is switched off for your storeThe notification step is marked as failed and the rest of that customer’s run stops.Check that push notifications are switched on for your store. A device that has unsubscribed is cleared automatically, so the next run treats that customer as having no push and carries on
You’ve hit your send limit, or no plan is selectedThe email or SMS step fails with “Send limit reached (X/Y). Please upgrade your plan.”and the rest of that customer’s run stops.Go to Settings → Plans & billing to choose or upgrade a plan. Push notifications keep working

Good to know: If a customer can’t be reached on one channel, that step is recorded as failed and the run keeps going, so they still receive your other channels. That covers no email address on file, no phone number, notifications never allowed, an address or number that isn’t usable, and a customer who replied STOP to your texts — an SMS opt-out never costs them your emails. What still stops the rest of that customer’s run is a problem on your side rather than theirs: a send blocked by your plan, your email or SMS provider rejecting the send for an account reason (wrong credentials, no credit), or a channel switched off for your whole store. That way a real problem surfaces instead of being quietly skipped.

There’s no failure report screen in xUpsell today. The Executed / Impressions / Clicks / Conversions counters on each workflow’s Overview page are where you’ll notice a workflow that isn’t delivering.


Example Workflows

Here are three workflows you can build today — with your AI assistant, from a template, or by hand.

Example 1: Abandoned Cart Recovery (Multi-Channel)

The highest-ROI workflow for most stores. Trigger: Abandoned cart.

StepTypeTimingWhat It Does
1NotificationStraight away”You left something behind! 🛒 Complete your order before it sells out.”
2Delay4 hours
3EmailFull email with product images and a link back to their cart
4ConditionCheck: Cart Total greater than 50
5a(True) DiscountCreate a 10%-off Percentage discount
5b(True) Email“Here’s 10% off to finish your order: {{discount_code}}
6(False) Delay → Card24 hours”Hey! Your cart is still waiting → [link]”

Remember the trigger’s own head start: the run begins after the Abandoned cart delay you set in Settings → Preferences.

Example 2: Welcome Series for New Email Subscribers

Build a relationship over their first week. Trigger: Subscribed to receive email marketing.

StepTypeTimingWhat It Does
1EmailImmediatelyWelcome email: introduce your brand, what to expect, link to bestsellers
2Delay2 days
3Notification“Check out our newest arrivals! 🆕“
4Delay2 days
5EmailYour bestsellers and what makes them worth it
6Delay3 days
7Discount → EmailCreate a 15%-off code and send it: “15% off your first order: {{discount_code}}

Example 3: Back-in-Stock Alert

Turn a sold-out product into a sale. Trigger: Out of stock (it fires when a variant comes back into stock, for people who asked to be told).

StepTypeTimingWhat It Does
1NotificationImmediately”It’s back! Your item is in stock again.”
2Delay2 hours
3EmailProduct photo, price, and a direct link to buy
4Delay1 day
5Card (SMS)“Still available — but not for long → [link]“

Frequently Asked Questions

How many workflows can I have?

There’s no limit on the number of workflows you can create on any plan.

Can I run multiple workflows at the same time?

Yes — as many as you like, and they all run independently. The one restriction is that only one live workflow per trigger is allowed, so you can have an abandoned cart workflow, a welcome series and an order follow-up all live at once, but not two live abandoned cart workflows.

What happens if a customer triggers the same workflow twice?

A new run is created each time. If a customer abandons their cart on Monday and again on Wednesday, they go through the cart recovery workflow twice.

Can I edit a workflow that’s already running?

Yes. Each run uses a snapshot of the workflow taken when it started, so your changes apply to new runs only. Customers already partway through continue with the version they started on.

What’s the difference between workflows and campaigns?

Workflows run automatically when triggered by customer behaviour (abandoned cart, new subscriber, etc.). Campaigns are messages you decide to send — right now or at a scheduled time. Use workflows for automated responses. Use campaigns for announcements and promotions.

Can I preview a workflow before turning it on?

You can review every step and its content in the editor, and the Preview button in the editor’s top bar shows the flow in read-only form.

To try a workflow for real, open it and click Test on its overview page. (Post-purchase workflows don’t have a Test button — their offers only appear during a real checkout, so test those by placing a test order in your store.) The test runs this one workflow once, and picks a recipient who can actually receive what your workflow sends — a push step needs a subscriber with notifications enabled, an email step needs one with an email address, an SMS step needs one with a phone number. If your workflow uses several channels, it first looks for one subscriber who has all of them. If nobody does, it tests a single channel instead — trying your workflow’s channels in the order the workflow uses them — so the test still sends something real. That’s usually you, if you subscribed on your own storefront first.

Real messages are sent, so test with your own subscription, not a customer’s. The confirmation tells you which channels the test used and where to look — for example “Test sent by push and email — check your device and inbox.” If one of your workflow’s channels has no eligible subscriber, it says so and tells you that step is skipped — the rest of the workflow still runs. And if nobody in your store can receive the workflow at all, the test won’t start: you’ll be told exactly what’s missing (notifications turned on, an email address or a phone number) so you can subscribe on your storefront and try again.

What if a customer only has some of the channels my workflow uses?

They still get the ones they can receive. If your workflow sends a push notification and then an email, someone who never allowed notifications simply doesn’t get the push — and still gets the email. Each channel is delivered on its own, and a channel that can’t reach someone is recorded as skipped rather than cancelling the rest.

The same applies to campaigns: a customer stays in the audience as long as they can receive at least one of the channels your campaign uses.

A genuine problem is treated differently. If a send fails because something is actually wrong — your Twilio account is disconnected, or you’ve hit your plan’s send limit — the workflow does stop for that customer, so the failure surfaces instead of being hidden.

How do conditions work?

A condition checks a fact about the event that started the workflow — the cart total, the product’s price, whether the person is an SMS subscriber, and so on. Based on the result the workflow follows the True or the False path. Both paths must be connected to something, or the workflow won’t save.

Can my AI assistant build complex workflows with conditions?

Yes. Be specific — “Create an abandoned cart workflow that checks whether the cart total is over 50 before sending a discount, using email first and SMS the next day” — and it will build the conditions, delays and channels for you. It always saves the result as a draft for you to review, and it can’t turn anything on without your explicit go-ahead. See Settings → Connect AI.

Do I pay xUpsell extra for the AI?

No. Connecting an AI client is available on every plan and there’s no limit on how many clients you can connect. You pay your own AI provider directly at their rates.