Fake urgency used to be a thing you could find. A countdown timer is a script somebody installed, and a "low stock" badge is a theme setting. You can open the page, look at it and switch it off. An AI shopping assistant is different: it writes its own sales copy, one reply at a time, for one shopper at a time, and nobody else ever reads it. Four weeks before Black Friday, this is the rule we built into Lumnya, and why: a sentence about how much stock is left, or about when a sale ends, stands only when a record in the store says so.
Fake urgency on shopping sites, measured
The best measurement of fake urgency on shopping sites is still the one a Princeton team published in 2019. Arunesh Mathur and his co-authors crawled about 53,000 product pages on roughly 11,000 shopping websites, and then went back to the same pages again and again to see which claims held up. Their paper, *Dark Patterns at Scale*, is worth reading in full. Three of its counts matter for this piece.
They found 393 countdown timers. They recorded each one over repeated visits and called a timer deceptive if it reset after reaching zero with the same offer still on, or if the offer stayed valid after the timer ran out. 157 of the 393 were deceptive, on 140 websites. That's four in ten.
They found 47 "high-demand" messages ("selling out fast", "in high demand"). 38 of them appeared regardless of the product shown or the items in the cart.
And they found 632 low-stock messages ("Only 3 left"). Here the picture flips. Only 17 were deceptive. In 16 of those, the stock count went down on a fixed schedule. In the last one it was random on every page load. Eight of the 17 sites generated the numbers with third-party scripts. The authors name two of them, Hurrify and Booster, and describe both as popular Shopify plugins in 2019.
Figure 1 · Urgency on shopping sites, measured
Four in ten countdown timers were fake. Three in a hundred stock counts were caught.
Urgency messages found on about 11,000 shopping sites, and how many were caught faking or shown whatever the product.
Countdown timers
- found393
- deceptive157
High-demand messages
- found47
- shown whatever the product38
Low-stock messages
- found632
- caught as deceptive17
Read those numbers carefully. The 17 doesn't mean the other 615 stock counts were accurate: the team's test could only catch a count that changed in a suspicious way, and it left alone the sites whose numbers stayed the same between visits. What the 17 do show is where the proven lies came from. The claims caught lying were the ones attached to nothing: a timer counting down to a deadline that didn't exist, a "selling fast" banner that said the same thing about every product, and stock numbers generated by a script instead of read from the shop.
Three years later, the European Commission and national consumer authorities ran the same kind of check. Their sweep of 399 online shops, published on 30 January 2023, found that 42 websites used fake countdown timers with deadlines to buy specific products, out of 148 shops with at least one of the three dark patterns they looked for. The Commissioner's own summary was that "nearly 40%" of the shops relied on manipulative practices.
What the law already says
None of this is a grey area in Europe or the UK.
The EU's Unfair Commercial Practices Directive has a list of practices that are unfair "in all circumstances", with no test of whether the shopper was actually misled. Item 7 of Annex I is "Falsely stating that a product will only be available for a very limited time", or on particular terms for a very limited time, to get an immediate decision.
The UK copied the same item into its new consumer law. Paragraph 7 of Schedule 20 of the Digital Markets, Competition and Consumers Act 2024 bans falsely stating that a product will only be available for a limited time, and it has been in force since 6 April 2025. What changed is who can punish it, and how hard. The government's guidance for businesses says the CMA and the courts can now fine a trader up to 10% of its worldwide turnover, and it lists "pretend that a special offer will finish soon" as something a business must not do at all.
So the law is about what the trader says. It doesn't care whether a timer, a banner or an assistant said it. A Canadian tribunal already made that point about a chatbot in a different setting. In *Moffatt v. Air Canada* (2024; summary), the airline argued that its website chatbot was responsible for its own words, and the tribunal held the airline to what the bot had said. (This is a description of the rules, not legal advice for your store.)
Why an assistant is a different kind of problem
A countdown timer is one decision, made once. Somebody chose the app, configured it and saw it on the page. If it's fake, it's fake on every page, to every visitor, and anyone can find it. The sweep found 42 of them by looking.
An AI assistant makes that decision again in every reply. Its words are generated for one shopper, in answer to one question, and they're gone when the conversation ends. The merchant never sees them unless they read transcripts. A regulator running a sweep never sees them. The pressure a model adds isn't a setting anyone can audit. It's a habit of the model, showing up at some unknown rate in conversations nobody reviews.
And models do have the habit. Sales language is everywhere in what they learned from. "Limited stock, order soon" is what a helpful shop assistant sounds like in a million product pages and emails. Ask a model to be friendly and persuasive, and it will reach for it.
We saw this in our own testing. In a test conversation on 27 October, on one of our development stores, a shopper asked about a snowboard that the store sells on pre-order. The record was plain: 0 units on hand, sold on pre-order with no limit, shipping on 15 December. The assistant answered, in Greek, that the board's availability was "limited at the moment", so "it would be good to book it soon". A few turns earlier it had called the stock "limited" as well.
Nothing in the store said so. Our own prompt said the opposite: use urgency only when a tool confirms real low stock. The model had the instruction, and wrote the pressure anyway.

That's the reason this piece exists. We wrote about it from the other side in *A prompt is not a contract*. An instruction in a prompt is a hint to the model. The only thing that actually stops a sentence is code that runs on the reply before the shopper sees it.
The rule: every urgency claim points at a record
We split urgency into the three things a sales sentence can claim, and gave each one a record it has to match. What follows is how it works in Lumnya's chat as of the end of October, read from the code.
1. "Only a few left": the stock record
A sentence that claims scarcity or presses for haste ("limited stock", "only a few left", "selling fast", "running low", "hurry", "don't wait", "order it soon", in English, Greek and German) stands only when the product it's about really has little left. "Little" has a number: between 1 and 5 units on hand, across all of the product's versions, as synced from Shopify.
The gate first works out which product the sentence is about: the one it names, or, when it names none, the only product in the reply. Then it checks the stock. Plenty on hand: the claim goes. A version with no tracked inventory: the product is never "low", because nobody knows. Nothing on hand and still selling, like the pre-order board, is not low either. It's unlimited, just later. A sentence that names no product, in a reply about several, goes too: it carries no fact, only pressure.
What goes is the pressing clause, not the whole sentence. The first version removed whole sentences. In the next test conversation that took the shipping date out along with the pressure, and left the shopper's question ("are there only a few? should I hurry?") without an answer. Now the date stays, the pressure goes, and the assistant says the record's answer once: "I have nothing on record saying stock is limited."
A sentence that denies scarcity ("there's no rush, it isn't limited") is left alone. It needs no record to be honest.
2. "The sale ends tonight": the deadline record
This one has a stricter answer, because of what the assistant actually knows. What the chat can see about a sale is the product's price and its compare-at price. Neither carries an end date. The store's discounts that do have an end date aren't synced into the chat yet.
So no record can back "ends tonight", "today only" or "limited time" in a sentence about a sale, or "last chance" anywhere. Every one of them is removed. The assistant says instead: "I don't have an end date for this offer."
That's a limit, and we wrote it into the code as one. When discount end dates are synced, a deadline that matches one may stand. Until then, none does.
3. "30% off": the price record
The third claim is the size of the sale. Here the trap is quieter. Shopify's product record can make a sale look bigger than it is: the highest compare-at price of any reduced version, read against the lowest price of any version, can describe a board whose XS is down from 500 to 400 and whose cheapest large is 300 at full price as "40% off".
So the server works out the saving per version, from that version's own price and compare-at. If the versions save different shares, the assistant says "up to". A compare-at at or below the price, or more than ten times it, isn't treated as a reference price at all, and a saving under 1% isn't a sale. When the model says a named product is 25% off and the server says 20%, the number is replaced in place. When the product isn't on sale, the sentence becomes "X is not on sale right now."
Figure 3 · The gate, as built
Every urgency claim has to match a record
Four sentences an assistant might draft about one shop's products, and what the shopper reads.
What the assistant drafted
A record behind it?
What the shopper reads
“Only a few left, so order it soon.”
“I have nothing on record saying stock is limited.”
“Only 3 left, all sizes together.”
“The sale ends tonight.”
“I don't have an end date for this offer.”
“It ships in mid-December.”
And the bubble before anyone asks
Lumnya can open with a short teaser bubble before the shopper has typed anything. That's the most sales-shaped thing an assistant writes, and it answers no question, so it gets no benefit of the doubt. Scarcity in a teaser is removed outright, whatever the stock. Real low stock is shown there by a badge the server draws from the record, never by text the model wrote.

What we deliberately left alone
A rule like this can go too far, and a store assistant that never sells anything is no use to a merchant. So the line is narrow on purpose. (What an assistant may do on its own, rather than say, is a separate question, and we answered it here.)
Opinions stand. "This is a good price for a winter jacket" and "if you were already thinking about it, now is a sensible time" aren't claims about stock or time. They're the assistant doing what a good shop assistant does. No record is needed, and the gate doesn't touch them.
True low stock stands, in plain words. If a jacket has 3 left, all sizes together, "only 3 left" is a fact, and the shopper is better off knowing it. The gate exists to stop false urgency, not to make the assistant shy about real urgency.
Facts in the same sentence stand. The shipping date of a pre-order, the size that is sold out, the price: these stay when the pressure around them goes.
What this doesn't do
Three limits, stated as plainly as we can.
It closes false urgency. It doesn't create true urgency. In our agent pipeline the model isn't handed a stock count. It gets an "in stock" signal. So when the assistant says "only a few left" and the gate lets it stand, that's a sentence that happens to match the record, not one a tool told the model to say. If you want a real low-stock notice in front of shoppers, the badge does that job, not the chat.
It works from patterns in three languages. The phrases are written for English, Greek and German, and a model can find a phrasing the lists don't cover. We've found two in our own tests already. "Don't put it off too long" wasn't caught until a test conversation on a jacket showed it, and the Greek patterns missed the plural form of "stock" until another one did. Both are in now, each with a test that fails without it. That's how this kind of rule gets better: by watching real replies, not by assuming the list is finished.
It counts the product, not the size. The 1-to-5 rule adds up every version of a product. A jacket with 3 left in medium and 15 in small isn't "low" by this rule, so a scarcity sentence about it goes, even though the medium may well sell out first.
There's also a judgement in the number 5. It's our threshold for "low", not a legal one. A store selling one-off ceramics and a store selling socks would draw that line differently, and a merchant setting would be the right next step.
A checklist for Black Friday, with or without Lumnya
Black Friday is on 27 November this year. Here is what we'd check this week, in any store.
- Watch your timers run out. Open every page with a countdown, wait for zero, and reload. If the offer is still there or the timer starts again, it's the practice both the EU list and the UK Act ban.
- Ask where your low-stock numbers come from. If an app writes "Only 2 left", check that the number is your inventory and not a script. The Princeton team found counts that went down on a schedule.
- Put an end date on the sale itself. If you tell shoppers a sale ends on Monday, set the discount to end on Monday. Then the promise and the record are the same thing.
- Test your assistant with five questions. Pick a product with plenty of stock, one on pre-order, and one on sale with no end date. Ask each: "Is it running out?", "Should I hurry?", "When does the sale end?", "How much is it off?", "Will it be cheaper on Black Friday?". Read the answers against your own records.
- Ask your vendor one question. "What stops your assistant saying a product is running out when it isn't?" A good answer names the code that checks the sentence against the inventory record. "We tell it not to in the prompt" is the answer we gave ourselves before the 27th, and it wasn't enough.
The line
An assistant that sells well and an assistant that tells the truth aren't in conflict. The best salesperson in a real shop tells you when something is about to sell out, because it's true and you'd want to know. What they don't do is say it about everything.
That's the whole rule. The words can be the assistant's own. The facts have to be the store's.
Frequently asked questions
What is fake urgency in ecommerce?
A claim that pushes a shopper to buy now when nothing in the store backs it: a countdown timer that resets, a "selling fast" banner shown on every product, or a stock count generated by a script. The EU and the UK both list falsely claiming that an offer is about to end among practices that are banned outright.
Can an AI shopping assistant create fake urgency?
Yes. A model writes its own sales copy in every reply, and "limited stock, order soon" is common in what it learned from. In our own test, the assistant called a pre-order item "limited" while our prompt told it not to. That's why the check has to run on the reply, not in the prompt.
Can an AI assistant still say a product is running out?
Yes, when it's true. In Lumnya, a scarcity sentence stands when the product has between 1 and 5 units on hand across its versions, as synced from Shopify. Opinions such as "this is a good price" need no record and are left alone.
Sources
- [1] Arunesh Mathur, Gunes Acar, Michael J. Friedman, Elena Lucherini, Jonathan Mayer, Marshini Chetty, Arvind Narayanan, “Dark Patterns at Scale: Findings from a Crawl of 11K Shopping Websites”, Proc. ACM HCI (CSCW), November 2019 (accessed 2026-10-31)
- [2] European Commission, “Consumer protection: manipulative online practices found on 148 out of 399 online shops screened”, press release IP/23/418, 30 January 2023 (accessed 2026-10-31)
- [3] Directive 2005/29/EC (Unfair Commercial Practices Directive), consolidated text of 28 May 2022, Annex I, item 7 (accessed 2026-10-31) Link
- [4] Digital Markets, Competition and Consumers Act 2024, Schedule 20, paragraph 7 (in force 6 April 2025) (accessed 2026-10-31) Link
- [5] Department for Business and Trade, “What businesses need to know about unfair commercial practices” (updated 3 December 2025) (accessed 2026-10-31)
- [6] “Moffatt v. Air Canada”, 2024 BCCRT 149.
- [7] Lumnya, “A prompt is not a contract”.
- [8] Lumnya product behaviour described here was checked against Lumnya's code on 31 October 2026: the scarcity, sale-deadline and sale-percentage gates of the chat, the per-version saving, and the teaser gates.
Lumnya is a team of ecommerce AI agents for Shopify stores, now in private beta. Join the waitlist.
Comments
…Every comment is read and approved by a human before it appears — the same confirm-gated rule the product runs on.
Loading comments…
Filed under AI & Commerce
All posts