Low stock alerts are one of the oldest features in ecommerce and one of the least useful, because they answer the warehouse's question and not the media buyer's. "Product X is at 12 units" is trivia. "Product X's size 10 has three days of cover and two campaigns spent £180 on it yesterday" is a decision. This is how to build the second kind.
Direct answer: A low stock alert that matters for ads is based on days of cover rather than units, fires per variant rather than per product, goes to the person who can change the ads rather than the warehouse, and arrives with the action attached: which campaigns touch the variant, what they spent, and the choice between excluding, buffering or letting it run. Shopify Flow can send the trigger. The join to spend has to come from somewhere else.
Why the standard alert gets ignored
Three reasons. It is in units, and units mean nothing without a sell rate. It is per product, so it fires for the parent when the unpopular sizes are fine and stays silent when the core sizes are gone. And it goes to people who already know. By the third week everyone has a filter for it.
Cover, not units
Days of cover is units on hand divided by average daily units sold, usually over the last fourteen days. Ten units is a month of cover for a slow line and an afternoon for a bestseller on promotion. Set the alert threshold from your restock lead time plus a margin: if a reorder takes ten days, an alert at twelve days of cover gives you time to act, and an alert at three days is a post-mortem. The full method, including how promotions distort the sell rate, is in days of cover, and you can run the numbers in the free calculator.
Variant, not product
For anything with sizes or colours, the product-level number lies. A dress in six sizes can show 40 percent stock with every core size gone, and show 40 percent stock with only the 6 and the 16 gone. One of those is an emergency. The alert has to be per variant, and ideally it knows which variants are core: core-size automation explains how to name them.
Route it to the person with the ad account
Purchasing knows. The warehouse knows. The person who does not know, and who is spending money on it right now, is whoever runs paid media, and in a small brand that is often the founder at 11pm. Send the alert there, in the channel they actually read, and only for the SKUs that are advertised. An alert on every product in the catalogue is a newsletter.
Attach the action
The difference between an alert and a brief is the next sentence. A useful alert says: size 10 of the Harris jacket has three days of cover; it is in the Bestsellers product set used by two campaigns that spent £180 on it yesterday; options are exclude it now, withhold the last five units from ads, or let it sell through. That is a decision someone can make in thirty seconds. Building that sentence needs spend joined to stock per variant, which is the part Shopify cannot do on its own.
Building it with what you have
| Piece | Native option | Limit |
|---|---|---|
| Trigger on inventory | Shopify Flow: inventory quantity changed, condition on variant | Units, not cover. You compute cover elsewhere and feed the threshold back |
| Message | Flow to email or Slack | Says what is low. Does not say what is spending |
| Join to spend | Weekly export of catalogue item reporting matched to variant IDs | Manual, weekly, so the alert is stale by the time it is joined |
| Action | Flow tag to feed label to set exclusion | Automatic exclusion, no judgement, no revert date |
That gets you most of the way for a small catalogue. The manual join is the piece that does not scale, and it is the piece that turns an alert into a decision.
A low stock alert without the spend attached is the warehouse talking to itself. Put the campaigns in the message and it becomes the media buyer's morning.
What Ralph's version looks like
The morning brief lists the advertised variants under their cover threshold, with the campaigns and product sets that touch them and yesterday's spend against them, ranked by money at risk. Each line has the staged action: exclude in this campaign, withhold the last units, or leave it, with a revert. Approve, reject, or ignore. Nothing is written until you say so. The whole stock-to-spend mechanism is in how Ralph handles out-of-stock sizes and SKUs, and the argument for briefs over alerts is in why a short brief beats another dashboard.
Build the alert yourself
0 of 6 done. Ticks stay on this device. When they are all ticked you know exactly what a desk would be doing for you.
Build a low stock alert that ads people will act on
- Pick the SKUs that are advertised. An alert on every product is noise. Start with the products in your catalogue ad sets and your top static ads.
- Use days of cover, not units. Units on hand divided by average daily units sold over the last 14 days. Set the threshold from restock lead time plus a safety margin.
- Alert per variant. A parent at 40 percent stock with its core sizes gone is the alert. A parent at 40 percent with only tail sizes gone is not.
- Route it to the media owner, not the warehouse. The warehouse already knows. The person who can pause, exclude or brief a new creative is the one who needs the message.
- Attach the action. Which campaigns and product sets touch the variant, roughly what they spent yesterday, and the two or three options: exclude, buffer, or let it run.
- Review the thresholds monthly. Sell rates change by season. An alert set in July is wrong in November.
Questions people actually ask
Does Shopify have low stock alerts?
Not as a simple built-in notification for every plan. Shopify Flow, available on many plans, can send an email or Slack message when inventory for a variant drops below a number. Plenty of apps do the same with nicer interfaces. What none of them do out of the box is tell you which ads are still spending against the product.
What threshold should a low stock alert use?
Days of cover, not units. Ten units is a month for a slow product and an afternoon for a bestseller. Cover is units on hand divided by daily sell rate. Set the alert at restock lead time plus a safety margin, so it fires while you can still do something about it.
Should low stock alerts be per product or per variant?
Per variant, always, for anything with sizes or colours. The product-level number hides the situation that costs the most money: the core sizes gone and the tail sizes still counting as stock.
Who should get the alert?
Whoever can change the ads. Purchasing and the warehouse usually already know. The gap is the media owner, in-house or agency, who finds out at the month-end review that a campaign spent two weeks on a sold-out size.
Can an alert pause my ads automatically?
It can trigger a tag that drives a feed label that excludes the product from a set. That is the honest automation. An alert that directly pauses ad sets is a blunt instrument and usually stops siblings that could still sell. The staging approach, alert plus a proposed action a human approves, is what Ralph does.
If a sold-out size is the problem: Ralph reads every size against every campaign overnight, finds the ones still paying for an empty shelf, and stages the exclusion with a revert for restock day. You say yes. See Ralph · How Ralph handles out-of-stock sizes · Docs