Compare-at price is our field for the crossed-out original price shown next to a sale price. Set compare-at higher than the real price and most themes display it struck through. In the EU, UK and many US states the compare-at must be a genuine prior price, typically the lowest offered in the previous 30 days.
- Compare-at is a data field, not a rule — themes control display.
- It unlocks strike-through in most Dawn-based themes automatically.
- It appears in Google Merchant feeds as price / sale_price pair.
- EU Omnibus requires a genuine 30-day prior price.
Compare-at is the strike-through price shown next to the sale price. Use it to signal a genuine discount — never to fake urgency.
How it works
Set compare-at above the real price and Shopify displays it struck through in most themes. The field is available per variant, so you can run a partial-catalog sale.
When to use it
During sales, for a limited window, on products that genuinely traded at the higher price. Never permanently — a permanent compare-at signals a fake discount and can trigger consumer protection action.
Legal notes
The EU Omnibus directive, UK ASA rules and many US state laws require the compare-at to be the lowest price in the prior 30 days. Non-compliant strike-throughs can trigger fines of up to 4% of turnover in the EU.
How it looks in feeds
Google Merchant Center reads the two prices and displays a promotional label when eligible.
<g:price>29.00 USD</g:price>
<g:sale_price>19.00 USD</g:sale_price>
<g:sale_price_effective_date>2026-07-15T00:00-05:00/2026-07-22T23:59-05:00</g:sale_price_effective_date>Automating Price Transitions with Batch Updates
Manually adjusting the 'Compare-at' field for hundreds of SKUs during seasonal peaks is inefficient and prone to error. Professional merchants typically utilize the native Bulk Editor or CSV imports to manage these transitions. When using CSVs, you must update both the 'Variant Price' and 'Variant Compare At Price' columns simultaneously. If the 'Compare At Price' is left blank in the upload, Shopify removes the strike-through styling. For larger catalogs, using the Admin API or dedicated third-party apps like 'Bulk Product Edit' allows for scheduled changes. This ensures that sale prices activate at 12:00 AM precisely, preventing customer confusion during high-traffic events like Black Friday. Always verify the 'Taxable' status remains consistent during these updates, as fluctuating prices can impact the calculated tax collected at checkout depending on your regional settings.
- 1Filter Products
Use the Products admin page to filter by collection, vendor, or tag to isolate the items requiring a price shift.
- 2Select Bulk Edit
Highlight the specific products and select 'Edit products' to open the spreadsheet-style interface.
- 3Add Compare-at Column
Click 'Columns' and ensure 'Compare-at price' is checked so it appears next to the current price.
- 4Input New Values
Copy and paste the higher original prices into the Compare-at column and the lower sale prices into the Price column.
- 5Save and Sync
Click Save; Shopify will immediately update the storefront and trigger a cache refresh for the product pages.
Theme Logic and Liquid Customization
Most Shopify themes utilize a conditional Liquid statement to determine when to display the strike-through effect. The logic typically checks if 'product.compare_at_price > product.price'. If this condition is true, the theme renders the 'compare-at' value wrapped in a '<span>' or '<del>' tag with specific CSS classes. For merchants wanting custom badges, such as 'Save 20%', you can modify the product-card.liquid or price.liquid snippet. By calculating the difference—specifically '(compare_at_price minus price) times 100 divided by compare_at_price'—you can display a dynamic savings percentage. Be aware that some themes may default to showing 'On Sale' badges only if the price difference exceeds a specific threshold, such as 5% or $1.00, to avoid cluttering the UI with negligible discounts.
When calculating percentage badges via Liquid, remember to use the 'floor' or 'round' filters to avoid displaying decimals like '19.82% OFF', which looks unprofessional.
Strategic Discount Tiers and Thresholds
The effectiveness of the Compare-at price is heavily influenced by psychological pricing thresholds. Data from top-performing stores suggests that a discount must be at least 15% to 20% of the Compare-at value to significantly move the needle on conversion rates. Smaller gaps often fail to signal enough value to the consumer to justify a 'sale' perception. Furthermore, consistent pricing ending in '.99' for the Compare-at price and '.00' for the sale price can create a clearer visual distinction. It is also vital to monitor your 'Price' field vs. 'Compare-at' field during site-wide 'Automatic Discounts'. If a customer applies a checkout-level discount code on top of a product that already has a Compare-at price set, Shopify calculates the new discount based on the 'Price' field, not the 'Compare-at' field, which can lead to thinner margins than anticipated.
| Discount Depth | Perceived Value | Recommended Usage |
|---|---|---|
| 0% - 10% | Low | Clearance of slow-moving small accessories. |
| 15% - 30% | Moderate | Seasonal promotions and holiday sales. |
| 40% - 60% | High | End-of-line liquidation or flash sales. |
| 70%+ | Extreme | Caution: Can signal low quality or 'going out of business'. |
Dynamic Pricing and Third-Party Integration Pitfalls
Using third-party dynamic pricing apps or subscription services can sometimes conflict with Shopify’s native Compare-at price functionality. Many apps work by creating hidden 'Draft Orders' or by physically changing the 'Price' field in real-time. If an app modifies the 'Price' but fails to update the 'Compare-at' field, your storefront may inadvertently show an inflated original price or remove the strike-through entirely. Specifically, for subscription-based products, Shopify usually applies the subscription discount (e.g., 10% off) to the 'Price' field. If that product already has a 'Compare-at' price, the customer sees the strike-through at the original retail level, but the 'Price' field reflects the subscription rate. Always test these interactions in a staging environment to ensure the math displayed to the customer aligns with the actual total at checkout to prevent cart abandonment.
- Audit app permissions for 'Write Products' access.
- Check compatibility with Shopify Markets and multi-currency.
- Verify that price changes trigger 'Product Update' webhooks.
- Standardize currency rounding across all pricing intervals.
- Test 'Compare-at' visibility on mobile-specific theme templates.
Impact on Multi-Currency and International Markets
When selling globally via Shopify Markets, the 'Compare-at' price is subject to the same currency conversion rules as your primary 'Price'. If you have enabled automatic exchange rates, Shopify multiplies both the Price and the Compare-at price by the current rate and applies your rounding rules. This can lead to uneven numbers, such as a Compare-at price of €103.47, which may look suspicious to international buyers who expect 'clean' pricing. To maintain a professional look, you should use the 'International Pricing' settings to set fixed prices for specific countries. This allows you to manually define both the Sale and Compare-at prices for each market. Note that if you offer 'Duty Inclusive' pricing, the Compare-at price shown on the storefront usually includes the estimated duty, which can make the original price appear significantly higher in high-tariff regions like Brazil or the EU.
Global rounding rules (e.g., rounding to the nearest .99) apply to both fields. Ensure your rounding logic doesn't inadvertently shrink the gap between sales and original prices.
Plan price changes, promotions and automatic restoration — without discount codes.
Learn moreFrequently asked questions
The most common questions merchants ask us about pricing.