# Shopify Every Product Showing On Sale After Import

> Every Shopify product showing a sale badge after import means Compare At Price was mapped to the wrong column. Here is how to find, fix, and prevent it.

- Published: 2026-09-17
- Author: Importier Team
- Category: Import Guides / File Imports
- Canonical: https://www.importier.app/blog/shopify-every-product-appears-on-sale-after-import

---

A kitchenware wholesaler imports 280 products from a supplier spreadsheet. The file has two price columns: COST (the wholesale price the merchant pays) and RRP (the recommended retail price for customers). The import completes without errors. The merchant opens the storefront and finds every single product showing a sale badge. A bread knife reads "Save $17". A set of kitchen scales reads "Save $23". A cast iron pan reads "Save $45". Nothing is on sale. No discount event was set up. The merchant runs a full-price wholesale operation. Customer emails arrive within the hour asking when the sale ends.

This is the Shopify every product showing on sale after import problem. The cause is a column mapping error that is common with any dual-price supplier spreadsheet. The fix is specific, and if done incorrectly it can either fail to remove the sale badges or overwrite product data the merchant wants to keep.

## How Shopify Decides When to Show a Sale Price

Shopify uses the Compare At Price field to control sale display across the storefront. When a product has both a Price and a Compare At Price, and the Compare At Price is higher than the Price, Shopify calculates the saving and displays the "Save" amount or percentage on the product card and product page.

[Shopify's CSV import format](https://help.shopify.com/en/manual/products/import-export/using-csv) includes a "Variant Compare At Price" column alongside the standard "Variant Price" column. When Compare At Price is blank or empty, Shopify treats the product as full-price and shows no sale badge. When Compare At Price is set to any value higher than Price, the product immediately shows as on sale on every sales channel: Online Store, Google Shopping feed, Facebook catalogue, POS, and any other channel connected to the product.

The Compare At Price field is meant to be used for genuinely discounted products. It represents the price the product was previously available at or the standard market price before a temporary reduction. When it is set incorrectly, every product in the catalogue appears to be discounted, which creates two distinct problems: it misleads customers who assume there is a real sale event, and it can create regulatory issues in jurisdictions that require comparative prices to be genuine.

<Callout label="What Compare At Price is for">
Compare At Price is the "was" price, not the cost price. It should only be set on products that are genuinely marked down from a prior or standard retail price. A product with a wholesale cost of $28 and a retail price of $45 should have Price set to $45 and Compare At Price left blank. Setting Compare At Price to $45 and Price to $28 makes the product appear on sale at the merchant's cost price, which is not the intent.
</Callout>

## Why the Mapping Error Happens During Import

The mapping mistake follows a predictable pattern. A supplier's spreadsheet has columns in a specific order, and the column that appears first in the file tends to get mapped first by the merchant during the import setup. When COST appears before RRP in the column list, a merchant who is looking for "the original price" often maps COST to Compare At Price, reasoning that the cost is the baseline price. RRP then gets mapped to Variant Price.

The result: Compare At Price is set to $28 (cost) and Price is set to $45 (RRP). Shopify calculates a saving of $17 on a product that is not on sale. Across 280 products, the entire catalogue appears to be running a clearance event.

A second version of the error is subtler: a merchant maps RRP to Compare At Price and COST to Price. This makes every product appear to sell at cost price with the full retail as the "was" price. This version shows even larger savings and can attract fraud attempts from customers expecting to buy at wholesale prices.

Both versions pass the import without errors because neither price column format is invalid. Shopify does not validate whether Compare At Price represents a genuine prior price.

![Wholesale merchandise manager at a warehouse office desk reviewing a printed two-column supplier price list with cost and recommended retail values highlighted in different colours across rows of product codes](/blog/shopify-every-product-appears-on-sale-after-import/01.jpg)

<Divider label="Finding and fixing the error" />

## Identifying Which Products Have the Wrong Compare At Price

The fastest way to confirm the mapping error is to open any product in Shopify admin and check the Pricing section. A product with an incorrectly set Compare At Price shows both fields populated. The Compare At Price field will contain the value that should have been left blank.

At scale, the most reliable method is to export the full product catalogue and inspect the Variant Compare At Price column. Importier's Full Shopify CSV export preset outputs every product and variant field, including Variant Compare At Price. Open the export in a spreadsheet application and filter the Variant Compare At Price column. For a clean catalogue, most or all rows will be blank in that column. When every row has a value, the mapping error affected the entire import batch.

Note the exact values in the Variant Compare At Price column and compare them against the Variant Price column. The pattern will confirm which original column was incorrectly mapped. If Compare At Price equals the supplier's cost figures and Price equals the RRP, the COST-first mapping error occurred. If Compare At Price equals the RRP and Price equals cost, the inverse error occurred.

![Retail analyst at a long office table examining a printed spreadsheet report with two highlighted price columns and annotation marks showing which rows have incorrect values in the Compare At Price column](/blog/shopify-every-product-appears-on-sale-after-import/04.jpg)

## Fixing the Sale Price Error After Import

There are two approaches depending on how much additional data was added to the products after the original import. Note that the inverse problem — an import that clears a correctly set Compare At Price rather than incorrectly adding one — is covered separately in [the guide to imports clearing Compare At Price](/blog/shopify-import-clears-compare-at-price).

**If no data was added after the import** (descriptions, images, tags, and metafields are unchanged from the import), the cleanest fix is a corrective re-import. Correct the column mapping in Importier: map RRP to Variant Price and leave Compare At Price unmapped or explicitly mapped to a blank value. Run the import in update-existing mode, matching by SKU. The re-import overwrites the incorrect Compare At Price with blank on every product, and corrects the Price field if it was also mapped incorrectly.

**If data was added after the import** (descriptions have been rewritten, images added, tags updated), a full re-import risks overwriting that added data. In this case, export the catalogue using Importier's Full Shopify CSV preset, open the CSV, and set the Variant Compare At Price column to blank on every row where it should be empty. Leave all other columns unchanged. Re-import using update-existing mode. Because only the Variant Compare At Price column has been edited in the CSV, only that field updates on each product. Descriptions, images, tags, and inventory levels remain untouched.

<Steps items="Export the full product catalogue using Importier's Full Shopify CSV preset. The export includes the Variant Compare At Price and Variant Price columns for every product and variant | Open the exported CSV and inspect the Variant Compare At Price column. Identify whether every row has a value (confirming the mapping affected the entire batch) | Clear the Variant Compare At Price column for every product that should not show a sale price. If only some products should be on sale, clear the column on non-sale products and leave it populated on genuine sale items | Save the edited CSV and bring it back into Importier. In the import settings, select update-existing mode with SKU as the match field. This updates only the fields present in the CSV without touching fields that were not included | Confirm the import preview shows the correct Compare At Price values (blank for non-sale products) before running. After the import completes, check the storefront to confirm the sale badges are gone" />

![Product data specialist at a conference table examining a printed exported CSV layout with columns of pricing data and annotation marks on specific column headers showing mapping corrections](/blog/shopify-every-product-appears-on-sale-after-import/02.jpg)

<PullQuote>Clearing Compare At Price with update-existing mode removes the sale badges without touching descriptions, images, tags, or inventory. One import pass fixes 280 products.</PullQuote>

## What Happens to Google Shopping When Compare At Price Is Wrong

Google Shopping reads Compare At Price as the "original price" for sale annotations in Shopping ads and free listings. When every product has a Compare At Price that is higher than the current Price, Google may display a sale annotation on every product in the Shopping feed. This can lead to a higher short-term click-through rate as sale annotations attract more attention, followed by higher bounce rates when shoppers land on a store that is not running a sale event.

More practically, Google Merchant Centre flags price discrepancies when the Compare At Price appears implausible. A feed where every product is marked down by exactly 37% may trigger a manual review. Clearing the incorrect Compare At Price from the Shopify catalogue propagates to the Google Shopping feed when Shopify next syncs the product data, which typically happens within 24 hours of a product update.

The same propagation applies to Facebook and Instagram Shopping catalogues, which also read the Compare At Price field for sale display.

## Preventing the Mapping Error on Future Imports

The column mapping step in Importier shows a preview of the data from each supplier column alongside the Shopify field it will be mapped to. Before confirming the mapping, compare the values in the Compare At Price preview against the Variant Price preview. If Compare At Price shows lower values than Variant Price for any product, the mapping is inverted.

A reliable rule: **leave Compare At Price unmapped for any import where no products are genuinely on sale.** When importing a standard full-price catalogue from a supplier, there is no need to map Compare At Price at all. A blank Compare At Price means no sale badge, regardless of what the supplier spreadsheet contains.

Pricing strategy decisions for [ecommerce pricing](https://www.shopify.com/blog/ecommerce-pricing-strategies), including when to use Compare At Price to signal sale value versus when to let full-price products speak without the comparative anchor, are separate from the import configuration. The import should set Compare At Price only on products the merchant has explicitly decided to mark down.

Save the corrected column mapping as a named [import profile](/blog/shopify-import-profiles). A profile named "Supplier Name: Full Price Import (No Compare At Price)" makes the intent clear on every subsequent use. The wrong mapping cannot be made accidentally if the profile was built with Compare At Price deliberately left unset.

![Import configuration specialist reviewing a printed import profile settings sheet at a desktop workstation with column mapping annotations and a checklist of pricing field assignments visible](/blog/shopify-every-product-appears-on-sale-after-import/03.jpg)

<Compare withoutTitle="Import with mapping error" withTitle="Import with correct mapping" withoutItems="COST column mapped to Compare At Price, RRP mapped to Price: every product shows Save badge and appears discounted | Customers contact the store asking about the sale event; expectations are set incorrectly; post-import cleanup is required | Google Shopping shows sale annotations on every product listing; click-through rate may spike then drop when shoppers find no genuine sale | Fixing the error requires a corrective export, CSV edit, and second import pass without overwriting descriptions and images added after the original import" withItems="RRP mapped to Variant Price; Compare At Price deliberately left unmapped: no products show sale badges; catalogue displays at full retail | Store presents as a full-price operation; customers who arrive do not leave disappointed by absent sale products | Google Shopping shows full-price listings with no misleading sale annotations; feed is accurate from day one | Import profile saves the correct mapping for all future imports from the same supplier; mapping error cannot repeat on subsequent batches" />

![E-commerce operations manager at a standing desk reviewing a printed column mapping checklist with product pricing fields labelled and annotated, a green tick visible beside the correct Variant Price and Compare At Price field assignments](/blog/shopify-every-product-appears-on-sale-after-import/05.jpg)

<TipBox />

## Key Takeaways

- **Compare At Price controls the sale badge on every Shopify sales channel.** When it is set higher than the regular price, every product shows a "Save" amount on the storefront, Shopping feed, and connected catalogues.
- **The mapping error happens because supplier cost and RRP columns are straightforward to confuse.** COST is not the same as "original price". For a full-price catalogue, leave Compare At Price unmapped during import.
- **Verify the mapping before confirming any import with two price columns.** Compare At Price should show higher values than Variant Price if products are genuinely on sale. If it shows lower values, the columns are inverted.
- **Fix the error with update-existing mode.** Export the catalogue, clear the Variant Compare At Price column on affected rows, re-import in update-existing mode. Only the pricing field updates; descriptions, images, tags, and inventory are unchanged.
- **Save the correct mapping as a named import profile.** A clearly named profile prevents the same mistake on future imports from the same supplier.

Fix the Compare At Price column mapping and clear incorrect sale badges across your catalogue at [importier.app](https://importier.app).
