BigCommerce MSRP vs sale price: which should you edit, and when?

BigCommerce gives you three price fields - regular price, sale price, retail (MSRP). Which one do you actually edit during a sale? What does each one show on the storefront? When does setting MSRP help conversion, and when does it hurt? A field-by-field guide.

Table of contents

The single most common BigCommerce support question we field is some variation of: "I want to run a sale - do I edit regular price or sale price? Where does retail/MSRP fit in?"

The reason this question never goes away is that BigCommerce names its fields after their backend purpose, not their storefront effect. So merchants pick the wrong one, end up with no strikethrough, and assume the platform is broken.

This article maps each field to its storefront behavior, lays out which field to edit for each common scenario, and explains the MSRP-anchored sale strategy that some categories live by.

The three price fields in BigCommerce

BigCommerce exposes three numeric price fields per product (and per variant). They all live in the same admin panel and they all accept numbers. Their behavior on the storefront is completely different.

Regular price (price)

This is the default selling price. If you set nothing else, this is what the customer pays.

Storefront behavior:

  • Displayed as the main price.
  • Always shown.
  • No strikethrough unless retail is set higher.

API field name: price

Sale price (sale_price)

This is what the customer pays when set. It overrides the regular price for the checkout total. When set, the regular price renders as a strikethrough next to the sale price.

Storefront behavior:

  • When set: customer pays this amount.
  • When set: regular price shows with a strikethrough.
  • When set: the product card gets a "sale" badge in most themes.
  • When unset (or set equal to regular price): no strikethrough, no badge.

API field name: sale_price

Retail price (retail_price) - also called MSRP

This is the anchor price. The customer never pays this amount. It exists purely to create perceived discount.

Storefront behavior:

  • When higher than regular/sale price: rendered as a strikethrough above or next to the selling price.
  • When equal or lower: not displayed.
  • Does not affect checkout or pricing logic.

API field name: retail_price

What the storefront actually shows

The strikethrough behavior trips up most merchants. Here is the decision the storefront makes when rendering each product:

  1. If sale_price is set and lower than price: show sale_price as the active price, strikethrough price.
  2. Else if retail_price is set and higher than price: show price as the active price, strikethrough retail_price.
  3. Else: show price only, no strikethrough.

So the strikethrough source depends on what you set. This is the source of most confusion.

Three real scenarios:

Goal Set price Set sale_price Set retail_price
Normal listing, no anchor $50 - -
Sale - 20% off $50 $40 -
Permanent MSRP anchor (no sale running) $40 - $50
Sale + MSRP both shown $50 $40 $60

That last row is the one most stores want for major promotions. It shows: $60 (strikethrough) → $40 sale price, with the customer paying $40. The implicit "saving $20" against your regular price is reinforced by "vs $60 MSRP".

When to edit each field

The mapping from goal to field.

"I want to run a temporary sale" → edit sale_price

Set the sale price below the regular price. Storefront shows the strikethrough automatically. When the sale ends, clear the sale price (or set it to 0). Regular price is unchanged so you do not need to remember the original to revert.

This is by far the most common scenario. If you only learn one thing about BC pricing, learn this: never edit regular price during a temporary sale. Edit sale_price.

"I want a permanent price change" → edit price

You are repositioning a product. The new price is the new normal. Edit price. Leave sale_price and retail_price alone unless you want an anchor.

"I want to show a strikethrough but no actual sale is running" → set retail_price above price

You want the perceived-discount feel for a product that has never been on sale. Set retail higher than the selling price. The strikethrough appears.

Caution: in some jurisdictions, displaying an MSRP that no retailer has ever actually charged can trigger consumer-protection complaints. Use the legitimate manufacturer MSRP if it exists. If you are the manufacturer, document the prior selling price you are anchoring to.

"I want a sale AND a strong anchor" → edit both sale_price and retail_price

The combination above. Sale price below regular, retail above regular. Customer sees: MSRP $60, regular $50, sale $40. Two anchors reinforce the urgency.

"I want a sale, but only on selected variants" → edit sale_price per variant

Variants inherit the parent's prices unless overridden. To discount only the XL size, set sale_price on the XL variant. The other sizes keep the parent's pricing.

Note: variant-level pricing is where most CSV imports go wrong. A spreadsheet autofill can populate sale_price on all variants instead of just XL. Our app handles variant-level discounts with SKU-pattern filters: SKU ends with "-XL" matches only the right variants.

The MSRP-anchored sale strategy

For categories where customers shop by perceived discount (consumer electronics, sporting goods, branded apparel, premium home goods), setting MSRP at the manufacturer's stated value and using sale price for promotional drops is the highest-converting pattern.

The setup:

  1. Set retail_price to the manufacturer's MSRP for every product. This is the anchor. It should rarely change.
  2. Set price to your normal selling price (often below MSRP - a sustained "everyday discount").
  3. For promotions, drop sale_price further. Now you have three tiers: MSRP $1,000 → everyday $850 → sale $720.

Why this converts: customers calibrate against the highest visible number. MSRP as the anchor justifies your everyday price as already a good deal. The sale price reads as additional savings, not as your normal price.

Where it backfires: if you set a fake MSRP that no one has ever charged, it reads as deceptive after the first comparison-shopping click. Customers who Google your product see the real MSRP nowhere except your site. This converts initially but tanks repeat purchase.

Implementation: if your catalog has 5,000+ products and no MSRP set, the right move is a one-time campaign that sets retail_price from a data source (manufacturer feed, supplier export, your historical max selling price). Bulk Price Editor's "Set retail = price" action does this in one campaign, then you can build sale campaigns on top.

When MSRP is NOT the right strategy

Three scenarios where setting MSRP higher than your price hurts more than helps.

1. Premium positioning

If your brand sells at a premium and competitors discount, the absence of a strikethrough is itself a signal. Apple does not show MSRP. Most luxury brands do not. A clean price reinforces "this is what it costs". A strikethrough cheapens that.

2. MAP-restricted categories

If you sell brands with strict MAP (Minimum Advertised Price) policies, advertising below MAP can lose your dealer status. In this case, you typically set price at MAP, use sale_price carefully (only when MAP allows promotions), and use cart-stage promotions for the deeper discounts that legally apply at checkout.

3. Trust-sensitive categories

For services, custom goods, or anything that does not have an established market price (custom embroidery, made-to-order furniture, hand-built bikes), an MSRP claim is unverifiable. Customers know it. Skip it.

How Bulk Price Editor exposes all three fields

The reason we ship a separate app is that BigCommerce's native bulk-edit surfaces all three price fields one at a time, with one update each, no scheduling, no rollback.

In our app, a single campaign can act on:

  • price (regular)
  • sale_price
  • retail_price

independently. The most common multi-field campaigns we see:

"Set MSRP across the catalog": action on retail_price = "set to price", scope = whole catalog. Done in one campaign. Creates the anchor for future sales.

"Run a sale with MSRP visible": action on sale_price = "decrease by 25%", action on retail_price = "no change" (if MSRP is already set) or "set to price" (to create the anchor if it is missing). One campaign, two simultaneous effects.

"Clearance with strong anchor": action on sale_price = "decrease by 40%", cent override .95, nearest-dollar on. The combination renders cleanly at $X.95 with the MSRP strikethrough still showing.

The full action set per field (17 total combinations across regular/sale/retail): increase or decrease by percentage, increase or decrease by fixed amount, set to fixed value, set to compare price, cent override with optional nearest-dollar rounding. The feature deep-dive on the home page lists every combination.

What about MAP - is there a fourth field?

No. BigCommerce does not have a dedicated MAP (Minimum Advertised Price) field, even though many B2B catalogs need one.

The practical workaround:

  1. Set price at your MAP value. This is your advertised price - the floor for what shows on the storefront, in feeds, and in Google Shopping.
  2. Use sale_price carefully - only when the manufacturer's MAP policy explicitly allows promotions.
  3. For deeper discounts that legally apply only at checkout, use BigCommerce Promotions (cart-level rules). These can drop the actual charged price below MAP without violating the advertised-price rule.

Some MAP-strict brands explicitly prohibit BigCommerce sale_price usage entirely. Read the dealer agreement.

A quick MSRP audit you can run today

If you do not know what state your catalog is in, run this check in your BigCommerce admin:

  1. Export your catalog as CSV.
  2. Sort by retail_price ascending.
  3. Count rows where retail_price = 0 (or blank).

If more than 30% of your catalog has no MSRP set, you are leaving a perceived-discount signal on the table. Setting MSRP across the catalog is a one-time campaign in Bulk Price Editor using the "set retail = price" action, then ramping it up over time as you collect real manufacturer data.

Where to go next

The three-field model is more powerful than most BigCommerce stores use. Get the storefront behavior straight first, then layer the strategy on top.

Frequently asked questions

What's the difference between price and retail price in BigCommerce?
Price (also called regular price) is the default selling price on the storefront. Retail price (also called MSRP) is the manufacturer's suggested retail price, shown as a strikethrough next to the selling price. Retail is an anchor for perceived discount, not a transactional value - customers never pay it.
Should I always set MSRP higher than the regular price?
Only if you have legitimate anchor justification. Setting an artificial MSRP just to show a fake discount risks consumer-protection complaints in jurisdictions like the EU and US (FTC). The strongest MSRP value is the genuine manufacturer recommendation, especially in regulated categories (electronics, branded apparel).
What's the difference between sale price and a promotional discount in BigCommerce?
Sale price is a per-product field. You set it directly on each product. A promotion is a cart-level rule ("15% off when cart > $50") configured under Marketing → Promotions. Sale price and promotions can stack on the same product.
Can I run a sale by editing only the regular price, without using the sale_price field?
Yes, but you lose the strikethrough effect. The storefront only shows the strikethrough when retail or regular price is higher than sale price. Editing regular price down means no anchor, no urgency cue. Setting sale price below regular gives you the strikethrough.
How do I bulk-update all three price fields in one operation?
Native BigCommerce admin makes you edit each field separately. Our app, Bulk Price Editor, exposes all three fields in one campaign editor - regular, sale, and retail - and you can apply independent actions per field in a single workflow.
What's MAP and how does it relate to BigCommerce price fields?
MAP (Minimum Advertised Price) is a manufacturer-imposed floor on the advertised price - typically below MSRP. BigCommerce does not have a dedicated MAP field. Most stores use the regular price as the MAP floor and rely on cart-stage discounts to legally drop below MAP at checkout. We cover the workaround below.

Related reading

Bulk Price Editor vs CSV import for BigCommerce: a cost-benefit analysis

BigCommerce's native CSV import is free. Bulk Price Editor costs $19.99/mo and up. When does paying for the app earn its keep? A real cost-benefit analysis with hourly-rate math, time studies on 5K and 50K-product catalogs, and the breakeven point for switching.

Read article

How to bulk edit prices in BigCommerce in 2026 (step-by-step)

Three native BigCommerce methods for bulk price edits, what each one breaks, and the workflow that replaces all of them. Step-by-step with screenshots, edge cases, and a comparison table.

Read article

How to schedule Black Friday sales on BigCommerce without the stress

A timeline-based BFCM playbook for BigCommerce stores: what to do at T-30, T-7, T-1, day-of, and after. Five common mistakes that cost merchants the weekend, plus the scheduling + rollback workflow that prevents all of them.

Read article