Cart Abandonment and Invisible Discounts: Is a Hidden Sale Costing You Conversions?

Roughly 7 out of every 10 shoppers who add something to a Shopify cart leave without buying it. That number has held steady at around 70% for over a decade, across studies, across platforms, across however many checkout redesigns the industry has thrown at it. It's noticeably worse on mobile than desktop, which matters given how much Shopify traffic now arrives on a phone, but the underlying pattern is the same regardless of device. It's one of the most reliable stats in ecommerce, and also one of the most misunderstood, because most of the advice built around it focuses on the same handful of well-known culprits: surprise shipping costs, a checkout that asks for too much, a forced account creation step.

Those causes are real and worth fixing. But there's a quieter one that almost never makes the list, specifically because it's hard to measure: a shopper who never actually saw the discount that was already working in their favor.

What we actually know about why people leave

Worth grounding this in real numbers before going further, because not all abandonment is recoverable, and pretending otherwise leads to chasing the wrong fix.

Baymard Institute's research, the most cited source in this space, finds that around 43% of shoppers who abandon say they simply weren't ready to buy on that visit, they were browsing, comparing, or saving something for later. That's a large chunk of the 70% that isn't really a conversion problem at all, it's just how people shop.

Of the remaining, addressable share, the most common named reasons are extra costs appearing late in checkout (cited by around 48% of abandoners), being forced to create an account (around 25%), a checkout process that feels too long or complicated, and a lack of trust in how payment information is handled. Every one of those is a documented, well-studied fix, and there's no shortage of guides covering exactly how to address each one. One reason sits closer to the topic of this post than the others: roughly 17% of abandoners cite the total cost not being shown clearly upfront. That's not specifically about discounts, but it's the same underlying issue, a shopper not having clear, trustworthy pricing information early enough in the journey to make a confident decision.

What's notable is that almost none of the standard lists include anything resembling "I didn't realize there was a discount" as a named category. That's not because it doesn't happen, it's because it's nearly impossible to measure directly. Nobody fills out an exit survey explaining that they left because a sale they qualified for never visually registered. It shows up in the data as ordinary, unexplained abandonment, indistinguishable from someone who simply changed their mind.

Where invisible discounts fit into this

Here's the connection worth making explicit. If your store has an active discount, an automatic one, a code shared in an email, a sale running on a specific collection, but nothing on the product or cart page visually reflects it, you've recreated a version of that same "unclear total cost" problem, just earlier in the funnel and self-inflicted rather than caused by a surprise shipping fee.

Think about what's actually happening from the shopper's side. They land on a product page. The price looks like a normal, full price, because nothing distinguishes it as discounted. They add it to the cart anyway, maybe they still want it, maybe they're price-comparing against other tabs, maybe they're just not in a rush. And here's the part that matters: there's nothing on that page creating a reason to finish the purchase today rather than next week. A visible "was $65, now $40" does real psychological work that an identical but invisible discount doesn't. It anchors the shopper to the idea that they're already getting a deal, and walking away from the cart starts to feel like walking away from money already saved, which is a meaningfully different feeling than just walking away from a price they could find anywhere. That's loss aversion doing the job urgency is supposed to do, and it only fires if the discount is something they can actually see.

Without that visible anchor, an active discount provides none of the urgency it's capable of providing. You're paying the same margin cost as a store that shows its sale clearly, while getting none of the conversion benefit that's the entire reason discounts work as a tactic in the first place.

Picture a shopper with two tabs open, your product page and a competitor's, both showing roughly the same price for similar items. If your price is actually discounted right now but doesn't look it, and the competitor's isn't discounted but happens to look slightly cheaper at a glance, you lose that comparison for reasons that have nothing to do with what either store is actually charging. The discount you're already paying for in margin loses to a sale that was never real, purely because of which page made its price legible faster.

The version with a code involved is worse, not better

If you've read our piece on discount codes failing at checkout, you already know codes add their own layer of friction. There's a related version of that problem that shows up earlier, before checkout even starts.

A shopper who received a code by email, found one on social media, or got it from an influencer, arrives at the product page with a specific expectation: this should be cheaper than what I'm looking at right now. If the page gives them no confirmation that anything has changed, no badge, no adjusted price, nothing, they're left holding an unresolved question instead of a clear answer. Does the code still work? Did I copy it wrong? Is this even the right product? That hesitation sits in roughly the same territory as the documented "lack of trust" and "checkout too complicated" abandonment causes, except it's happening a full step earlier, before they've even reached the part of the funnel most stores spend their optimization budget on.

A shopper who isn't sure whether their discount applied is statistically more likely to leave and "deal with it later" than one who can see, immediately, that it already has. In practice "deal with it later" quietly becomes never, the tab closes, the email gets buried under twenty others, and the purchase that almost happened just doesn't.

What this is plausibly costing you

It's worth being honest about scale here rather than reaching for an alarming headline number. The frequently quoted "$4 trillion lost to cart abandonment" figure gets thrown around a lot, and it's not a particularly useful one, since most of that total comes from the 43% who were never going to buy regardless of what your product page looked like. The more grounded estimate, the one Baymard itself prefers, is closer to $260 billion in recoverable revenue across US and EU ecommerce, recoverable specifically through fixing the friction that's actually fixable.

Invisible discounts sit squarely in that recoverable bucket, because the fix doesn't require touching your checkout flow, your shipping rates, or your account creation policy at all. It's purely a visibility problem on a page you already control. If even a modest share of your already-intent-driven abandoners, the 57% or so who weren't just browsing, are seeing a price that doesn't reflect savings that genuinely exist, that's lost conversion you're not even aware you're paying for, since nothing in your analytics specifically flags "discount was active but invisible" as a reason someone left.

A useful way to size this for your own store: take your current conversion rate on pages where a discount is active, and compare it honestly to your conversion rate on a comparable non-discounted page. If a live sale isn't outperforming a regular price by a noticeable margin, that's a real signal worth investigating, a discount that doesn't move conversion any more than full price isn't failing as a tactic, it's failing to register at all.

Making the discount impossible to miss

The fix is less about a specific tool and more about a principle: if a discount is real, it should be visible everywhere a shopper is making a decision, the product page, the collection grid, and the cart, not just buried in the final total at checkout.

Concretely, that means a badge or strikethrough price that shows up the moment a discount is active, not just a lower number with no context. It means a cart that visibly reflects the savings rather than a flat total that looks the same whether a discount applied or not. And if codes are part of your strategy, it means giving the shopper some signal that their code is recognized before they've committed to checking out at all, not after.

This is the exact gap Show Discount is built around, a badge that syncs automatically with whatever discount is actually live, so the visible price and the real price never drift apart. Whether you solve it with an app or with manual price field updates, the principle matters more than the method: an active discount nobody can see is functionally the same as no discount at all, except you're still paying the margin cost of one.

A few quick answers

Is "just browsing" abandonment worth trying to fix? Not really, and trying to chase it usually wastes effort better spent elsewhere. That segment wasn't going to buy on that visit regardless of price or visibility. The opportunity is in the shoppers who had real intent and hit friction, that's the addressable 57%.

How would I even know if invisible discounts are costing me conversions? There's no analytics flag for it directly, since it shows up as ordinary cart abandonment with no distinguishing signal. The more useful question is simpler: open your own product pages right now while a discount is active and check honestly whether you, as a stranger, would know there's a deal happening.

Does this matter more for some kinds of discounts than others? Automatic discounts are the highest-risk case, since there's no code, no email, nothing prompting the shopper to expect a lower price, the page is the only place it could possibly show up. Code-based discounts are slightly more forgiving since the shopper already has some expectation going in, but they still benefit from visible confirmation rather than silent faith that it'll work out at checkout.

Would fixing this actually move my overall abandonment rate, or is the effect too small to notice? Probably not enough to single-handedly move your headline abandonment percentage, that number is dominated by the unavoidable browsing segment and broader checkout friction. The more honest way to think about it is as one specific, fixable leak rather than a fix for abandonment in general, worth closing on its own terms rather than expecting it to show up as a dramatic shift in a top-line metric.

Subscribe to our newsletter

Be the first to know the latest