Skip to content

Shopify Low-Stock Messages and Urgency Signals, Done Honestly

25 October 202613 min readBy , LeelaRam Technologies
Share

How to show Shopify low-stock messages, countdown timers and demand signals that are true: India's false urgency rules, the Liquid data that can mislead you, sensible thresholds and an audit you can run today.

Shopify low-stock messages such as 'Only 3 left' are among the most useful things a product or collection page can show, when they are true. They help a shopper who is deciding between two products, they prevent the disappointment of coming back next week to find a size gone, and they reward the shopper who acts. The trouble is that urgency is also one of the most abused patterns in e-commerce: timers that reset on every visit, 'only 2 left' on a product with 400 in the warehouse, '27 people are viewing this' generated by a random number. Shoppers have learned to spot these, and in India the government has named them.

This guide is about doing urgency honestly. It covers what India's dark patterns guidelines say about false urgency, the Shopify inventory data you would build a low-stock message on and where that data can mislead you, how to choose thresholds that mean something, how to handle countdown timers and demand signals, and an audit you can run on your own store. It is practical guidance, not legal advice; if you are unsure whether a specific message is compliant, ask a lawyer.

What India's dark patterns guidelines say about false urgency

On 30 November 2023, the Central Consumer Protection Authority notified the Guidelines for Prevention and Regulation of Dark Patterns, 2023, under section 18 of the Consumer Protection Act, 2019. As published summaries of the notification describe them, the guidelines apply to platforms that systematically offer goods or services in India, and to advertisers and sellers. They list a set of specified dark patterns, with false urgency first.

The guidelines define false urgency as falsely stating or implying a sense of urgency or scarcity so as to mislead a user into making an immediate purchase or taking an immediate action that may lead to a purchase. The definition explicitly includes showing false popularity of a product to manipulate a decision, and stating that quantities are more limited than they actually are. One of the illustrations given is presenting false data on high demand without appropriate context, with examples in the style of 'Only 2 rooms left!' and '30 others are looking at this right now'.

In June 2025, the CCPA followed up with an advisory asking e-commerce platforms to self-audit for dark patterns within three months and to submit self-declarations, according to reports of the advisory dated 5 June 2025. Whatever your view of how strictly this will be enforced on smaller D2C stores, the direction is clear, and the test it sets is simple: is the urgency true?

Honest urgency versus fake urgency, side by side

  • Honest: 'Only 3 left in size M', shown when the inventory count for size M is 3 and the store stops selling at zero. Fake: 'Only 3 left' hard-coded on every product.
  • Honest: a countdown to the end of a sale that actually ends at that time, after which prices go back up. Fake: a timer that restarts for each visitor or each session.
  • Honest: 'Order by 2 pm for dispatch today', if your warehouse really dispatches same-day orders placed before 2 pm. Fake: the same message on a weekend when nothing ships until Monday.
  • Honest: 'Bestseller in Earrings this month', based on your actual sales ranking. Fake: a 'Trending' badge on whatever the team wants to push.
  • Honest: 'Limited edition of 50 pieces', if you will not remake it. Fake: 'Limited stock' on a core product you restock every month.

The honest versions are not weaker. In many ways they work better, because a shopper who checks back and finds the timer has ended, or the size really is gone, learns that your store tells the truth.

Building Shopify low-stock messages on the right inventory data

Most themes that show 'Only X left' messages build them from the variant object in Liquid. Shopify's Liquid reference describes the relevant properties, and two caveats in that documentation are easy to miss.

  • variant.inventory_quantity is the inventory quantity of the variant. But Shopify's documentation notes that if inventory is not tracked, it returns the number of items sold instead. A message built on that number for an untracked product would be counting sales, not stock.
  • variant.inventory_management returns nil if inventory tracking is turned off for the variant. Checking it first tells you whether the quantity means anything.
  • variant.inventory_policy is either 'continue', meaning the store keeps selling when stock reaches zero, or 'deny', meaning it stops. If the policy is 'continue', 'Only 2 left' is not true in any useful sense, because the shopper can still buy at zero.
  • variant.available is true or false, depending on whether the variant can be bought.
  • variant.incoming is true when the variant has incoming inventory, from transfers, purchase orders or apps, and variant.next_incoming_date gives the date of the next arrival. These let you say 'Back on 4 November' honestly instead of just 'Sold out'.

Put together, an honest low-stock condition checks three things before showing a number: inventory is tracked, the policy is to stop selling at zero, and the quantity is at or below your threshold. In Liquid terms, the condition reads along the lines of: if variant.inventory_management is set, and variant.inventory_policy is 'deny', and variant.inventory_quantity is greater than zero and at most your threshold. If your theme's built-in message does not check the first two, ask your developer to add them.

Where honest-looking numbers can still mislead

Even with the right Liquid checks, a few store setups make the number less true than it looks.

  • Made-to-order and handcrafted products. If a piece is made after the order, the stock figure is an administrative number, not scarcity. Many jewellery and furniture stores set a token quantity on these; a low-stock message on them is false urgency by accident. Turn off the message for made-to-order products.
  • Stock shared with marketplaces or offline stores. If the same inventory sells on marketplaces or in a physical store and syncs to Shopify periodically, the Shopify count can lag. A message that says 'Only 3 left' when there are really 0 or 10 is wrong in both directions.
  • Untracked products. As above, an untracked variant's inventory_quantity reports items sold. Never build a stock message on it.
  • Bundles and kits whose components are tracked separately. The bundle's own number may not reflect what can actually be assembled.
  • Stock you hold back deliberately, for example for a wholesale order. If 20 units are physically there but not for sale, either keep them out of the Shopify count or do not show a low-stock message based on the full count.

Choosing a low-stock threshold that means something

Many themes ask for a single low-stock threshold, often defaulting to something like 5 or 10, applied to every product. That is the simplest setup and often a misleading one, because 'low' depends on how fast a product sells. Five units of a style that sells one a month is three or four months of stock. Five units of a festive bestseller that sells ten a day will be gone by lunch.

Shopify's inventory reports help here. The report Inventory sold daily by product shows the average units sold per day for each variant, and Inventory remaining per product estimates how many days remain before stock runs out. Use them to set thresholds in terms of time rather than units.

  1. 1Open the Inventory remaining per product and Inventory sold daily by product reports for the last 30 days.
  2. 2Decide what 'low' means for your store in days. For a fast-moving fashion brand, under 7 days of cover might be low; for a jewellery store with slower sales, it might be under 14 days.
  3. 3For your top sellers, convert that into a unit threshold. A variant selling 2 a day with a 7-day definition gets a threshold of 14; one selling 1 a week gets a threshold of 1 or 2.
  4. 4If your theme only supports one threshold, set it for the products where the message matters most, usually your bestsellers, and accept that it will be conservative elsewhere. Showing nothing is better than showing something false.
  5. 5Review thresholds before major sale periods, when daily sales can jump and 'low' arrives sooner.

A worked example. A Mumbai apparel brand has a cotton kurta set selling about 3 a day in size M during the festive weeks, and about 1 a day in size XXL. With a 5-day definition of low, size M shows 'Only a few left' from 15 units, and XXL from 5. In a theme with one global threshold of 5, size M would only show the message once it was hours from selling out, and the message would be useless to the shoppers it was meant for.

Countdown timers without the tricks

Countdown timers are the urgency signal most often faked, so they deserve their own rules.

  • A timer must count down to a real end: the moment a discount expires, a sale price reverts or a free gift offer stops. In Shopify, discounts carry an end date and time; the timer should match it.
  • The timer should be the same for every visitor. A timer that starts when a shopper arrives, or resets when they return, is false urgency by definition.
  • Use your store's time zone, and say which one if you sell internationally. 'Ends at midnight' means different things in Mumbai and Dubai.
  • When the timer reaches zero, the offer must actually end. If you extend a sale, change the end date openly rather than letting the timer roll silently to a new deadline.
  • Do not run a timer on an offer that never ends. A permanent '20% off, ends in 02:14:33' is the classic fake.

Demand and popularity signals

Signals such as 'Bestseller', '120 sold this week' or 'Trending' tell a shopper that other people chose this product. The guidelines name false popularity explicitly, so these need the same discipline as stock messages.

  • Base every popularity claim on real data, and be able to say what it is. 'Bestseller' should mean top sellers by orders or revenue in a stated period, not an editorial pick.
  • Show a time frame for counts. '120 sold' without a period could mean this week or the last five years.
  • Avoid live 'people viewing now' counters unless they come from real session data and you can explain how they are counted. Random or inflated counts are exactly the illustration the guidelines give.
  • Retire badges when they stop being true. A 'Trending' badge applied in March and still there in October is no longer honest.

Editorial picks are fine, as long as they are labelled as picks. 'Our founder's favourite' or 'Staff pick for Diwali gifting' is honest and often more persuasive than a vague 'Hot'.

Urgency on collection pages

Low-stock badges on the collection grid can help shoppers spot pieces that will not be around long, but the grid is also where a shopper sees many products at once, so a badge on every third tile stops meaning anything. Keep collection-level urgency badges for products that are genuinely close to selling out across most sizes, and keep size-level messages for the product page, where the shopper has chosen a variant.

There is also an ordering question. A collection whose first row is full of low-stock products sends shoppers to pages where their size is likely gone. And a collection whose first row includes sold-out products wastes the most valuable positions on the page entirely. Urgency messaging and collection order work together: the products at the top should be ones a shopper can actually buy in most sizes.

Sale seasons: where the pressure to fake it is highest

Diwali, end-of-season sales and Black Friday weeks are when teams are most tempted to add urgency everywhere. They are also when shoppers see the most of it and trust it least. A few rules for sale weeks:

  1. 1Set the discount end date in Shopify first, then build every timer, banner and email from that one date.
  2. 2Check thresholds against festive sales speeds, not normal weeks.
  3. 3Have someone check, on the morning after a sale ends, that every timer, banner and 'ends tonight' message is gone or updated.
  4. 4Do not use 'last chance' messaging for a sale you already plan to extend.

An honest urgency audit you can run today

  1. 1List every urgency element on your store: stock messages, badges, timers, delivery cut-offs, popularity counts, pop-ups. Check the product page, collection page, cart and checkout-adjacent areas, and any app that adds widgets.
  2. 2For each, write down where its number or deadline comes from. If the answer is 'it's hard-coded' or 'the app generates it', investigate before keeping it.
  3. 3For stock messages, confirm the theme checks that inventory is tracked and the policy is to stop selling at zero, and that the message is per variant.
  4. 4Turn off stock messages on made-to-order products and on products whose inventory is not tracked.
  5. 5For timers, confirm each one maps to a real discount end date and is identical for every visitor.
  6. 6For popularity signals, confirm the data source and add a time frame where counts are shown.
  7. 7Remove anything you cannot explain to a customer who asks 'Is that true?'.

Honest trade-offs

  • Honest urgency shows up less often than fake urgency. Some products will never show a low-stock message, and that is correct.
  • Accurate per-variant messages and real timers can need theme work. Removing a fake element costs nothing; building a true one may cost a developer's time.
  • Some third-party widgets do not explain how they compute their numbers. If you cannot verify a widget's data, turning it off is the safer choice.
  • Being honest will not stop competitors from being dishonest. What it builds is a store whose messages shoppers believe, which matters more with every repeat purchase.

Let stock data shape the page, not just the badge

The most honest use of stock data is not a badge at all. It is deciding which products to put in front of shoppers. A collection that leads with in-stock, well-selling products, and that moves slow sellers forward when there is too much stock of them, uses inventory to help shoppers rather than to pressure them.

SellRank, our Shopify collection-sorting app, is built for that. It ranks a collection by real performance and lets you add conditions such as in-stock, so the first positions go to products shoppers can actually buy. It also includes sell-through and days of stock cover rankings on every plan, with clearance logic that never mistakes made-to-order items for overstock, which is the same distinction that matters for honest low-stock messages. You preview the exact order before it goes live, keep a human override with pins and demotions, and on the Grow plan and up it re-sorts daily or weekly so the page keeps up with stock as it changes.

If you want your collection pages to reflect what is really in stock and really selling, see SellRank at /products/sellrank. The free plan covers one collection with the full editor, live preview and one live sync.

Sumit Chavda

Written by

Founder, LeelaRam Technologies

Founded LeelaRam Technologies after building and running e-commerce technology for a live jewellery brand. Builds SellRank, and writes here about Shopify, merchandising and software that keeps working.

LinkedIn Portfolio All articlesAbout the company

Common questions

Is it legal to show 'Only 3 left' on my Shopify store in India?+

A true low-stock message is not what the guidelines target. The CCPA's 2023 dark patterns guidelines prohibit false urgency, including stating that quantities are more limited than they actually are. If the number reflects real, tracked stock for the selected variant and you stop selling at zero, the message is accurate. Ask a lawyer about specific cases.

Why does my Shopify low-stock message show the wrong number?+

Common causes are untracked inventory, where Shopify's Liquid inventory_quantity returns items sold rather than stock; a 'continue selling when out of stock' policy; a message based on the whole product instead of the selected variant; and stock shared with marketplaces or physical stores that syncs to Shopify with a delay.

What low-stock threshold should I use on Shopify?+

Base it on time rather than a fixed unit count. Use Shopify's Inventory sold daily by product and Inventory remaining per product reports to see how fast each variant sells, decide how many days of cover counts as low for your store, and convert that into units for your bestsellers. Review it before sale seasons.

Are countdown timers dark patterns?+

Not when they count down to a real deadline that applies to everyone. A timer that matches your Shopify discount's end date and is the same for every visitor is honest. A timer that restarts for each visitor, resets on return, or keeps rolling on a permanent offer creates false urgency, which India's 2023 guidelines prohibit.

Should made-to-order products show low-stock messages?+

No. If a product is made after the order is placed, its stock count is an administrative number, not real scarcity, so a low-stock message would mislead shoppers. Turn the message off for made-to-order and untracked products, and use honest lead-time messaging instead, such as the number of days a piece takes to make.

Can I show how many people are viewing a product?+

Only if the number comes from real session data and you can explain how it is counted. India's dark patterns guidelines give '30 others are looking at this right now' style messages as an example of false urgency when the data is false. Random or inflated counters should be removed, and real counts benefit from a stated time frame.

Related

Put this to work on your store

SellRank orders any Shopify collection by real demand — free to try on one collection, no code.

See the product