# Increase Conversion Rate Shopify Pages: Honest Urgency Test in VWO

> You'll build a Liquid snippet that shows only real stock levels, sale deadlines and review counts under your Shopify product price. Then you'll test it in VWO so checkout completions, not hunches, decide whether it stays.

- Canonical page: https://convincelab.com/blog/shopify-urgency-social-proof-vwo-test/
- Site: Convince lab (convincelab.com)
- Format: executable marketing psychology playbook
- Published: 2026-11-12
- Last updated: 2026-11-12
- Author: Covince Lab
- Citation policy: every data claim links, in the same sentence, to the page it came from. Claims without a source are not published.

Search "increase conversion rate Shopify" and you'll get the same advice again and again: add a countdown timer, add a "selling fast" badge, add a pop-up that says someone in another city just bought. Some of that works. Plenty of it doesn't, and some of it quietly damages trust. The principle underneath is loss aversion, which simply means people feel a loss more sharply than an equal gain. Everyday example: losing a banknote from your wallet stings more than finding the same note on the street feels good. Pair that with social proof (we look at what other people did when we're unsure), and you have the two levers this playbook uses. You'll build an honest urgency banner and a social proof micro-widget in your Shopify theme with Liquid, then [test](https://convincelab.com/blog/persuasion-marketing-how-test-verified-claims-landing-pages/) them in VWO against your current page, with checkout completions as the number that decides.

Last updated: November 2026

## Playbook at a glance

| Item | What it means for this playbook |
| --- | --- |
| Principle | Loss aversion (a missed deal feels worse than an equal gain feels good) plus social proof (other buyers' choices reduce doubt). |
| Where to apply it | Your Shopify product page template, directly under the price and above the Add to cart button. |
| What you will ship | A Liquid snippet that shows real low-stock counts, real sale deadlines and real review counts, plus a VWO test that switches each element on for a share of visitors. |
| Primary metric | Checkout completions per product page visitor (orders placed divided by visitors who saw the page). |
| Guardrail metric | Revenue per visitor, return or refund rate on test orders, and support messages about stock or pricing. |
| Ethics risk | Medium. Truthful stock and deadline messages are fine; the same banner turns into a dark pattern the moment the number or the deadline is invented. |

## What the research actually shows

Start [with](https://convincelab.com/blog/increase-conversion-rate-shopify-decoys/) the foundation.

Kahneman and Tversky's [1979 prospect theory paper](https://www.jstor.org/stable/10.2307/1914185) introduced the theory as a descriptive alternative to expected utility theory, based on choices under risk. That same [prospect theory study](https://www.jstor.org/stable/10.2307/1914185) reported risk aversion for choices involving sure gains and risk seeking for choices involving sure losses. In plain words: people play it safe to keep a gain and gamble to avoid a loss.

Does it still hold? A later replication reported that the 1979 empirical foundation [replicated across 19 countries and 13 languages](https://www.publichealth.columbia.edu/news/global-study-confirms-influential-theory-behind-loss-aversion). The same [global replication report](https://www.publichealth.columbia.edu/news/global-study-confirms-influential-theory-behind-loss-aversion) found 90 percent replication in areas directly testing the theory's central contrasts. That report also notes that [some effects were less strong than in 1979](https://www.publichealth.columbia.edu/news/global-study-confirms-influential-theory-behind-loss-aversion).

Now the uncomfortable part. A [2023 meta-analysis of product scarcity](https://onlinelibrary.wiley.com/doi/full/10.1002/mar.21816) found greater purchase likelihood for some scarcity conditions, but not for urgency scarcity defined by limited quantity or limited time. So a countdown or a "low stock" line isn't a reliable lever on its own. It's a hypothesis.

Social proof is similar. A [study of 170 Shopify social-proof experiments](https://www.dtcpages.com/blog/social-proof-ab-tests) reported that 37.1% were wins and 19.4% were losses at its stated 90% threshold. That report defines social proof as [showing that other people bought, used, or endorsed a product](https://www.dtcpages.com/blog/social-proof-ab-tests) and measuring whether that changes how many visitors buy. Read that loss rate twice. Some social proof tests made things worse.

Limits of the evidence matter here. The [retrieved sources don't establish a causal lift](https://www.dtcpages.com/blog/social-proof-ab-tests) in Shopify checkout completions from Liquid urgency banners or social-proof widgets specifically. Nothing in this evidence isolates VWO experiments on Shopify product pages either. That's exactly why this guide ends in a controlled test rather than a promise. Treat the banner and the widget as working hypotheses you'll confirm or kill with your own traffic.

And there's a line you can't cross. A study that crawled [approximately 11K popular shopping websites](https://arxiv.org/html/1907.07032) documented dark patterns including urgency, which it describes as imposing a deadline on a sale or deal to accelerate decisions and purchases. The difference between your banner and a dark pattern is whether the deadline and the stock number are true.

## What you need before you start

Gather these first. Skipping any of them is how tests end up unreadable.

- **Theme access.** Staff permission to edit themes in Shopify admin (Online Store, then Themes). Duplicate your live theme before touching code so you always have a clean copy.

- **Real inventory tracking.** In each product variant, "Track quantity" switched on. If Shopify doesn't track a variant's stock, the snippet won't show a stock line for it, and that's deliberate.

- **A real deadline field.** A product metafield definition for sale end time (you'll create it in Step 3). Only fill it when a sale truly ends at that moment.

- **Review data**, if you want the social proof widget. Many review apps write to Shopify's standard `reviews.rating` and `reviews.rating_count` metafields; check your app's docs to see whether yours does.

- **A VWO account** with its tracking code installed on the storefront. VWO offers a Shopify integration; check VWO's own Shopify help pages for how it records purchases, because checkout pages don't run your theme's scripts.

- **Purchase tracking you trust.** In Shopify admin, Settings, then Customer events, you can see which pixels receive checkout events. Confirm a test order shows up in VWO before you launch anything.

- **A baseline.** Pull checkout completions per product page visitor for the products you'll test, over recent whole weeks, from Shopify analytics or VWO. Write it down with the date range.

- **A fallback plan** if you can't run VWO: a manual before/after comparison over matching whole weeks, with the caveat that seasonality and ads will muddy it.

## Implement it step by step

Five steps. Budget a working day for the build and QA, then let the test run.

### Step 1: Audit the current product page

Open your best-selling product [page](https://convincelab.com/blog/pricing-page-psychology-example-webflow-vwo/) on mobile, because that's where most product page doubt shows up. Look at the space between the price and the Add to cart button. Ask what a hesitant buyer is missing at that exact point.

- Is there any stock signal at all? Many themes say "In stock" and nothing else.

- Is there an active sale, and does the page say when it ends? If the sale has no end date, you have no deadline to show. Fine.

- Do review stars appear near the price, or only far down the page?

- Are there existing urgency elements from apps (timers, "X people viewing")? List each one and check whether its number comes from real data. If you can't verify it, remove it before testing anything new, or your test will measure two things at once.

Write down which products have tracked inventory, which have a real sale end date, and which have reviews. [That](https://convincelab.com/blog/social-media-marketing-trends-2026/) list decides which products enter the test.

**Check:** you have a written list of eligible products and every existing urgency element is either verified as true or removed.

### Step 2: Write your variants

Keep variants tight. Each one changes one idea.

- **Control (A):** your page as it is today.

- **Urgency (B):** a real low-stock line when stock is genuinely low, and a real sale deadline when a sale is genuinely ending. Loss framing lives here ("Sale price ends Sunday at 23:59").

- **Social proof (C):** the review rating and review count, moved up next to the price.

Why split B and C instead of stacking them? Because the evidence on each is mixed, and if you combine them you'll never know which one helped or hurt. If your traffic is too thin for three arms, run A versus C first, then A versus B. Social proof goes first in that order only because it carries less trust risk; there's no data here saying it wins more often.

Write the exact copy now using the templates further down. Don't write "Hurry!" or "Almost gone!" without a number behind it.

**Check:** every sentence in B and C can be traced to a field in Shopify (inventory quantity, a metafield, or review metafields).

### Step 3: Build the snippet in Liquid

First, create the deadline field. In Shopify admin go to Settings, then Custom data, then Products, and add a metafield definition with namespace and key `custom.sale_ends_at` and type "Date and time". Add a second one, `custom.sale_label`, type "Single line text", for wording like "Spring sale price". The exact menu labels can shift between admin updates, so if you don't see them, search Shopify's help center for "metafield definitions".

Next, in your duplicated theme, open the code editor and create a new snippet called `cl-proof.liquid`. Paste this:

```
{%- comment -%}
  Convince lab: honest urgency + social proof block.
  Shows only real data: tracked stock, a real sale deadline, real review counts.
  Hidden by default. VWO adds a class to <html> to reveal parts of it.
{%- endcomment -%}
{%- liquid
  assign v = product.selected_or_first_available_variant
  assign ends_at = product.metafields.custom.sale_ends_at.value
  assign now_s = 'now' | date: '%s' | plus: 0
  assign ends_s = 0
  if ends_at != blank
    assign ends_s = ends_at | date: '%s' | plus: 0
  endif
  assign tracked = false
  if v.inventory_management == 'shopify' and v.inventory_policy == 'deny'
    assign tracked = true
  endif
-%}
<div class="cl-proof" data-cl-proof data-threshold="{{ low_stock_threshold }}">
  <p class="cl-proof__stock cl-urgency" data-cl-stock
     {% unless tracked and v.inventory_quantity > 0 and v.inventory_quantity <= low_stock_threshold %}hidden{% endunless %}>
    Only <span data-cl-qty>{{ v.inventory_quantity }}</span> left in this option
  </p>

  {%- if ends_s > now_s -%}
  <p class="cl-proof__deadline cl-urgency" data-cl-deadline data-ends="{{ ends_s }}">
    {{ product.metafields.custom.sale_label.value | default: 'Sale price' }}
    ends {{ ends_at | date: '%A %b %e at %H:%M' }}
    <span data-cl-countdown></span>
  </p>
  {%- endif -%}

  {%- assign rc = product.metafields.reviews.rating_count.value | default: 0 -%}
  {%- if rc > 0 -%}
  <p class="cl-proof__reviews cl-social">
    Rated {{ product.metafields.reviews.rating.value.rating | round: 1 }}
    out of {{ product.metafields.reviews.rating.value.scale_max }}
    from {{ rc }} customer reviews
  </p>
  {%- endif -%}
</div>

<script type="application/json" data-cl-variants>
{ {%- for variant in product.variants -%}
  "{{ variant.id }}": {% if variant.inventory_management == 'shopify' and variant.inventory_policy == 'deny' %}{{ variant.inventory_quantity }}{% else %}null{% endif %}{% unless forloop.last %},{% endunless %}
{%- endfor -%} }
</script>
```

Then add the behaviour and styles. Create `assets/cl-proof.js`:

```
(function () {
  var root = document.querySelector('[data-cl-proof]');
  if (!root) return;
  var threshold = parseInt(root.getAttribute('data-threshold'), 10);
  var stockEl = root.querySelector('[data-cl-stock]');
  var qtyEl = root.querySelector('[data-cl-qty]');
  var dataEl = document.querySelector('[data-cl-variants]');
  var stock = dataEl ? JSON.parse(dataEl.textContent) : {};

  // Update the stock line when the shopper picks another variant.
  function refreshStock() {
    var idInput = document.querySelector('form[action*="/cart/add"] [name="id"]');
    if (!idInput || !stockEl) return;
    var qty = stock[idInput.value];
    var show = qty !== null && qty !== undefined && qty > 0 && qty <= threshold;
    stockEl.hidden = !show;
    if (show) qtyEl.textContent = qty;
  }
  document.addEventListener('change', function (e) {
    if (e.target.closest('form[action*="/cart/add"], variant-selects, variant-radios')) {
      setTimeout(refreshStock, 50);
    }
  });

  // Countdown to a real deadline. Removes itself when the deadline passes.
  var deadline = root.querySelector('[data-cl-deadline]');
  if (deadline) {
    var ends = parseInt(deadline.getAttribute('data-ends'), 10) * 1000;
    var out = deadline.querySelector('[data-cl-countdown]');
    var tick = function () {
      var left = ends - Date.now();
      if (left <= 0) { deadline.remove(); return; }
      var h = Math.floor(left / 3600000);
      var m = Math.floor((left % 3600000) / 60000);
      out.textContent = '(' + h + 'h ' + m + 'm left)';
    };
    tick();
    setInterval(tick, 30000);
  }
})();
```

Add this CSS to your theme's main stylesheet or a new `assets/cl-proof.css`:

```
.cl-proof .cl-urgency,
.cl-proof .cl-social { display: none; }
html.cl-show-urgency .cl-proof .cl-urgency:not([hidden]) { display: block; }
html.cl-show-social .cl-proof .cl-social { display: block; }
.cl-proof p { margin: 0.4rem 0; font-size: 0.95rem; }
.cl-proof__stock, .cl-proof__deadline { color: #8a3b00; font-weight: 600; }
.cl-proof__reviews { color: #333; }
```

Finally, open your product template's main section (in Dawn-style themes it's `sections/main-product.liquid`) and render the snippet just below the price block:

```
{% render 'cl-proof', product: product, low_stock_threshold: 5 %}
<script src="{{ 'cl-proof.js' | asset_url }}" defer></script>
```

Change the threshold to a level you'd honestly call low for your restock cycle. That's your call, not a benchmark.

Note the design choice. Nothing shows by default. Control visitors see your page unchanged, and VWO only adds a class to switch elements on. That keeps the experiment clean and means you can roll back by removing one class.

**Check:** on the duplicated theme preview, adding `cl-show-urgency` and `cl-show-social` to the `<html>` element in your browser's dev tools reveals the right lines, and removing them hides everything.

### Step 4: QA every state

This is where most urgency banners go wrong. Here's what actually happens on a lot of stores: the "Only [N] left" line is cached, or it doesn't change [when](https://convincelab.com/blog/good-conversion-rate-benchmarks-2026/) the shopper switches size, so it lies.

Test each of these on the preview theme:

1. A variant with tracked stock above your threshold: no stock line.

2. A variant at or below the threshold: stock line with the correct quantity.

3. Switching between those two variants: the line appears and disappears correctly.

4. A variant that's untracked or set to continue selling when out of stock: no stock line, ever.

5. A product with no sale end date: no deadline line.

6. A sale end date a few minutes in the future: countdown runs, then the line vanishes when it passes, without a reload.

7. A product with zero reviews: no review line (an empty "0 reviews" line is worse than nothing).

8. Mobile layout. The block shouldn't push the Add to cart button below the fold on a small phone.

One more thing about the "now" filter in Liquid: Shopify can serve cached pages, so the server-side deadline check might be slightly stale. The JavaScript removes an expired deadline on load, which covers that gap.

**Check:** all eight states behave correctly, and you've placed one real test order and seen it recorded in VWO.

### Step 5: Launch the VWO test

Publish the duplicated theme (the block is invisible without a VWO class, so publishing changes nothing for shoppers yet). Then create an A/B test in VWO:

- **Targeting:** URL pattern for your product pages (URLs containing `/products/`), limited to the eligible products from Step 1 if you can.

- **Variation B code:** `document.documentElement.classList.add('cl-show-urgency');`

- **Variation C code:** `document.documentElement.classList.add('cl-show-social');`

- **Control:** no code.

- **Primary goal:** completed purchase, recorded through VWO's Shopify integration or your purchase-event setup.

- **Secondary goals:** add to cart clicks, revenue (so you can watch revenue per visitor).

- **Traffic split:** equal across arms.

VWO's interface labels change over time, so match these concepts to whatever its test-creation screens currently call them, and check VWO's documentation if a setting isn't where you expect.

**Check:** in VWO's preview for each variation, you see the expected elements, and the live report starts counting visitors in every arm within a few hours.

## Copy and design templates

Adapt these. Keep the brackets honest: each one maps to a real field.

```
LOW STOCK (only when tracked quantity is at or below your threshold)
Only [QUANTITY] left in this [SIZE/COLOUR/OPTION]
Only [QUANTITY] left. We restock [RESTOCK_TIMING_IF_KNOWN].
[QUANTITY] left at this price

DEADLINE (only when a sale really ends at this time)
[SALE_NAME] price ends [DAY] at [TIME] [TIMEZONE]
Save [REAL_DISCOUNT_AMOUNT] until [DAY] [TIME] ([COUNTDOWN] left)
After [DAY], this goes back to [REGULAR_PRICE]

SOCIAL PROOF (only from real review or order data)
Rated [RATING] out of [SCALE_MAX] from [REVIEW_COUNT] customer reviews
[REVIEW_COUNT] reviews. Most mention [TOP_THEME_FROM_REVIEWS].
"[SHORT_REAL_REVIEW_EXCERPT]" ([REVIEWER_FIRST_NAME], verified buyer)
```

Example: a small skincare store running a weekend sale could show "Weekend sale price ends Sunday at 23:59 IST" under the price, and nothing at all once Sunday passes. No made-up countdown resets, no stock line on items it doesn't track.

Layout notes:

- Place the block between price and Add to cart. That's the decision point.

- One line per signal, plain text, no flashing.

- Use a warm accent colour for urgency, but not error red (red reads as "something broke").

- Keep review stars and count together; a count without a rating, or a rating without a count, invites suspicion.

- Don't add a pop-up. It covers the very button you want clicked.

## Run the experiment

Write the hypothesis before you look at any data.

```
HYPOTHESIS
Because shoppers weigh a missed [DEAL/ITEM] more heavily than an equal gain,
showing [TRUE LOW-STOCK COUNT / TRUE SALE DEADLINE / REAL REVIEW COUNT]
below the price on [PRODUCT SET] will change checkout completions per
product page visitor compared with the current page.

PRIMARY METRIC:   checkout completions / product page visitors
GUARDRAILS:       revenue per visitor, refund or return rate on test orders,
                  support tickets mentioning stock, price or deadlines
SEGMENTS TO READ: mobile vs desktop, new vs returning
DECISION RULE:    ship the variant only if the primary metric wins at the
                  confidence level you set below AND no guardrail is worse
```

Sizing and timing. You need your baseline from the prerequisites and the smallest change you'd actually care about. Enter both into VWO's test duration or sample size calculator inside the tool, and accept the duration it gives you. Don't invent a number of days because it feels long enough.

- Run whole weeks so weekday and weekend shoppers are both represented.

- Pick your confidence threshold before launch. For reference, the [170-experiment Shopify social proof study](https://www.dtcpages.com/blog/social-proof-ab-tests) used a 90% threshold.

- Don't peek and stop early on a good day. Early leads often shrink.

- Pause the urgency arm right away if support tickets show customers think the stock or deadline is false.

- Stop when you hit the planned duration, not before.

Reading the result. Report the observed difference and VWO's uncertainty range, not just "winner". If the range includes zero, the honest conclusion is "no detectable effect", and that's useful: it tells you to stop spending design time on banners. If urgency wins on checkout completions but returns go up, it didn't really win.

Remember the base rates. The [scarcity meta-analysis](https://onlinelibrary.wiley.com/doi/full/10.1002/mar.21816) didn't find greater purchase likelihood for limited-quantity or limited-time urgency, so a null or negative result for arm B is a perfectly normal outcome.

## When it backfires

Urgency is fragile. It works only as long as people believe it.

- **Fake scarcity.** A stock number that isn't your real tracked inventory is a lie. Don't do it, even "just for the test".

- **Evergreen countdowns.** Timers that reset per visitor or every midnight are exactly the urgency dark pattern described in the [dark patterns crawl of shopping sites](https://arxiv.org/html/1907.07032). Returning visitors notice.

- **Fake or borrowed reviews.** Never show reviews from another product, imported reviews you can't verify, or invented "someone just bought" pop-ups.

- **Hidden costs.** A deadline that pushes people into checkout, where shipping or fees appear for the first time, trades a click for a refund request.

- **Pressure on considered purchases.** For expensive items people research for days, urgency can read as a sales trick and push them to a competitor.

- **Stale data.** A stock line that doesn't update when the shopper switches size tells the wrong story. Step 4 exists for this.

- **Weak social proof.** Showing "2 reviews" can signal that nobody buys this. Consider hiding the line below a count you're comfortable with.

The ethical line is simple: if you'd be embarrassed for a customer to see how the number was produced, don't show it.

## Adapt it to other channels

Same principle, different surfaces. The honesty rules travel with it.

- **Email:** in sale emails, state the real end time in the subject line or preheader, and send the reminder only if the sale truly ends. For abandoned cart emails, a real low-stock note works only when the item is genuinely low.

- **Ads:** put the sale end date in the ad copy and turn the ad off when the sale ends. Review-based ads should quote real reviews you have permission to use.

- **Onboarding:** for subscriptions, frame what a trial user loses at the end ("Your saved routines stay until [DATE]") rather than inventing a discount deadline.

- **Retention:** loyalty points that expire on a real date, with a clear reminder. Test the reminder copy the same way: one change, one primary metric, guardrails on unsubscribes.

## Hand this to ChatGPT or Claude

You can paste this brief (or this page's link) into an AI assistant along with your product details, and it'll draft copy variants and a test plan you can drop into the steps above.

```
GOAL: Draft product page copy and a test plan to change checkout completions
on my Shopify store using honest urgency and social proof.

PRINCIPLE: Loss aversion (a missed deal feels worse than an equal gain) and
social proof (other buyers' choices reduce doubt). Treat both as hypotheses.

TOUCHPOINT: Shopify product page, the line between price and Add to cart.
Implemented as a Liquid snippet revealed by a VWO class.

INPUTS TO PROVIDE:
- Product name, price, and whether a sale is running (with its real end time)
- Whether inventory is tracked, and the low-stock threshold I chose
- Review rating, scale and count from my review app
- Brand voice notes and any words to avoid

VARIANTS TO GENERATE:
- 3 low-stock lines using only [QUANTITY] and [OPTION]
- 3 deadline lines using only [SALE_NAME], [DAY], [TIME], [TIMEZONE]
- 3 social proof lines using only [RATING], [SCALE_MAX], [REVIEW_COUNT]

TEST PLAN:
- Hypothesis in "Because... showing... will change..." form
- Primary metric: checkout completions per product page visitor
- Guardrails: revenue per visitor, refunds/returns, support tickets
- Remind me to size the test with VWO's calculator, run whole weeks,
  and set stopping rules before launch

GUARDRAILS:
- No invented numbers, stock counts, deadlines, reviews or buyer activity
- No resetting timers, no "X people viewing" unless I supply real data
- Plain language, no all-caps, no "Hurry!" without a real fact behind it
```

## Frequently Asked Questions

### Will an urgency banner increase conversions on my Shopify store?

Maybe, maybe not.

### Can I show stock levels without an app?

Yes. Liquid exposes each variant's inventory quantity when Shopify tracks it, which is what the snippet in Step 3 reads. No app is needed for the stock or deadline lines.

### Why does the stock message not change when I switch variants?

Liquid renders once, for the first selected variant. The JavaScript in Step 3 listens for variant changes and swaps the number from a JSON list of all variants. If your theme uses custom variant pickers, adjust the selector in the change listener and re-run the QA list.

### Is a countdown timer a dark pattern?

It is when the deadline isn't real. A timer tied to a genuine sale end that disappears afterwards is just information; a timer that resets for each visitor is fake urgency.

### Should I test urgency and social proof together?

Test them as separate arms. If you combine them and the result moves, you won't know which element did it, and with mixed evidence on both, that knowledge is the whole point.

### What if VWO doesn't record purchases?

Fix that before launching. Shopify checkout pages don't run theme scripts, so purchase tracking has to come through VWO's Shopify integration or Shopify's Customer events. Place a test order and confirm it appears in VWO.

### What counts as a good result?

A win on checkout completions per visitor at the confidence level you set in advance, with no guardrail getting worse. A clear "no effect" is also a good result, because it saves you from shipping clutter.

## Your first step

Today, open your top product page on your phone and list every urgency or social proof element already there, then check whether each number comes from real data. Remove anything you can't verify. That cleanup alone makes your page more trustworthy and gives your VWO test a clean control.

## Related Articles

- [Persuasion Marketing: How to Test Verified Claims on Landing Pages](https://convincelab.com/blog/persuasion-marketing-how-test-verified-claims-landing-pages/)

- [Increase Conversion Rate Shopify Product Pages with Decoys](https://convincelab.com/blog/increase-conversion-rate-shopify-decoys/)

- [Pricing page psychology example: Redesign SaaS Tiers in Webflow](https://convincelab.com/blog/pricing-page-psychology-example-webflow-vwo/)

- [Best Numbers for Pricing: Redesign SaaS Tiers in Webflow and VWO](https://convincelab.com/blog/best-numbers-for-pricing-saas-matrix/)

- [Back to Home](https://convincelab.com/)

## Sources

- [Global Study Confirms Influential Theory Behind Loss Aversion](https://www.publichealth.columbia.edu/news/global-study-confirms-influential-theory-behind-loss-aversion)

- [Social Proof A/B Tests: Data from 170 Shopify Experiments](https://www.dtcpages.com/blog/social-proof-ab-tests)

- [Prospect Theory: An Analysis of Decision under Risk | JSTOR](https://www.jstor.org/stable/10.2307/1914185)

- [Dark Patterns at Scale: Findings from a Crawl of 11K Shopping Websites](https://arxiv.org/html/1907.07032)

- [A meta‐analysis on the effects of product scarcity - Ladeira - 2023](https://onlinelibrary.wiley.com/doi/full/10.1002/mar.21816)

- [On the descriptive value of loss aversion in decisions ...](https://www.cambridge.org/core/journals/judgment-and-decision-making/article/on-the-descriptive-value-of-loss-aversion-in-decisions-under-risk-six-clarifications/A66ABDA683DC4437404217BF9BA63C47)

- [Loss Aversion: Why Losing 100 Dollars Hurts More ...](https://psychology.com/biases/loss-aversion)

- [The Social Proof Experiment That Failed | Atticus Li](https://atticusli.com/blog/posts/social-proof-experiment-failed/)
