# Email customers about stalled orders before they ask where it is

> Every weekday morning we find orders that were paid but never shipped, email those buyers a real status update, and log it all in Gladly.

- Workflow type: agent
- Services: Gladly, Shopify, Slack
- Categories: Customer Support, Operations
- Published: 2026-08-14

## What it does

- Checks every weekday morning for orders that were paid but still have not shipped past your normal lead time.
- Tells the difference between an order that is genuinely stuck and one already moving through the warehouse, so you only contact people who are really waiting.
- Skips anyone who already has an open support conversation about that order, then emails everyone else a personal apology with where their order stands and a realistic new date.
- Records every message on the customer's Gladly timeline and posts a Slack summary to your support lead covering who was contacted, who was skipped, and which orders need a human to chase.

## What you'll need

- A Shopify store with online orders
- A Gladly account where your customer profiles live
- A Slack workspace and a channel for your support lead
- A sense of your normal lead time, meaning how many days between payment and shipping counts as normal for your brand

## Prompt

Every weekday at 8am, find Shopify orders that customers have already paid for but that still have not shipped past our normal lead time, and reach out to those buyers before they have to ask where their order is.

Start with Shopify List Orders to pull orders that are paid and unfulfilled, looking back over the last 30 days and ignoring anything cancelled or refunded. Treat an order as past lead time when more than 3 business days have passed since payment, and make that threshold easy for me to change. Cap the run at 25 orders, oldest first, because Gladly allows roughly 10 requests per second per organization and I would rather process a small batch reliably every morning than trip the limit.

For each candidate order, call Shopify List Fulfillment Orders on it to work out whether the order is genuinely stalled or already moving. Fulfillment orders that are open or unassigned with no activity mean the order is stuck. Fulfillment orders that are in progress, scheduled, or already closed against a fulfillment mean the warehouse is working it, and I do not want to apologize for an order that is about to ship. Use judgement rather than a rigid rule: a partly fulfilled order whose remaining items have not moved in days still counts as stalled.

For each stalled order, take the buyer's email from the order and look them up with Gladly Find Customers. Gladly customer emails are unique across the org, so email is a safe key for joining a Shopify order to a Gladly profile. If no Gladly customer matches, skip the outreach and list that order in the digest instead of creating a new profile.

Before sending anything, call Gladly List Customer Conversations for that customer and read the recent timeline. Skip anyone who already has an open conversation about this order, since an agent is already on it, and skip anyone this workflow has already emailed about the same order. Nobody should get double-messaged.

For everyone who is left, use Gladly Send Email to send a personalized apology. Write each one for that customer rather than filling in a template: name what they ordered, say plainly where the order actually stands, give a realistic revised expectation instead of a vague promise, and invite them to simply reply if they need something. Keep it short and human, apologize once rather than repeatedly, and never invent a ship date that the fulfillment data does not support.

Gladly outbound sends through the communications API are non-routable and non-searchable, so agents will not find that email in the conversation history. Immediately after each send, use Gladly Add Conversation Note to log the outreach on the customer's timeline with the order number, how many days it had been stalled, a summary of what I told them, and the revised date I promised. That note is what an agent will rely on when the customer replies.

Finish with a single Slack Send a Message digest to the support lead's channel. List who was contacted, with order numbers and days waiting; who was skipped, with the reason for each; and call out separately any order stalled long enough that a human needs to chase fulfillment, meaning more than 7 days since payment with no fulfillment activity. If nothing was stalled this morning, post a short all-clear rather than staying silent.

## How to customize

- Change what counts as late, for example treat anything unshipped after two days as stalled instead of three
- Adjust the run time and pick which Slack channel receives the morning summary
- Move the escalation line, meaning how many days an order has to sit before it gets flagged for a human to chase
- Send a text message instead of an email for customers who have given you phone consent

## FAQ

### Will this email customers whose orders are already on the way?

No. Before writing to anyone, it checks how the order is actually progressing through fulfillment. Orders that are picked, packed, scheduled, or already shipped are left alone. Only orders sitting untouched past your lead time get an email.

### What if the customer has already contacted us about the order?

They get skipped. The workflow reads the customer's recent conversation history in Gladly first, and anyone with an open conversation about that order is left to your agents so nobody gets messaged twice. The Slack summary tells you who was skipped and why.

### Will my agents see the email that was sent?

Yes. Outbound messages of this kind do not show up in normal conversation search in Gladly, so the workflow also writes a note on the customer's timeline with the order number, how long it was stalled, and the date that was promised. When the customer replies, your agent has the full record.

### How many orders does it handle in one run?

It works through a capped batch each morning, oldest orders first, so it stays comfortably inside Gladly's usage limits. The default is 25 orders per run and you can raise or lower it.

### Do I need a developer to set this up?

No. You connect your Shopify store, your Gladly account, and Slack, then tell it your normal lead time and which channel should get the summary.

Use this prompt in General Input: https://www.generalinput.com/prompts/email-customers-about-stalled-orders-before-they-ask-where-it-is