🚀 Executive Summary

TL;DR: Shopify’s “compare at price” feature can lead to deceptive advertising lawsuits if stale data persists, displaying fake sales. Merchants must audit product data and implement automated solutions, such as API scripts, to regularly clear outdated “compare at price” values.

🎯 Key Takeaways

  • The “Sticky Price” problem arises when the `compare_at_price` field in Shopify is not cleared after a sale ends, causing old, higher prices to reappear as fake discounts.
  • Automating `compare_at_price` hygiene via a Shopify API script (e.g., a cron job or AWS Lambda) is crucial for long-term prevention, by nullifying `compare_at_price` if `price >= compare_at_price`.
  • For a complete data reset, the “Nuclear Option” involves exporting all products to CSV, wiping the “Variant Compare At Price” column, and re-importing with overwrite, but requires a full data backup.

Sued again over “marked down pricing” — warning to other Shopify merchants

Shopify’s “compare at price” feature can lead to deceptive pricing lawsuits if not managed correctly. Here’s how to audit your data and implement automated fixes to prevent stale, misleading sale prices on your storefront.

I Saw a Shopify Merchant Get Sued Over Pricing. Let’s Make Sure It’s Not You.

It was 10 PM on a Tuesday. I was just about to log off when a Slack notification popped up from our Head of E-commerce. The message was just a link to our site and “THIS IS WRONG.” I clicked through and saw it immediately: a new product line was live, but every item was marked down from a “compare at price” that we hadn’t used in over six months. To a customer, it looked like a great sale. To a lawyer, it looked like deceptive advertising. We spent the next two hours manually fixing product data, and it’s a fire drill I never want to repeat. Seeing that Reddit thread about a merchant getting sued for the exact same thing hit a little too close to home.

So, What’s Actually Happening Here? The “Sticky Price” Problem

This isn’t a bug; it’s a feature with a long memory. In Shopify, the price and the compare_at_price are two separate fields. When your marketing team runs a sale, they lower the price and set the compare_at_price to the old, higher price. The problem is, when the sale ends and you raise the price back up, nobody remembers to go back and clear out the compare_at_price field. It just sits there, dormant, in the database on prod-db-01.

Months later, someone adjusts the price for a different reason, and suddenly that old, stale “compare at price” pops back up on the storefront, showing a discount that isn’t real. You’re now advertising a fake sale, and that’s where the legal trouble begins. It’s not malicious; it’s just data hygiene debt, and it’s finally come to collect.

How We Fix This Mess: From Panic to Process

Okay, deep breaths. Whether you’re in the middle of a fire drill or trying to prevent one, you have options. Here are three ways to tackle this, from the quick-and-dirty to the set-it-and-forget-it.

1. The Quick Fix: The “Stop the Bleeding” Bulk Edit

This is your emergency brake. You need to fix the live site right now. You don’t have time to write a script; you just need to stop showing the misleading prices.

  • Log in to your Shopify Admin.
  • Go to Products.
  • Use the search and filter functions to select all the products that need fixing. If it’s all of them, just select all.
  • Click the Bulk edit button.
  • In the bulk editor screen, add the ‘Compare-at price’ field if it’s not already visible.
  • Go down the list and manually delete the value in the ‘Compare-at price’ column for any product that is not currently on a legitimate sale.
  • Click Save.

Warning: This is a manual, error-prone process. It’s great for an emergency, but it’s not a long-term strategy. You’re one busy Tuesday away from having the exact same problem again.

2. The Permanent Fix: The “Let’s Do This Right” API Script

Once the fire is out, you need to install a sprinkler system. In our world, that means automation. The goal is to create a script that automatically enforces your pricing rules. Here’s a conceptual script you could run as a cron job or a serverless function (like AWS Lambda) that checks your products daily.

The logic is simple: “For every product, if the price is the same as or higher than the compare at price, then the compare at price should be blank.”


# This is pseudo-code to illustrate the logic.
# You'd use the Shopify API client for your language of choice.

products = ShopifyAPI::Product.find(:all)

products.each do |product|
  product.variants.each do |variant|
    # Get prices as numeric values to avoid errors
    price = variant.price.to_f
    compare_at_price = variant.compare_at_price.to_f

    # If the compare_at_price exists but isn't actually higher than the current price...
    if compare_at_price > 0 and price >= compare_at_price
      # ...then it's a stale price. Nullify it.
      puts "Fixing stale price for SKU: #{variant.sku}"
      variant.compare_at_price = nil
      variant.save
    end
  end
end

puts "Price audit complete."

Running this on a schedule (we run ours on our ops-tools-vm-01 server every night at 3 AM) ensures that stale data is purged automatically before it can become a problem.

3. The ‘Nuclear’ Option: The “Burn It All Down” CSV Wipe

Sometimes the data is such a mess that you need a hard reset. Maybe you’ve acquired a store, or years of manual edits have made a mess. This is the fastest way to get to a clean slate, but it’s also the most dangerous.

PRO TIP: BACK UP YOUR DATA! Before you even *think* about this, do a full product export and save that file somewhere safe. This is your undo button. Measure twice, cut once.

  1. Go to Products in your Shopify Admin.
  2. Click Export. Choose “All products” and “Plain CSV file”.
  3. Open the CSV file in Google Sheets or Excel.
  4. Find the column named “Variant Compare At Price”.
  5. Delete every single value in that column. Leave the header, but wipe the data clean.
  6. Save the modified file as a CSV.
  7. Go back to Shopify Admin and click Import.
  8. Upload your modified CSV and—this is critical—check the box that says “Overwrite any existing products that have the same handle”.
  9. Start the import.

This will wipe every single ‘compare at price’ from your entire catalog, giving you a perfectly clean foundation to build on. From here, you should implement Solution #2 to keep it that way.

Solution Best For Risk Level
1. Quick Fix (Bulk Edit) Live emergencies; small number of products. Low (but high chance of recurrence).
2. Permanent Fix (API Script) Long-term data hygiene and prevention. Low (once tested).
3. Nuclear Option (CSV Wipe) A completely messy catalog; starting fresh. High. Requires a backup.
Darian Vance - Lead Cloud Architect

Darian Vance

Lead Cloud Architect & DevOps Strategist

With over 12 years in system architecture and automation, Darian specializes in simplifying complex cloud infrastructures. An advocate for open-source solutions, he founded TechResolve to provide engineers with actionable, battle-tested troubleshooting guides and robust software alternatives.


🤖 Frequently Asked Questions

❓ What is the “Sticky Price” problem in Shopify?

The “Sticky Price” problem occurs when the `compare_at_price` field retains an old, higher value even after a sale ends or the current price increases, leading to the display of misleading discounts on the storefront.

❓ How do the manual and automated solutions for stale `compare_at_price` compare?

The manual “Bulk Edit” is an emergency fix for immediate site correction but is error-prone and temporary. The “Permanent Fix” using an API script provides automated, long-term data hygiene by regularly nullifying stale `compare_at_price` values before they become an issue.

❓ What is a common implementation pitfall when managing Shopify’s `compare_at_price`?

A common pitfall is failing to clear the `compare_at_price` field when a product’s sale ends or its price increases, leading to deceptive “marked down pricing.” The solution is to implement an automated API script that nullifies `compare_at_price` if `price >= compare_at_price`.

Leave a Reply

Discover more from TechResolve - SaaS Troubleshooting & Software Alternatives

Subscribe now to keep reading and get access to the full archive.

Continue reading